Этого треда уже нет.
Это копия, сохраненная 1 июня 2015 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
56 Кб, 502x362
C++ тред sage #468625 В конец треда | Веб
Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.

Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode

Предыдущий: >>462718
190 Кб, 1430x900
sage #2 #468627
По традиции пиарю парашу нормальную доску с тегом [code] и кодерской капчей.

https://ololoepepe.me/board/pr
https://github.com/ololoepepe/ololord

Чейнджлог с прошлого раза:

+ Теперь на всех досках на 1 капчу 10 постов.
+ Для того, чтобы свести влияние пинга к минимуму, файлы из треда качаются параллельно по две штуки разом.
+ Разметка немного допилена (не помню уже, что именно менял, вроде чтоб ссылки лучше определялись).
+ Реализован новый быстрый поиск. Index-based, так сказать. Работает быстрее, чем ты тилибонькаешь свой стручок.
+ Исправлено добавление ссылок на посты при получении новых постов AJAX-ом.
+ Алерты заменены на всплывающие сообщения.
+ Исправлено отображение превью постов.
+ Добавлена возможность удалять файлы без удаления постов.
+ На доске /echo/ добавлена возможность редактировать ссылку на внешний трендель. В целом увеличена гибкость шаблонов и скриптов для создания нестандартных досок.
+ Добавлена доска /rpg/ для рпг-тредов (популярны на ычане). На этой доске имеется встроенная система голосования (ибо специфика такая).
+ Предусмотрена возможность добавлять доски, где нельзя постить файлы, и при этом можно создавать треды (раньше тред без файла никак нельзя было создать).
+ Примерно в 10-15 раз увеличена скорость рендеринга тредов/досок (закеширована одна тяжелая операция).
+ Добавлен диалог настроек. Настройки времени и стиля помещены туда.
+ Добавлена возможность выбирать тип капчи. В /pr/ железно зашита кодерская капча для защиты от дебилов.
+ Добавлена поддержка яндекс-капчи (горите в аду, суки, за такой уебанский апи).
+ Исправлено ошибочное отображение нулевого (0x0) разрешения для аудио- и видеофайлов.
+ Исправлено отображение ошибки при постинге, если ошибка произошла не на сервере, а где-то в пути (прокся не пустила и т.п.).
+ Добавлена возможность быстрого ответа на выбранный пост (форма телепортируется прямо к посту, потом уходит на место).
+ Добавлена возможность отрендерить все посты заново (при изменениях в разметке, например).
+ Рендеринг постов теперь выполняется вне транзакции.
+ Отрефакторены скрипты, теперь это чуть меньший быдлокод, чем был, хотя все равно та еще дрисня.
+ Постинг теперь осуществляется при помощи XHR, избавился от хака с использованием iframe. Бонус - отображение процесса загрузки.
+ Добавлен класс конфигурируемой доски (ура, слава яйцам!), теперь не обязательно на каждую доску делать свой класс, достаточно задать имя и название.
190 Кб, 1430x900
sage #2 #468627
По традиции пиарю парашу нормальную доску с тегом [code] и кодерской капчей.

https://ololoepepe.me/board/pr
https://github.com/ololoepepe/ololord

Чейнджлог с прошлого раза:

+ Теперь на всех досках на 1 капчу 10 постов.
+ Для того, чтобы свести влияние пинга к минимуму, файлы из треда качаются параллельно по две штуки разом.
+ Разметка немного допилена (не помню уже, что именно менял, вроде чтоб ссылки лучше определялись).
+ Реализован новый быстрый поиск. Index-based, так сказать. Работает быстрее, чем ты тилибонькаешь свой стручок.
+ Исправлено добавление ссылок на посты при получении новых постов AJAX-ом.
+ Алерты заменены на всплывающие сообщения.
+ Исправлено отображение превью постов.
+ Добавлена возможность удалять файлы без удаления постов.
+ На доске /echo/ добавлена возможность редактировать ссылку на внешний трендель. В целом увеличена гибкость шаблонов и скриптов для создания нестандартных досок.
+ Добавлена доска /rpg/ для рпг-тредов (популярны на ычане). На этой доске имеется встроенная система голосования (ибо специфика такая).
+ Предусмотрена возможность добавлять доски, где нельзя постить файлы, и при этом можно создавать треды (раньше тред без файла никак нельзя было создать).
+ Примерно в 10-15 раз увеличена скорость рендеринга тредов/досок (закеширована одна тяжелая операция).
+ Добавлен диалог настроек. Настройки времени и стиля помещены туда.
+ Добавлена возможность выбирать тип капчи. В /pr/ железно зашита кодерская капча для защиты от дебилов.
+ Добавлена поддержка яндекс-капчи (горите в аду, суки, за такой уебанский апи).
+ Исправлено ошибочное отображение нулевого (0x0) разрешения для аудио- и видеофайлов.
+ Исправлено отображение ошибки при постинге, если ошибка произошла не на сервере, а где-то в пути (прокся не пустила и т.п.).
+ Добавлена возможность быстрого ответа на выбранный пост (форма телепортируется прямо к посту, потом уходит на место).
+ Добавлена возможность отрендерить все посты заново (при изменениях в разметке, например).
+ Рендеринг постов теперь выполняется вне транзакции.
+ Отрефакторены скрипты, теперь это чуть меньший быдлокод, чем был, хотя все равно та еще дрисня.
+ Постинг теперь осуществляется при помощи XHR, избавился от хака с использованием iframe. Бонус - отображение процесса загрузки.
+ Добавлен класс конфигурируемой доски (ура, слава яйцам!), теперь не обязательно на каждую доску делать свой класс, достаточно задать имя и название.
#3 #468628
>>468627
Нужно задидосить тебя.
Написать борду не проблема, проблема чтоб не задидосили.
sage #4 #468629
>>468628
CloudFlare?
#5 #468630
>>468629
ну вон нульч и гитхаб клаудфлара не спасла вроде
#6 #468631
Программач, подкинь ссылок годных на реализацию квадратичного решета.
sage #7 #468632
>>468630
Ну, знаешь, если уж компания, которая на этом специализируется, ничего не смогла сделать, то остается только расслабиться и получать удовольствие.
Алсо, хитрый план: можно взять там платный тариф и в случае, если они обосрутся, требовать с них денег (разумеется, больше чем заплатил сам).
#9 #468635
>>468634
Видел уже. Там везде какая-то ебень с дикими накрутками. А хочется его в чистом, незамутненном виде.
sage #10 #468636
>>468635
Сделай, алгоритм там описан. Если тебе надо разобраться, то разбирайся, иначе не вижу смысла не использовать готовые оптимизированные решения "с накрутками".
#11 #468638
>>468636
Бида в том, что мне крайне тяжело читать си-стайл, а реализацию в стиле плюсов найти не удается.
sage #12 #468642
>>468638
Лолшто? Сишку ж (без некоторых мелочей) можно считать подмножеством крестов. Синтаксис один в один, шо там функции, шо тут функции, только классов нет. Хз что там можно не осилить прочитать. Вот заголовок mpqs, что тебе там не понятно?
[code lang="c"]
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h> / for memset /
#include <limits.h> / ULONG_MAX /
#include <sys/types.h>
#include <sys/resource.h>
#include "gmp.h"

#define FBASE ".fbase"
#define FULLS ".fulls"
#define PARTIALS ".partials"
#define PPS ".pps"
#define CYCLES ".cycles"
#define AVAL ".a_val"
#define STATUS ".status"
#define ADATA ".adata"
#define MATRIX ".matrix"

#define INDEX(p) ((p == -1) ? 0 : p)

typedef struct {
unsigned long q; / large prime /
mpz_t x;
unsigned int n; / number of primes stored /
unsigned int a; / number of primes allocated /
int p; / primes and/or indices /
unsigned int
e; / exponents /
} relation_struct;
typedef relation_struct relation[1];

typedef struct _trie_t {
unsigned long p; / large prime /
struct _trie_t left;
struct _trie_t
right;
} trie_t;

unsigned long count_lines (char);
void sort (unsigned long
, unsigned long);
unsigned long uniq (unsigned long, unsigned long);
void init_relation (relation);
void clear_relation (relation);
int read_partial (relation, FILE
, int);
int read_partial2 (relation, FILE , unsigned long );
int read_full (relation, FILE, unsigned long);
void realloc_relation (relation, unsigned int);
void copy_relation (relation, relation);
void output_relation (FILE
, relation);
void output_relation_without_q (FILE , relation);
void output_relation2 (FILE
, relation, mpz_t, mpz_t);
void count_odd_exponents (int, unsigned long, relation, unsigned long);
void read_params (mpz_t, unsigned long, unsigned long, char);
void multiply_relation (relation, relation, relation, mpz_t);
unsigned long read_factor_base (int
, char , unsigned long);
int check_relation (relation, unsigned int
, mpz_t);
int cputime (void);
unsigned long nextprime (unsigned long);
trie_t insert_prime (trie_t , unsigned long);
unsigned long trie_size (trie_t );
void trie_clear (trie_t
);
int trie_contains (trie_t *, unsigned long);
void normalize_relation (relation, mpz_t);
void swap_relation (relation, relation);
double getprime (double);
unsigned long find_multiplier (mpz_t, double);
[/code]
sage #12 #468642
>>468638
Лолшто? Сишку ж (без некоторых мелочей) можно считать подмножеством крестов. Синтаксис один в один, шо там функции, шо тут функции, только классов нет. Хз что там можно не осилить прочитать. Вот заголовок mpqs, что тебе там не понятно?
[code lang="c"]
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h> / for memset /
#include <limits.h> / ULONG_MAX /
#include <sys/types.h>
#include <sys/resource.h>
#include "gmp.h"

#define FBASE ".fbase"
#define FULLS ".fulls"
#define PARTIALS ".partials"
#define PPS ".pps"
#define CYCLES ".cycles"
#define AVAL ".a_val"
#define STATUS ".status"
#define ADATA ".adata"
#define MATRIX ".matrix"

#define INDEX(p) ((p == -1) ? 0 : p)

typedef struct {
unsigned long q; / large prime /
mpz_t x;
unsigned int n; / number of primes stored /
unsigned int a; / number of primes allocated /
int p; / primes and/or indices /
unsigned int
e; / exponents /
} relation_struct;
typedef relation_struct relation[1];

typedef struct _trie_t {
unsigned long p; / large prime /
struct _trie_t left;
struct _trie_t
right;
} trie_t;

unsigned long count_lines (char);
void sort (unsigned long
, unsigned long);
unsigned long uniq (unsigned long, unsigned long);
void init_relation (relation);
void clear_relation (relation);
int read_partial (relation, FILE
, int);
int read_partial2 (relation, FILE , unsigned long );
int read_full (relation, FILE, unsigned long);
void realloc_relation (relation, unsigned int);
void copy_relation (relation, relation);
void output_relation (FILE
, relation);
void output_relation_without_q (FILE , relation);
void output_relation2 (FILE
, relation, mpz_t, mpz_t);
void count_odd_exponents (int, unsigned long, relation, unsigned long);
void read_params (mpz_t, unsigned long, unsigned long, char);
void multiply_relation (relation, relation, relation, mpz_t);
unsigned long read_factor_base (int
, char , unsigned long);
int check_relation (relation, unsigned int
, mpz_t);
int cputime (void);
unsigned long nextprime (unsigned long);
trie_t insert_prime (trie_t , unsigned long);
unsigned long trie_size (trie_t );
void trie_clear (trie_t
);
int trie_contains (trie_t *, unsigned long);
void normalize_relation (relation, mpz_t);
void swap_relation (relation, relation);
double getprime (double);
unsigned long find_multiplier (mpz_t, double);
[/code]
#13 #468674
>>468582
Ты ёбнутый? Новые крупные известные платформы появляются раз в 2-3 года, надо будет другой размер инта сделать — сделают. Надо будет другую реализацию — реализуют.
#14 #468749
>>468642
Сишку считать подмножеством не есть Ъ.
sage #15 #468752
>>468749
Ясно-понятно. Лучше выяснять, что Ъ, а что нет, чем писать код. Как и ожидалось от сосачевских клованов.
#16 #468765
>>468642
в с++ нет массивов переменной длины, в си есть.
#17 #468766
>>468765
че блять?
#18 #468767
>>468766
void f(int size) {
char buf[size];
...
}

Вот так написать в c99 можно, а в с++03\11\14 нельзя.
#19 #468768
>>468767
быстродополнение, на 17 стандарт, кажется был proposal на VLA
#21 #468792
>>468772
И что ты этим доказал? Это UB. Посмотри драфт стандарта. То, что это поддерживает gcc, не говорит о том, что это часть с++
#22 #468794
>>468792
в 14-х плюсах размера массива может быть constexpr
sage #23 #468799
>>468792
GCC и есть де-факто стандарт, похуй, что он отличается от официального. На спермоподелия строго похуй.
#24 #468801
>>468799
сажадебил, что ты забыл тут? иди в свой манямирок со своим говногцц.
sage #25 #468807
>>468801

>пок-пок-пок не обоссали совсем!

#26 #468845
>>468582

>и рантаймов с другим размером инта


Я что-то путаю, или по сишному стандарту инт 16 бит? Да вообще вопрос не в этом, а знаковом бите и т.д.

Я так понял, представление знакового от нуля до макс_инт не обязано совпадать с представлением беззнакового.
#27 #468846
>>468845
Стандарт не устанавливает конкретных размер ниодного типа, кроме char который равен 1 байту (при чем не важно сколько в нем бит). int должен соотвествовать самому оптимальному способу представления целого числа на конкретной архитектуре - что фактически значит что int должен быть равен машинному слову конкретного процесора.
#28 #468868
Превозмогающее быдло в треде.
Когда использовать weak_ptr? Желательно пример, в котором нету кэширования.
#29 #468870
>>468868
Берёшь, и используешь
#30 #468871
>>468868
Когда делаешь лабу по прожке, чем я собственно сейчас и занимаюсь. У меня возник порочный круг shared_ptr - enable_shared_from_this - weak_ptr. Никаких иных путей его разрешения, кроме как пихать инклюды посреди файлов не вижу, это норма?
#31 #468875
>>468868
Когда появляются перекрёстные ссылки.
http://habrahabr.ru/post/191018/
#32 #468890
Я теряюсь в современных плюсах. С++11 и С++14, меняющийся Qt - как всё это держать в голове и иметь в виду?
#33 #468896
>>468890
переходи на раст
#34 #468897
>>468890
Та же фигня, бро. Ты работаешь?
#35 #468903
>>468772
это гну экстеншон

>>468799

>GCC и есть де-факто стандарт, похуй, что он отличается от официального.


вон из профессии, мразь

>>468845

>Я что-то путаю, или по сишному стандарту инт 16 бит?


1. базовым типом является char, размер которого в битах implementation defined
2. размеры всех типов считаются в кол-ве char'ов, sizeof возвращает размер в char'ах
3. на популярных платформах int имеет размер в 16 бит (DOS), 32 бит (Win/Lin), 64 бит (Linux)
4. на эмбеддед говне вообще может быть всё что угодно
5. для битоёбов есть типы int8_t, int16_t, int32_t
6. sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

>>468871

>У меня возник порочный круг shared_ptr - enable_shared_from_this - weak_ptr.


>порочный круг


wat?

>>468890

>С++11 и С++14, меняющийся Qt - как всё это держать в голове и иметь в виду?


1. между 11 и 14 выбирать сразу 14
2. куте существует только два (4 и 5) и там общие концепты
#36 #468904
Так вот поцоны. Что нужно знать о плюсах что бы тебя считали нормальным конкурентоспособным поцоном?
#37 #468905
>>468904
Язык до каждого ключевого слова + STL + Boost + Qt + какая-то предметная область (численные методы, сети, графика) + большая часть основных алгоритмов (сортировки, графы, это всё).
#38 #468907
>>468905
а вот всякие VSC++ норм или хуйня?
#39 #468909
>>467478

> Всегда ли двоичное представление положительных чисел для знаковых и беззнаковых типов совпадает? Или возможно "implementation defined"?


В стандарте такого нет. Единственно что они (типы) будут одинакового размера.
#40 #468910
>>468799
Ну ты и мразь.
sage #41 #468926
Порвавшихся спермодетей полон тред.
#42 #468949
>>468926
Уди и одним станет меньше.
#43 #468950
Сап, аноны.
Помогите с чтением из файла.
У меня записывается туда 8 структур по 4 строки и разделяются пробелами.
Как считать из файла каждую строку в новую переменную и после считывания последнего элемента перескочить через строку?
56 Кб, 300x203
#44 #468952
>>468949

>Уди


Так и сделаю.
#45 #468955
Но вед гцц намного лучше поддерживает стандарты плюсов, чем мсвц.
sage #46 #468960
>>468949
Удить я буду своим спиннингом в очке твоей мамаши. Только как бы сифилис не поймать.
#47 #468967
>>468960
ты ещё не знаешь на что подписываешся :D
#48 #468971
>>468950
Как ты их туда записываешь?
#49 #468972
>>468905
+ многопоточность.
#50 #468986
>>468905
а вот что годного есть по бусту и многопоточности?
#51 #468990
>>468986
Про крестовую многопоточность можно почитать у:
http://www.amazon.com/C-Concurrency-Action-Practical-Multithreading/dp/1933988770
Ещё есть:
http://www.amazon.com/Introduction-Parallel-Programming-Peter-Pacheco/dp/0123742609

А у буста есть документация.
#52 #468991
>>468971
С клавиатуры.
Разделяются не пробелами, а пустой строкой
#53 #468997
>>468991
С клавиатуры хуячишь байты в файлы? Пример файла то приведи, блджад, нихуя не понятно, чего ты хочешь.
#54 #468998
Накидайте что надо знать, чтобы на собеседования плюсоразрабочиком ходить? Пишу сейчас на плюсах в НИИ, но с деньгами совсем плохо — скоро придётся менять работу, похоже, буду подтягиваться
#55 #469000
>>468997
С клавиатуры ввожу несколько строчек:
Фамилия, дата рождения и т.д...
Записываю их в txt файл.
После этого мне нужно считать из файла эти данные и записать их в переменные.
#56 #469015
>>468998
ВИРТУАЛЬНЫЙ ДЕСТРУКТОР
#57 #469032
>>468998
ебанутые вопросы по памяти:
- в чем причина замены std::auto_ptr на std::unique_ptr
- разница между указателем на функцию и указателем на функцию-член-класса
- обеснить работу dynamic_cast, для чего он нужен, когда он может работать и как его можно поломать
- обеснить работу хеш-сетов (std::unordered_set)
- найти ошибку:
int x[100];
for (int p = x; p != x+sizeof(x); ++p)
p = 0;
#58 #469045
>>469032
А этими всеми стандартными умными указателями в реальной работе правда пользуются?

А в коде ошибка в том, что sizeof(x) нужно разделить на sizeof(int) (ну или просто написать p != x + 100) - компилятор при арифметических операциях над указателями учитывает за нас его тип и сам домножает числа на sizeof(тип).
#59 #469047
>>469045

> правда пользуются?


Да, удобно же. Хотя некоторые компании намеренно отказываются от всяких STL.
#60 #469050
>>469047

>Хотя некоторые компании намеренно отказываются от всяких STL.


Я вот об этом часто читал, мол они даже сами себе контейнеры пишут.
#61 #469053
>>469050
Чаще аллокаторы кастомные, говорят, что в гейдеве часто так делают при разработке двигла.
Но откуда мне знать, я же студент.
#62 #469054
>>469053
Я тоже.
#63 #469057
>>469015
Ну это просто
>>469032
За вопросы спасибо, пошёл разбираться с указателями, остальное лёгкое.
int x[100]; for (int p = x; p != x+100; ++p) p = 0;
Мне интересны в первую очередь не вопросы, а именно знания — ходовые фреймворки (я кроме буста ничем никогда не пользовался), типовые задачи, которые возникают на работе, инструменты (valgrind сейчас в ходу?) и.т.п.
>>469053

> Чаще аллокаторы кастомные, говорят, что в гейдеве часто так делают при разработке двигла.


Да, действительно правда. Наш кастомный аллокатор std::map по производительности выше стандартного то ли на четыре порядка, то ли на пять.
#64 #469058
>>469057

> int x[100]; for (auto p = x; p != x+100; ++p) p = 0;

#65 #469059
>>469058
Проклятая вакаба сожрала все звёздочки. Ещё рядом с p последним одна есть.
#66 #469061
>>469050
Яндекс, насколько я знаю, что-то там свое пилил. Но как-то у них все через жопу там.

Олсо, я обещал рассказать про КРОКовский семинар, который я посетил в среду.

Я вообще об этой компании мало чего знал, поэтому когда туда шел, то думал, что увижу двухэтажное чуханское здание. Однако это была 11 этажная йоба с собственным дата-цетром и прочими плюшками.

Семинар был довольно уныл. Я думал, что там будут рассказывать за какие-то технологии и задумки, однако нам поясняли за их продукты. Причем довольно поверхностно.

Доставило, что у них есть свой фреймворк. Вообще у них весь процесс поставлен на поток. Прототип программы они клепают на своем фреймворке чуть ли не мышкой, показывают заказчику, а потом уже начинают наращивать функционал.

Автоматическая сборка, тестирование -- вот это все. Даже некоторые проекты сбраывают заказчику, а он, в свою очередь, уже у себя их собирает и разворачивает.

Дико припекло от того, что они пишут исключительно на C#/Java, аргументируя это тем, что сейчас куда важнее удобство разработки, чем скорость работы программы. C++ они, конечно, тоже используют, но очень мало. Специфичные задачи типа распознавания пикч.

И ещё довольно расстроился, когда они сказали, что "ну в любом случае, когда студент приходит на собеседование, то он обычно пяток языков знает".

Офис у них пиздат. Можно было по нему гулять, чем мы и занялись. Автоматы с дешевыми снеками, пиздатенькая столовая и прочие плюшки. Хотя в офисе довольно жарко было. Угощали компотом, чаем и булочками.
#67 #469064
>>469061

> он обычно пяток языков знает


Вот ненавижу подобные формулировки, что значит "знает пяток"? Где границы того, что все они называют знанием технологии? Умение применять её на практике? Знание тонкостей работы платформы, о которых все вспоминают реже раза в год? Всё вместе?
#68 #469065
>>469064
Вот у меня от этого и полыхнуло. Я вот правил скрипты на bash, ruby. Писал программки на pascal, basic, python. Пилил сайты на php, дописывал к ним простенькие модули на Javascript, jQuery.

А ещё я один раз смотрел учебник Java и гонял примеры.

А значит ли это, что я знаю 8 ЯП + C++, ведь я на нем всякую лабуду пишу.
#69 #469068
>>469061

>Дико припекло от того, что они пишут исключительно на C#/Java, аргументируя это тем, что сейчас куда важнее удобство разработки, чем скорость работы программы.


Но ведь это здраво для бизнеса - какая разница, на чем рисовать окошки.

>ну в любом случае, когда студент приходит на собеседование, то он обычно пяток языков знает


Я в своём ВУЗе как минимум на пяти языках всякие императивные хелловорлды в течение семестра на каждый язык писал, лол.
#70 #469069
>>469068

>всякие императивные хелловорлды


Что это такое?

>Но ведь это здраво для бизнеса - какая разница, на чем рисовать окошки.


Meh. Это усложняет мне жизнь, ибо я хотел бы устроиться C++ бабуином.
#71 #469070
>>469065
Подобная фигня, только без веба. Тоже моделировал разные физические процессы на разных языках, кодил всякую обработку сигналов и изображений. За всё время обучения успел покодить на: C/C++, C#, Java, Scala, Haskell. С использованием всяких Qt, CUDA/OpenCL, Boost, OpenCV. Но понимаю, что для рынка вообще не представляю никакого интереса. Пишу диплом и думаю, что походу придётся преподавать какую-нибудь никому не нужную физику или переучиваться.
#72 #469072
>>469070
Ну я сел за написание ботнета. Поговаривают, что достаточно прибыльно. Ну и буду на собеседования ходить. Тут анончик писал, что таки устроился.

Олсо не смог ответить ни на один вопрос отсюдова >>469032 , так что дохуя чего надо будет изучить.

Наткнулся тут на какую-то пасту, где анон писал о том, что зря тратил время на учебники. Он писал всякие конспекты и пытался все учить. Сам так делаю, блядь. Сижу теперь озадаченный.
#73 #469073
>>469069

>Что это такое?


laba1.f90, laba2.cpp и laba3.java со всякими физическими и не очень задачками физфак же.

>Meh. Это усложняет мне жизнь, ибо я хотел бы устроиться C++ бабуином.


С++ бабуины не нужны, а быть Java/C# бабуином в 100 раз проще.
>>469070
Нужен, братишка, еще как нужен. http://isi.nfsoi.org/ http://isi.nfsoi.org/tasks
#74 #469076
>>469073

>С++ бабуины не нужны


Ну я, например, не очень в математике шарю. ВУЗ у меня специфичный, поэтому упора на математику нет. Такие дела. А я так понимаю, что сейчас на C++ никто не пишет без применение каких-то мат. залуп, да?
#75 #469077
>>469076
да почему же?
Я вот сферу деятельности немного менять планирую, например, этим летом и на плюсовика планирую устариваться, пока что сам подтягиваю знания по плюсам потихоньку, уверен что куда-нибудь да устроюсь.
#76 #469078
>>469077
Ну. Где нужен С++? Там где нужно что-то быстро вычислять. Ну или в игорях во всяких. В этих областях математики, наверное, немерено. Я ничего против неё, конечно, не имею, но мне нужно время, чтобы освоить её, причем самостоятельно.

А львиная доля всякого ынтерпрайза на всяких Java/C# пишется.
#77 #469079
>>469078
не обязательно связано с математикой. просто пройдись по вакансиям с++ на hh, сам удивишь, с математикой тут2 варианта обычно 1) игрострой 2) наука, но в ней обычно насрать на каком языке ты пишешь и какой знаешь, потребуется - выучишь
#78 #469083
>>469061

>что сейчас куда важнее удобство разработки, чем скорость работы программы


Вся суть крестоблядей. Оказывается нужно быстро код писать, а не искать утечки памяти. У меня так же пекло до момента когда я начал использовать буст и кутэ.
#79 #469094
>>468625
Парни, есть реквест:
В текстовике Пример строки:
“\033[31mThis text is red, \033[34mand this text is blue.”
Вывод:
Красным: This text is red, синим: and this text is blue.
Код, который написал я:
http://pastebin.com/dMDGsqzD
Проблема в том, что почему-то в массив пишутся совсем не те значения х, которые я предполагал => консоль не красится. Вместо следующими за [ — 3 и 1, я получаю два хуя, хранящихся в массиве - с подливой и без. Соответственно, я неправильно передвигаюсь по элементам массива (элемент x+1 нужно записывать как-то иначе?) или в чем дело?
#80 #469101
>>469078
Еще забыл поддержку различного сорта громадных энтерпрайдов, написанных на плюсах и которые переписывать в высшей степени нерентабельно.

Например, в ЕМС основной их флагман -- Clariion написан на плюсах и развивается, расширяется тоже плюсовыми разработчиками. Но зато все все новые проекты уже пишутся только на всяких джавах и дотнетах.

В многих других крупных компаниях также -- написано какое-нибудь крупное приложение на плюсах, его нужно поддерживать, расширять, наполнять фичами. Переписывать его целиком на более современный язык дорого. Вот в такие компании с++ разработчики активно требуются. И их довольно много.
#81 #469104
>>469094
Канонический быдлостуденческий говнокод-франкенштейн, собранный из кусков чужих лаб с фрагментами собственного уродства.

Вообще нихуя непонятно, что ты даже пытаешься сделать. Зачем ты инкрементируешь считанный символ? Ты вообще понимаешь, что строчка x++; не читает следующий символ из файла, а просто увеличивает значение символа на единицу?
#82 #469105
>>469104

>Канонический быдлостуденческий говнокод-франкенштейн, собранный из кусков чужих лаб с фрагментами собственного уродства.


проиграл, пеши есчо
#83 #469109
>>469101
Что-то мне подсказывает, что это гей-шлюховство от программирования. Хотя легаси есть везде, но это пиздец.
#84 #469110
>>469104
Ок, как читать не следующий символ, а, например, символ через 5 сиволов?
#85 #469117
>>469110
Прочитать пять символов и оставить пятый.
#87 #469121
>>469119
Бля, вот так: http://ideone.com/FYK1ry
#88 #469124
>>469121
Ну а так, наверное, вообще идеально: http://ideone.com/FYK1ry
#89 #469126
>>469124
Хотя не, кое-что забыл: http://ideone.com/FYK1ry
#90 #469132
>>468904
косвенные обращения
как накладывать структурки на память
замена рекурсии
+ ну и собственно прикладную область
#91 #469134
>>468998
как развернуть односвязный список
сортировка пузырьком без ошибок
#92 #469138
>>469126

Пиздец говнокод. Ты новичок?
#93 #469161
>>469138
А как надо?
#94 #469171
>>469134
Ну это вообще днище. Нас на втором курсе это все учили делать.

>>468998
Исходя из моего опыта хождения по собеседованиям спрашивают обычно следующее (но специфика очень сильно зависит от конкретной предметной области и спектра решаемых задач):
1. Понимание принципов ООП, умение внятно их описать и объяснить, зачем они нужны.
2. Знание основных STL-евских структур данных и алгоритмов. Понимание, чем отличаются контейнеры, каким образом данные в этих контейнерах хранятся.
3. Понимание, что такое О-символика, каково асимптотическое время выполнения базовых операций над контейнерами и почему вызывать std::sort для std::list -- плохая идея.
4. Знание основных алгоритмов сортировки, поиска, алгоритмов на графах, строках, умение внятно объяснить, как работают хеш-таблицы и основные деревья поиска.
5. Глубокое знание синтаксиса и особенностей языка. Канонический вопрос про виртуальный деструктор, понимание как реализован полиморфизм в языке, что такое таблица виртуальных функций, и т.п..
6. Понимание процесса сборки программы: компиляции, линковки. Что такое объявление и определение функции/переменной, для чего нужны заголовочные файлы, почему определение шаблонной функции нельзя поместить в .срр файл, оставив объявление в заголовочном.
7. Знание основ представления целых и вещественных чисел в памяти, стандарт IEEE 754, знание основ машинной арифметики, прямой, обратный, дополнительный код.
8. Знание базовых паттернов проектирования (синглтон, визитор и т.д., открываешь банду четырех и вперед по содержанию).
9. Понимание основ многопоточности. Что такое мьютекс, критическая секция, read/write mutex, promise/future.
Это так, навскидку. Может, еще чего вспомню, добавлю.
#95 #469176
http://pastebin.com/zPkaz19K
Почему компилятор не кричит о несоответствии типов и почему через указатель на B вызывается функция A?
#96 #469180
>>469171
то что

>на втором курсе это все учили делать


совсем не значит, что ты напишешь это на бумажке на собеседовании
#97 #469181
>>469180

>напишешь это на бумажке на собеседовании


Как с этим бороться? Вот не могу вообще без компьютера думать, только обсуждать что-то
#98 #469183
>>469180
Мне приходилось аналог сортировки слиянием писать на одном из собеседований.
А вообще, на ЕГЭ даже заставляют на бумажке писать довольно непростую (для школьника) программу. Так что взрослый дядя, претендующий на свои 50+к в месяц, уж должен уметь такие простые вещи как сортировки без ошибок писать.

>>469181
Практика. Берешь и пишешь простые вещи на бумажке. Начни с тех же сортировок, бинарного поиска.
#99 #469185
>>469176

>Почему компилятор не кричит о несоответствии типов


Потому, что ты вызываешь статик каст, лол. Попробуй использовать неявное приведение типов - компилятор ругнется.

>почему через указатель на B вызывается функция A


Потому, что у тебя объект как был класса A, так и остался A - ты преобразовал лишь указатель.
Алсо зачем вообще пихать в указатель класса наследника ссылку на объект класса родителя?
#100 #469186
>>469176

> через указатель на B вызывается функция A?


Потому что в в vtable указатель на метода A.
А вот по поводу хуиты со static_cast походу в стандарт лезть придётся.
#101 #469191
>>469176

> Почему компилятор не кричит о несоответствии типов


По твоему компилятор должен проанализировать весь твой код и понять, что у тебя по указателю на A лежит на самом деле экземпляр А, а не B?
Static_cast в отличие от dynamic_cast'а не производит проверок на реальное соответствие типа. Как можно догадаться из названия, он выполняется на этапе компиляции, поэтому он небезопасен.
Когда ты пишешь static_cast<B*>(a), ты как бы говоришь компилятору "слушай, братан, тут указатель a полюбому будет указывать на экземпляр класса В, поэтому не заморачивайся, а просто сделай приведение типа".
#102 #469249
>>469181
суть теста "написать Х на бумажке" --- проверить, не напиздел ли кандидат в своем резюме и он вообще не знает как программировать.
собственно тестировать этот кусок кода никто не будет и мелочи выковыривать не будут; могут только докопаться до важных граничных моментов --- например, в двоичном поиске или quicksort случай когда элементов один или два (там приколы с округлениями, если коряво написать, то можно зациклиться).

если хотят действительно проверить навыки, то дают тестовое задание на дом

>>469183
из реально ебанутого случая --- написать итератор по иерархическому дереву (типа дерева каталогов), который обходит все элементы дерева по одному разу

>>469191
тут нужно аккуратнее между тонкостями static_cast и reinterpret_cast, ты описываешь почти reinterpret_cast

>>469186
static_cast делает преобразование между двумя такими типа, для которых можно провести единственную цепочку по иерархии наследования либо существует оператор преобразования

в случае примера происходит т.н. upcast, т.е. преобразование от базового класса к производному
static_cast не может сделать преобразование например между классом A и int, т.к. нет оператора преобразования

также static_cast не может преобразовать от базового класса к последнему потомку в ромбе множественного наследования: когда есть class A; class B: public A; class C: public A; class D: public B, public C. в этом случае преобразование от указателя на A к указателю на D (и наоборот) невозможно ввиду того, что не понятно по какому пути производить преобразования
#103 #469260
Товарищи, есть базовый класс, есть много разных наследников. Есть ли способ, кроме dynamic_cast, в рантайме определять с каким именно из наследников мы имеем дело? dynamic_cast мне не нравится, потому что проверка в этом случае - несколько побочный эффект, а значит это немного не для моих целей инструмент. Более осязаемая причина: он не умеет работать с константными переменными.
#104 #469261
>>469260
Ах, да, все наследники имеют используются для хранения всякой всячины, поэтому виртуальные функции ничего не решат, мне нужно именно понимать, кто передо мной.
#105 #469264
>>469260
typeid и прочие костыли. Обычно если тебе надо знать точный класс, то это хреновая архитектура.
#106 #469265
>>469249

>реально ебанутого случая


А что там ебанутого? Обычный bfs или dfs.
#107 #469266
>>469264
Это ООП, дружок. typeid не поможет, я имею дело с объектом базового класса. typeid определяет класс с точностью до буковок.
#108 #469269
>>469265
не, суть в том, чтобы цикл
for (TreeIterator it = fs.begin(); it != fs.end(); ++it)
cout << *it << endl;
печатал бы имена всех файлов

а bfs/dfs --- это рекурсивный обход
#109 #469272
>>469269
Можно без рекурсии, если стэк юзать.
Как-то так должно быть

std::stack<TreeIterator> stack;
stack.push(root);
while (!stack.empty())
{
auto node = stack.top();
stack.pop();
std::cout << node->getName() << std::endl;
for (auto it = node->getChilds().begin(); it != node->getChilds().end(); ++it)
{
stack.push(*it);
}
}
#110 #469274
>>469269
Ну правильно. Внутри итератора рекурсивный обход, снаружи он печатает имена всех файлов.
#112 #469276
>>469264
Это называется "в С++ нет рефлексии".
#113 #469279
>>469260
class A
{
public virtual std::string getType() { return "A"; }
};

class B
{
public virtual std::string getType() { return "B"; }
};
#114 #469281
Снова превозмогающее быдло в треде.
Быстрее ли программы, связанные с библиотеками статично, программ, что связанны с библиотеками динамически? Или же во втором случае медленнее работает только первое обращение к какой-нибудь функции, а далее различий нету никаких?
#115 #469282
>>469279
Ужасное решение, как минимум потому что не использует систему типов, а реализует какой-то самопальный протокол поверх языка, вследствие чего будет работать очень медленно и ненадежно, не говоря уже о том, что реализовывать это придется очень коряво и с поддержкой будет не меньше проблем.
#116 #469284
>>469275
Вот с этим, попробую разобраться, спасибо.
#117 #469312
>>469282

> кресты


> система типов


Топ кек
#118 #469319
>>468955

> Но вед гцц намного лучше поддерживает стандарты плюсов, чем мсвц.


https://www.youtube.com/watch?v=zChEQuhK09M
#119 #469321
>>469171
Кажется, я стал гораздо меньше бояться собеседований. Это дело я знаю достаточно неплохо. Спасибо.
>>468998
#120 #469326
>>468903

>между 11 и 14 выбирать сразу 14


В чём отличие 14 от 11?
9 Кб, 240x210
#121 #469327
>>469281
А сели первое обращение медленнее, не значит ли, что медленнее работа с динамическими библиотеками вообще?
#122 #469329
>>469327

>сели


>если

#123 #469331
>>469326
Допиленный 11 по сути:
https://ru.wikipedia.org/wiki/C%2B%2B14
#124 #469333
>>469331
Но спермопараша при этом 14 стандарт полностью начнёт поддерживать хуй пойми когда.
#125 #469334
Кстати, вопросец. На en.cppreference.com не разобрался.

#include <fstream>
std::ifstream ifs;
ifs.open("text.txt");
bool fail_1 = !ifs;
bool fail_2 = !ifs.is_open();

Всегда ли (fail_1 == fail_2)? Если нет, то когда?
#126 #469338
>>469334
Для тех, кому непонятно, что такое !ifs, это тоже что и ifs.fail()
#128 #469345
>>469161

По законам арифметики существует деление по модулю. С ним итерации пройдут за O(n), как в твоем варианте.

Не менее логичным вариантом будет прохождение каждых 4 индексов строки: http://ideone.com/5aY8ck

В итоге твой вариант пройдет полный цикл за n. Во втором варианте за n / 5.
#129 #469351
>>469327
Ну вот есть у меня библиотека с парой контейнеров. Очень часто используется в основном приложении. Мне её динамической или статической делать? Будет ли разница заметна?
#130 #469358
>>469345

>В итоге твой вариант пройдет полный цикл за n. Во втором варианте за n / 5.


Ты забыл учесть время которое тебе нужно для считывания в строку, а там О(n). В итоге у анона решение в один проход с константной памятью, у тябя два прохода (второй раз каждый пятый символ), плюс линейный расход памяти.
#131 #469363
>>469344
Понятно, что в общем случае неравносильно. Но я спрашивал про конкретно мой пример:
1) создали поток;
2) открыли файл;
3) больше пока ничего не делали.

>>469334
Вот здесь они всегда равносильны или нет?
#132 #469368
>>469358

Хотел написать, что в итоге берем худшее время, т.е n^1, но не стал уточнять.
15 Кб, 476x92
#133 #469437
Эй, аноны, скажите, это норма, или мне надо что-то пересмотреть в своем коде? Ибо последнее уже чёт вообще на пиздец смахивает.
#134 #469468
Решил обмазаться ассемблером. Хочу написать сначала какую-нибудь простенькую программку, а потом проделать внимательно все из этого курса http://wasm.ru/wault/article/show/ollydbg01

Один вопрос, какой ассеблер делать и как в него вообще пидорится? Есть какая-нибудь IDE? Как вообще запускать программки на асм?
sage #135 #469480
>>469437

>QMap<QPushButton *, QString>


Что это за бред? Храни строку в каком-нибудь свойстве кнопки, например
btn->setProperty("myString", "хуй говно пизда");
sage #136 #469483
>>469468

>ашшемблер


Ты тредом ошибся.
#137 #469487
>>469468

>какой ассеблер делать


Щито? Бери FASM, в нем много полезных фич.

>как в него вообще пидорится?


На том же васме можно найти туториал.

>Есть какая-нибудь IDE?


Нормальных не замечал.

>Как вообще запускать программки на асм?


Как и обычные программы, отличий-то нет.
#138 #469504
>>469437
это смахивает на незнание/неумение в mvc
#139 #469506
>>468625
няши, есть один код,
http://pastebin.com/RH5DQFQh
не понимаю как он работает,
объясните пожалуйста откуда берётся значение переменной b, и почему оно равно единице?
#141 #469510
>>469509
и всё-таки, откуда берётся переменная b, если она не передаётся как параметр? и почему эта переменная равна 1?
#142 #469512
>>469510
[code lang="cpp"]int b[] = { 5, 2, 3, 1, 8, 6 };[/code]
Вот твой массив b, который объявлен глобально. Вот это и есть твоя переменная b.
#143 #469515
>>469512
а почему её значение равно 1?
#144 #469516
>>469515
Я тебе уже кинул ссылку здесь
>>469509
Берешь и читаешь, там все написано.
#145 #469518
>>469515
С чего ты взял, что она равна единице?
Функция f возвращает не значение, а указатель. Мы передаем этой функции число 2, а она возвращает указатель на третий элемент массива b. Это эквивалентно выражению cout << b[0+2].
#146 #469520
>>469515
Ты же сам определил функцию, которая возвращает УКАЗАТЕЛЬ на элемент массива. b[0+2] = b[2] = 3;
#147 #469521
>>469518
Лел. Мочепараша тормозит.
#148 #469542
>>469351
Я бы поставил на нет, да и вообще люблю линковать статически. Большинство крупных высокопроизводительных приложений это огроменные бинарники, куда динамически всё залинковано.
Скорее всего ты занят premature optimization.
#149 #469543
>>469437

> Есть какая-нибудь IDE?


Visual Studio? Пиши вставки же. Не знаю, кто сейчас вообще на ассемблере пишет, компилятор ассемблерщикам давным давно в рот суёт, не в последнюю очередь из-за зоопарка платформ
#150 #469544
>>469437

> мне надо что-то пересмотреть в своем коде?


Я бы начал со смывания в унитаз QT
#151 #469546
>>469543
Я хочу просто отдавать отчет о том, что пишу на крестах. Маня-фантазия ОЧЕНЬ ОПТИМИЗИРОВАТЬ КОД у меня нет.
#152 #469547
>>469543

>компилятор ассемблерщикам давным давно в рот суёт


Nope.

>не в последнюю очередь из-за зоопарка платформ


А с этим трудно спорить, кроссплатформенность - штука хорошая.
#153 #469548
Есть такая залупа: http://pastebin.com/qDt8S1T8
Абсолютно разные по содержанию Elem(int), Elem(double), diffElem(int), и diffElem(double), но абсолютно одинаковые в плане синтаксиса Solution() и diffSolution() с точностью до замены первых двух функций на две последние. Как избавиться от копирования кода без лишних трудозатрат?
#154 #469550
>>469547

> Nope.


Можешь привести минимальный пример, где ассемблер обгоняет icpc или даже просто реализацию на mkl? Ну хоть чутка?
Или хоть ссылку на какую-нибудь обоссанную статью на хабре?

Я так понимаю, после gotoh никто ничего подобного не вытворял, хотя люди явно пытались.
sage #155 #469551
>>469544
Я бы начал со смывания говна в твой рот.
#156 #469553
>>469550
Хабр не читаю, но про то, что компиляторы частенько тупят с векторизацией, знаю.
MKL это интеловская математическая библиотека? Скорее всего, там тоже куча вставок. Утверждать не буду, ибо не видел.
#157 #469556
>>469548
Два стула:
1. Указатели на функции или std::function
2. Паттерн:
http://cpp-reference.ru/patterns/behavioral-patterns/strategy/
#158 #469557
>>469543

> компилятор ассемблерщикам давным давно в рот суёт



Напоминаю в очередной раз.
http://thedeemon.livejournal.com/49226.html?thread=581962
#159 #469563
>>469551
Эта кьютеблядь порвалась, заносите следующую.
>>469553

> Хабр не читаю, но про то, что компиляторы частенько тупят с векторизацией, знаю.


С этим не борются ассемблерными вставками. С этим борются алиасингом, и написанием кода без выебонов, который вылавливает компилятор. И смыванием в унитаз GCC ещё. Пш-ш-ш-ш-ш.

> MKL это интеловская математическая библиотека? Скорее всего, там тоже куча вставок. Утверждать не буду, ибо не видел.


Периодически просачиваются куски кода на конференциях — не вставляют, как я понимаю. Даже если так, то вставки это инструмент уровня разработчика MKL, а не пользователя-программиста далеко.
>>469557

> Напоминаю в очередной раз.


В том и проблема, что раз очередной. Давай разберём по частям всё этим джентльменом написанное:

> MSVC8 (2006 год).


9 лет назад

> MSVC10 (2010 год).


5 назад

> Intel Compiler 7.1 (2003 год).


> Даем подсказку: <...> векторизует код ровно так же, как в примере с интринсиками. Укладывается в полсекунды.


12 лет назад

> Аналогичная подсказка MSVC всех версий ничего не дает, они продолжают разворачивать максимум по 4 итерации, никакого SSE.


Ну, параша и параша, MSVC годится только для отладки

> Intel Compiler 11 (2009 год). Одинарный цикл векторизует так же хорошо, как 7-й. В двойном цикле на этот раз догадывается хотя бы векторизовать внутренний, но тупит с выравниваниями, вставляя ненужный и неиспользуемый код по краям. 1 секунда.


6 лет назад. Векторизовал автоматически

> GCC 4.7.0 (2012 год). В двойном цикле полностью разворачивает внутренний, внутри imul, все как у intel 7. Те же 2 секунды. SSE? Не, не слышал. Если сделать цикл одинарным, сдюживает его векторизовать, но делает это плохо: вместо попарного сложения результатов умножения отдельно вычисляет верхние и нижние биты результатов, потом возится с перестановками и перепаковками байтов в регистрах. 1 секунда, вдвое хуже интела и варианта с ручной векторизацией.


Ой, ну про то, что GCC годится только для швабодки в срачельничек мы знаем. Хоть бы clang достали.

Мораль: этот джентльмен подтверждает мои тезисы.

Продолжим бичевание.
Господа, вы знаете, что на SSE свет клином не сошёлся? И что если интел векторизовал пять лет назад в SSE, то в этом году он будет векторизовать уже в AVX, причём кроссплатформенно, т.е. если есть AVX, то программу сбренчит на AVX, если нет, то на SSE, и вставочки будут у icpc сосать, причмокивания?
А знаете, что если это говно выполнять не велосипедируя, а используя MKL (или любой приличный аналог), то он будет задействовать не только векторизацию, но параллелизм, и кеш блокинг? Нет, не знаете? Я вас просветил.
#159 #469563
>>469551
Эта кьютеблядь порвалась, заносите следующую.
>>469553

> Хабр не читаю, но про то, что компиляторы частенько тупят с векторизацией, знаю.


С этим не борются ассемблерными вставками. С этим борются алиасингом, и написанием кода без выебонов, который вылавливает компилятор. И смыванием в унитаз GCC ещё. Пш-ш-ш-ш-ш.

> MKL это интеловская математическая библиотека? Скорее всего, там тоже куча вставок. Утверждать не буду, ибо не видел.


Периодически просачиваются куски кода на конференциях — не вставляют, как я понимаю. Даже если так, то вставки это инструмент уровня разработчика MKL, а не пользователя-программиста далеко.
>>469557

> Напоминаю в очередной раз.


В том и проблема, что раз очередной. Давай разберём по частям всё этим джентльменом написанное:

> MSVC8 (2006 год).


9 лет назад

> MSVC10 (2010 год).


5 назад

> Intel Compiler 7.1 (2003 год).


> Даем подсказку: <...> векторизует код ровно так же, как в примере с интринсиками. Укладывается в полсекунды.


12 лет назад

> Аналогичная подсказка MSVC всех версий ничего не дает, они продолжают разворачивать максимум по 4 итерации, никакого SSE.


Ну, параша и параша, MSVC годится только для отладки

> Intel Compiler 11 (2009 год). Одинарный цикл векторизует так же хорошо, как 7-й. В двойном цикле на этот раз догадывается хотя бы векторизовать внутренний, но тупит с выравниваниями, вставляя ненужный и неиспользуемый код по краям. 1 секунда.


6 лет назад. Векторизовал автоматически

> GCC 4.7.0 (2012 год). В двойном цикле полностью разворачивает внутренний, внутри imul, все как у intel 7. Те же 2 секунды. SSE? Не, не слышал. Если сделать цикл одинарным, сдюживает его векторизовать, но делает это плохо: вместо попарного сложения результатов умножения отдельно вычисляет верхние и нижние биты результатов, потом возится с перестановками и перепаковками байтов в регистрах. 1 секунда, вдвое хуже интела и варианта с ручной векторизацией.


Ой, ну про то, что GCC годится только для швабодки в срачельничек мы знаем. Хоть бы clang достали.

Мораль: этот джентльмен подтверждает мои тезисы.

Продолжим бичевание.
Господа, вы знаете, что на SSE свет клином не сошёлся? И что если интел векторизовал пять лет назад в SSE, то в этом году он будет векторизовать уже в AVX, причём кроссплатформенно, т.е. если есть AVX, то программу сбренчит на AVX, если нет, то на SSE, и вставочки будут у icpc сосать, причмокивания?
А знаете, что если это говно выполнять не велосипедируя, а используя MKL (или любой приличный аналог), то он будет задействовать не только векторизацию, но параллелизм, и кеш блокинг? Нет, не знаете? Я вас просветил.
sage #160 #469564
>>469563
Только в твоем байтоебском манямирке.
sage #161 #469570
>>469563

>эти манёвры

#162 #469572
>>469556
Нда, самый просто вариант в моей laba1.cpp это именно указатели.
#163 #469574
>>469564
>>469570
Вот так пропагандируешь людям не байтоёбствовать, пропагандируешь, а они тебя байтоёбом клеймят. Стыдись, Qt-мразь, самоедствуй, или показывай аргументированно где я не прав.
sage #164 #469578
>>469574
Ты не прав в том, что не привел никаких аргументов касательно кьюта. На конпеляторное байтоебство не я отвечал, мне это не интересно.
29 Кб, 646x135
#165 #469590
Аноны, помогите.
#166 #469598
>>469578
Хорошо. Моя аргументация относительно того, что кьют — говнина ебаная для неудачников базируется на двух китах. Внимай.
1) Кьют плох, как гуёвая библиотека. Плюсы (как и любой другой язык без сборки мусора) не предназначены для написания гуёв. От слова совсем. Там нельзя естественным образом использовать современные гуёвые парадигмы, код пишется очень медленно и глючный, IDE очень плохие. Единственное, зачем ещё держат кьют — кросплатформенность, но и там он весьма не очень. Кроссплатформенность достигается через еблю, тяжёлые либы, глючит под виндой, где сидит 99.99% гуепользователей... Программисты на Qt относительно дорогие, и в то же время, макаки, которые не отличают друг от друга компиляторы. Удел кьюта в качестве библиотеки — поддержка древнего легаси с ненавистью к своей потерянной жизни (т.е. для неудачников). Одна макака с решарпером заменяет целую группу кьютобезьян с тимлидом.
2) Для всего остального кьют не годится. Есть библиотеки, которые не требуют анального кьюторабства, легко заводятся с разными компиляторами, быстро изучаются и не навязывают свою парадигму программирования. Разонравилась библиотека? Выкинул из проекта за пару дней и заменил на конкурента. Всё, ты в дамках. А гуи напишут специально обученные люди, на чём-нибудь поприличнее. Как и любая монструозная свалка кьют обречён на гниение и вымирание.

Так лучше?
#167 #469602
>>469590
Что такое "Начальное приближение корня"?
И как найти корень?
ЯННП
#168 #469607
>>469590
Кек. http://github.com/nukede/lobster
Дико извиняюсь за тот говнокод. Готовлю обновления, где хоть чуть-чуть прибрался, но тем не менее, в этой программе есть реализация поиска корня методом простых итераций.

Правда для систем линейных уравнений, но все сводится к трем операциям
1. Построить итеративную форму
2. Проверить сходимость ряда
3. Начать поиск приближения.

Олсо, ты можешь загуглить другие методы поиска приближенного корня.
#169 #469608
>>469602

> Что такое "Начальное приближение корня"?


Это число, достаточно близко аппроксимирующее решение уравнения

> И как найти корень?


Методом просто итерации. Что это такое написано в Википедии (не проверял, но уверен)
#170 #469610
>>469608

>Это число, достаточно близко аппроксимирующее решение уравнения


То есть мне его брать за корень, или зачем вообще оно дано?
#171 #469611
>>469602

>Что такое "Начальное приближение корня"?


Числа, с которых стартуешь приближать. В твоём случае это сначала 0, потом 11.

>И как найти корень?


ans = f(f...(f(x)))) (применяешь n раз), где f(x) = 0.25 * (1 - 2x^3) (выражаешь из уравнения x).
#172 #469613
>>469607
Что это за ёбаный монстр? Что эта программа делает?
#173 #469615
>>469610
Тебе его брать как начало последовательности ответов. Чем больше ты проитерируешь - тем точнее будет последний элемент последовательности. Зачем тебе это вообще?
#174 #469617
>>469610

> То есть мне его брать за корень,


За первое приближение

> или зачем вообще оно дано?


Чтобы метод простой итерации сошёлся в два разных значения. Если начинать из произвольной точки то будет сходиться медленно, и, возможно, в одну и ту же точку, хотя корней тут может быть аж три.
#175 #469619
>>469615
А зачем решать СЛАУ методом простой итерации (кроме как laba5?)
Давно хотел с тобой поговорить, я вообще люблю решать СЛАУ
#176 #469622
>>469613

>Что это за ёбаный монстр?


Да. Я уже сказал, что лютый говнокод, постараюсь его обновить в ближайшее время.

>Что эта программа делает?


Есть некоторая система линейных алгебраических уравнений. Нужно вычислить корни данной системы уравнений с некоторой точностью. В файлике описываешь матрицу свободных членов, матрицу коэффициентов. И запускаешь программу, которая подбирает нужны ответ.

В программе нужно запилить нормальную многопоточность, переписать очередь (а то она уж совсем ублюдски реализована), ну и генерацию файла адекватней запилить.
#177 #469624
>>469611
>>469617
Один хер не понимаю об элементе последовательности, как он вообще находится, куда его пихать в программу?
У меня в задании ведь нужно корень найти и уточнять его, пока модуль разности текущего корня и предыдущего больше заданной точности.
Или я не так все понимаю?
>>469615
Лаба же.
#178 #469626
>>469624
Ты погуглил про метод простой итерации? Скинь в тред список прочитанных тобою источников.
#179 #469627
>>469624
Пиздос, я же тебе скинул готовую программу. Там есть класс SIM, в котором реализованы три необходимые функции. Хоть программа состоит из говна, да чего уж, даже этот класс немного смазан говном, но те три функции вполне неплохо описаны и выполняют свои задачи.

Препод не бугуртил, кстати.
sage #180 #469628
>>469598
Да, так лучше, спасибо. Теперь буду знать ключевые слова для автоскрытия.
#181 #469629
>>469626
вики, хуева гора тем на cyberforum
#182 #469630
>>469629
Почему ты меня игнорируешь?
28 Кб, 680x533
#183 #469631
>>469628
Пикрелейтед.
>>469629

> вики, хуева гора тем на cyberforum


Ссылками, ссылками. И выжимку в одно предложение из каждого источника. Этого от тебя препод ждеёт.
#184 #469634
>>469627
>>469630
>>469607
Пытаюсь разобраться, пока не очень выходит.
sage #185 #469636
>>469631
Нет, кукарека, не засчитан. Аргументов то не было, только твои спермофантазии.
#186 #469638
>>469636
Так ты аргументируй. Подсказываю:

> На самом деле, кьют хорошь, как гуёвая библиотека, и вот почему: ...

sage #187 #469641
>>469638
Только когда ты приведешь аргументы, а не свою точку зрения. Цифры, примеры, вот это все.
#188 #469644
>>469641
Аргументы есть, слив засчитан, Qt объявляется обоссаным в этом треде до тех пор, пока не будет контраргументов или хоть детального разбора уже приведённых.
sage #189 #469651
>>469644
Ясно-понятно, как и ожидалось от кукареки. Пукнуть пукнул, а доказать не может.
#190 #469654
>>469638
Потому, что какая-никакая, но мультипплатформа. Потому, что годные сигналы/слоты. Потому, что хорошая документация и удобно использовать.
#191 #469657
>>469654
Какая-никакая кроссплатформенность везде, кроме мобильных устройств, достигается wine. При этом можно использовать другие фреймворки, с удобными IDE, написанной профессионалами документацией и, конечно, очень удобные. Сигналы/слоты с дополнительным шагом компиляции не очень нужны, для этого есть другие библиотеки, навскидку, буст.
#192 #469660
>>469590
http://pastebin.com/YfCLbZMp
Какая-то хуйня получилась, которая к тому же не работает.
#193 #469662
>>469598

> Моя аргументация относительно того, что кьют — говнина ебаная


> Кьют плох, как гуёвая библиотека.


> Плюсы (как и любой другой язык без сборки мусора) не предназначены для написания гуёв.


> нельзя естественным образом использовать современные гуёвые парадигмы,


> код пишется очень медленно и глючный


> IDE очень плохие.


> там он весьма не очень.


> тяжёлые либы,


> глючит под виндой...


> Программисты на Qt относительно дорогие,


> Одна макака с решарпером заменяет целую группу кьютобезьян с тимлидом.


> 2) Для всего остального кьют не годится.


> ...


> плохой потому что плохой


> сосёт потому что гавнина ебаная


> плохо зделали потому что тупа плоха

sage #195 #469665
>>469662
Вот и я ему намекаю на это, но экземпляр довольно упертый, долго еще маневрировать будет.
#196 #469670
>>469664
Хотя не, эт хуйня какая-то.
#197 #469672
>>469662>>469665
Где контраргументы, или указание на неправильность приведённых мной аргументов хоть? Учись у господина >>469657, он аргументирует.
#198 #469676
>>469672
Это не контраргументы. Непонятно кем написанный wine блядь у него залог кроссплатформенности, ну охуеть теперь.

>можно использовать другие фреймворки


Ну можно, да. Можно и в жопу ябаться.

>с удобными IDE


Удобство у всех разное. Кому-то удобно и в емакс пёхаться.

>написанной профессионалами документацией


А кто, простите, документировал Qt? Школьники из 5б?

>сигналы/слоты не очень нужны


Ты не нужен, блядь.

>для этого есть другие библиотеки, навскидку, буст


Что лучше - использовать зоопарк библиотек или один Qt?
12 Кб, 774x247
#199 #469677
Как эту хуйню реализовать вообще?
#200 #469680
>>469664
http://pastebin.com/VpNrxcRw
Вроде так, но хуй знает, правильно считает или не.
И что выводить нужно, x1 или x?
#201 #469681
>>469677
Берёшь и реализовываешь.
#202 #469682
>>469680
Открой еще раз ссылку, я там кое-что подправил, чтобы всё стало понятно даже дауну.
sage #203 #469685
>>469672
Тебе >>469662 все правильно написал. Контр-аргументы можно привести только на аргументы, опровергать пустобреха не вижу смысла.
#204 #469687
>>469682
Так не работает ведь, сам попробуй запусти.
Вводишь любое e, результат не меняется.
+ В условии сравнивать с e нужно не x-f(x), а f(x)-x.
49 Кб, 1173x683
#205 #469689
>>469687
лолвут? abs - это модуль, если чё.
Ну и да, на x_0=11 программа валится, ничего страшного в этом нет - тебе никто не гарантировал, что метод последовательных итераций сходится всегда.
#206 #469691
>>469689
Вангую, что он просто прочитал пару статеек, нихуя не понял и требует от нас помощи. Я же написал, как реализуется задача.
1. Привести к итерационной форме
2. Проверить сходимость
3. Искать корни.
#207 #469692
>>469691
У него лабы горят, сейчас же зачеты начинаются.
#208 #469697
>>469691
Чувак, у меня уже дано ебаное уравнение, которое сходится.

>>469689
Первый x ведь 0.11 и дан в условии задачи
#209 #469698
38 Кб, 1181x583
#210 #469699
>>469697
Даже если так - пошел нахуй отсюда, ты реально заебал.
#211 #469703
Кто может разъяснить про Boost. На сколько эти либы востребованы в программистских работах? И стоит ли их заучивать?
#212 #469706
>>469703

> востребованы в программистских работах


Да, несмотря на то, что выглядит в бусте всё очень уёбищно

> стоит ли их заучивать


Заучивать – нет, поглядеть и поиграться – да
#213 #469715
>>469699
И еще, функция типа должна быть рекурсивной...
#214 #469721
>>468625
Что за виртуальные функции? Какой смысл перед объявлением функции писать слово virtual и зачем нужно объявлять виртуальные функции или чисто виртуальные? чем они отличаются от просто виртуальных? в абстрактных классах если всё равно надо переопределять в подклассах?
#215 #469725
>>469721
Открой любой учебник и прочитай про классы, наследование и виртуальные функции.
#216 #469732
>>469725
прочитал. нихуя не понял. пришол сюда. зачем они? Что они делают? в двух словах пояснить возможно?
sage #217 #469734
>>469732
Мать твою в жопу ими ебут. Теперь катись на хуй.
#218 #469779
>>469732
>>469721
Есть такая штука, которая называется полиморфизм, суть в двух словах: один интерфейс – одна реализация. Виртуальные функции – одно из средств реализации полиморфизма (полиморфизм подтипов).

> смысл перед объявлением функции писать слово virtual


Пример из вики ясно поясняет зачем:
http://goo.gl/ZafY7u

> чисто виртуальные? чем они отличаются от просто виртуальных?


Методы без реализации, так можно построить интерфейс, с этим разберёшься чуть позже. Иногда супертип не должен представлять собой что-то конкретное, а должен быть абстрактным.

Надеюсь, что ты не обиделся на саженяшу, он у нас бывает не в духе.
А теперь пиздуй внимательно шерстить учебник, ты бы ещё хелло ворлд попросил объяснить.
#219 #469782
>>469779

> один интерфейс – одна реализация


Обосрался, конечно же
один интерфейс – множество реализаций.
#220 #469799
>>469779
Спасибо. Так ничего и не понял. Пошёл перечитывать учебник. Долго ты ООП учил?
#221 #469804
>>469799
Я не учил, я лабы делал, с опытом приходит понимание. Делай задания, которые даются в конце глав. Какую книгу читаешь?
#222 #469807
>>469799
Ты его просто так не поймешь, почитав учебник. Пиши код, пробуй и поймешь. У нас сейчас ООП только Ruby читают. 80% потока нихуя не понимают.
#223 #469809
>>469807

> ООП только Ruby читают


Кек, это где такое происходит? Это первый ЯП, который вам показали?
85 Кб, 397x435
#224 #469811
>>469809
Yep. У нас очень мало этого. Поэтому препод сказал, что нужно максимум дать, а кресты объяснять будет слишком долго. И он охуенно правильно сделал, ибо никто-нихуя-не-понимает. Пик стронгли релейтед.

Но препод просто 10/10. У нас с ним две пары в неделю. На первой, он дает нам лекцию, где поясняет за всякие ништяки. Например, сегодня он рассказывал на переполнение буффера и какие могут быть проблемы. Хоть я это и так знаю, но все равно с интересом послушал, ибо он все качественно оформляет и доступно рассказывает.
#225 #469813
>>469811
Ох уж это рашкообразование, нам наоборот всё разжёвывали и дали минимум, чтобы можно было чиселки в массивах складывать. Программирование длилось три семестра, последний при этом был выделен под изучение STL. Те, кто был минимально заинтересован, научились писать внятный код только к четвёртому курсу. Хотя у нас больше физическая специальность, но кодить требовали постоянно на других предметах.
#226 #469817
>>469804
>>469807
Может пока вы тут учебник нормальный посоветуете? Читаю страуструпа, но он писал про книги которые объясняют ООП без привязки к конкретному ЯП. Это какие? Не могу найти.
#227 #469818
>>469813
Ну у нас, к сожалению, упор сделан на языки - английский, немецкий. О чем я дико жалею, но с другой стороны языки нужны, да.

К примеру, программирование у нас будет только в этом семестре. В общем, блядь, ну я не знаю. С одной стороны я ввязался в говно, надеясь на то, что будет что-то прогрессивное, но кроме языков, которые я пока не знаю, куда применить, я там не нашел ничего.

Хотя может быть, я буду когда-нибудь успешен и благодарен вузу. Олсо, препод по физике, пророчит мне зарплату под 9к ойро в гейропке и ставит в пример другими. А я горько усмехаюсь над ним, надеясь найти хоть какую-нибудь работу к окончанию вуза.
sage #228 #469819
Ну нахуя вы им отвечаете, пиздец. Это же дауны необучаемые, так нихуя и не поймут, дос тарости будут своими дегенератскими вопросами и лабами спамить.
#229 #469821
>>469817
Освоение языка даст тебе минимальную базу ООП, конкретные книги про ООП читать потом будешь. Мне вот учебник Лафоре понравился, очень доступно для новичков объясняет.
#230 #469822
Господи блядь, почему никто из этих тупорылых студентов не догадается в течение семестра читать какого-нибудь Лафоре - я за один первый семестр её прочитал, сделал 80% заданий, всё было ясно и понятно. И я блядь даже не на программистской специальности учусь. Про переполнение буФФера им на лекциях по С++ рассказывают, ну обосраться теперь. Нахуй вы живете?
sage #231 #469823
>>469819

>до старости


Сука АЖ ТРИСЕТ.
sage #232 #469824
>>469822
Давай вместе им в ротешник ссать, кто больше нассыт. Пссссс, догоняй.
#233 #469825
>>469817
ООП тащемта любому нормальному человеку и так становится понятно, когда он пишет хоть сколько-нибудь код. Как и ФП, например.
Вот написал ты портянку, и думай как её отрефакторить. Если ты не совсем даун то быстро сообразишь, какие абстракции лучше всего подойдут.
#234 #469826
>>469819
Дай ты людям шанс, этот то без лабы пришёл, можно и рассказать чуть-чуть а потом нахуй послать.
Всё равно в треде почти нихуя не происходит.

>>469818
Тут уж дрочить на самообразование приходится, у большинства так. У некоторых студентов бывает шанс свалить на работку к научруку, вот этот шанс желательно не проябывать.
#235 #469830
>>469822
Двачую, был лучшим первые два курса по погроммированию. Тоже физическая специальность.
#236 #469831
>>469819
Кек. Ну хоть какое-то разнообразие, а то я сейчас на праздниках начну всякое говно кодить и срать сюда охуительными вопросами. Олсо, мы так и не решили. Хочу захуячить клиент десктопный для вбыдлятни через API. OpenSSL и Sockets типа использовать, хочу опробовать boost.asio. Взлетит?

>>469822
Откуда такой бугурт? Ну далеко не программерская и не инженерная специальность. Тот парень, который спрашивал у меня за задачки, например, отлично шарит в английском и немецком языках. И ещё спортом занимается.

Да и годные лекции всегда годные, даже если какие-нибудь простые вещи рассказываю.
111 Кб, 1365x701
sage #237 #469837
>>469822

>Лафоре


Иди на хуй.
sage #238 #469839
>>469831

>Взлетит?


Из пушки по воробьям. Вот тебе пример использования апи, наговнокоженный за 15 минут в блокноте на жабаскрипте: https://ololoepepe.me/vktools/ Делать это все на крестах - тот еще изврат, вообще никакого смысла в этом нет.

>отлично шарит в английском и немецком языках. И ещё спортом занимается


Ну нихуя себе, умеет зубрить и прыгать на турничках. Прям мега достижения.
#239 #469840
>>469837
На этапе изучения языка очень важно понимать разницу между всеми существующими компиляторами. Есть более веские причины считать Лафоре плохим учебником?
#240 #469844
>>469837
Пердолик порвался
sage #241 #469845
>>469840

>На этапе изучения языка очень важно понимать разницу между всеми существующими компиляторами.


Это байтоебство высшей пробы. В идеале ты вообще не должен думать о компиляторе, а руководствоваться только стандартом.
sage #242 #469847
>>469844

>Эти проекции сперморебенка

#243 #469850
>>469839
Ну так интереса ради, почему бы и нет? Ведь умение работать с сокетами и openSSL дохуя важный навык, нет?
#244 #469851
>>469847

> пок пок не опустили совсем

#245 #469854
>>469840
Эта глава вроде нужна, чтобы рисовать в консоли, лол.
#247 #469857
>>469850
Лол нет, нормальный программист сделает что-то вроде Http.get("https://..."), а не будет пердолиться с сокетами.
#248 #469861
Аноны, а что вообще читать по теме сетевого программирования? Сокеты, хуёкеты, серверы и т.д.
#250 #469866
>>469857
А вдруг какой-нибудь сириус проект с сетевой йоблей? Я ведь в сторону C++ программирования двигаюсь.
#251 #469867
>>469866
Сириус проекты используют стандартные протоколы
sage #252 #469869
>>469850
Отчасти >>469857 прав, это все байтоебство, это скучно и ведет к написанию факториалов вместо программ.
>>469851
Маневр не удался.
>>469855
Да тут хуй поймет, даун на дауне сидит, еще и не такое могут сморозить.
>>469861
Ну короче сокет открываешь, коннектишься, данные передаешь/получаешь, закрываешь сокет. Сервер слушает на специальном сокете и создает новые сокеты при входящих соединениях, ты их в этот момент берешь и делаешь с ними все то же самое. Сокет можно рассматривать примерно как файл, только в файле у тебя произвольный доступ, а тут нет. Все, считай что почитал.
#253 #469870
>>469869

> пок пок маневр я совсем не горю ааа!

#254 #469871
>>469867
Блядь, что ж с этим C++ не так. Вроде бы, охуенный язык, но написать на нем ничего нельзя - проще на другом.
#255 #469872
>>469871
С чего это он охуенный, если он низкоуровневое устаревшее говно с тоннами костылей?
#256 #469874
>>469871
В этом посте я поясняю за научное байтоёбство, самый удобный и быстрый линал и охуительные библиотеки для научных вычислений. Но меня можно не слушать, потому что вся эта хуита для меня пока не окупилась.
Алсо, гейдев же.
sage #257 #469875
>>469871
>>469872
Просто кто-то не осилил.
>>469870
Ну все, пошли переводы стрелок.
#258 #469876
>>469875

> мам ну скажи ему что это у него баттхерт!!

43 Кб, 600x628
#259 #469878
>>469872
Ну вон смотри сколько кода на нем написано. Даже браузер, через который ты тут срешь, написан на этом божественном языке. Правда где бы мне работу найти.

>>469875

>Просто кто-то не осилил.


Я работаю в этом направлении.
#260 #469879
>>469876
У меня теперь тоже, святая толстота, съеби уже куда-нибудь.
#261 #469880
>>469875

> Просто кто-то не осилил.


Да братиш, не так-то просто осилить поедание говна.
#262 #469882
#263 #469883
>>469874

>самый удобный


матлаб

>самый быстрый


фортран/си
sage #264 #469885
>>469874

>научное байтоёбство


>наука


>байтоебство


Выбери одно. Алсо, для науки матлаб и пистон.

>самый удобный и быстрый линал


>удобный


>С++


Ну-ну.

>охуительные библиотеки для научных вычислений


... для которых есть байндинги во всех популярных языках, и которые работают в этих языках с такой же скоростью, потому что сами то библиотеки на крестах.

>Алсо, гейдев же.


С этим согласен, тут альтернатив нет, только веселые фермы для браузеров на жабаскриптах.
sage #265 #469886
>>469882
Peedora otvyet.
#266 #469887
>>469878

> Ну вон смотри сколько кода на нем написано. Даже браузер, через который ты тут срешь, написан на этом божественном языке. Правда где бы мне работу найти.


Да, теперь открой исходники и проблюйся от убогой костыльной портянки.
#267 #469888
>>469886
Fffuuuu zatraleno(((
#268 #469891
>>469887
Может и правда в Java перекатиться? Кек.
#270 #469894
>>469883
>>469885

> Matlab и пиздон с scipy


Удобное средство для отработки прототипов, но если удаётся сделать что-нибудь годное, то лучше переписать на кресты, чтобы быстро работало и была возможность воткнуть где-нибудь ещё. редко, но бывает. У кода на матлабе/пиздоне всё есть проблемы с производительностью.

> Си


Кресты всё же удобнее, бенчмарков не проводил, ничего не скажу за проигрыш в скорости.

> Фортран


Убери это говно обратно в двадцатый век.
sage #271 #469895
>>469888
Nyet ti.
>>469892
Нирикамендую. Помесь бульдога с носорогом, мало где используется, разве что для лаб годится. Впрочем, это так, голос с дивана, особо не вникал, попробовал и удалил на хуй.
#272 #469896
>>469885

>пистон


>для науки


ahaha oh wow
Не знаешь - молчи.
sage #273 #469898
>>469894

>бенчмарков не проводил, ничего не скажу за проигрыш в скорости.


Почти нет проигрыша. Если не использовать RTTI, например, то вообще разницы не заметишь.
#274 #469900
>>469894

>Убери это говно обратно в двадцатый век


С радостью бы, но это невозможно. Хотя кое-кто из знакомых берется за переписывание программ на фортране на плюсы и делает это годами.
#275 #469901
>>469895
Ай не пизди. Умеет всё то же, что и джява.
#276 #469903
>>469891
Как-будто там сильно лучше. Работа, деньги и шлюхи

>>469892
Выглядит соблазнительно.
sage #277 #469905
>>469896
Это мне надо было тебе сказать http://scipy-lectures.github.io/intro/intro.html#why-python
#278 #469906
>>469903

>Работа, деньги и шлюхи


Вот и я об этом же. А сильно ли эта байткодовая параша сложнее C++?
sage #279 #469909
>>469901
Разве оно жабовские либы не через костыли использует? Говорю ж, особо не вникал, так, первые впечатления.
sage #280 #469913
>>469906
Те же яйца в профиль. Есть свои плюсы и своя клоунада (привет, StringBuilder). Все уродство - в жирнейших тырпрайз фреймворках типа спринга с XML-ной или аннотационной дрисней. Высший пилотаж по самую макушку в говне - сочетание первого со вторым.
#281 #469914
>>469906
Не сложнее. Алсо, перекатившись в жабу ты станешь владельцем самой крупной сети фабрик с фасадами и мостами.
Главное в предметной области что-то понимать.
#282 #469915
>>469909
Лол нет, абсолютно нативно использует, ведь компилируется в джявовский байткод.
Единственные противоречия могут быть в парадигме, ну т.е. джявовские классы все мутабельные, и будет некрасиво их мешать со скалой без обёртки.
sage #283 #469917
>>469915

>будет некрасиво их мешать со скалой без обёртки


Ну то есть фактически без костылей не обойтись, о чем я и говорю. Либо писать говнокод, а это и без скалы на жабе можно делать.
#284 #469918
>>469915

> противоречия в парадигме


Вот это меня всегда смущало, дикая помесь фп и ооп с кучей разных ништяков. Осилить сложно, обучать дорого.
sage #285 #469919
>>469918
Использовать бессмысленно.
#286 #469920
>>469917
А как ты хотел? Чтобы компилятор тебе сам делал красивые обёртки?
#287 #469921
>>469919
Бессмысленно использовать что-то, кроме скалы в 2015.
#288 #469922
>>469921
Манямирок быдлокодера, оторванного от реалий рынка с дегенератами на рабочих местах во всех сферах, без исключения.
#289 #469923
>>469918

> Осилить сложно, обучать дорого.


Нихуя, намного проще чем джяву с её говноспрингами и EE.
sage #290 #469924
>>469921
Ну начался фанатизм.
>>469920
Я хотел бы писать программы, а не костыли для подстраивания библиотек одного языка под парадигмы другого.
#291 #469925
>>469922
Тогда используй Кобол, хуле, прогресс не нужен.
sage #292 #469930
>>469922
Он может и не быдлокодер, он наверняка даже круче большинства этих дегенератов, да и круче меня скорее всего, но от реалий и правда оторван. Таких даунов на работу берут, еще тупее чем студенты в этом треде.
#293 #469932
>>469905
Его в реальной научной работе не используют, маня.
#294 #469933
>>469925
Крайности, эти крайности, как же это заебало.
#295 #469935
>>469924
Лучше один раз написать костыль, чем всё время жрать говно. Для большинства задач тебе хватит одних скала-библиотек, тащемта.
#296 #469936
>>469930
Часто общаюсь с манагерами, они говорят, что задротских экспертов должно быть очень мало в отеделе. Лол, меня эти слова всегда успокаивали.
#297 #469954
>>468627

>In order to build and use ololord you will need the same libraries and tools as for every other project using Qt.


>Qt


Да ты же уёбок! Это поеботину на сервер тянуть только жуебок способен.
#298 #469955
>>469932
Спецы по машинному обучению и компьютерному зрению очень любят пиздон, хотя лаб, где используют SciPy, я тоже не видел.
#299 #469960
>>469955
Просто что машинное обучение, что компьютерное зрение - относительно молодые области, софт приходится пилить самим исследователям. В более старых отраслях рулят Фортран и C, ибо на них написаны все необходимые для работы вещи. Ну и еще есть R для статистических расчетов.

>>469936

>Часто общаюсь с манагерами, они говорят


Понятно. "Манагеров" забыли спросить.
#300 #469962
>>469955
Хуешинному хуечению, блядь. Я говорю о НАУКЕ - о молекулярной динамике, о методе конечных элементов, о различном Монте-Карловском моделировании, о прочих других алгоритмах с огромными разреженными матрицами - пистон никогда не будет использоваться в таких областях.
#301 #469967
>>469962

>Я говорю о НАУКЕ


Ебвть, о какой науке речь? В нормальной науке (читай: не в рашкинских говновузах "как отсрочить армию на 5 лет по N килорублей в год") как раз активно пользуют питон как glue между высокопроизводительными библиотеками, написанными на тех же фортранах и сях.
И делают это потому что в процессе проверки гипотезы пердолиться с итераторами, типами возвращаемых значений и прочей байтоебской херней в хуй не всралось.
Если гипотеза выстрелит, всегда найдется студент на кафедре, готовый за "отл" перехуярить все на чем-то быстром, а если не выстрелит, то не будет обидно за проебанные за байтоебством человекомесяцы.
#302 #469976
Плюсач, подскажи, что значит "поток просыпается" и "поток выходит"?
#303 #469978
>>469976
Это значит что поток просыпается, и выходит
#304 #469982
>>469978
Спасибо, посмеялся. Я вот про что: std::thread, например, выполняет переданную функцию однократно. Я не могу понять, пробуждение -- это когда я запускаю его снова или имеется в виду, что в нем будет жить цикл, который будет заставлять его выполнять работу по изменению std::condition_variable?
#305 #469985
>>469982
Поток это низкоуровневая хуйня. И он может уснуть (suspend) и проснуться (resume)
#306 #469986
>>469982
Поток засыпает, когда ты вызываешь у него sleep, wait у cond_var или любую другу функцию, которая что-то ожидает извне (ввод с консоли, чтение из БД, висение на сокете и т.п.).
Тогда поток засыпает. Когда, соответственно, заканчивается sleep, приходит уведомление от cond_var, совершается ожидаемое действие, поток просыпается и продолжает выполнять свою работу.
#307 #469987
>>469986
Понятно. А не реализует ли пересоздание потока через thread = std::thread( foo, arg1, arg2 ) тот же самый механизм? Id потока при этом не меняется.

Алсо, можно ли как-то передать переменную в уже работающий поток, не используя глобальные переменные?
#308 #469993
>>469987

> не используя глобальные переменные


Ну ты можешь в шаред память всё хуячить
Можешь сокет локальный создать
Пиздячить в стдин или открыть ещё пайк
Файл создать
#309 #469995
А если создать достаточно семафоров, то и через них можно...
#310 #469997
Котаны, а можно ли без библиотек реализовать факторизацию Ферма для uint64_t?
#311 #469998
>>469845
>>469885

> ... для которых есть байндинги во всех популярных языках, и которые работают в этих языках с такой же скоростью, потому что сами то библиотеки на крестах.


Я аж сиранул от своей безоговорочной капитуляции. Хорошо, что на толчке сидел. Ну-ка, какая библиотека позволяет на кластере считать из твоего любимого языка, и на всех популярных языках?
Qt-мразь, ты вообще понимаешь, что ты некомпетентен вопиюще?
>>469924

> Я хотел бы писать программы, а не костыли для подстраивания библиотек одного языка под парадигмы другого.


Это ведь ты, да, ты, Qt-мразь? Ты понимаешь, что у тебя шизофрения? Ты понимаешь, что ты только что не хотел именно писать на Qt?
#312 #469999
>>469967

> как раз активно пользуют питон как glue между высокопроизводительными библиотеками, написанными на тех же фортранах и сях.


У нас дристоном только отсталая лаборатория пользуется, с даунами, там у чувака есть глава в диссере про веб-сервер на матлабе, а в научной новизне отправка почты после завершения расчёта. Плюсовые высокопроизводительные библиотеки под конечные элементы (e.g. libMesh) очень даже высокоуровнево конфигурируются без пердолинга, при этом можно спокойно считать нормальные нелинейные задачки, с которыми не справится помойка на этом самом дристоне.
#313 #470000
>>469999

> с которыми не справится помойка на этом самом дристоне.


Предвидя боль всяких детей, добавлю: помойка не справится в виду того, что плохо поддерживается MPI, с которым надо и на крестах-то пердолиться, а уж на дристоне я даже боюсь представить, как оно работает. Без MPI очень проблемно использовать больше 200 гигов оперативки, 8 ускорителей или 12 ядер (что относительно мало).
#314 #470002
>>470000

> больше 200 гигов оперативки, 8 ускорителей или 12 ядер (что относительно мало).


А потом ещё про джяву шутят
#315 #470005
>>470002
Описываемая конфигурация с крестами используется для тяжелых распределенных вычислений, а в джаве для круда. Правильно шутят.
sage #316 #470034
>>469954
Защита от долбоебов, чувак.
sage #317 #470036
>>469998
Ты уже проснулся, кукарека? Аргументы то придумал за ночь?
#318 #470073
>>469987
Потоки операционной системы -- это достаточно низкоуровневая вещь. Поток может быть усыплен вообще в любой момент времени планировщиком операционной системы. На одноядерной машине так все время и происходит: каждому потоку выделяется квант времени, после чего он усыпляется и время дается другим потокам.
Поэтому пытаться разобраться в том, когда поток будет усыплен, а когда разбужен бесполезно.
Что касается пересоздания потока, ну просто в этом потоке сдвинется указатель на новопереданную функцию и все. Уснет ли он на этом моменте -- зависит от планировщика.

>можно ли как-то передать переменную в уже работающий поток, не используя глобальные переменные?


Можешь в поток передавать ссылку или указатель на переменную и менять её значение из другого потока, но эта переменная должна быть либо атомарная, либо ты должен защищать её мьютексом, иначе случится гонка данных и получишь неопределенное поведение.
#319 #470083
Ребята, хватить ругаться. Давайте лучше помолимся.

Digia, иже еси на небеси!
Да святится имя Qt,
Да приидет царствие Qt,
Да будет воля Qt, яко на Linux и на Windows.
Либы насущные даждь нам днесь;
И остави нам сорцы наши,
Якоже и мы оставляем компиляторам нашим;
И не введи нас во искушение, но избави нас от GTK.
#320 #470084
>>470034>>470036
Спорить с Qt-мразью — как играть в шахматы с голубем. Раскидает фигуры, нагадит на доску и улетит всем рассказывать, как он тебя уделал.
sage #321 #470085
>>470083
Фанатизм не нужен, как и нигилизм. Вообще на бордах характерно упарывание в крайности, либо говно, либо охуенно, и каждый нахваливает свою парашу. У всех инструментов свои плюсы и минусы, ну. Даже винапи в определенных ситуациях может пригодиться. Только конченые мудаки как тот порвавшийся безаргументный спермодебил начинают агр поповоду инструментов.
164 Кб, 598x577
sage #322 #470086
>>470084
Ты опять вылезло? Аргументацию принес? Если нет, то уползай обратно.
#323 #470087
>>470083
mov ax, 0x0900
mov dx, string
int 0x21
mov ax, 0x4C00
int 0x21
string db 'NOPE$'
#324 #470091
>>469550

>где ассемблер обгоняет icpc или даже просто реализацию на mkl


Проблема не в ассемблере, а в заебах компилятора и языка. Чтобы твой код обгонял ассемблерный, надо понимать почему, например, for ( int i=size(); i--; ) может компилироваться в более быстрый код, чем for ( int i = 0; i < size(); ++i ).
#325 #470095
>>470086
Тебе аргументацию дали, ты сделал КОКОКОКО, насемёнил и пошёл праздновать успех.
sage #326 #470098
>>470095

>насемёнил


Ну началось. Все кто не согласен с твоим кукареканием - семены. Давай разберем твои "аргументы", так и быть, заебал засирать тред.

>Кьют плох, как гуёвая библиотека.


Почему?

>Плюсы (как и любой другой язык без сборки мусора) не предназначены для написания гуёв.


Почему?

>Там нельзя естественным образом использовать современные гуёвые парадигмы


Какие именно парадигмы, почему нельзя?

>код пишется очень медленно


Примеры? Точные цифры? Сравнения с более быстрыми способами при равной сложности проекта и равной производительности?

>глючный


Примеры?

>IDE очень плохие


Критерий "плохости"? (Твои личные предпочтения не интересуют.)

>Кроссплатформенность достигается через еблю


Какую конкретно?

>тяжёлые либы


Тяжелые для каких устройств?

>глючит под виндой


В каких ситуациях? Примеры?

>макаки, которые не отличают друг от друга компиляторы


То есть ты утверждаешь, что разработчик гуёв должен знать все особенности каждого популярного компилятора? Для чего?

>Удел кьюта в качестве библиотеки — поддержка древнего легаси


Примеры использования кьюта в легаси.

>с ненавистью к своей потерянной жизни (т.е. для неудачников).


Переход на личности, не несущий никакой информации.

>Одна макака с решарпером заменяет целую группу кьютобезьян с тимлидом.


Примеры такой замены? Сравнение производительности труда? Конкретные компании и цифры?

>Есть библиотеки, которые не требуют анального кьюторабства


С оем же успехом можно сказать, что кьют не требует рабства этих самых библиотек.

>легко заводятся с разными компиляторами


Как и кьют.

>быстро изучаются


Как и кьют.

>и не навязывают свою парадигму программирования.


И требуют каждый раз вновь городить костыли и обертки, чтобы в итоге придти все к той же или похожей парадигме, потому что это удобно.

>Разонравилась библиотека? Выкинул из проекта за пару дней и заменил на конкурента.


Выкинул за пару дней, а потом два месяца прикручивал новую, с новыми костылями, потому что интерфейсы разные.

>Как и любая монструозная свалка кьют обречён на гниение и вымирание.


Что-то жаба не спешит умирать, хотя более монструозной свалки не найти.
Алсо.

>гуи


>гуи


>гуи


Если ты не знал, там еще много всего есть, хотя бы та же система локализации, сигналы-слоты без пердольства с калбэками и без портянки из шаблонов на 50 строк ради вызова одной функции. А также работа с сетью и хттп на достаточно высоком для байтоебского языка уровне, с поддержкой все тех же сигналов и слотов (попробуй на курле это сделать, например, заебешься костыли городить). Полный список модулей можешь посмотреть сам, но ты же скажешь что все это не нужно или тебе не нравится, как оно сделано, а аргументировать или привести примеры опять не сможешь, и продолжишь аутотренинг о том, что ты тут всех затралил своими высерами.
sage #326 #470098
>>470095

>насемёнил


Ну началось. Все кто не согласен с твоим кукареканием - семены. Давай разберем твои "аргументы", так и быть, заебал засирать тред.

>Кьют плох, как гуёвая библиотека.


Почему?

>Плюсы (как и любой другой язык без сборки мусора) не предназначены для написания гуёв.


Почему?

>Там нельзя естественным образом использовать современные гуёвые парадигмы


Какие именно парадигмы, почему нельзя?

>код пишется очень медленно


Примеры? Точные цифры? Сравнения с более быстрыми способами при равной сложности проекта и равной производительности?

>глючный


Примеры?

>IDE очень плохие


Критерий "плохости"? (Твои личные предпочтения не интересуют.)

>Кроссплатформенность достигается через еблю


Какую конкретно?

>тяжёлые либы


Тяжелые для каких устройств?

>глючит под виндой


В каких ситуациях? Примеры?

>макаки, которые не отличают друг от друга компиляторы


То есть ты утверждаешь, что разработчик гуёв должен знать все особенности каждого популярного компилятора? Для чего?

>Удел кьюта в качестве библиотеки — поддержка древнего легаси


Примеры использования кьюта в легаси.

>с ненавистью к своей потерянной жизни (т.е. для неудачников).


Переход на личности, не несущий никакой информации.

>Одна макака с решарпером заменяет целую группу кьютобезьян с тимлидом.


Примеры такой замены? Сравнение производительности труда? Конкретные компании и цифры?

>Есть библиотеки, которые не требуют анального кьюторабства


С оем же успехом можно сказать, что кьют не требует рабства этих самых библиотек.

>легко заводятся с разными компиляторами


Как и кьют.

>быстро изучаются


Как и кьют.

>и не навязывают свою парадигму программирования.


И требуют каждый раз вновь городить костыли и обертки, чтобы в итоге придти все к той же или похожей парадигме, потому что это удобно.

>Разонравилась библиотека? Выкинул из проекта за пару дней и заменил на конкурента.


Выкинул за пару дней, а потом два месяца прикручивал новую, с новыми костылями, потому что интерфейсы разные.

>Как и любая монструозная свалка кьют обречён на гниение и вымирание.


Что-то жаба не спешит умирать, хотя более монструозной свалки не найти.
Алсо.

>гуи


>гуи


>гуи


Если ты не знал, там еще много всего есть, хотя бы та же система локализации, сигналы-слоты без пердольства с калбэками и без портянки из шаблонов на 50 строк ради вызова одной функции. А также работа с сетью и хттп на достаточно высоком для байтоебского языка уровне, с поддержкой все тех же сигналов и слотов (попробуй на курле это сделать, например, заебешься костыли городить). Полный список модулей можешь посмотреть сам, но ты же скажешь что все это не нужно или тебе не нравится, как оно сделано, а аргументировать или привести примеры опять не сможешь, и продолжишь аутотренинг о том, что ты тут всех затралил своими высерами.
#327 #470104
>>470085

> винапи


Но это не инструмент, это виндаотсос, без которого не получится на винде.
sage #328 #470107
>>470104
Шарп, кьют.
#329 #470110
>>470107
Решеточка, которая совсем недавно была прибита к венде гвоздями? В любом случае это не ц и не цпп .
#330 #470112
>>470091
Ничего не понял, что ты сказал. с какого перепугу твоя параша будет быстрее работать?
https://ideone.com/XMrfR2
Эта неочевидная ебуда работает точно столько же, а если убрать нагрузку, то будет работать медленнее. Не надо считать, что если в техникуме тебя научили писать на ассемблере, то ты от этого вдруг начнёшь обгонять компилятор. Я уже не говорю, что ты не знаешь про кеши, параллелизм и векторизацию, а только считаешь команды в наивной реализации компилятора. На дворе не 1975 год, пора отвыкать от байтоёбства.
>>470098

> Почему?


Причины приводятся дальше для текста.

> Почему?


Потому, что время жизни объектов в высокоинтерактивном приложении плохо контролируется программистом.

> Какие именно парадигмы, почему нельзя?


Не написать в одну строчку, не буду трудиться объяснять.

> Примеры? Точные цифры? Сравнения с более быстрыми способами при равной сложности проекта и равной производительности?


google://qt+vs+c#+programmer+performance
У меня по четвёртой ссылке кьют поливают говном, по второй ссылке кьют поливают говном. Вот тебе сравнения.

> Примеры?


Погугли хоть.

> Критерий "плохости"? (Твои личные предпочтения не интересуют.)


Плохой статический анализ (решарпер для плюсов с Qt работать не бдует), неразвитые методы рефакторинга. Пока хватит.

> В каких ситуациях? Примеры?


В гугле.

> То есть ты утверждаешь, что разработчик гуёв должен знать все особенности каждого популярного компилятора? Для чего?


Я утвержадю, что разработчик гуёв не должен быть Qt-хуесосом.

> Как и кьют.


Это не так; Qt требует дополнительного шага в компиляции, и часто не работает с нелюбимыми разработчиками компиляторами (пруфы в гугле)

> Как и кьют.


C++ — куда более сложный язык, чем шарп, поэтому и изучается дольше.

> Выкинул за пару дней, а потом два месяца прикручивал новую, с новыми костылями, потому что интерфейсы разные.


Не аргумент.

> Что-то жаба не спешит умирать, хотя более монструозной свалки не найти.


Ну и какие новые проекты на жабе? Она с Qt одной масти, только Qt даже хуже.

Заебало твою простыню читать, одна анальная боль некомпетентного Qt-неудачника.
#330 #470112
>>470091
Ничего не понял, что ты сказал. с какого перепугу твоя параша будет быстрее работать?
https://ideone.com/XMrfR2
Эта неочевидная ебуда работает точно столько же, а если убрать нагрузку, то будет работать медленнее. Не надо считать, что если в техникуме тебя научили писать на ассемблере, то ты от этого вдруг начнёшь обгонять компилятор. Я уже не говорю, что ты не знаешь про кеши, параллелизм и векторизацию, а только считаешь команды в наивной реализации компилятора. На дворе не 1975 год, пора отвыкать от байтоёбства.
>>470098

> Почему?


Причины приводятся дальше для текста.

> Почему?


Потому, что время жизни объектов в высокоинтерактивном приложении плохо контролируется программистом.

> Какие именно парадигмы, почему нельзя?


Не написать в одну строчку, не буду трудиться объяснять.

> Примеры? Точные цифры? Сравнения с более быстрыми способами при равной сложности проекта и равной производительности?


google://qt+vs+c#+programmer+performance
У меня по четвёртой ссылке кьют поливают говном, по второй ссылке кьют поливают говном. Вот тебе сравнения.

> Примеры?


Погугли хоть.

> Критерий "плохости"? (Твои личные предпочтения не интересуют.)


Плохой статический анализ (решарпер для плюсов с Qt работать не бдует), неразвитые методы рефакторинга. Пока хватит.

> В каких ситуациях? Примеры?


В гугле.

> То есть ты утверждаешь, что разработчик гуёв должен знать все особенности каждого популярного компилятора? Для чего?


Я утвержадю, что разработчик гуёв не должен быть Qt-хуесосом.

> Как и кьют.


Это не так; Qt требует дополнительного шага в компиляции, и часто не работает с нелюбимыми разработчиками компиляторами (пруфы в гугле)

> Как и кьют.


C++ — куда более сложный язык, чем шарп, поэтому и изучается дольше.

> Выкинул за пару дней, а потом два месяца прикручивал новую, с новыми костылями, потому что интерфейсы разные.


Не аргумент.

> Что-то жаба не спешит умирать, хотя более монструозной свалки не найти.


Ну и какие новые проекты на жабе? Она с Qt одной масти, только Qt даже хуже.

Заебало твою простыню читать, одна анальная боль некомпетентного Qt-неудачника.
#331 #470113
>>470112

> для текста.


по тексту
sage #332 #470115
>>470112

>погугли


>погугли


>не аргумент


>погугли


>там сказали что это плохо


>сям сказали что это лучше


>погугли


>это не так


>погугли


Ну как и ожидалось.
#333 #470117
>>470115

> Ну как и ожидалось.


Ну что с тебя взять, если ты не погуглил даже перед тем, как высираться на доску?
sage #334 #470125
>>470098

>>глючит под виндой


>В каких ситуациях? Примеры?


Я не тот анон, что с тобой спорит, но у меня, например, есть одна проблема.
В QGraphicsScene есть 2 QGraphicsItem один из них - картинка, а другой - прямоугольник. Так вот, при изменении размера через стандартный setScale(), прямоугольник ИНОГДА съезжает с границ пикселей картинки. То есть увеличиваешь его - все норм, ровно по границам пикселей лежит, увеличишь еще пару раз - съезжает, увеличишь еще - нормально стоит на границе нужного пикселя. Причем я пробовал оба варианта дистрибуции opengl и не-opengl, ничего не менялось.
#336 #470159
>>470129
Тут только траллить друг друга умеют и лабы новичкам делать.
Код бы какой-нибудь дал хотя бы.
sage #337 #470162
>>470159
Да какой код, говорю же все стандартно, просто делаю setScale().
[code lang="cpp"]
// добавляю в сцену 2 простых итема
mImage = scene->addPixmap(pixmap);
scene->addItem(mSelectionFrame);
// По эвенту нажатия на кнопку увеличения масштаба или по колесу мыши происходит следующее:
mImage->setScale(mScale);
mSelectionFrame->setScale(mScale);
[/code]
sage #338 #470165
>>470125
>>470129
Пробовал на форуме спрашивать? Попробуй, иногда они помогают, либо подтверждают что баг есть и в следующих патчах исправляют.
#339 #470196
>>468625
помогите пожалуйста, не понимаю код
http://pastebin.com/GZRsUw38
привыполнении выводится 8, но я не понимаю что значит выражение n&1,
объясните пожалуйста что это такое
sage #340 #470197
>>470196

>значит выражение n&1


это bitwise and
#341 #470201
>>470197
а что это значит ? объясни пожалуйста подробнее
sage #343 #470209
>>470201
Тебе в /s тупой хуесос, там учат пользовать гуглом.
#344 #470212
#345 #470214
>>470212
Зачем? Мы же возвращаем управление ДОСу.
#346 #470218
>>470112

>с какого перепугу твоя параша будет быстрее работать?


С такого, что size() может быть неконстантным методом класса, или в теле цикла будет вызов такого метода, и компилятор понаставит ненужных проверок, не говоря уже о пересчете size() на каждой итерации.
#347 #470222
>>470218
Так введи n: (unsigned int n = v.size(), i = 0; i < n; ++i)
#348 #470226
>>470222
Это недостаточная байтоебля, ну. Зачем разбираться, как работает процессор, если можно написать for без третьего аргумента, как настоящий хакир?
#349 #470227
>>470222
Я так и делаю. Суть в том, что компилятор спотыкается даже на такой безобидной фигне, и если не проверяешь выхлоп компилятора, не понимаешь где он может протупить, то код на асме ты вряд ли обгонишь.
#350 #470230
>>470227
Пруфы были, что компилятор не спотыкается. И, да, от твоей байтоебли он _больше_ спотыкается и поэтому и нужно постоянно проверять. Это не твой уровень — так оптимизировать код, только если ты не пишешь высокопроизводительные библиотеки (что ты не делаешь судя по уровню владения темой)
#351 #470232
>>470227
Но ведь для того, чтобы понимать, что [вызов метода + операция сравнения] тяжелее, чем просто операция сравнения, вовсе не нужно знать ассемблер.
#352 #470236
>>470230

>Пруфы были, что компилятор не спотыкается


Перечитай пост >>470218, и не тупи больше. Речь идет о методе класса, а не константе, как у тебя в примере.

>от твоей байтоебли


Это банальный branch hoisting.

>Это не твой уровень


Кашпировский в треде, всем заряжать баночки с водой.
#353 #470238
>>470232
Конечно. Просто у некоторых есть безоглядная вера в то, что компилятор все оптимизирует, и разницы не будет.
#354 #470240
>>470227
Не знаю, спотыкается ли. Например, когда я делаю

for (unsigned int n = v.size(), i = 0; i < n; ++i)
fuck_your_mom(v, i);

я точно знаю, что я делаю: мне нужно зафиксировать размер вектор до цикла. Неважно, что там внутри цикла -- увеличит ли его размер ебля твоей мамаши, но итерации мне нужны с изначальным размером, и я точно полагаю, что не уменьшит.

Но когда я пару тредов назад спросил следующее: у меня есть (вместо звёздочек собачки т.к. иначе сожрётся) @@int_array_2D, я делаю внутри цикла switch (int_array_2D [ i ] [ j ] ) , и мне сказали, что отдельную переменную делать не надо, типа, здесь очевидно и так, что компилятор скопирует элемент массива в свитч.

Правильно сказали или нет?
#355 #470242
>>470238

> Конечно. Просто у некоторых есть безоглядная вера в то, что компилятор все оптимизирует, и разницы не будет.


Не путай незнание работы компилятора и байтоеблю. Не знаешь, как работает компилятор как раз ты. Вставить auto condition = size(); гораздо разумнее и понятнее, а работает быстрее.
#356 #470244
>>470240

>Правильно сказали или нет?


Правильный ответ - скомпилируй и посмотри.
#357 #470251
>>470244
Как я тебе посмотрю, размеры бинарников/экзешников сравню?

Даже если они разные, это ещё не значит, что код будет практически идентичен.
#358 #470255
>>470251
Посмотри дизассемблер. Замерь время выполнения разных вариантов.
К.О.
#359 #470258
>>470251

>Как я тебе посмотрю


Дебаггером. Плюс компиляторы умеют режим, когда для каждой строки исходника выводится получившийся асм.
#360 #470325
>>468625
Кодоны, есть один код.
<code>

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;

int main()
{
\tsetlocale(LC_ALL, "Russian");
\tint number;
\tcout << setiosflags(ios::left);
\tcout.width(10);
\tcout << "Число";
\tcout.width(25);
\tcout << "Квадратный корень" << "Деление\n\n";
\tcout.setf(ios::fixed);
\tcout.precision(2);
\tfor (number = 1; number <= 10; number = number + 1)
\t{
\t\t
\t\tcout.width(10);
\t\tcout << number;
\t\tcout.width(25);
\t\tcout << sqrt(number) << static_cast<float> (number) / 2 << "\n";
\t}
\tsystem("pause");
}
</code>
Как можно реализовать деление number на number из предыдущей итерации с проверкой деления на "0", не городя параллельный цикл?
#360 #470325
>>468625
Кодоны, есть один код.
<code>

#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;

int main()
{
\tsetlocale(LC_ALL, "Russian");
\tint number;
\tcout << setiosflags(ios::left);
\tcout.width(10);
\tcout << "Число";
\tcout.width(25);
\tcout << "Квадратный корень" << "Деление\n\n";
\tcout.setf(ios::fixed);
\tcout.precision(2);
\tfor (number = 1; number <= 10; number = number + 1)
\t{
\t\t
\t\tcout.width(10);
\t\tcout << number;
\t\tcout.width(25);
\t\tcout << sqrt(number) << static_cast<float> (number) / 2 << "\n";
\t}
\tsystem("pause");
}
</code>
Как можно реализовать деление number на number из предыдущей итерации с проверкой деления на "0", не городя параллельный цикл?
#361 #470326
>>470325
квадратные скобки, квадратные
#362 #470354
>>470326
С каких пор в HTML для тега квадратные скобки используют?
#363 #470357
>>470354
СУКА ПИЗДЕЦ У НАС НА РАЙОНЕ ЗА ТАКИЕ ВОПРОСЫ УБИВАЮТ НАХУЙ.

Пиши [c ode lang="cpp"]/сюда свою парашу/[/code]
Пробел убери только.
#364 #470360
>>470357
[code lang="cpp"]
#include <iostream>
int main()
{
int moyaparasha;
return 0;
}
[/code]
#365 #470361
>>470360 => >>470357
Чёт нихуя не поменялось.
#366 #470364
>>470361
А ещё тебе надо поставить юзерскрипт. Оп-пост, мамакаёб. Ты читаешь их?
#367 #470369
>>470364
нет, меня больше волнуют другие проблемы, чем сторонние скрипты
#368 #470373
>>470369

>волнуют другие проблемы


>Пришел в священное место со своими устоями и правилами


>Выебывается.



Ты ведь понимаешь, что с таким подходом к решению проблем тебя пошлют нахуй вместе с твоими охуительными лабараторками?
#369 #470383
>>470373

> петух с маняскриптом


> претендует на причастность к священному месту

sage #370 #470386
>>470373
Позволь людям жрать говно, раз они этого хотят. Зачем перед долбоебами распинаться?
52 Кб, 605x454
инцитат #371 #470396
есть шаблон BinaryTree,
его наследники BinaryTreeTextFileIO, BinaryTreeRedBlack, их назначения и набор функций не пересекается
идея создать инстанс сразу от двух последних шаблонов - это хорошая или плохая идея, и вообще реализуемая?
sage #372 #470400
>>470396

>BinaryTreeTextFileIO


>BinaryTree


>TextFileIO


Методы для работы с файлами приделаны к структуре данных, правильно понимаю? Это уже само по себе пиздец. Если ты еще и два таких класса в один объединишь, это совсем жопа с ручкой будет.
#373 #470401
>>470396

>создать инстанс сразу от двух последних шаблонов


Уточни что ты имеешь ввиду.
#374 #470402
>>470400

>Это уже само по себе пиздец


Ну почему? Может класс может ворочать деревьями на сотни гигабайт не загружая их полностью в оперативную память. Естественно такой класс должен уметь работать с ФС
sage #375 #470405
>>470402
Ну разве что так. Но все равно хуевый дизайн, смешивание двух разных сущностей.
#376 #470409
>>470396
BinaryTreeTextFileIO добавляет методы загрузки и сохранения дерева в файл
BinaryTreeRedBlack - добавляет функционал красно-черного дерева
в чем проблема методов работы с файлами в классе?
>>470401
хочется создать класс от 2х шаблонов сразу
что-то вроде class MyTree: public BinaryTreeRedBlack<int>, BinaryTreeTextFileIO<int>
или же сначала создать шаблон, наследующий от 2, а затем его инстанс, но это вопросы синтаксиса, а мне интересно, допустимо ли множественное ромбовидное наследование здесь, и насколько вообще допустима практика множественного наследования?
#377 #470412
>>470402
Ты про mmap/CreateFileMapping слышал? Нафига ты дублируешь работу ОС?
#379 #470419
>>470412
без библиотек, это учебное поделие
sage #380 #470425
>>470409

>в чем проблема методов работы с файлами в классе?


>хуевый дизайн, смешивание двух разных сущностей

#381 #470426
>>470098

>А также работа с сетью и хттп на достаточно высоком для байтоебского языка уровне


Я смотрю, неосилятор закукарекал. В чем конкретно неудобство send/recv/readv/writev?

>попробуй на курле это сделать


Что сделать? Я сейчас в таком прекрасном настроении, что готов макнуть тебя рожей в говно и хорошенько повозить.
Кстати, libcurl есть практически везде, а твой ебанутый libQtCore и libQtNetwork на сервер будет впердоливать только полный жуебок вроде тебя.
#382 #470428
>>470414
я так понял, что с помощью этого паттерна можно завести универсальное расширение свойств для многих различных классов, но я не понимаю как решить мою проблему в общем случае: пусть есть базовый шаблон(класс), от него наследуют другие шаблоны(классы), каждый расширяет функционал предка так, что попарно они не пересекаются, хочется свободно и гибко наследовать сразу от нескольких шаблонов (иметь любую комбинацию расширений функционала начального предка).
#383 #470433
>>470428
Ты описываешь Mixin, CRTP позволяет реализовать эту штуку, вот ссылка на хабропарашу:
http://habrahabr.ru/post/210894/
#384 #470436
>>470419
Это все равно верх тупизма, особенно если учесть, что ОС и так вызовет memory map, как только память процесса превысит лимит.
#385 #470437
>>470436
там ввод-вывод в файл в наглядном для человека виде
#386 #470440
>>470437
Тогда ты очень неправильно понимаешь ООП.
#387 #470443
Аноны, поясните чому d не взлетел?
Он же куда лучше крестов.
#388 #470450
>>470443
Очень долго взлетал и был неюзабелен, а сейчас уже не взлетит, потому что есть более вменяемые альтернативы в виде новых плюсов, го и раста.
#389 #470452
>>470450
Го не замена крестам, от синтаксиса раста можно вырвать глаза, а новые кресты такое же многословное уебанство.

Я бы писал на d, но сцуко не хватает гуя и идешки.
#390 #470455
А с этим что делать? => >>470325
#391 #470457
>>470452

>Го не замена крестам


Но он занимает нишу нативного языка со сборкой мусора. Плюс он уже очень популярен.

>от синтаксиса раста можно вырвать глаза


Зато там безопасность работы с памятью обеспечивается на уровне типов. Он занимает байтоебскую нишу.

>а новые кресты такое же многословное уебанство


Но они гораздо более юзабельные, чем предыдущие, и у них куча библиотек и тулзов.
В итоге для ди просто не остается места. Он бы выжил, если бы на нем был бы популярный проект, или его проталкивала жирная корпорация, но этого нет.
#392 #470458
>>470455
Выкинуть нахуй эту лабу и съебать из треда.
Например завести переменную prevNumber и делить на неё или делить на number - 1
#393 #470461
>>470458
Это не лаба, это я для себя делаю.
#394 #470465
>>470461
Тогда думать и самому решать подобные задачи, иначе даже говнокодера из тебя не получится.
#395 #470468
>>470465
Ну этим я себя в тупик и загоняю.
#396 #470502
>>470436

> Это все равно верх тупизма, особенно если учесть, что ОС и так вызовет memory map, как только память процесса превысит лимит.


Вопиющее незнание вопроса. Подкачка (про которую ты вспомнил), memory map и напердоленная вручную буферизация это обычно три совершенно разных скорости работы (а если кончается оперативная память, то это обычно либо ошибка в программе, либо в днк, либо высокопроизводительное приложение).
#397 #470513
>>469542
Может ты ошибся?
#398 #470537
>>470513
Не исключаю. Мне лень делать проект с библиотекой, если вход в библиотеку осуществляется нечасто, то разницы никакой точно нет. Если часто, надо делать замеры.
#399 #470544
>>470433
но тогда необходимо добавлять обертки подмешиваемых функций в базовый шаблон, а как сделать MixIn без изменения базового класса?
#400 #470547
>>470513
Если что, у меня здоро-о-о-овый бинарник, к которому статически линкуется mkl, cudart, какая-то параша для проверки персечений. А вот MPI линкуется динамически, и не тормозит, и линковать его статически почему-то не принято.
Так что я ставлю на то, что разницы особой нет. На шинде MPI не линкуется, бинарник не запускается, а его дёргает динамически шарп, но я перебдел, и вызовы в библиотеку ходят очень нечасто.

Про динамически залинковано я точно ошибся, там вообще весь пост несвязный, не знаю, почему я так написал.
#401 #470561
>>470544
Виртуальным наследованием. Но у тебя хуйня какая-то с архитектурой.
#402 #470571
>>470561
то есть это - нехорошая идея?

template <class T> class BinaryTree
{
//
}

template <class T> class BinaryTreeRB: public virtual BinaryTree<T>
{
//
}

template <class T> class BinaryTreeFileIO : public virtual BinaryTree<T>
{
//
}

class myTree:public BinaryTreeAVL<int>::BinaryTreeAVL, public BinaryTreeFileIO<int>::BinaryTreeFileIO{};
#403 #470583
>>470571

> то есть это - нехорошая идея?


А зачем эта говнина вообще? Расплескивать интерфейс по куче малафьи. У тебя он такой большой, или надо постоянно подменять классы?
KISS
#404 #470609
>>470583
интересно, ты сам сначала выучил язык или ооп?
#405 #470623
>>470571
Почитай про шаблон ВИЗИТОР. С ним еще алксандреску пердолился (в modern c++ disign) можешь скачать книгу и почитать.
#406 #470635
>>470571

>это - нехорошая идея?


Хорошая в скале, но для С++ - не очень.
Правильнее сделать интерфейс
template <class T> ITree { ... = 0; };

Его реализацию
template <class T> BinaryTree : public ITree<T> { ... override; };

А в реализацию уже добавлять IO параметром шаблона, классом или миксином.

Если миксином, то можно так:
интерфейс
template <class T> ITreeIO { ... };

И реализация с CRTP:
template <class T, template <class> Base>
TreeTextIO : public ITreeIO {
Base self() { return (Base) this; };
...
}

соответственно, получаем
class TreeWithTextIO : public BinaryTree<int>, public TreeTextIO<int, TreeWithTextIO> { ... }
#407 #470648
Посоны, в чем дело? Есть вектор указателей на объекты типа std::vector< obj@ > vec. Он хранится в объекте. В конcтрукторе объекта делается resize и потом вектор заполняется через такой цикл:

for ( auto obj : vec )
{
vec = new Obj();
}

После этого при обращении к объекту происходит сегафолт. Как выяснилось, объект не создается. В чем беда?
#408 #470649
И еще один вопрос на ту же тему. В объект-хранитель вектора нужно написать функцию, которая возвращает указатель на один из объектов. Можно ли это реализовать на умных указателях?
#409 #470653
>>470648
http://ideone.com/ee0OIN

Чуешь разницу?
#410 #470654
>>470649
Опять нихуя не понятно, чего ты хочешь?
#411 #470655
>>470653
Да, понял. Благодарю. Глупая ошибка.
То есть, auto не понимает, что в векторе хранятся указатели?
#412 #470657
>>470655
auto то понимает, просто здесь та же фишка то и при передаче в функции по ссылкам и по значениям.
#413 #470658
>>470654
Есть объект, в нем вектор указателей. Нужна функция, которая выберет из вектора указатель и вернет, чтобы другая функция с ее помощью сошла с ним работать.
#414 #470661
>>470609
Ты какой-то ебанутый. Язык — лишь способ записи идеи. Нельзя выучить отдельно идею и запись идеи. Ты в своей путяги философию прогуливал?
#415 #470662
>>470658
Можно возвращать shared_ptr, и хранить его в контейнерах. Нихуя не понимаю, в чём проблема.
#416 #470663
>>470658
http://en.cppreference.com/w/cpp/memory/shared_ptr
get - returns a pointer to the managed object
#417 #470666
>>470663
То есть, ты предлагаешь делать вектор shared_ptr и возвращать их?
#418 #470671
>>470666
Если не будет кольцевых зависимостей, то все будет прекрасно работать. Ты вообще читал мануал?
#419 #470676
>>470666
Можешь shared_ptr возвращать. Не понимаю твоей проблемы.
#420 #470695
>>470661
я даже не вошел в стадию прыщей.
#421 #470706
>>470676
Я уже разобрался.
Скажи, а насколько вообще стоит дрочить на умные указатели? В С++11-стайл они входят в обязательном порядке или сырой указатель в коде норм, если все удаляется как надо?
sage #422 #470708
Просто оставлю здесь: http://habrahabr.ru/post/256887/
#423 #470715
>>470706
Зависит от задачи и личных предпочтений.
#424 #470724
Насколько вообще оправдано множественное наследование? Является ли оно признаком плохой архитектуры?
#425 #470728
>>470724
Виртуальное наследование и динамические касты - почти всегда признак плохой архитектуры.
#426 #470729
>>470724
Это долгий холивар со здравыми аргументами с обоих сторон.
#427 #470732
>>470457

>В итоге для ди просто не остается места. Он бы выжил, если бы на нем был бы популярный проект, или его проталкивала жирная корпорация, но этого нет.



Facebook Александреску кудах ко-ко-ко
#428 #470735
>>470728
>>470729
Спасибо. Думаю что постараюсь обойтись без множественного наследования, благо только что придумал как это сделать красиво и понятно.
#429 #470743
>>470706
Мимо проходил, отвечу. Я предпочитаю вилкой вычищать маллок и фри, когда дело идёт о серьёзных вычислениях. Когда игрушки играю для красивого кода, умные указатели.
#430 #470852
Знатоки C++, что вы скажетре об этой статье? http://psi-logic.narod.ru/pro/diffs.htm
#431 #470857
>>470852
Прочитал только десятый пункт, не узнал для себя ничего нового.
#432 #470858
>>470852
Для 1990 года неплохо.
#433 #470867
Почему драйвера и ядра пишут на C, ведь C++ же более продвинутый и есть йоба-ооп?
#434 #470871
>>470867
традиция
#435 #470878
>>470871
НУ ТУПЫЕ да. Пердуляхи в своём мирке, не могут в новые идеи, вот и пердолятся как лохи.
#436 #470886
>>470867
Вот именно потому и не пишут, что >йоба-ооп .
Закон Мура не сумеет справиться с наплывом цпп-быдлокодеров в системное программирование.
#437 #470905
>>470708
true.
мы вон клепаем говнокод уже не первый год, однако это не мешает вполне успешно хуячить патенты на написанные говноништяки.
а код потом в продакшене поправят.
#438 #470926
Двачик. Как лучше поступить в таком случае: у нас есть пул потоков в обертках и главный. В главный постоянно поступают цифры. Надо раздавать цифры потокам, чтобы они хуярили их.

Самый логичный вариант -- notify_one при поступлении числа и глобальная переменная, в которой он хранится, пока его не возьмут на обработку. Но это как-то ебет инкапсуляцию во все дыры. Как это сделать грамотно?
#439 #470931
>>470926
producer – consumer
#440 #470938
>>470931
Я не смог найти его реализацию под С++11. Можешь на пальцах хотя бы, как это через condition_variable сделать?
#441 #470942
>>470938
Скачай cpp concurrency in action, там должно быть
#442 #470975
>>470867

>Почему драйвера и ядра пишут на C


Потому что ООП для системного программирования абсолютно ненужно, а в С++ варианте - откровенно вредно.
#443 #471007
>>470926
Что за обертки у потоков? Если самописные просто добавь ему метод "обработать число" - поток получает число как аргумент, обрабатывает и засыпает. А основной поток постоянно просматривает дочерние потоки, находит спящие и дергает их за метод с следующим числом на обработку. Если обработка очень долгая можно добавить нотификации от дочерних потоков что они свободны и готовы получать новое число (чтобы главный не тормошил постоянно их, а ждал пока освободятся) - но это уже ебля, так как нотификации будут рассылатся из разных потоков ну и пиздец.
#444 #471031
>>471007
Обертки — объекты, в которых хранится поток, его флаги и функции для работы с ним. В принципе, оно и так нормально работает, но думал сделать на CV, чтобы все в конторе, куда делаю тестовое, охуели, как я могу.

В итоге решил забить, потому что мороки много, а программу это лучше не делает — наоборот, вместо lock-free механизма, который выглядит легко и работает быстро, получается мутотня с мьютексами и страшный код.

Послал в полночь, завтра узнаю, насколько я крутой падаван многопоточного программирования.
61 Кб, 595x842
#445 #471036
посоны, вопрос по архитектуре, как лучше имплементировать

[code]
struct GUIStorageObject
{
virtual ~GUIStorageObject() = default;
};

template<class T>
struct GUIStorage : GUIStorageObject
{
void setValue(T value) {m_value = value;}
T value() const {return m_value;}

private:
T m_value;
};

struct GUIElementObject
{
void AddLogic(GUIElementLogic logic);

template<class T>
void AddStorage() {m_storage.emplace_back(new GUIStorage<T>);}
template<class T>
GUIStorage<T>& Storage()
{
auto ptr = dynamic_cast<GUIStorage<T>
>(m_storage.back().get());
CASSERT(ptr, "Wrong type for requested storage");
return *ptr;
}

private:
vector<unique_ptr<GUIStorageObject>> m_storage;
unique_ptr<GUIElementLogic> m_logic;
}
[/code]

потом я, вооружившись поинтером на GUIElementObject и номером стоража, внутри GUIElementLogic делаю вычисления(например привожу позицию слайдера к виду [0. .. 1.]) и далее могу получить результат из манагера GUIElementObject где угодно.

можно ли сделать это лучше?
61 Кб, 595x842
#445 #471036
посоны, вопрос по архитектуре, как лучше имплементировать

[code]
struct GUIStorageObject
{
virtual ~GUIStorageObject() = default;
};

template<class T>
struct GUIStorage : GUIStorageObject
{
void setValue(T value) {m_value = value;}
T value() const {return m_value;}

private:
T m_value;
};

struct GUIElementObject
{
void AddLogic(GUIElementLogic logic);

template<class T>
void AddStorage() {m_storage.emplace_back(new GUIStorage<T>);}
template<class T>
GUIStorage<T>& Storage()
{
auto ptr = dynamic_cast<GUIStorage<T>
>(m_storage.back().get());
CASSERT(ptr, "Wrong type for requested storage");
return *ptr;
}

private:
vector<unique_ptr<GUIStorageObject>> m_storage;
unique_ptr<GUIElementLogic> m_logic;
}
[/code]

потом я, вооружившись поинтером на GUIElementObject и номером стоража, внутри GUIElementLogic делаю вычисления(например привожу позицию слайдера к виду [0. .. 1.]) и далее могу получить результат из манагера GUIElementObject где угодно.

можно ли сделать это лучше?
#446 #471057
>>471036

>virtual ~GUIStorageObject() = default;


Что значит = default? Это какая-то хуйня из С++11/14?
#447 #471060
Анон, как думаешь: стоит ли мне лезть в С++, если я только ебучий паскаль и знаю?
sage #448 #471067
>>471057
g: c++ default
>>471060
Не стоит. Тут и без тебя полный тред даунов.
#449 #471068
>>471060
Если единственное что тебя останавливает это ебучий паскаль то можно.
#450 #471092
#451 #471110
>>471036
Лучше имплементировать через MVC/MVVM.
#452 #471318
Есть две функции.
[code lang="cpp"]
template< typename EventType, typename ... Args >
std::shared_ptr< EventType > make_event_0 (Args &&... args)
{
\tauto result = std::make_shared< EventType > (std::forward< Args > (args)...);
\treturn result;
}

template< typename EventType, typename ... Args >
std::shared_ptr< EventType > make_event_1 (Args &&... args)
{
\treturn std::make_shared< EventType > (std::forward< Args > (args)...);
}
[/code]
На всяких stackoverflow и маерсах написано, что нужно юзать 1-й вариант, мол во 2-м шаред сразу разрушается. Только что проверил - оба возвращенные значения имеют по 1 strong ref
Это маерсы со стеком пиздят, или это спермотанцы в компиляторе?
#453 #471333
>>471318
Алсо, про rvo знаю, но маерс вроде бы хуйни не скажет. Компилятор, как видно из поста, msvc
#454 #471362
>>471318
Вообще, по логике вещей, эти штуки должны компилироваться в один и тот же код. Поэтому если не собираешься в кроссплатформенность, то не парься на этот счет вообще.

Но вообще сейчас проверю на gcc.
#455 #471370
>>471318
Проверил, ровно так же по одному рефу. У меня gcc 4.7.3.
Короче, хуйню в интернетах пишут.
sage #456 #471385
>>471318
В обоих случаях внутри функции происходит создание экземпляра shared_ptr, после чего при выходе из функции создается еще один экземпляр (который и является возвращаемым значением), а экземпляр внутри функции удаляется. Никакой разницы с точки зрения последовательности событий нет.
#457 #471484
Насколько объявление класса friend'ом другого является нормальной практикой?
Иногда это можно поправить наследованием, но когда классы друг с другом вообще плохо связаны, но один должен в некоторой ситуации покрутить в другом?
Например, enable_shared_from_this хранит weak_ptr, который при захвате объекта должен быть инициализирован в конструкторе shared_ptr. Я не понимаю, как тут избавиться от друзей, и не знаю, нормально это или нет.
#458 #471493
>>471484
Не вдаваясь в подробности, в моем случае все тоже можно решить наследованием, однако хотелось бы все же услышать авторитетное мнение про общий случай.
#459 #471500
>>471484
Абсолютно нормально. В С++ кривой механизм инкапсуляции, и friend используется как костыль для замены нормальной модульности.
#460 #471530
>>471500
Поясни за это подробнее. Чем кривой, как не криво?
#461 #471537
>>471484
От друзей избавляются делая публичный интерфейс таким чтобы обьявлять друга не надо было.
#462 #471540
>>471530

>Чем кривой, как не криво?


Тем что инкапсуляция ограничена классом, а не модулем. С модулями можно было бы указать, что вот эти классы в одном модуле, и имеют доступ к приватным полям друг друга.
#463 #471563
>>471540
Кстати, для визуализации данные есть d3.js, может ему все-таки в анализ данных податься, если бэкграунд такой хорош, как он описывает.
548 Кб, 2048x1365
#464 #471711
Сап, программач. Как мне вызвать виртуальную функцию из класса, где она объявлена? Например, у меня есть класс Base. В нём есть virtual void init() = 0. В конструкторе этого класса я хочу написать что-то вроде
this->init();
this->onCreate();
То есть, я хочу вызвать метод onCreate после инициализации класса, которая обязательно будет в функции init. Компилятор ругается на unresolved reference. По 1 на каждый подкласс. Если я определяю init как virtual void init(){}, то всё компилируется, но функции в подклассах не вызываются.
Пикрандом.
sage #465 #471718
>>471711
Никак. Сначала вызывается конструктор базового класса, а только потом - наследника. В базовом классе у тебя метод чисто виртуальный, поэтому и обратиться не к чему.
#466 #471722
>>471718
Может есть какие паттерны? Я просто хочу вызывать метод onCreate после того, как инициализирую класс-наследник.
sage #467 #471723
На вот, почитай, там лучше объясняют, чем я: http://stackoverflow.com/questions/962132/calling-virtual-functions-inside-constructors
sage #468 #471724
>>471722
Дружественная фабричная функция, создающая объект, вызывающая onCreate и затем возвращающая объект, не?
[code lang="c++"]
Base create(Type t)
{
Base
o = 0;
switch (t) {
case Derived1Type:
o = new Derived1;
break;
//...
default:
break;
}
if (o)
o->onCreate();
return o;
}
[/code]
#469 #471725
>>471711
А можешь объяснить, зачем оно тебе вообще надо? Я с ходу не могу вообще представить ситуацию, где конструктор Derived должен работать не по принципу "конструктор Base + еще что-то", более того, это противоречит абстракции.
#470 #471736
>>471725
Всё вам объяснять, блядь. Я же написал. Хочу вызывать метод onCreate после инициализации класса. Инициализация у каждого класса своя, а onCreate - общий метод.
#471 #471739
>>471724
И так для каждого Derived-класса? Может есть что-то более компактное?
#472 #471740
>>471736
Но ведь это не ответ на вопрос. Зачем тебе надо вызывать какой-то метод после создания каждого объекта такого класса?

И зачем, к слову, его делать методом класса, а не просто void onCreate( Base @base )?
#473 #471742
>>471740
Конструктор Base-класса должен делать немного своих дел, потом вызывать инициализатор Derived-класса, а потом вызывать свой метод onCreate.
#474 #471744
>>471740
NioController(T object, std::string fileName) {
this->mObject = object;
this->initLua(fileName);
this->init(); // вот эта функция и есть виртуальная
this->onCreate();
};

В init делаются все нужные биндинги для lua, которые нужны определённому Derived-классу. Для каждого биндинги свои. Метод onCreate вызывает lua-функцию onCreate. Вызов этой функции для каждого Derived-класса одинаковый.
#475 #471745
>>471744
Костыльно-ориентированное программирование же. Логичнее сделать фабрику.
sage #476 #471748
Пиздец ты тупой. Тебе русским по белому сказали, что у тебя хуевая архитектура и что так, как ты хочешь, сделать нельзя, и даже пример привели. Хули тебе еще надо? Какая архитектура, такой и костыль (корявый, если ты не понял).
#477 #471749
>>471745
Тогда придётся добавлять в неё все новые Derived-классы. А я хочу, чтобы такого не было.
#478 #471750
>>471748
Пошёл-ка ты нахуй. Я спросил, как можно реализовать костыль для моей архитектуры. Объяснять мне, какой я мудак и как неправильно делаю я не просил.
#479 #471752
>>471749
Реализуй так, чтобы не понадобилось.

Вообще, приведи, наконец, конкретный пример, чего тебе хочется реализовать. Расскажем тебе, как это сделать не через жопу.
sage #480 #471762
>>471750
Кокой агрессивный петушок. Хуй тебе помогут, чепушило.
#481 #471764
Ебашь фабрику или фабричный метод. По другому нельзя. Можешь добавить метод типа finishInit() и обязать ползователей своего класса вызывать его в конце конструкторов наследуюмых.
#482 #471836
>>471752
Я же уже приводил. Вот в этом посте >>471744
#483 #471869
простой вопрос:
возможно ли в конструкторе по условию отказаться от создания экземпляра и выплюнуть NULL или всегда нужна обертка?
#484 #471876
>>471869
NULL выплюнуть не получится.
#485 #471890
>>471869
Исключения Маня, слышал о них?
#486 #471891
>>471876
я понял про NULL_OBJECT, но если очень хочется, чтобы к памяти не было запросов
#487 #471898
>>471890
Скорее всего, вопрошающий дрочит на скорость и исключениями пользоваться не хочет.

>>471891
Ну хуй знает даже.
На всякий случай:
http://www.parashift.com/c++-faq-lite/ctors-can-throw.html
#488 #471905
>>471898
если что, мой текущий рекорд - 1,5 эякуляции за время компиляции
#489 #471906
>>471898

> Скорее всего, вопрошающий дрочит на скорость и исключениями пользоваться не хочет.


А тип вылет к хуям от нуллпоинтера это норм? Охуеть вообще
#490 #471909
>>471869
ПРО СИ++, ЦИТИРУЮ СЕБЯ ПО ПАМЯТИ:

про С++ (цитирую себя по памяти)

Деструкторы не использовать

Виртуальные методы только как реализвции интерфейсов

Вместо не виртуальных методов - статические методы

Вместо конструкторов - статические методы

каталог-кун
#491 #471912
>>471909

> статические методы


тоже предпочитаю так делать

> Вместо не виртуальных методов - статические методы


Это что ещё за хуита такая?
#492 #471915
>>471909
я вижу в твоих словах много рекурсии, но мало здравого смысла.
#493 #471922
>>471909
оно джавапредатель, пари держу
117 Кб, 622x729
#494 #471924
>>471909
ИЛЛЮСТАЦИЮ ЗАБЫЛ
#495 #471936
>>468625
ПРОБЛЕМА С++ В ТОМ ЧТО ТУПОЙ ПРЕПОД СТРАУСТРУП В СВОИХ КНИЖКАХ НАСАЖДАЕТ В ГОЛОВЫ НЕПОТНЫХ ЛОХОВ ИДЕАЛЫ ООП КОТОРЫМ ПРЕДСТОИТ БЫСТРО РАЗБИТСЯ О СПЛОШ КОМПРОМИСНУЮ РЕАЛИЗАЦИЮ
У ДЖАВАМАКАК ИДЕАЛЫ ООП РАЗРУШАЮТСЯ НАМНОГО ПОЗНЕЕ КОГДА СБОРЩИК МУСОРА НАЧНЕТ ВЕШАТЬ СИСТЕМУ НА НЕСКОЛЬКО МИНУТ
sage #496 #471947
>>471936

> СБОРЩИК МУСОРА НАЧНЕТ ВЕШАТЬ СИСТЕМУ НА НЕСКОЛЬКО МИНУТ


как там в 2220?
#497 #471974
почему

QString qstr;
bool *ok;
int res=qstr.toInt(ok);//ошибка
//

bool ok;
int res=qstr.toInt(&ok);//все нормалек
#498 #471983
//и вдогонку
class A
{
//
A GetShit();
};

class B: public virtualB
{
//
}

int main
{
B
ptrB=new B;
B C;
C=B->GetShit();//здесь возвращается дерьмо типа базового класса
//а мне нужно дерьмо производного
//как изменить метод, чтобы его не требовалось переопределять в любом производном классе?
//в голову приходит только void
GetShit();
#499 #471986
Программачик, такой вопрос. Хочется сделать некий класс модуля, состоящий из модели, связанного с ней меню (виджета) и указателя на представление. Суть состоит в том, что в программе используется одно представление (основное окно программы, по сути), но к нему в разные моменты времени привязаны разные модели, каждой из которых соответствует свое основное меню. Собственно, как бы вы предложили это реализовать?

Модель всегда наследник одного и того же класса, представление -- тоже.
#500 #471987
>>471983
Никак. Просто изменяй его в любом производном. Может быть, можно просто написать = delete в 11-х Сях, не знаю.
sage #501 #471990
>>471974
Память кто выделять будет?
>>471986
Было уже. Иди на хуй.
#502 #472016
>>471986
А в чем проблема? Обычное же MVC - у вью метод который принимает модель и изменяет вью соответсвенно модели, контролер в нужные моменты скармливает вью нужные модели, вью изменяется.
#503 #472040
>>471990
ебать, ну я и мудак
35 Кб, 400x300
#504 #472123
>>471983
class MyShit: public B<int>
{
};
int main()
{
MyShit test();
}

template <class T> A<T>
{private:
T Value;
protected:
T GetValue(){return this->Value;}
public:
A(T value){this->Value=value;}
};

template <class T> B<T>:public virtual A<T>
{ private:
struct C
{
QString key;
//other shit
};
C TransmuteThisIntoC();
public:
A<C>* SomeShit()
{
return new A<C>(TransmuteThisIntoC());
}//здесь первый наебок
//in instantiation of class A<B<int>::C>
//required from class B<int>
//required from class MyShit
//A<T> has incomplete type
};
//второй наебок с любым вызовом GetValue<C>()
//member function T GetValue() is declared as protected
//то есть экземпляр класса A<C> не видит свой собственный метод
throw PR_SOLVES_MY_PROBLEM();
35 Кб, 400x300
#504 #472123
>>471983
class MyShit: public B<int>
{
};
int main()
{
MyShit test();
}

template <class T> A<T>
{private:
T Value;
protected:
T GetValue(){return this->Value;}
public:
A(T value){this->Value=value;}
};

template <class T> B<T>:public virtual A<T>
{ private:
struct C
{
QString key;
//other shit
};
C TransmuteThisIntoC();
public:
A<C>* SomeShit()
{
return new A<C>(TransmuteThisIntoC());
}//здесь первый наебок
//in instantiation of class A<B<int>::C>
//required from class B<int>
//required from class MyShit
//A<T> has incomplete type
};
//второй наебок с любым вызовом GetValue<C>()
//member function T GetValue() is declared as protected
//то есть экземпляр класса A<C> не видит свой собственный метод
throw PR_SOLVES_MY_PROBLEM();
#505 #472145
>>472123
коротко: как внутри шаблона-потомка инстанцировать шаблон-предок структурой, декларированной приватной в шаблоне-потомке?
#506 #472147
Йобушки, пилите перекат.
#507 #472148
>>472145
Использовать protected.
#508 #472149
>>472147
Сам запили.
#509 #472174
>>472149
Вас, блджад, дождёшься.
Давайте сюда:
>>472173
>>472173
>>472173
>>472173
>>472173
>>472173
>>472173
>>472173
Тред утонул или удален.
Это копия, сохраненная 1 июня 2015 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски