Этого треда уже нет.
Это копия, сохраненная 4 октября 2019 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
image.png9 Кб, 377x134
2 1456373
>>56115 (OP)
может кто-нибудь устанавливал на линукс gRPC и protobuf? Я не могу разобраться с установкой. Вот так я устанавливаю gRPC https://pastebin.com/GmhTNf7M
потом я устанавливаю protobuf тоже по инструкции.
Но когда я пытаюсь скомпилировать пример из gRPC из examples, мне выдает ошибку будто у меня нет grpc_cpp_plugin. Я гуглил эту ошибку, и оказалось, что этот плагин должен лежать в папке usr/local/bin. Но там его не оказалось, а этот файл лежал в grpc/bins/opt вместе с плагинами для других языков. Но разве после sudo make install этот файл не должен был переместиться в usr/local/bin? Если я вручную копирую grpc_cpp_plugin в usr/local/bin, то эта ошибка больше не выскакивает, и теперь make не может найти ещё какой-то gRPC файл. Ещё я нашел что проблемы могут быть из-за разных версий protoc. Подскажите, как узнать, сколько у меня версий protoc? И мне кажется, наверное после сборки все файлы плагинов должны были сами переместиться в правильную папку? Я не знаю толком cmake, посмотрите пожалуйста мои команды установки. Может там ещё что-то нужно было сделать. чтобы все файлы установились в правильные папки?
image.png3 Кб, 265x211
3 1456538
1. Почему std::hypot(arr.x,arr.y,arr.z) выполняется почти в два раза дольше (как для float, так и для double), чем sqrt(arr.xarr.x+arr.yarr.y+arr.z*arr.z)?

2. Если я группирую элементы по 16 байт и считаю расстояния через sse, получается где-то в 2.5 раза быстрее. И если группирую по 32 байта и считаю черезе avx, то получается такая же разница в 2.5 раза.
Это нормально? Просто в процессоре заглушуку поставили, которая два раза по очереди использует sse-функцию?

Любопытно, что _mm_sqrt_pd более чем в два раза опережает sqrt обычный.
То есть я создаю фиктивный __m128d, куда записываю один double через _mm_set1_pd, считаю корень через sse инструкцию и получается немного быстрее чем стандартный sqrt, при том что я полностью игнорирую второе число.
image.png7 Кб, 687x295
4 1456561
>>56538

>1


Ох, я открыл cmath, и там внутри вот это. Зачем это всё? Там же только дополнительные вычислительные ошибки накопятся, разве нет? Это же не целые числа, чтобы с переполнением бороться.
5 1456582
>>56538
Оптимизации включил?
6 1456610
>>56561

>Зачем это всё?


В требования к hypot посмотри.
7 1456656
Как сделать настройки интерфейса по умолчанию в visual studio?
8 1456676
>>56656
Бампану, а то студия заебала сбрасывать настройки после очередного вылета
9 1456708
>>56538
С --ffast-math (или что там в MSVC) компилировал?
chipworks116602.jpg59 Кб, 660x495
10 1456712
Привет знатоки. Мне надо зделоть массив констант, а-ля коэффициент синуса в 16битах бля ШИМ модуляции, на этапе компиляции.
Знаю что ннадо использовать constexpr, но туплю немношк.
Массив у меня будет чалиться во флеш памяти, потому он должон быть static const, к тому же он обязан быть глобальным ради прерываний. Вобщем нихуя не компилится у меня. Чо делоть то?

constexpr ststic const uint16_t sin_array[SIN_ARRAY_MAX] ={0};
constexpr void fill_sin_array (void) {
for (int i =0; i==SIN_ARRAY_MAX; ++i) sin_array = 0xffff std::sin(180 / M_PI i);
}
void manya () { consexpr fill_sin_array ();
12 1456717
>>56582
Конечно. Без них там разница раз в шесть получается. O3/O2 одинаково работают. При O3 там по умолчанию ещё какая-то автовекторизация есть которую неплохо бы отключить для частоты эксперимента, "-ftree-vectorize", но я не знаю как её отключать, если я её не указывал и она сама.

>>56708
У меня не msvc.

>>56712
Можешь попробовать так: https://ideone.com/XzSyzP
Но sin - не constexpr, придётся искать кастомную реализацию sin, лол.
13 1456736
>>56716 я так не могу, у меня лапки микруха. Крайне нежелательно использовать стандартную либу. На крестах только потому что можно регистровые кишки удобно запихнуть в класс и не видеть этого пиздеца как можно дольше. Да и начинал учить ЯП с крестов а не с си.
>>56717

>Но sin - не constexpr


Да ёб страуструпа мать. Идея как обычно хорошая, а реализация через хуй. Похуй, ебану прощще таблицу в файл.
14 1456754
Продублирую вопрос из 91
Наверно ньюфаги всех тут уже заебали, но всё же спрошу.
А если есть знания матана (по крайней мере понимаю о чём речь идёт), из-за специализации в вузике, но на плюсы в моей 600к деревне ищит только одна контора, то как качать скилл?

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

Есть идея влится в какой нибудь опен соурс, но вот не знаю какой.
15 1456781
Анон, как настроить в VS вывод ошибок сети (буста) типа ec.mesaage() или e.what() на английский язык в русской шинде? В начале программы стоит setlocale(LC_ALL, "en_US.UTF-8")
16 1456782
>>56754
В машоб, очевидно же. Во все эти opencv, там матан будет.
17 1456783
>>56712
Стало интересно, нагуглил это
https://rextester.com/CRR35028
Там какразтыке "кастомный синус" (я помню, что это была лаба в вузике). Выглядит годно, мне понравилось.
18 1456790
>>56783
Через ряд отвратительная точность будет, синус даже не непрерывный получается, если его нужно для каких-то производных или ещё чего использовать, если что. И суммировать нужно начиная с высших степеней, хотя бы уж, что впрочем тоже не помогает.

https://github.com/gcc-mirror/gcc/blob/master/libquadmath/math/sinq.c
https://github.com/gcc-mirror/gcc/blob/master/libquadmath/math/sinq_kernel.c
Вот этот синус непрерывный. Не знаю что там с точностью, но он по крайне мере гладкий и непрерывный с кучей своих производных. Не вникал в алгоритм, но вроде бы там таблица+ряд.
Ну для 16-битных уж точно проще использовать таблицу, чем констъэксприть такое чудовище.
19 1456829
Посоветуйте учебник похожий на книгу кернигана и ритчи, очень нравятся в ней задачи, буквально с первых страниц дают очень сложные упражнения.
gcc vs g++.PNG10 Кб, 668x331
20 1456881
Из js-треда гонять начали, поэтому сюда вкачусь со своим вопросом. Вопрос по поводу совместимости C и C++.
Есть, короч, кусок Си-шного кода. Могу ли я его скомпилировать C++ -компилятором?
21 1456883
>>56881
Файл гцц назови, вроде он расширение подглядывает при компиле.
22 1456887
>>56883
Там вот эти циферки 16 и 1 - время выполнения некой функции test(); Как так получается, что скомпилированное с помощью gcc в 16 раз медленнее скомпилированного с помощью g++?

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


Вроде не должен.
23 1456891
>>56887
Про время хз, а про расширение что-то было, но возможно еще на 4й версии, вроде ошибок насыпало, если расширение и майн его не устраивали.
24 1456893
>>56887

>скомпилированное с помощью gcc в 16 раз медленнее скомпилированного с помощью g++


М.б. г++ с О2 посчитал сам и выпилил всё, кроме вывода ответа. Проверь без О2.
25 1456894
>>56881
Практически всегда - да, но есть исключения
26 1456919
>>56893
Я понял. Функция test(); ничего не выводит и не возвращает и g++ ее за ненадобностью не компилирует.
27 1456921
Как же трудно понять потоки, в сишке такого не было
28 1456922
>>56921
std::thread
29 1456923
>>56881

>Могу ли я его скомпилировать C++ -компилятором?


Я тебе разрешаю, компиль.
30 1456940
>>56829
Бамп. Где брать задачки? У липпмана в книге нихуя нет
31 1457060
Как работать с bluetooth?
32 1457075
Аноны, посоветуйте литературы об асинхронности и многопоточности. Использую буст::асио, да что-то здорово насосал, когда io_context запихнул в нехитрый тредпул из вектора.
33 1457133
Работая с памятью другого процесса я должен париться о страницах или я полностью работаю в виртуальном пространстве процесса и могу обращаться к любым его адресам виртуальной памяти (4 гб для 32 разрядных вроде и дохуя для 64 разрядных процессов). Почему некоторые исходники, которые я смотрел, чтобы найти значение в памяти получают информацию о страницах?
34 1457184
>>57075
для asio надо курить бустовую документацию, там все сложно. Для обычной многопоточки - книга товарища Вильямса
35 1457185
>>57060
читать документацию на MSDN или для красноглазой параши
36 1457188
>>57185

> красноглазой параши


Что?
37 1457191
>>57185
Я читал msdn, выделил по моему мнению нужные функции, но в разных примерах пишут по разному. Где то используют регионы, а где то нет. Поэтому и спрашиваю
38 1457229
>>56881
Ты проверял, меняется что-то для g++, если сделать .cpp расширение?

А ты в объектный код смотрел, там в самом деле нет функции test() или предположил? Мне действительно интересно, настолько ли умный компилятор.

шо ж ты за извращенец, GCC на винде?
39 1457243
>>57229

>меняется что-то для g++, если сделать .cpp расширение


Не думаю.

>А ты в объектный код смотрел, там в самом деле нет функции test() или предположил? Мне действительно интересно, настолько ли умный компилятор.


g++
Там в тесте rand вызывается. Так что test() таки существует и все rand() честно вызывает.
Если поставить заглушку вместо rand, то
test оптимизируется до ret и не вызывается.

gcc, однако, гораздо менее агрессивен.
От test мало того, что что-то остаётся, так ещё и в main инлайнится. Не ожидал
чекал тутъ https://godbolt.org/

мимо в кресты и асм не умею, не бейте
40 1457309
>>57133
Если через ReadProcessMemory - вроде похуй, он сделает все проверки за тебя и просто пошлет тебя, если полезешь в пустоту.
41 1457349
>>57309
А зачем некоторые обращаются по регионам?
42 1457354
>>57349
Ну.. хуй знает? Я не встречал например. Мож им удобней так, чтоб лишнее не сношать и не терять время. Или начитались того, где сказано так делать.
43 1457355
>>57354
Спасибо
44 1457485
[code]
test;
cout << "Bydlo";
[/code]
45 1457490
Почему не работает?

VirtualAlloc((LPVOID)1000, 5000, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READ);
int a = (int)1500;
cout << *a;
46 1457493
>>57490
Совсем ультрадебил?
Аллок только пытается выделить память где указано, но если это указывает дебил - то может и в другом месте, он тебе возвращает адрес где выделил.
47 1457529
>>57493
Спасибо.
48 1457530
>>57485
Че за хуйня. В браузере не работает, а с dashchan'а все ок
49 1457534
>>57529
Кстати докинь WRITE в права, точно не уверен что надо, но тыж пишешь туда.
50 1457545
Не запускаются программы собранные в clion, пишет нет какой stdlibc++, та же программа собранная в codeblocks работает. В чем дело?
51 1457615
>>57534
[code]
LPVOID M = VirtualAlloc((LPVOID)1000, 4096, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
[/code]
M ссылается на ноль
52 1457616
>>57615
Хотя в дебаггере функция что то возвращает
53 1457617
>>57615
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
54 1457618
>>57617
Там хуйня какаято. Выдает просто огромнейшее шестнадцатиричное число. Такого кода тупо нет
55 1457620
>>57618
Мож покажешь?
56 1457622
>>57618
Да и сделай ты уже первый параметр нуллем и не выпендривайся.
57 1457623
>>57622
Делал. Ща покажу. извиняюсь за то, что я туплю. Я сегодня вообще думал мозгами отдохнуть и поэтому не напрягаясь пишу и читаю
58 1457625
>>57623
СУКА. Я не то выводил. Походу надо заканчивать на сегодня. А то толку нет
59 1457629
>>57545
Бамп же.
60 1457632
>>57545
Поставь IDE вместо параши
61 1457636
>>57632
Но мне очень нравится clion
62 1457638
>>57636
как тебе что-то может нравится, если ты даже скомпилировать хелло ворлд не можешь?
63 1457639
>>57638
Всё могу, в clion встроена консолька, а когда понадобилось запустить программу отдельно я соснул
64 1457641
>>57639
Или компиль с -static-libstdc++ или кинь либы в path.
65 1457643
>>57354
Я думаю я понял. Так мы сразу проверяем регион на доступность и если он недоступен, значит программа его не использует и мы можем пропустить его.
66 1457645
>>57643
Зависит от задачи же, если тебе просто почитать по известным адресам - ReadProcessMemory, если делаешь велосипед с поиском значений в памяти - то да, лучше проверить куда лезешь, чтоб быстрее было.
67 1457646
>>57645

> Если делаешь велосипед


This. Я не могу сообразить как карасик в данном случае может быть быстрее тупо сканирования по байтам. Мне же сначала нужно построить бор, сканируя память, а потом искать. Если бы мне нужно было один раз построить и потом искать то согласен, быстрее. Но мне кажется будет лучше сразу сканировать в поиске нужного значения
68 1457647
>>57646
Берешь регионы которые используются, читаешь в буфер, ищешь, повторить.
69 1457679
Сап, крестоносцы. Поделитесь вопросами/задачками по плюсам, которые вам приходилось решать на собеседованиях. В основном интересуют вопросы по тонкостям языка
70 1457684
>>57618
Надо с него достать ошибку.
Я не помню точно код, но на стэковерфлроу был вопрос с хорошей самописной функцией для расшифровки.
71 1457692
>>57641
А можно как то в cmake прописать параметры, чтобы было все норм?
72 1457695
>>57692
set_target_properties(prjname PROPERTIES LINK_FLAGS "-pthread -static-libgcc -static-libstdc++")
73 1457700
>>57695
Ругается на pthread, без него компилится, ошибок не выдает при запуске, но сразу закрывается, как при открытии из проводника так и из консоли.
74 1457702
>>57700
Ну это для пингвина/мингв либа.
Ну закрывается - тут уж код смотри, скорей всего.
75 1457716
>>57702

> Ну это для пингвина/мингв либа.


У меня мингв и стоит
И как я уже говорил, в code::blocks этот же код нормально компилиится а программа запускается и работает.
Еще попробовал скомпилить через консоль, но винда пишет что g++ нет, хотя MinGW лежит в корневом разделе диска
76 1457720
>>57716
Наркоман чтоль? Либо запусти батник у мингв, либо сам в PATH окружения пропиши его папку, как сделано в батнике.
77 1457755
>>57720
Запустил, один хуй все сразу закрывается, пиздец какой то. Неужели придется на code blocks сидеть или студию ставить
78 1457837
Короче помогло прописывание в cmake
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libstdc++ -static-libgcc")

Как вообще разобраться в работе компиляции и всего этого? Учебник не затрагивает эту тему
79 1457919
В каких случаях память имеет атрибут writeonly? Я догадываюсь что это для всяких системных данных.
80 1457930
Есть ли способ обрезать переменную до первого значащего бита или мне нужно самому велосипеды писать?
81 1457945
>>57919
В тех когда память защищена ос или еще чем чтобы всякие кулхацкеры не лазили.
82 1457957
>>57930
Все. Разобрался почти. Не надо отвечать
83 1457964
>>57755
Подключись дебагерром
84 1457979
>>57755

>один хуй все сразу закрывается, пиздец какой то


Может быть там просто программы выполняется полностью и закрывается и нужно что-то вроде system("pause") прописать?
Запусти cmd, и внутри cmd пропиши путь к твоей программе. Тогда в консолке останется вывод твоей программы. В программе выводи числа, printf("1\n") - printf("16\n"), таким образом определишь в какой момент падает программа, лол.
85 1458018
>>57930
Hackers delight уже советовали?
86 1458029
>>57979
Можно просто писать логфайл
87 1458053
Почему так происходит?
[code]
for (int i = 7; i >= 0; i = i - 1) {
bool p = (value & (1 << i));
cout << p;
}
[/code]
Если я в программе напишу value = 110, то все правильно. Выводится 01101110, но если ввести это значение с клавиатуры, то выведется 00110001. Может это связано с тем, что visual studio тип int8 определяет как char?
15470769162010.gif113 Кб, 550x400
88 1458059
>>58053
А какого типа твой value? Для дрочки битов всегда используй unsigned типы.
89 1458060
>>58053
Забыл сказать, что у value тип INT8
91 1458065
>>58061
Но, это не только вижак так делает.
https://ideone.com/iydyXa
92 1458067
>>58059
Прочитал, что происходит при знаковом типе. Слева записывается бит знака. Но меня удивило почему это работает для значения, заданного в коде.
93 1458070
>>58061
>>58065
Это как-то фиксится?
94 1458072
Причем для int все работает в обоих случаях
95 1458074
>>58070
Читай int кастуй к uint8_t.
15483649987631.gif75 Кб, 379x365
96 1458078
>>58070
Что фиксится, норкоман? В твоём коде из >>58061 ты выводишь в двоичной записи числа 110 и 49.
97 1458079
>>58078
49 не нужно было выводить. Короче я понял. Int8 для компилятора тоже самое, что и char, поэтому ведет себя странно
15324307240780.jpg56 Кб, 604x409
98 1458098
>>58079

> ведет себя странно


Почитай про дополнительный код что ли.
99 1458103
>>58098
Да причём тут это? Анон char вместо int считывает. Вот и вся проблема.
100 1458112
>>57679

>В основном интересуют вопросы по тонкостям языка


Если тут все прорешаешь, то вопросы по тонкостям будут не страшны: http://cppquiz.org
101 1458363
>>58112
Годно. Как раз то что искал, благодарю
1566475785154.jpeg174 Кб, 1367x457
102 1458490
Это правда?
103 1458509
>>58490
Нет, не правда. Там неплохие контейнеры, но нет никакой проблемы написать контейнер, которые в определённой задаче будут работать чуточку быстрее и тратить меньше памяти. То есть, там много настроек которыми можно попробовать это исправить, но использовать их сложнее, чем написать свой контейнер, на мой взгляд.
104 1458591
>>58490
Правда. В стандартной библиотеке все самое шустрое. Если уж не в ней, то в бусте точно. Манек, которые пишу не кроссплатформенные решения на коленке зато на 5% быстрее даже не слушай.
105 1458642
>>58363
Ссылка в шапке есть, хоть и в самом низу. Никто не читает шапку.
106 1458724
>>58490
Хеш таблица (std::unordered_map) там не очень. Хотя если тебе хранить меньше десятков/сотен тысяч элементов, то разницы нет.
107 1458737
>>58490
для 99.9% задач - да.
108 1458772
>>58724

>Хеш таблица (std::unordered_map) там не очень


Теоретически, ты свой аллокатор можешь написать, чтобы память под каждый элемент не выделялась.
109 1458934
>>58490
Какой-нибудь small_vector где проаллоцировано пара десятков элементов не помешало бы.
Или что-то вроде small string optimization, но для вектора.
110 1459396
Как сравнить указатель с числом? Как делить указатель на число? В общем как рвботать с указателями как с числами? И как сместить INT64, не на 8 байт, а всего на один?
111 1459405
>>59396
Или лучше скажите как обратиться к отдельному биту или байту в памяти
112 1459409
>>59405

>к отдельному байту


uchar тебе в помощь

>к отдельному биту


Смещаешься оператором >> и обрезаешь ненужное &1
113 1459411
>>59396

>Как сравнить указатель с числом? Как делить указатель на число? В общем как рвботать с указателями как с числами?


Разыменуй.
int a = 228;
int b = &a;
std::cout<<
b==a;
114 1459413
>>59411
ебаный харкач * удалил
image.png4 Кб, 901x79
116 1459426
>>59396

>В общем как рвботать с указателями как с числами?


reinterpret_cast<size_t>(p), наверное, где p - любой указатель. Или просто ((size_t)p).

>Как делить указатель на число?


Мне кажется, ты делаешь что-то не правильно. Зачем делить указатель на число? Может быть тебе нужен остаток от деления, хотя бы?

>>59405
Картинка, наверное.
117 1459427
>>59419
А в обратную сторону сработает, если чуть подправить? Чтобы указателю присвоить значение? Или reinterepret_cast? Только сейчас о нем прочитал
118 1459430
>>59426
Спасибо
119 1459461
>>59427
Ты смотри только аккуратно https://www.viva64.com/ru/t/0030/
Зачем тебе это, не лезь, дибил, оно тебя сожрёт
120 1459493
>>58591

>то в бусте точно.


>буст


>быстро


Выбери одно.
121 1459496
>>59427
если ты разыменуешь указатель на неконстанту, то сможешь присвоить значение
122 1459514
Аноны, хочу сделать простую p2p сеть на Qt или что-то с бустом думаю это не принципиально, максимум сотня пиров будет, но не могу понять как ее правильно устроить. В подробности думаю смысла нет вдаваться, вопрос в чём: посоветуйте пример одноранговой сети с открытым кодом желательно не больше 10к строк на плюсах, с теорией знаком танненбаум , а вот как это всё делать вообще не представляю
124 1459540
>>57647
А до как узнать до каких пор считывать? Нагуглил функцию свойство процесса PeakWorkingSetSize. Но как его применить? Память то может в любом месте выделиться. Я вот не знаю как ос память выделяет. Может она постранично выделяет и тогда я смогу посчитать колличество выделенных страниц, следовательно уже прочитанную память. Так смогу понять стоит ли читать дальше или нет.
125 1459543
>>59540
Я забыл слово "функция" стереть.
126 1459549
>>59543
Я за память не шарю, но много раз видел схему, где исполняемый код находится после данных. Я смогу определить, что кусок памяти исполняемый и прекратить поиск. Но что мешает разработчику пользоваться памятью за исполняемым кодом.
127 1459599
>>59549
Так гаверное и буду делать. Но вопрос: память выделяется постранично или произвольно?
128 1459602
>>59549
Так наверное и буду делать. Но вопрос: память выделяется постранично или произвольно? Я конечно погуглю сейчас, но хочу удостовериться
129 1459607
>>59602
Постранично конечно.
130 1459610
>>59607
Услышал тебя.Добро. В таком случае у меня все схвачено. Я кабанчиком за код. Может по ходу вопросики появятся, надо будет обкашлять. На созвоне.
131 1459707
>>59610
Постранично. Размер страницы 4096 байт. Запрашиваешь информацию через VirtualQuery, фильтруешь регион, дампишь память и потом ищешь в буфере то что нужно.
132 1459731
>>58934

>small_vector где проаллоцировано пара десятков элементов


vector_instance.reserve(20) ?
133 1460344
>>59731
Я думаю, он о том, чтобы вектор небольших размеров все на стеке хранил, без аллокации. Спорная идея, лучше какие-то временные буферы использовать.
134 1460363
Нужен перебор всех комбинаций с инкрементом, то есть из ['a', 'b', 'c'] будет не
[code]aaa
aab
...
ccc[/code], а
a
b
c
aa
...

Несколько дней бьюсь, но алгоритм в голову не приходит. Это ведь простое что-то.
135 1460365
>>60363
https://ideone.com/iQAR0T
Примерно такое?
136 1460366
>>60365
Да, именно это, спасибо.

Чтобы взять из головы и написать нужна в основном ведь практика?
137 1460452
>>60366
Обычно со временем приходит понимание что во многих вещах есть какие-то закономерности. Увидишь их, формализуешь, то кодить станет гораздо легче.
138 1460457
Решил проверить Великую теорему Ферма. У меня получаются целые числа со степенью = 3, если ставлю достаточно большой предел поиска. Что я делаю не так? Может, переменной c байт не хватает для нормального ответа?
https://ideone.com/7yEe0Q
139 1460481
>>60457

> Vvedite predel chisla


Проиграл
140 1460489
>>60481
Вообще-то там транслитом

>Vvedite predel dlya x i y


, а не числа.
141 1460493
>>60457

>У меня получаются целые числа со степенью = 3,


А кокие должны?
142 1460496
Что за напасть, подскажите, пожалуйста.
Сегодня с утра встал, решил покодить. Внезапно частное от деления округляется в меньшую сторону до целого, хотя тип double.
Вот буквально такой код:

double z = 3 / 2;
Alert(z);

выдаёт 1. 1/2 выдаёт 0. Если задать z нецелым, то выдаст заданное как положено.

Что случилось-то? Я сейчас крякну.
143 1460498
>>60493
По теореме Ферма x^n+y^n=z^n не существует такого целого z, если n>2.
144 1460500
>>60496
3.0 / 2.0
145 1460501
>>60496
UPD 3.0 / 2 даёт ожидаемый ответ.
146 1460503
>>60498
Ну тогда ебись с cout, оно может округлять, попробуй printf("%f"
147 1460505
>>60503

>оно может округлять


Зачем?
148 1460508
>>60505
Потому что может, а ты нет, кек

cout.setf(ios::fixed);
cout << setprecision(3) << a << endl;
149 1460512
>>60508
У меня программа так написана, что cout для ответа отрабатывает только тогда, когда итог операции x^n+y^n=z^n целое число. Тут наверняка проблема с типами данных у переменных.
150 1460516
>>60512
То есть, если при выполнении x^n+y^n извлекаемый корень из суммы целое число, то cout отрабатывает.
151 1460518
>>60512

>У меня программа так написана


Неа, числа с плавающей точкой с нулем не сравнивают
152 1460519
>>60518
А с чем тогда сравнивать? Как определить, что число целое? Ну, то есть после запятой только нули.
154 1460532
>>60521
Можно по-Русски?
155 1460533
>>60496
Ну а хули ты хотел от целочисленного деления? Скорее всего тебе даже компилятор поругался.
изображение.png5 Кб, 228x210
156 1460535
>>60496
Просто ты говнокод написал.
157 1460675
>>60532
IEEE 754
158 1460732
>>60675

>IEEE 754


А по ураински ещё можешь?
159 1460735
160 1460811
>>59602
Это опять я. Нашел такое утверждение "Конечный адрес памяти равен ImageBase + ImageSize. Эти значения берутся из заколовка PE файла". Почему мне никто не сказал? Это же куда лучше того, что предложил я.
161 1460823
Есть ли что то вроде memcpy, но для другого процесса?
162 1460825
>>60823
Или не надо... Чет я запутался
163 1461253
Как добавить элемент в вектор из указателей на строку?
vector<char*> meh;
meh.push_back((new string("Test")));
Хуйня, да?
164 1461258
>>61253
meh.push_back(new char[32]);
А чем тебе вектор std::string не нравится?
165 1461261
>>61258
Мне просто было интересно.
166 1461423
>>59536

>torrent


К торрентам ведь нужно примагнититься, ну или каким-то образом узнать адрес пира, чтобы получить данные. У меня стоит задача написать распределённую БД, и после передавать по ней один и тот же файл. Я практически полностью понимаю как это сделать, кроме одного момента: как новый пир узнает обо всех остальных, если нет центрального сервера, который отошлёт ему список всех участников сети? В интернете удивительно мало информации по данной теме, ну либо я неправильно ее ищу, поэтому и прошу помощи хоть алгоритм примерный
167 1461426
>>61423
"распределенная бд" для хранения 1 (одного) файла
мощьно
168 1461474
>>61426
Бля да я учусь, просто для задачи одного файла достаточно. Мне бы сделать так, чтобы при появлении нового хоста он делал запрос ко всем остальным вот на этом моменте я и туплю, и получал текущее состояние файла, а дальше просто пинговал раз в пару секунд остальные ноды и сидел тихо пока управление не дадут.
169 1461479
>>61474
А зачем запрос текущего состояния?
Зачем кто-то из участников сети должен знать об остальных?
Просто раз в какое-то время участник бродкастит всем список файлов и их хэши, другие ловят, отличается - поехали качать разницу.
Хотя не уверен, что для большого количества файлов это нормально сработает.
170 1461486
>>61479

>бродкастит


А если они не в локальной сети находятся?
171 1461539
>>61486
Не так буквально.
Широковещание здесь в том смысле, что не кому-то конкретному, а просто всем - кто смог принять сообщение, тот принял. Главный косяк этой системы будет в случае возможного модифицирования файла сразу несколькими клиентами, придется как-то разрешать конфликты.
172 1461577
tenor.gif578 Кб, 314x236
173 1461652
>>58724
Сап. Есть формула, типа
double f(double a){
return sin(a)cos(a) + sin(a)sin(a)cos(a) + ...;
}

Нужно ли самому, в 2к19, повторяющиеся члены рассчитать самому, типа sca = sin(a)
cos(a), или няша-компилятор все сделает сам, и не придется лишний текст писать?
174 1461660
>>61652
Посмотри что godbolt.org выдаёт, напиши и глянь какой асм код генерирует.
175 1461668
>>61652
Синус - не constexpr, выше где-то было обсуждение этого дела, так что не выйдет повесить это на компилятор.

Но если ты найдешь формулу приближения и тебе не очень важна точность, то их уже можно вычислить на этапе компиляции.
176 1461678
>>61660
Спасибо, хороший сайт.
С -O3 разницы нет, без оптимизации всё, конечно, в лоб.
https://godbolt.org/z/Vke05x
177 1461680
>>61678
CLang, пидорас, почему-то не соптимизировал нихуя код, gcc и очевидно icc делают всё хорошо. Не ожидал от цланга такого, пиздос, я на нем сейчас собираю
178 1461739
>>61652
а в 2к19 уже не нужно знать элементарные правила математики из 4го класса школы?
180 1461760
>>61739

> 2к19


> изобретать велосипеды


Математика на этапе выше, код должен быть понятен
181 1461761
>>61760
Мне код абсолютно понятен, но тебе не понять...
image.png75 Кб, 1819x323
182 1461784
Антоны, можете помочь?
Я в ваших крестах не очень разбираюсь, я вообще из другого языка, но смотрю проект и тут такой вот блок
Можете подсказать, что тут происходит?
183 1461788
>>61784
А все, разобрался, оно берет из GUI значение и устанавливает его константой.
sage 184 1461866
>>61788
Нет. Здесь есть параметр OcrScaleFactor: его значение по умолчанию (не заданное, это баг), функции его сохранения в настройки и получения из настроек. QSettings хранит их в ini файле или в реестре (это в винде по умолчанию).
GUI тут нет вообще.
185 1461877
Аноны, кто нибудь может посоветовать годную практику для тренинга многомоточки? С теорией разобрался, а вот практику придумать/найти не могу
186 1461901
>>61877
держи классическую задачку с сантой и оленями:

Санта Клаус постоянно спит, до тех пор, пока не будет разбужен либо всеми девятью северными оленями, вернувшимися из своего отпуска, либо любыми тремя эльфами из его десяти эльфов. Если Санту разбудили олени, то он запрягает их всех в свои сани, доставляет игрушки и, наконец, распрягает оленей (отправляя их обратно в отпуск). Если же его разбудила группа эльфов, он провожает каждого из них в свой кабинет, консультируется с ними по поводу игрушек. После этого он выводит каждого эльфа из своего кабинета (отправляя их обратно работать).
Санта должен отдавать приоритет оленям, в случае если его ожидают сразу и олени, и группа эльфов.
187 1461906
>>61901

>Санта должен отдавать приоритет оленям


олени > эльфы

алсо я не секу в вашем мл, в чем задача то?
188 1461913
>>61906
это классическая практика на тренинг механизмов синхронизации между потоками
что не ясно?
189 1461915
>>61913
Кто приоритетней?
190 1461961
Допустим, я рисую прямую QPainter-ом с помощью метода drawLine. Как мне потом обновлять состояние этой прямой? Ну то есть чтобы я ее двигал, и предыдущее состояние не сохранялось на картинке.
191 1461965
Ананасы, допустим я возвращаю из функции вектор по значению.
Как понять: он копируется или перемещается? Вроде ещё есть copy elision. Он тут играет роль какую-то?
192 1461972
>>61965
Копируется. Если функция будет возвращать указатель, то будет "перемещаться".
193 1461979
>>61972
Т.е. нужно написать const auto vec = std::move( getVec() )?
194 1461981
>>61979
Для перемещения*
195 1461984
>>61979
Что за getVec()?
Смотри. Допустим есть метод doSomething(). Ты можешь объявить его как vector doSomething(), тогда он будет возвращать вектор, а если объявишь его как vector* doSomething(), то он будет возвращать указатель на вектор. Используешь в зависимости от своих потребностей.
Не совсем понимаю, что ты хочешь сделать, н овангую, что тебе вообще ничего не надо возвращать, а просто написать void-метод, который будет что то делать с твоим вектором.
196 1461987
>>61965
Пиздовать читать стандарт, там все сложно. Начиная с С++17 copy elision происходит обязательно, вроде даже всегда, но мув/копи конструкт/оператор= всё равно может вызваться уже после завершения твоей функции, например, если ты делаешь
vector<T> hui = f();
.png4 Кб, 301x316
197 1461988
>>61984

> Не совсем понимаю, что ты хочешь сделать


Возвращаю координаты соседних тайлов.
Функция принимает на входе координаты тайла (жёлтый) и расстояние (радиус) вокруг которого мне нужно получить координаты (серые). На пике расстояние равно 2.
198 1461989
>>61984
>>61972
Расчёт неосиляторов окончен, все быстро учить стандарт.
199 1462001
>>61988
Проще итератор возвращать, чем вектор. Зачем тебе лишние аллокации?
200 1462002
>>61988
Так, и в чем проблема?
201 1462006
>>61866

>не заданное, это баг


С чего ты взял, что оно не задано? Статик конст в хидере только с С++11 можно прописывать.
1566921660906.jpg121 Кб, 771x1080
202 1462011
>>61989
Не собираюсь его читать, пока жареный петух не клюнет.
203 1462012
>>62002
Ты слеп? >>61965

>>62001
И как я из итератора узнаю сколько элементов в векторе?
Зачем мне его хранить всё время работы программы?
204 1462015
>>61965
тут сразу ошибки проектирования:
вместо того чтобы работать с голым вектором, его следует обернуть в класс (к примеру набор неких "документов" у тебя будут хранится не напрямую в векторе_документов, а делаешь класс "реестр документов")
далее в си и крестах значение функций чаще используется не для возвращения результата работы, а для кода ошибки/успешного завершения, а в случаях когда принято решение не использовать исключение, то тут и вообще нет выбора
а результаты работы функций возвращаются через параметры-указатели
но в современном с++ делают по другому - возвращают результаты работы через владеющие смарт-пойнтеры
такие дела
205 1462017
>>62015
Это просто массив интов.
Зачем мне городить какие-то абстракции ненужные поверх этого?
206 1462027
>>62012

>И как я из итератора узнаю сколько элементов в векторе? Зачем мне его хранить всё время работы программы?


Я так понял, что у тебя таблица, и тебе надо для ее элементов делать какие-то действия с соседними ячейками. Если ты будешь возвращать вектор, содержащий соседние ячейки, это будет не очень быстро работать, если таких обращений много из-за динамичекской аллокации. Если он храниться все время программы, то лучше конечно вектор. Если обращаешься часто - кастомный итератор (в котором ты спокойно можешь хранить и размер вектора).
207 1462028
>>62015

> возвращают результаты работы через владеющие смарт-пойнтеры


А это не противоречит принципам ооп?
208 1462030
Есть способ запретить для класса создание lvalue, но разрешить создание rvalue?
Можно: Klass().method();
Нельзя: Klass k; k.method();
209 1462031
>>62030
Сделать копирующий конструктор = delete.
210 1462034
>>62031
Ох, не так понял. У тебя через синглтон надо делать.
211 1462035
>>62017
но "инты" то что то означают? разве нет? что у тебя там - длины хуйцов твоих половых партнеров или зарплаты бати за последние три года
что то они должны означать
212 1462036
>>62031
Делал, но создание объекта это просто вызов конструктор. Не помогает.
213 1462040
>>62036
Тогда удалить или сделать приватным стандартный конструктор. Гугли "c++ singleton".
214 1462041
>>61965
Если не накосячишь компилятор сделает RVO и копирования/перемещения вообще не будет. На современных компиляторах часто выгоднее возвращать по значению.
215 1462043
>>62030
это какой то вид специальной олимпиады? для чего ты хочешь это сделать?
216 1462047
>>62043
Хочу, чтобы объект удалялся сразу после вызова метода. Ему больше незачем жить.
217 1462050
>>62027
Короче, профилирование показало что эта функция вообще не влияет ни на что.

>>62035

> но "инты" то что то означают?


Индексы массива и всё
218 1462051
>>62047
заверни это в обычную функцию
в ней будет создаваться объект, вызываться его метод, удаляться объект
219 1462054
>>62041
Вот этого слушайте
220 1462056
>>62047

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


Тогда сделай конструктор приватным, а функцию Klass() объяви как friend. То есть создавать объект сможет только она.
221 1462087
>>61755
Нужно.
Во флотах a (b c) != (a b) c, поэтому компилятор не сможет вынуть такие вычисления с плавающей запятой. Возможно --ffast-math или /fp:fast могут заставить игнорировать это, но фиг знает.
222 1462092
>>62056
>>62047

>ребят как бы побольнее сломать себе ногу?


возьми молоток, и раздроби коленную чашечку!
223 1462094
>>62047
Зачем тебе тогда объект? Это просто функция.
224 1462102
>>62030
Фабрика. Ну и если тебе нужно чтобы метод вызывался только раз для каждого созданого объекта, но сам момент вызова не сильно важен то можешь сделать сам метод приватным а его вызов засунуть в деструктор. Тогда если ты сделаешь Klass() то метод будет вызыватся сразу (будет создан временный объект, сразу уничтожен с ваызовом метода). Если сделать Klass k; то метод будет вызван при выходе из текущего скоупа - если конечно это тебе приемлемо.
.png1,3 Мб, 849x931
225 1462108
Почему в комитете по стандартизации нету негров почти?
Что за угнетение я вас спрашиваю?
226 1462112
>>62108
Нигги пишут на питоне.
227 1462118
>>62108
Если это зафорсить, то можно заставить sjw, а следовательно и гугл вместе с другими крупными корпорациями, бойкотировать кресты. Тогда язык останется без поддержки и загнется.
228 1462162
Анон, а где в обычной программе в 2к19 я могу встретить указатели? У меня уже, не знаю, миллион наверное строк кода в проекте, а анальной звёздочки всё нет и нет. Везде референсы! Правда, шаред-птр из-за дизайна тоже нету.

Почему тогда "указатели" так часто всплывают в какой-нибудь иные?

Алсо, в сишечке почему-то нет ссылок, были бы не лишними констрефы
229 1462170
>>62162
Ну и что же ты такое закодировал?
230 1462175
>>62162

> Анон, а где в обычной программе в 2к19 я могу встретить указатели?


В старых проектах. В Си библиотеках.
231 1462182
>>62162
У нас в проекте оптимизация переиспользования памяти на бекенде. Здоровенный массив хранится в памяти одним сплошным куском, а наружу отдаются вьюхи, имплементированные как связка поинтер + длина. Хотя может быть для этого сегодня уже есть либы.
Еще это нужно, если работаешь с QtQuick. Сущности из C++ в QML передаются через поинтер, а не референс.
Гугл советует использовать указатели вместо неконстантных ссылок для передачи параметров внутрь функций. Типа так заметнее, что значение b мутирует: foo(a, &b)
232 1462199
>>62182

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


типа std:string_view что ли?
как вьюхи то сделаны? свои костыли?
233 1462204
>>62182

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


или типа как буфера в asio сделаны?
234 1462213
>>62087
Gcc и msvc оптимизируют, clang только с ffast-math. При этом clang без ffast-math еще и sin-cos вызывает каждый раз, даже если встроенные функции использовать:
https://godbolt.org/z/1tj_ng
235 1462224
236 1462279
>>62162
Ну вот мне иногда приходится ковырять PCM-аудио, там без указателей не так. Или сжатие, как например Хаффман (который я выпилил нафиг, ибо побитово Хаффмана делать это зашквар).
237 1462293
>>62279
Почему там без указателей никак? Там, вероятно, есть массив семплов, ну и передавать его везде через констреф в крестах. В сишечке то конечно, может быть даже цос и стоит на си делать.
238 1462463
>>62293

> Почему там без указателей никак?


Написано в бородатых годах? https://www.youtube.com/watch?v=z0NfI2NeDHI
239 1462538
>>62162
Все системное программирование - это ехал указатель через указатель, потому-что си. В нормальном продакшен коде на современных крестах указателей должно быть минимум.
240 1462544
>>62279

>побитово Хаффмана делать это зашквар


Современные крестоебы.
241 1462657
Есть программа, часть исходного кода которой не стоит опубликовывать.
Могу я загнать эту часть в lib файл оставив только хидеры? При этом нужно, чтобы кто-то ещё мог дописать кода и скомпилировать. Это то что мне нужно?
242 1462699
>>62538
именно для этого почти все умные указатели могут отдавать свой сырой указатель который инкапсулируют
типа у себя в коде с умными указателями работаешь, а в старые библиотеки отдаешь сырые указатели на обработку
243 1462701
>>62657
конечно можешь
но придется поразбираться, там много неочевидных вещей начиная с того что .lib файл может как содержать объектный код, либо только содержать секции импорта-экспорта и тому подобные заморочки
244 1462702
Object object = eta_funkciya_vozvraschaet_object();

Учитывая RVO, гарантируется ли то, что в случае выброса исключения внутри функции объект останется нетронутым?
245 1462703
>>62702
точнее так

Object object;
try {
object = eta_funkciya_vozvraschaet_object();
} catch (...) { // объекту пизда? }
246 1462721
>>62703>>62702
Мне тоже стало интересно и я накидал код на 30 строк. RVO происходит, только если я пишу "Object temp= make()", если я пишу в две строки "Object temp; temp=make();" (как в твоём втором посте), то там move-конструктор. То есть ситуации, когда в object что-то хранится и оно сломается просто невозможно достичь, потому что для этого нужно объявлять твой объект внутри try-секции, из которой он всё-равно никаким образом не выплестнется.
>>62701
247 1462722
>>62701
Мм, отлично, спасибо.
248 1462737
Постоянно рука тянеться использовать unsigned вместо int во всевозможных циклах и сётчиках. Мол, умножение проще, сравнение проще.
Имеет смысл, или устарело с момента выхода условного второго пентиума?

И аналогичный вопрос для 64-битных программ, продолжать использовать 4-байтовый (unsigned) int или 8-байтовая переменна будет быстрее на (0.5%) из-за восьмибайтового выравнивания в памяти?
249 1462761
>>62737
Ненужна если ты не пердолишь ембед.
250 1462800
>>62737
Ультимативный байтодрочер.
251 1462817
>>62737
везде size_t
252 1462834
>>62737
Это очень норма, мне даже автокомплит vs2017 давал size_t для циклов.
Как раз недавно классы делал, где решал, инт или size_t для размеров. Не очень хорошая ситуация происходит, когда делаешь вычитание, приходится тернарное сравнение делать:
size_t a = 10; size_t b = 5;
size_t ba = b > a ? b - a : 0;
Бесит.
253 1462836
>>57837
Гуглить отдельно. Почитай хабрец. Там вроде много всякого было.
254 1462842
>>62737
Некоторые алгоритмы получаются немного проще, если позволить счетчикам уходить в минус.
Unsigned счетчик при этом переполняется и приходится принимать дополнительные меры.
255 1462852
>>62544
Читаешь по N бит сразу. Лезешь в таблицу и смотришь, какой символ эмитить и на сколько бит нужно сдвинуться. В дофига раз быстрее и всё ещё просто, все нормальные посоны так делают.
256 1462863
>>62199
>>62204
Как стринг вью, да. Свои костыли.
257 1462882
>>62863
можешь рассказать личный опыт использования? что по твоему лучше сделано? буфера в asio, boost::interprocess или вообще сейчас string_view использовать?
258 1462883
>>62737
я хз, но если ты типа пишешь modern c++, то вообще можно без счетчиков, работаешь через итераторы и обобщенные функции
259 1462902
>>62737
Все арифметические операции над знаковыми/безхнаковыми одиеаковые благодаря дополнению до двойки. Также без разницы, использовать int32_t или int64_t - регистры-то одни. Хотя, если так уж интересно, посмотри таблицы Агнера Фога.
260 1462931
Нравится C++, вообще есть возможность ебашить на нем бекенд продуктивно?
261 1462936
>>56115 (OP)
Привет, крестаны.
Перекатился 4 месяца назад из джава-тырпрайз-манямира в десктоп-разработку, проекты у компании все на Qt.

Вроде все и хорошо, но надо бы построить вменяемый DevOps тулчейн, пушто динозавры в нынешней конторе только-только осилили Git вместо SVN, и в настоящий момент катастрофически не хватает менеджера пакетов/зависимостей, пушто нынче каждый чих ведет к пересборке кучи проектов и ненужному мусору в Git.

Беглый гугл подсказывает что есть Conan и Buckaroo, но по обоим исчезающе малое количество инфы. На какой стул лучше сесть?
262 1462953
>>62936
Конан или вцпкг.
263 1462972
>>62936
ути-пути какие мы, 4 месяца в нашем болоте, а уже настраиваем "процессы"
264 1462973
>>62931
продуктивно в смысле быстро? не, не получится
265 1463026
>>62936
https://m.youtube.com/watch?v=PGOvl0dH8lM

Ещё есть Bazel от гугла
266 1463039
>>62936
У меня обратная ситуация.
Писал несколько лет десктоп на Qt в подобной конторе (где даже svn, а затем гит разворачивал сам, лол).
Устав от низкой ЗП, которую еще и постоянно задерживают, и методологии разработки прямиком из 90х, пытаюсь перекатиться в джаву.

Какие подводные?
267 1463067
>>63039

>подводные


Деньги некуда девать будет.
268 1463164
>>62902
Если уж и байтоёбить, то надо еще учитывать сколько байт в инструкции. Поскольку буфер декодера маленький, 1 такт можно потерять.
По хорошему надо тест проводить.
269 1463224
>>62902

>если так уж интересно, посмотри таблицы Агнера Фога.


Интересно, посмотрел. Долбать fdiv/idiv тормозные, конечно, почти как квадратный корень.
Пойду выпиливать все деления. И остатки от деления. Ужас, это получается лучше сохранить две размерности двумерного массива, чем каждый раз считать компоненты через / и %. А я то думал, это за один такт работает (для целых чисел) и для небольшого массива 20x30 можно через деление и один индекс всё делать.
Плюшевый фриленсер 270 1463236
>>63224
Если ты делишь на константы, то компиляторы умеют заменять деление умножением самостоятельно. Ручной вариант примерно такой(но смысла мало):

unsigned long long k = 1000;

//деление на 5
k = 858993460;
k >>= 32;

printf("%lld\n", k); //200

k = 1337
90;

//деление на 1337
k *= 3212392;
k >>= 32;

printf("%lld\n", k); //90

Умножение pipelined и снимать результат умножения с порта можно каждый такт если нет data dependency.
Если делитель переменная величина, то не могу ничего подсказать.
Плюшевый фриленсер 271 1463239
поправка:
k = 1337 * 90;
Плюшевый фриленсер 272 1463240
k *= 858993460;
Плюшевый фриленсер 273 1463253
Если не сможешь избавиться от делений то AVX512.
_mm512_div_epi64 например. Уж лучше чем насиловать процессор кучей делений.
274 1463254
>>62953
>>63026
Спасибо, анончики. Буду посмотреть.

>>62972
Ну так и чо, предлагаешь сидеть и не рыпаться, ждать пока кто-то другой соберётся и тратить по полчаса на каждую сборку?

>>63039

> Какие подводные?



Работа с тырпрайзной джавой превратилась из написания кода в написание конфигов для зоопарка генераторов кода, генераторов генераторов, генераторов конфигов для генераторов генераторов. И всё это с воплями ПОТОМУ ЧТО ЭТО ПОЗВОЛИТ СКОНЦЕНТРИРОВАТЬСЯ НА РЕШЕНИИ ЗАДАЧ ВМЕСТО НАПИСАНИЯ РУТИННОГО КОДА.
275 1463313
>>63254

>Ну так и чо, предлагаешь сидеть и не рыпаться, ждать пока кто-то другой соберётся и тратить по полчаса на каждую сборку?


в смысле? у тебя будут компилится только измененные файлы (которые сам изменил или вытащил из гита), это быстро, линковка щас тоже быстрая тк линковщики неплохие щас
а полную пересборку проекта под целевые архитектуры и прочее, с прогоном тестов и прочим делается на отдельном сервере ночами или как там у вас, в общем зависит от того как настроен ci/cd на фирме..
276 1463316
>>63039
а не лучше ли в твоем случае просто сменить фирму, но сохранив специализацию qt/кресты
277 1463332
>>63313

> как настроен ci/cd


> ci/cd


> в компании перешедшей на Git в 2018 году



Вот ты взялся надо мной стебаться мол я ещё молод-зелен процессы рабочие настраивать. А процессов-то того, нету.
Пробивающий дно 278 1463390
279 1463448
Почему комитет не выпускает какие-нибудь одобренные\проверенные библиотеки вместо добавления всего в std?
Что-то вроде буста.
Пробивающий дно 280 1463458
An oft-asked question is why we don't propose this library for Boost, instead of proposing it for the C++ standard library.
The short answer is that we are indeed planning to propose our reference implementation for Boost. It will be a great opportunity to get it into people’s hands sooner while we go through the process of standardization. Additionally, libraries like Boost.Container show that there is room in Boost for filling in implementations for compilers that do not provide a complete standard library.

But submitting a library like this to Boost is orthogonal to submitting this proposal to ISO C++. C++ is still missing out-of-the-box access to a piece of fundamental and very common hardware.

Источник: http://wg21.link/P1386R2
Пробивающий дно 281 1463467
Видимо их просят, а потом результат.
282 1463471
>>63458

> But submitting a library like this to Boost is orthogonal to submitting this proposal to ISO C++. C++ is still missing out-of-the-box access to a piece of fundamental and very common hardware.



Короче, нужен какой-то менеджер пакетов?
Пробивающий дно 283 1463492
>>63471
Они хотели сказать, что audio это фича, которая "ну вот очень нужна" поскольку звуковушка есть в каждой машине. Ну это то, как я вижу их слова. В std хлама ведь нету совсем. Надеюсь меня простят, что я так слова искаверкал.
Пробивающий дно 284 1463506
Их пока послали временно, но видимо скоро будет еще попытка. На этот раз с типами и алгоритмами.
285 1463534
>>63506
Что им мешает свое говно как либу сделать?
Или добавить в буст? Клавиатура вот действительно в каждой машине есть
286 1463546
>>63534
По поводу либы, они даже сделали свою https://github.com/stdcpp-audio/libstdaudio. правда пока только для мака(винда говорят как только так сразу)

Я у них в предложении похоже нашел ответ.

Wouldn’t it be great if the basic functionality of talking to your sound card would come for free with every C++ compiler, as part of the C++ standard library? Not only would it allow one to write truly cross-platform audio code, but it would also lower the barrier of entry for learning.

Видимо так. "truly cross-platform" меня немного пугает. Особенно когда некоторые пишут код с фичами, которые поддерживает лишь их компилятор.
287 1463551
Под типами и алгоритмами похоже имелось ввиду, что нужно будет предоставить типы аудио и их алгоритмы для стандартизации. Чел, ты бы хоть пояснил.
288 1463567
Насколько я знаю вывод в консоль медленный. Можно ли не дожидаясь вывода продолжить выполнение без использования потоков?
289 1463569
[code]
UINT64 Address = 0;
Address = reinterpret_cast<UINT64>(Address + 4096);

Ошибка: C2440 'reinterpret_cast': cannot convert from 'UINT64' to 'UINT64'
[/code]
290 1463571
>>63569
Я понял. Я зря кастую. 4096 кратно 64 и поэтому можно спокойно без приведения типов.
291 1463589
>>63567
Поищи, как выключать синхронизацию плюсовых и сишных потоков - тогда cout'ы будут быстрее, но printf больше нельзя будет использовать.
А если как хочешь ты - просто выводи на экран в другом потоке.
292 1463595
>>63567
мультиплексирование вывода
293 1463597
>>63595
ну или асинхронный ввод-вывод
294 1463598
>>63595

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


те синхронный неблокирующий
295 1463685
>>63567
Операции вывода какбэ буферизуются, если ты что то вывел в файл или сиаут это не значит что туда что то реально записалось, если ты принудительно не очистил буфер. Программа продолжает работать не дожидаясь реального вывода.
296 1463951
>>63589
>>63595
>>63597
>>63598
>>63685
Кому верить? И еще дополнительный вопрос. Как узнать самые медленные места в программе? Есть ли анализаторвы какие? И как понять во что упирается программа? Скорость чтения-записи маленькая и стоит снизить колличество обращений к памяти или еще что? Еще надо глярут че там у меня по занятости процессора. Если он занят на 25% то можно еще поток заебашить, а если нет то не надо. Я правильно рассуждаю?
297 1463964
>>63951
Каждый кусок дублируешь два-десять раз и смотришь стало ли медленнее. Если не стало, то тормозит что-то другое.
Можно каждый кусок обвешать rdtsc-шками, 100 наносекунд оно тебе спокойно посчитает с неплохой точностью. А если специально в цикле на нескольких итерациях гонять, то там можно доли процента выцепить.
Унылый быдлокодер 298 1463971
>>63951
Если тебе просто померить то >>63964 неплохой вариант. Если что-то по серьезнее то https://software.intel.com/en-us/articles/intel-architecture-code-analyzer
299 1464024
>>63964
>>63971
Спасибо большое
Унылый быдлокодер 300 1464030
Еще глубже: google - > performance analysis guide, работа Левинталя.
Разбор cpu по евентам. Был еще guthub репозиторий основанный на его работе, но я потерял ссылку, если у кого есть скиньте сюда.
301 1464081
>>63951
Да всем и верить. Просто выбери то, что тебе больше нравится или проще будет реализовать.
302 1464087
Как сделать указатель на бит?
303 1464090
>>64087
Я могу добится нужного результаиа с помощью побитовых сдвигов, но так было бы удобнее
304 1464095
>>64087
Никак. Таких не бывает.
305 1464099
>>64087
Хм. Наверное, стоит сделать биттвое поле с юнионом, типа
struct Foo {
union{
uchar bits0 : 1;
uchar val;
} field0;
union{
uchar bits17 : 7
uchar val;
} field1;
}
Структрка Foo займет один байт, и вроде работает uchar &p = *foo.field0.val;
Условием сможешь чекнуть, что p == 0.
Я не проверял.
306 1464101
Но само собой, это лютый говнокод, у тебя указатель больше битового поля
>>64099
307 1464105
>>64095
>>64099
Вообще я могу не заниматься такой хуйней. Я пытаюсь найти переменную в памяти другой программы. Вдруг разрабы заморочились и сделали такую переменную, что она размером несколько бит и начинается с 3 бита 2538 байта
308 1464112
>>64105
Анализировать целиком значение и сдвигом искать - по скорости будет также, если не быстрее. Естественно, чем больше известно входных данных, тем будет проще. Если знаешь точное число, можно взять его разрядную сетку, числа в памяти маскировать, сдвигать и сравнивать с паттерном. И спросить об этом в Си разделе, это их говно.
309 1464114
>>64105
Да, поиск сначала делай по целым числам, не нашел - двигайся по байтам и бери 1, 2, 4 или 8 байт в зависимости от размера паттерна
310 1464119
>>64112

> Если знаешь точное число, можно взять его разрядную сетку, числа в памяти маскировать, сдвигать и сравнивать с паттерном.


Да я так и хотел. Обрезал до первого значащего бита и пытался так шагать. А потом вспомнил что я смешаю указатель на байт, а не на бит.
311 1464123
>>64114
То есть никакой долбаеб не будет хранить значение так, как я сказал? А всякие cheat engine найдут такое значение?
312 1464131
>>64105
https://ideone.com/rEMkat
Я бы вот примерно так написал, если на коленке, если прям по битам. Но это совершенно точно не самый быстрый алгоритм (быстрее подготовить 8/32 маски, и 8/32 верных значения, и прыгать сразу по 1/4 байта без битовых сдвигов), и он за границу массива выходит.

Каким образом ты будешь идентифицировать конкретную переменную, если найдёшь, например, 623 мест с подходящей комбинацией бит? Или есть несколько пар дампа памяти и значения переменной, так чтобы можно было отсеять?

>Вдруг разрабы заморочились и сделали такую переменную


А на чём написана программа? Если высокоуровневый мусор, то шанс использования отдельных бит исчезающе мал, мне кажется, но точно не уверен.
313 1464139

>>14641318


Можешь в общих чертах описать че там вообще происходит?
314 1464142
315 1464145
>>64131

>Но это совершенно точно не самый быстрый алгоритм


А он без UB?
мимо
316 1464150
>>64139
Сверху массив рандомных значений, просто чтобы потестить.
find - то что нужно найти, size - его размер в битах.
mask - хуита (маска) вида 0b0001111, на которую я побитово умножаю (через &) очередной байт.

Далее, я циклом прохожусь по всем массиву (по каждому байту), но беру за раз по 4 байта (чтобы после сдвига там остались ненулевые биты, то есть значение размером в 27 бит этим говнокодом не найти(точнее, найти, но в любой позиции)), которые находятся в part.
Во втором внутреннем цикле я 8 раз (по числу бит), бинарно смещаю этот part, умножаю на маску и сравниваю с нужным значением. Вывожу номер байта и бита, если совпало.

>>64145
У меня работает, что там по стандарту должно быть - не знаю.
317 1464222
Вопрос по Qt. Безопасно ли создавать сигнал, который принимает аргумент по ссылке (как и слот)? Вроде как там автокопировние внутри при передаче в слот, но я уже не уверен.
318 1464269
>>62030
Попробуй перегрузить точку или стрелку
319 1464281
>>63951

> Как узнать самые медленные места в программе?


Можешь через профайлер прогнать. Он покажет какие функции сколько времени работы программы используются.
А дальше уже можешь попробовать что-то в них поменять.
15474178293930.jpg55 Кб, 1106x1012
320 1464391
Предположим у меня есть пять функций Func1, Func2, Func3, Func4, Func5.
Так как я не особо разбираюсь, я ввёл каждую из этих функций, но при этом мне нужно, чтобы при вводе cmd 1 выводилась функция 1 (сделано), при вводе 2 (после функции 1) включалась функция 2 (это тоже работает) и при вводе 1 (после функции 2) включалась функция 3 (а вот тут пиздец) и так далее. Типа такой цепочки действий. Если подскажете в каком направлении искать инфу, буду очень благодарен.
Писал функции через if else, но не ебу как в int main указать поочерёдность выполнения каждой из них
0014h3ehdvSXHj8.jpg24 Кб, 412x351
321 1464392
>>64391
То есть чтобы на каждую функцию был выбор из двух действий, как, например в текстовом квесте
322 1464396
>>64392
>>64391
Нормально задачу объясни. Может уже есть какое-то решение.
Конечные автоматы, вся хуйня
323 1464399
Господа крестовики. Как я понимаю при компиляции динамической или статической либы обязательно с ней в "поставке" должны идти хедеры, с помощью которых можно ссылаться на методы и сущности, коотрые определенны в либе из кода. А на этапе линковки или загрузки вызвы связываются с конкретной сущностью в бинарнике.
Как именно происходит это связывание, если упрощенно? Препроцесситься хедер, потом обрабатывается компилятором/линковщиком и на выходе получаем имена сущностей, определенные в хедере, которые потом ищуться в символьной таблице подключаемых библиотек? Т.е. меня интересует этот вопрос в таком контексте что если хедер библиотеки как-то не так обрабатывается при компиляции, например используются другие правила для манглинга имет функций, то на выходе мы получим ошибки линковки/загрузки?
324 1464404
>>64392
Делай граф
325 1464407
>>64391
Не понял. Ты во всех случаях вбиваешь 12345, или ты можешь ввести 13, и у тебя должна активироваться третья функция после первой?

Может быть тебе нужен массив указателей на функции, чтобы их можно было вызывать по номерам?
Не знаю что ты хочешь сделать, но если у тебя пять функций где логика привязана к номерам функций, то это то что тебе пригодится.
И матрицу/таблицу переходов прикрути. В твоём случае 5х2. Есть одна из пяти функций и ответы 1/2, при которых осуществляется переход на функции с номерами указанными в матрице. Например, так: https://ideone.com/uMscJD
326 1464433
>>64391
стейт-машина, конечный автомат..
гугли..
вариантов реализации масса, самые простейшие это комбинация if-else с флагами состояний либо таблицы выбора..
есть и более сложные подходы..
327 1464554
При добавлении элемента в вектор, если не будет хватать места, весь вектор будет перемещен в другую область памяти, все верно? Можно как то это контролировать, ведь по времени это явно затратнее, чем просто добавить элемент?
328 1464564
>>64554
У вектора есть .capacity()
329 1464572
>>64407
>>64433
Спасибо анончики, то что надо
330 1464668
>>64554
Есть reserve(). Ещё подумой, не стоит ли тебе list использовать, там на это похуй
331 1464671
>>64554
есть еще дек, он хранит элементы другим способом - чанками
поэтому получается что дека на вставку будет быстрее работать чем вектор

тут нужно делать выбор в зависимости от задачи

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

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

по итогу, вектор получается универсальней, за счет увеличения амортизационной сложности на вставку
332 1464672
>>64671
помимо вопросов, связанных с производительностью и с совместимостью с сишным кодом, как минимум еще нужно помнить о том что некоторые контейнеры и контейнерные адаптеры "портят" итераторы и сырые указатели на их элементы, а другие - не портят
опять же, выбирать контейнер следует исходя из требований задачи
333 1464673
>>64668
ну а вообще, конечно, да
когда примерно знают, сколько места займет вектор, то делают предварительный reserve(), возможно c последующим shrink_to_fit() - щас он в стандарте, а раньше делали трюк со swap()

это позволит сделать оптимизацию по времени для интенсивных вставок в вектор, при первоначальном заполнении, например
image.png3 Кб, 449x29
334 1464797
Дебис в треде.
Пишу залупу с потоками и для потока пикрил получаю ошибку 2893 и 2672. Нихуя не понимаю как лечить.
335 1464805
>>64797
Пенталгином.
336 1464811
>>64805
Лучше ибупрофеном, так дешевле.
А с потоком что делать? Проблема в сигнатуре, причем явно ругается на типы значений, но в чем конкретно проблема я не пони.
15663747162000.png156 Кб, 484x484
337 1464815
>>64811
Охуенное описание ситуации в целом и проблемы в частности. Тут же весь тред наизусть помнит коды ошибок 2893 и 2672. Просто помогать не хотят и траллируют.
338 1464819
Как по нормальному передать в приложение параметр utf-8? Через аргумент командной строки слишком трудно, да и вроде бы не на всех платформах прокатит. Если через файл, сохраненный в utf-8, то для пользователя слишком муторно будет. Как по нормальному сделать?
339 1464823
>>64815
Ну ебать, не засирать же тренд копипастой с мелкомягкие.док, а по номеру вполне рил найти.
https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-2/compiler-error-c2893?view=vs-2019
https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-2/compiler-error-c2672?view=vs-2019
Шо еще описать, я не ебу. Делаю все как по буквам, в сигнатуре функции запускаемой в потоке все указываю как в гайдах, в сам объект потока передаю через std::ref, но на этапе сборки мне вываливает вижуалка эти ошибки.
340 1464851
>>64823
Тогда бы код запостил или хотя бы тот гайд. Как блять мы тут должны по скрину одной строчки всё понять и починить?
Ну проверь, где ты эту функцию используешь, где какие типы ожидаются и какие на самом деле.
341 1464877
>>64672
Я вообще не согласен с фразой "вектор - универсальный". Там любой контейнер универсальный. Лично я, например, чаще использую лист, и вот он для меня универсальный. Универсальный
342 1464883
>>64668

>list использовать, там на это похуй


Не совсем. Лист все равно использует аллокацию. Пускай только для одного элемента, а не для всех как у вектора. Но аллокация все равно очень дорогая процедура.
343 1464887
>>64883
У него до C++11 линейная сложность вызова size(). Я не люблю такие фокусы.
344 1464896
Это >>64887 сюда >>64877
345 1464898
>>64887
У меня в листе только емпти() проверяется например. Там вроде константа. И поиски ещё в листе, если данные не имеют какого-то известного закона распределения, то поиск с вектором вроде одинаковый по сложности.
346 1464930
>>64929 (Del)
Промахнулся. Если модер удалит эту хуйню, было бы неплохо.
347 1465101
Так а чё дальше делать, когда ты выучил все основы с++
Начить изучать конкретные библиотеки типа OpenGL или Vlukan?
348 1465143
>>65101
Ещё один учащийся ради учения...
349 1465213
>>65101
Stl, boost
350 1465259
PlayerЗВ itsPlayers = new Player[DEFAULT_PLAYERS_COUNT];
Я правильно понимаю, что это указатель на массив из 6 элементов класса Player?
В таком случае что делает эта строчка?
itsPlayers[0] = ЗВ(new Player());
351 1465265
>>65143
>>65213
Я придумал, можно же в UE4 вкатываться, а то действительно учиться ради учения такое себе, а тут интересно
352 1465343
>>65259

> В таком случае что делает эта строчка?


Уничтожает память
параллельно копируя только что созданный объект
353 1465346
Можно ли как-то написать набор значений, которые должна проверить программа?
Для примера, мне нужно, чтобы программа выводила квадраты чисел, т.е. я ввожу 2, программа вывод 4, ввожу 3, программа выводит 9 и тд. Можно ли куда-нибудь записать несколько значений, для которых программа должна будет выполнить проверку, не выходя из окна консоли?
354 1465347
>>65346
for(int n=0;n<k;n++) cout << n*n;
355 1465352
>>65347
Я имею ввиду, для любой программы, не только для квадратов чисел. Если у меня будет несколько последовательностей, и чтобы не вводить несколько тестов каждый раз, написать их где-нибудь однажды, и программа выведет результат работы с тестами.
356 1465353
>>65352
Напиши в файл. Пусть программа читает входные данные и результат, который должен получится. Если ее вывод не сходится, то пусть выводит сообщение об ошибке
357 1465354
>>65343
Не понял тебя. В каком смысле уничтожает память?
укп.PNG13 Кб, 616x420
358 1465366
Вообще вот код https://ideone.com/YuCgjd
Я уже 3 часа ломаю голову над тем, почему в добавку к заданным игрокам выводится стандартный игрок 1. И если в ideone все выглядит так, словно массив при резервировании памяти инициализируется конструктором по умолчанию, то на моем пк все выглядит так, где первая цифра позиция в массиве, вторая позиция игрока, а третья его высота..
359 1465374
>>65366
Ну и пиздец...
Какие приватные атрибуты в 9 строчке, у тебя все публичные. Нахуй столько указателей. Почему ты за ними не следишь. etc

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


Да так и есть.
И у тебя так же.
Просто в "конструкторе умолчанию" ты position не инициализировал и в нём мусор, вместо значения.
мимо чайник
360 1465378
>>65374
Все еще не понятно, почему на 4 позиции 0, а не мусор как везде.
361 1465379
>>65378
Чтобы иногда работало. Мусор коварен.
362 1465385
Здарова бандиты.
Написал для использования в работе некую приблуду, 6к строк на крестах с Qt.
В мои рабочие обязанности эти не входило, но прогу заценили и вовсю используют.
Исподники я естественно никому на работе не показывал и не собираюсь, но хочу взять патент на это дело.
Я правильно понимаю, что для того чтобы всё было чисто, мне нужно либо избавиться от Qt, либо купить соответствующую лицензию?
Лицуха стоит неадекватных для этого случая денег (хотя за прогу я получил прибавку 25% к з/п и премию в две увеличенных з/п).
Так-то переписать на голом WinAPI проблем нет, хотя время это займет, Qt использовал чтобы побыстрее получить результат.
363 1465386
>>65354
Ты через new выделяешь память и тут же о ней забываешь, т.к. нигде ты не сохранил указатель, который тебе new вернул. Это утечка. Не стреляй себе в ноги, возьми связку vector+unique_ptr
364 1465413
>>65385
Ты можешь использовать бесплатный в коммерческих проектах при условии соблюдения требований LGPLv3. Сама GPL довольно сложно составлена, и нужен профильный юрист, чтобы пояснить, возможно ли в твоем конкретном случае использование этого продукта.
Минимальное требование - динамическая дин ковка.
365 1465415
>>65413
Очевидная линковка*
366 1465419
>>65385
А зачем патентовать всё? Патентовать нужно только твой мега-супер алгоритм, отвязав его в твою либку, к которой подключается qt со всем гуи. Наверняка же у тебя вся мякота сводится к нескольким функциям, зачем тебе там qt?
367 1465449
>>65385
Я как-то раз в одну контору устраивался и отказался т.к. в ТД был пункт о том, что всё что я напишу\придумаю (вплоть до всяких слоганов, рисунков и тд) будет принадлежать компании.
Пришлось отказаться.
368 1465467
>>65449
Отказался в итоге?
369 1465480
>>65385
ты в россии?
как трудовой договор был состален? типовой?
вообще то если ты создавал эту прогу в рабочее время по заданию работодателя, то имущественные права на этот интеллектуальный продукт принадлежат фирме, на которой ты работаешь..
370 1465482
>>65449
то есть обычно ты работаешь по специально созданному трудовому договору, в котором не происходит передача имущественных прав работодателю на интеллектуальный продукт, который ты создаешь, работая на эту фирму? дак что ли, а?
371 1465485
>>65482
Ты не русский? Ты не знаешь значения слово договор?
372 1465488
>>65480
РФ.
ТД типовой.
Разумеется в нерабочее время, на своем оборудовании и по своей инициативе.
В мои обязанности это никак не входило, и вообще я не кодер.
Более того есть целый отдел который должен заниматься и этим тоже, но вот как-то они не додумались, за что им вставили пистон, когда я вылез с этой темой.
Патент мне нужен для документально зафиксированной ачивки.
373 1465494
>>65467
А ещё я слушаю регги.
374 1465526
>>65488
Выложи на гитхаб и приложи файл с лицензией. Ну если ты готов показать исходники, конечно, оставляя за собой авторство.
375 1465530
>>65488
бля, чет ты хуевый работник
вангую что полгодика - и будешь выхуйнут с работки
376 1465556
>>65385
GPL налагает ограничения на распространение проги. Если она используется только внутри компании и вообщн никак не контактиркет с наружними сераисами, то ЕМНИП всё нормально. Но ты анону не верь, а почитай сам.
377 1465558
>>65556
А, блин, жопой читал. Ты не хочешь вообще никому показывать исходники. Тогда проблема, да.
378 1465579
>>65558
Блядь, да ему свои две функции скомпилить в либу и всё, зачем придумывать сложности
379 1465588
>>65385
Спасибо всем откликнувшимся, в общем буду перерабатывать на голом C/WinAPI, хардкорность не пугает - предмет знаком.
Вообще изначально я не думал что так взлетит и будут активно пользоваться - делал чисто для себя из интереса, Qt использовал чтобы побыстрее получить работающий прототип.
380 1465679
>>65588
А что за программа-то хоть? Что она делает?
381 1465949
>>65579
If the program dynamically links plug-ins, and they make function calls to each other and share data structures, we believe they form a single program, which must be treated as an extension of both the main program and the plug-ins. This means that combination of the GPL-covered plug-in with the non-free main program would violate the GPL.

Нужно хитрее. Например, клиент-сервер через сокеты.
382 1465975
Добрый вечер анонче, хочу для практики написать свой движок для имиджборд. Не планирую написать что-то конкурентноспособное, просто для оттачивания скиллов. Для разработки хотелось бы использовать Qt, хотя в теории могу освоить Boost давно стоило бы. Так вот в чём вопрос: из приложений я писал только пару небольших игр, и самое большое 8к строк - приложение расписания для моего вуза. К чему я это пишу, что с серверами делов не имел, и хотелось бы спросить у опытных анонов литературы/примеров/исходников для создания подобного рода сервисов, и каких-то полезных советов.
383 1466132
>>65975
Что такого в приложении для расписания на 8к строк? Хотя это и довольно обширное описание.
384 1466146
Можно ли как то послать структуру в функцию по отдельности? А то не хочется создавать отдельную переменную, когда можно просто цифры передать.
385 1466150
Как дебажить dll библиотеку в Visual Studio?
386 1466160
>>66146
Конечно! Это - ссылка, точнее константная ссылка, const MyStruct &data. В 2к0 пацаны использовали указатели, но ща не надо так делатьб.
387 1466164
>>66150
Вариант 1 - Project Options -> Debugging -> Command = имя exe-файла, который ее использует. Дальше расставляешь брякпойнты, F5 и понеслась пизда по кочкам.
Вариант 2 - Debug -> Attach to Process.
388 1466247
>>66132
Использовал подход Model-View и Qml, в основном вышли большие модели. Из всего кода сам интерфейс занимает только 1к.
389 1466395
Анончики, кто проходил собесы: что конкретно интересует работодателя в гитхабе? Качество кода или сложность реализованных проектов? Написал приложение, работает корректно, но боюсь что посмотрят на мой код и скажут что такие макаки им нахуй не надо, а на ревью и кинуть некому.
390 1466521
>>66395

> что конкретно интересует работодателя в гитхабе?


Ни-ху-я
391 1466523
>>66395
Прочитай гайдлайны и вылижи свой код. В логику глубоко вчитываться никто не будет, главное чтобы выглядело профессионально
392 1466534
>>66523
То есть им будет похуй что конкретно я писал, лишь бы кодстайл по гайдлайнам был? Грустновато как-то
393 1466542
Кто-нибудь реально (не лабы/курсачи) работает с Clion под виндой? Стоит своих денег? Как там с отладкой? Есть что-то подобное Edit & Continue из VS?
394 1466545
Подскажите за QML, есть ли возможность узнать находится ли приложение в активном фокусе? Проблема: в программе есть таймер, если заблокировать телефон/свернуть приложение таймер останавливается, а при разворачивании - идёт. То есть теряется суть таймера, вот уже несколько дней не могу понять как заставить его работать в фоне, а лучше просто перехватывать сигнал о получении приложением фокуса. Пока накостылил чтобы при нажатии на таймер он обновлялся, но это уже уровень выше быдлокода
395 1466556
>>66545
Для такой хуйни нужно сервис заводить, ведро твоё приложение все равно усыпит
396 1466558
>>66542
а зачем, когда етсь студия?

мимо-сеньор-помидор
397 1466563
>>66556
Это с джавой что-то? Можно хотя-бы ключевых слов насыпать, а то я с джавой не работал еще.
398 1466578
>>66395

> Качество кода


Для этого статические анализаторы и автоформатирование.
Хотя наименование функций\классов\переменных оно не исправит.

Иногда, бывает, интересно узнать как другие всякие мелкие проблемы.
Например есть переменная которая хранит состояние и в коде есть проверки: state == STATE1 || state == STATE2 и тд
Можешь попробовать исправить эти места с использование какой-нибудь шаблонной йоба-магией.
399 1466579
>>66578
Покажи пример
мимо
400 1466595
>>56115 (OP)
Насколько отличаются разные версии QT? Если сейчас начать осваивать QT5, то через год нужно будет с нуля учить QT6?
401 1466597
>>66595

>через год нужно будет с нуля учить QT6


Не нужно
402 1466598
>>66595
В Qt6 вроде бы как начинку собираются менять, всё в 17 стандарт переведут. Из заметного знаю что в QML строгую типизацию завезут НАКОНЕЦ БЛЯТЬ
405 1466613
>>66578

> Хотя наименование функций\классов\переменных оно не исправит.


В решарпере можно настроить
406 1466618
>>66613
Я не про автопереименование. Такой функционал, обычно, есть в IDE.
Я про смысл названия.
407 1466630
>>66612
А андроид даёт какие-то сигналы о пробуждении приложения? Жрать ресурсы пока приложение даже не используется так себе идея, легче было бы просто пересчитывать таймер, благо в программе делается в пару строк всего. Ссылку не грузит, судил по названию, если там об этом написано то извиняюсь
408 1466631
>>66630

>андроид


Уточняю: интересует кросс платформенное решение
409 1466730
>>66603
Спасибо, полезно. Хреново я конечно фичт шаблонов знаю
>>66595
Qt5 жив лет 6, и пока какого-то массового перехода не планируется. Да и Qt4 вполне себе похож.
Но, к слову, Qt любит добавлять новый функционал достаточно часто, и есть смысл его узнавать
410 1466757
>>66598

>всё в 17 стандарт переведут


МинГВ, с которым он поставляется под винду, его до сих пор не поддерживает, так что хз.
411 1466759
>>66757
Ну так будут поставлять с новым mingw
>>66630
Тут уже сам анончик, я не телефонщик
хотя на ведре вряд ли получится без жабы
Снимок экрана2019-09-0412-18-59.png233 Кб, 1068x600
412 1466801
Двач, почему так?
413 1466810
>>66801
Потому что учись работать с разными локалями
414 1466811
>>66801
1. Перейди на CLion.
2. Гугли туториалы по массиву, даун.
3. Я бы сейчас задумывался о смене языка, потому что плюсы говно (если ты не хочешь в гейдев пойти)
4. Никогда не стоит спрашивать советы на двощей.
5. Если ты начал кодить - ты подписался на то, что 100% информации будешь учить сам.

мимо прошел этот путь
415 1466959
В чем отличие между
construct(){} и construct():parentclassconstruct(){} ?
416 1467076
>>66959
Второе нахуй не нужно, конструктор базового класса без аргументов и так вызовется.
417 1467227
>>66757
https://nuwen.net/mingw.html

давно уже тут С++17 фулл
418 1467298
>>66801
Со всем, что не-ASCII, на Си/Плюсах лучше дела не иметь. А если иметь, то курить мануалы и надеяться, что ты будешь работать только с UTF-8.
419 1467328
Есть 3 класса, каждый в своем h файле. 2 класса инклюжены в main, и оба эти класса в своих заголовках инклюдят третий. В итоге компиляторы выдает redefenition of class как фиксить?
420 1467341
>>67328
#ifndef
421 1467349
>>67328
форвард декларейшенами или распиливанием классов
422 1467353
>>67328
Или
#pragma once в начале
Или Include Guard. Это мерзкие костыли с/с++ в 2к19
423 1467354
>>67341
Как пользоваться этой залупой? При создании заголовка автоматически создаётся и ifndef с именем файла капсом, но для чего это не ясно.
424 1467356
>>67341

>#ifndef


#pragma once
425 1467643
Есть вектор хранящий тип класса. Как в него поместить потомков этого класса, чтобы их методы остались при них?
426 1467648
>>67354
Ты хоть погуглил бы сначала, ну.
Динамический полиморфизм.
427 1467651
>>67354
А тебе хотел написать, что forward declaration в самом должно помочь, только это требует корректного использования этого класса внутри другого(кажется, только через указатели и без методов).
Потом в .cpp инклюдь сам класс, а в хэдер не суй его.
>>67648
Обосрался, это было сюда: >>67643
428 1467658
>>67643
Скорее всего ты ебалду какую-то собираешься написать. Храни unique_ptrы на базовый класс и дёргай виртуальные методы, при очень сильной необходимости можешь сделать dynamic_cast к наследнику и дёрнуть невиртуальные методы
429 1467665
>>67658
Мне нужно создать класс оркестр, класс музыкальные инструменты и 3 дочерних класса для муз.инструментов. Класс оркестр должен хранить элементы 3 дочерних классов и выводить их, при этом каждый из 3 доч. классов должен иметь свою собственную функцию вывода, переопределяющую таковую у класса муз.инструменты.
И я хуй знает как это реализовать.
430 1467688
>>67665
А, бля, я забыл, что семестр начался уже. Иди нахуй короче, в универчике тебе всё объяснят, не зря же ты туда поступил.
431 1467885
Анон, перспективен ли дроч ФП в крестах? Всети корутины и фьючерсы связаны с ФП? std::transform уже умеет параллелить из коробки? Оно в 2к19 быстрое?
432 1467889
>>67885

>Анон, перспективен ли дроч ФП в крестах


Перспективен скорее dataflow подход в котором ты рассматриваешь свои данные как трубу, которая куда-то течет. В ФП-тусовке этим занимались лет 30 назад, пока не улетели в космос к монадам и стрелкам. Современное ФП в крестах не попишешь. Но понимать основные принципы ФП типа иммутабельности можно и нужно. В этом плане это намного полезнее дроча паттернов ООП.

> Всети корутины и фьючерсы связаны с ФП?


Ну так, опосредованно.

> std::transform уже умеет параллелить из коробки?


Не умеет, но есть неплохая либа Intel TBB, в которой соответсвующая функция есть.
Хотя OpenMP еще проще.
6940195816776236890342715014424169765404672n.jpg65 Кб, 640x960
433 1467894
>>56115 (OP)
Такой вопрос.
Я написал два класса Canvas и Reader.
Canvas работает с bitmap ставит пиксели, отражает с права налево и сверху вниз, делает кроп и все такое.
Reader, название условное, читает и пишет .bmp. То-есть Canvas передает в Reader bitmap, а тот его преобразовывает в формат bmp и пишет в файл. Ну, или Reader читает .bmp, делает из него bitmap и отдает в Canvas. Чисто гипотетически я могу добавлять в Reader функционал для работы с другими форматами типа png или jepg, ну ясно я делать этого не буду, так как проект делается чисто для себя, что-бы подучится как вообще работать с классами и архитектурой.
Canvas взаимодействует с Reader через интерфейс самого Reader'а который у меня чисто абстрактный класс, а работа с конкретным форматом реализуется через наследника, который наследует интерфейс.

Собственно у меня два вопроса.

1 - Как правильно объединить Canvas и Reader. Функционально и идеологически это разные классы. Но все же они связанны между собой. Собственно вопрос, как вообще конструируют подобные вещи?

2 - Canvas и Reader у меня обмениваются кусками памяти, когда надо обменятся bitmap. Я просто передаю указатель на память и размер куска. Мне это очень не нравится, так как получается, что оба класса могут шарится по памяти друг друга. Собственно вопрос как сделать тут нормально и безопасно?
434 1467897
>>67894
ООП из головы просто выкинь. Ты не замечаешь, что наворачиваешь сложность на пустом месте?
И не надо оправдываться тем, что "так как проект делается чисто для себя, что-бы подучится как вообще работать с классами и архитектурой". 99% проектов с этой хуйней. Пиши просто, понадобится - отрефакторишь.

>Как правильно объединить Canvas и Reader.


У тебя есть труба, по которой текут данные, и процессоры, у которых есть вход, выход, и (что противоречит ФП, но удобно) какое-либо минимальное внутреннее состояние.

>Canvas


Зачем-то делает слишком дохуя. Для разных действий нужны разные классы.

>Reader


>пишет bmp


Ну ты понял

>Canvas и Reader у меня обмениваются кусками памяти, когда надо обменятся bitmap. Я просто передаю указатель на память и размер куска. Мне это очень не нравится, так как получается, что оба класса могут шарится по памяти друг друга. Собственно вопрос как сделать тут нормально и безопасно?



Взять матричную библиотеку (eignen, armadillo, opencv) и обмениваться матрицами трехмерных векторов (потому что картинки RGB), которые внутри уже умеют в слайсы, copy-on-write и тому подобные вещи.

Если ты прямо вообще не хочешь пользоваться готовым, пиши собственный класс подобных матриц. Но, умоляю, выброси его, хватит с нас подобного говна в реальных проектах.
435 1467909
>>67897
Спасибо конечно за ответ. Но он мне помог примерно никак.
Анон, реально спасибо тебе, но все же это совсем не то что мне надо.

Есть тут аноны которые дадут совет, не советуя при этом отказаться от ООП?
436 1467942
>>67909
От ООП нельзя отказаться или не отказаться, потому что его не существует. Особенно в С++. Особенно в 2019 году. Просто нет такого понятия.
437 1467948
>>67942
Ок.
438 1467951
>>66164
Благодарю.
439 1467952
Свежие новости по 20 стандарту есть?
440 1467954
>>67942
>>67897
Хорошо, т.е. c++ умрет? Он же был придуман как ООП? Или превратиться в шаблонный си с stl и бустом?
441 1467955
>>67954
Просто не обращай внимание на шизика.
442 1467965
>>67954
Когда придуман в 80-е? С тех пор 30 лет прошло. И за это время язык только становился дальше от ООП. Исключение тут разве что Qt с сигналами-слотами, но вот что реально умирает, так это гуи на С++.
443 1467969
>>67954
С++ это мультипарадигменный язык. Можешь писать на адовом ООП с абстрактфакторипроксибинами а-ля индусская джава. Можешь писать на чисто процедурном диалекте, а-ля чистый С. Если угараешь по извращениям, то из С++ можно сделать почти функциональный язык программирования.

Сила С++ в том, что он сочетает в себе абстракции и низкого и высокого уровня, все зависит от программиста. И крутые С++ программисты, обычно, комбинируют парадигмы, и получается хороший и читаемый код.

ООП в каком-то простом варианте (RAII) - всегда будет в С++, а вот всякая дрисня типа АБСТРАКТНЫХ ФАБРИК - это пережитки двухтысячных, такое ООП мертво уже сейчас.
444 1467996
Спрошу здесь.
Изучая с++ на что лучше всего обратить внимание?
На потоки? - почти не разбирался с ними.
На rvalue? - хз что то. Не смог нормально разобраться пока
На тепмлейты? - разбирался, но не видел нигде практического применения кроме как в stl
На ООП? - вроде разобрался на начальном уровне но слишком объемная тема.
На шаблоны? - пока не брался за них и не знаю стоит ли.
На stl? - вроде ничего сложного. Удобно.

Отпишитесь опытные аноны. Но просьба без снобизма и поучительного тона. Просто напишите что в плюсах нужно задрачивать и почему, а что не стоит и почему.
445 1467997
>>67996
Все что ты перечислил и нужно задрачивать. Точнее это база, которую должен знать каждый.
446 1468005
>>67997
А как практиковать темплейты и потоки? Ну второе еще ладно, а вот с шаблонами вроде бы всё понятно, и сфинаешка, и трейты вроде бы не сложные, но где это применять в своих программах? Или это знания уровня устройства ОС или ассемблера, то есть просто для общего понимания?
447 1468006
>>67997
Кто-то может внятно объяснить что за хуйня такая rvalue?
И где их юзают?
448 1468009
>>68006
Достаточно обширная тема, в двух словах ты не поймешь. В шаблонах Джоссатиса есть хорошее дополнение, я там более-менее понял, а так статей сотни.
449 1468012
Есть ли вообще какой-нибудь нормальный ide кроме визуал студио?
450 1468013
>>68009
Скинь ссылку на то что сам читал и что тебе зашло. Вдруг и другим зайдет
451 1468014
452 1468016
>>68013
В том же посте написал,

>Шаблоны С++ Справочник разработчика, 2-е издание


Вроде бы первое дополнение
453 1468017
>>68005

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


boost поизучай, уверенности поубавится
20 years of being disgusted.png209 Кб, 361x361
454 1468042
>>68017
Пусть ваш буст со всяким Hana и Fusion идёт нахуй.
Мимопроходил
455 1468050
>>68042
Ну, от себя что предложишь?
456 1468066
>>68012
уровня студии + решарпера нет даже близко.

А так - шлион.
457 1468080
>>68012
emacs, если не забздишь
458 1468081
>>68050
Я не он и в метапрограммировании мало разбираюсь, но что мешает использовать tuple? Хотя наверное сам отвечу - там уже есть всё, что нужно.
В догонку спрошу, что поменялось между boost.mpl и boost.mp11? А между последним и hana? Собираться быстрее стало хоть?
459 1468083
>>68012
Под винду лучше студии ничего нет и в обозримом будущем не будет. Особенно в плане отладки.
460 1468110
>>68083
Say sike right now
461 1468164
>>67955
>>67965
>>67969
Спасибо.
Для себя плюсы в плюсах я вижу в том, что я развиваю скилл программирования и перекат на любой другой язык будет максимально простым.
Вчера, например, я познакомился с кортежами, чтобы возвращать из функции два параметра, как в Матлабе.
Алсо, разбирает бугурт, когда какой-нибудь дноработник на работе спизданет типа "я пишу на с++", а на деле там очень хуевый си без классов, зато расширение файла цпп. Даже контейнеров нет, пиздец.
я не знаю для кого это пишу.
462 1468170
>>68005
Сделай compile-time вычисление синуса с заданной точностью. Предполагается создание таблицы, но все на шаблонах
463 1468171
>>68164
На самом деле, очень мало народа действительно может сказать, что знает С++, и писать не дырявую хуйню,а что-то вменяемое. Писать на C++ != знать С++, помни это
464 1468224
int temp= new int[newRowsnewColumns];
for(int i=0;i<newRows*newColumns;i++)
temp=mass;

delete mass;
mass = temp;

Мне надо создать новый массив, который будет меньше старого. Я правильно делаю?
466 1468227
>>68080
Для эмакса ещё лисп выучить надо, а я только кресты учить начал.
.jpg29 Кб, 500x500
467 1468228
468 1468240
>>67894

> они связанны между собой


Никак они не связаны. Тебе нужен класс Image с методами setBitmap, getBitmap и save. Канвасу вообе не нужно знать что там есть какой-то ридер.

>что оба класса могут шарится по памяти друг друга


По другому никак. Естественно если ты не хочешь копировать куски памяти. Естесвенно в голый указатель никто не ебется и делается какая-то обертка над ним которая позволяет упорядочить работу с этим указателем. В библиотеках направленых на работу с openGL обычно идет разделение на три класса: Текстура - это то что ты называешь битмапом, "распакованая" картинка которая отсылается в память GPU, Изображение (Image) - изображение преднозначеное для чтения или сохранения на диск, обычно подразумевается какое-то сжатие (jpg, png) но не обязательно и Спрайт - легковесный класс для передачи ссылок на текстуру (или область на ней), есть в нем содержится указатель на текстуру и координаты района текстуры. Но такое деление продиктовано архитектурой GPU, в частности тем что пытаются максимально уменьшить количество обращений к карточке, в том числе всю графику (которая используется в какой-то одной сцене) собирают в несколько больших кусков (sprite sheet). Если ты полностью на CPU рисуешь то тебе возможно нет смысла заебываться с этим. Если волнует производительность то нужно думать в сторону кеша процессора - там наоборот будут выгодны относительно небольшие текстуры.
469 1468255
Мне нравиться, что на ООП начали гнать, мол нинужон. Я на ооп потратил много времени, придумывал абстракции, какие-то там невероятные наследования, интерфейсы блядь, рисовал uml даже. И меня это бесило пиздец, так как много времени тратишь на это всё, а пользы, особенно когда проект ведёшь один, толком то и нет.
Меня ещё Ява бесила всегда, хоть и не работал никогда в этой сфере. Она ассоциируется с какими-то офисными чуханами нулевых. Бесит, блядь! Ебаный матлаб загружается на топ реке сутки нахуй
470 1468288
>>68240
Спасибо за ответ.
Но если можно уточни пару моментов.

>Никак они не связаны. Тебе нужен класс Image с методами setBitmap, getBitmap и save. Канвасу вообе не нужно знать что там есть какой-то ридер.


Канвас и ридер у меня никак не связаны. Функционально. То-есть у них обоих есть по setBitmap, getBitmap, через них они обмениваются самой текстурой. Ридер может грузит и сейвить картинку. Канвас работает с картинкой. То-есть каждый занят своим делом.
Но! Меня сильно не устраивает то что для работы с картинкой мне нужно создавать два объекта разных классов, которые вообще никак идеологически не объеденные. Мне просто интересно есть ли како-то стандартный метод "идеологически" склеить их.
Вообще тут вопрос не в этом конкретном случае. Вместо канваса и ридера может быть все что угодно. Меня именно архитектура сейчас интересует.
Ну, другой пример. Пусть у меня будет 3Д-ридер. Который читает разные форматы 3Д моделей, переводит все это в некий "стандартный" формат и отдает его обработчику, который уже делает что-то там с вершинами. Asimp так устроен.
Собственно у меня вопрос как повторить такую архитектуру?
Думаю такая ситуация, которую я описал часто возникает. Как все это разруливаеться?

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


Можешь чуть подробнее? Просто у меня сейчас как раз голый указатель передается. Скажи буквально пару слов.
471 1468407
Ребята, поясните что это за новомодная поебень с "композицией вместо наследования"? Что с этим делать и как быть? Откуда оно взялось? Почему оно вдруг стало модным-молодёжным?
472 1468458
>>68407
Это для второго принципа SOLID: дополнение существующего без его изменения. Облегчает внесение правок с предсказуемыми последствиями, dependency injection и юнит тестирование.
473 1468470
>>68407

>Ребята, поясните что это за новомодная поебень с "композицией вместо наследования"?


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

>Наследование тебе нужно для полиморфизма


И для переиспользования кода.
Но использовать наследование для переиспользования кода нужно крайне осторожно. Так как тут очень легко выстрелить себе из дробовика в обе ноги и голову одновременно.
475 1468521
>>68224
Пустые скобки у delete забыл.
А так, вроде, правильно.
Но это не точно
476 1468522
>>68521
[] Эти
477 1468876
>>68255
ООП - это не закон природы и даже не научная теория.
Тупо набор догматов.
478 1468891
>>68482
Как наследование способствует переиспользованию кода больше, чем композиция?
479 1468896
>>68891
никак
зато оно рушит инкапсуляцию и поэтому наследование это фу
480 1468899
>>68896
Этого не слушайте, он долбоёб.
481 1468901
>>68012
Кстати что насчёт Eclipse?
482 1468903
>>68288

> Скажи буквально пару слов


Ну вот у тебя передается указатель, и потом с ним что-то делается. Ты оборачиваешь указатель в класс и всю ту работу с ним пытаешся максимально перенести в этот класс-обертку. Чтобы работать с ним контроллируемым способом а не кто как захочет. Естественно у тебя графика, затратные по ресурсам операции и нужно искать компромисы - возможно все безопасн оне получится, из-за производительности.
483 1468973
>>67356

>#pragma once


Эта ебань же вроде не входит в стандарт?
да, везде работает, но НА ВСЯКИЙ СЛУЧАЙ
484 1468985
>>68891

>Как наследование способствует переиспользованию кода больше, чем композиция?


Я не утверждал что способствует больше. Я просто написал что наследование может использоваться и для переиспользовании кода.
Но если ты можешь переиспользовать код композицией, то выбирай композицию, а не наследование.
Вообще наследовать лучше всего интерфейс. С наследованием функционала могут повылезать всякие нехорошие проблемы потом.
Учти что ООП нужен именно для больших проектов. Если у тебя проект небольшой и ты не видишь куда там впихнуть наследование и прочию дичь то значит они тебе и не нужны. Обойдись без них. Используй классы чисто для инкапсуляции, как обертки.
485 1468987
>>68903
Спасибо, за ответ, анон.
486 1469071
>>67298

>Со всем, что не-ASCII, на Си/Плюсах лучше дела не иметь


А можно попробовать и получить àëëî éîáà ýòî òû
487 1469107
Я ебал в рот выбирать, на какие посты ответить.
Поэтому отвечаю безадресно
Всем, которым непонятно, какой принцип ООП главнее какого другого.

Когда ты достаточно воспринял теорию, и надрочился в практике, у тебя возникает такая хуйня, как code smell.
Ты делаешь так-то, не потому что это отвечает принципам SOLID или "один класс - одна ответственность", а потому что ты жопой чувствуешь, то так и надо.
Т.е. это забеись, что у вас возникают эти глупые вопросы "а чому так?", но привыкните, что кроме вас на них никто не ответит.
Опыт приходит не с правильными ответами на дваче (да даже и на стэковерфлоу), а на порванной парой хуевых проектов жопе.
Стремитесь к этому, а не к абстрактному понимаю асбтрактных принципов.
488 1469120
>>69107

>Опыт приходит не с правильными ответами на дваче (да даже и на стэковерфлоу), а на порванной парой хуевых проектов жопе.


На самом деле не приходит, потому что ООП является псевдоинтеллектуальной хуитой.
489 1469150
>>69120
Я твою, псевдоинтелектуальную, маму в рот ебал.
490 1469152
>>68985

>Учти что ООП нужен именно для больших проектов.


Никем еще не доказано, что ООП ускоряет или удешевляет разработку больших проектов. Что на маленьких, что на больших проектах проблема условно говоря одна -- разбиение сложной проблемы на более простые. Отсюда требование, чтобы разные компоненты программы работали как можно более независимо, чтобы разработка каждого компонента была относительно простой задачей. Но наследование не приводит к модульности, у тебя наоборот разные классы связываются между собой, ты уже не можешь поменять один класс, чтобы он гарантированно не уебал всех своих наследников.
Этого не происходит с интерфейсами, потому что интерфейсы никакого отношения к наследованию на самом деле не имеют, интерфейс это просто некая гарантия, что объекты данного типа могут быть аргументами для некоторых функций. Интерфейсы есть и в функциональных языках и к ООП никакого отношения не имеют, так нахуя тащить в язык целую свалку в виде ООП? Ради единственной полезной фичи, которая реализована через задний проход, и называется это умным словом "наследование"?
491 1469183
>>69120
Тебе виднее, хули
492 1469184
>>69183
Да лень расписывать уже, вы же деревянные один хер
493 1469213
>>69184

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

494 1469220
>>69213
Ну давай так, гринтекст. Как много статей о критике ООП ты читал и что тебе в них не понравилось?
495 1469223
>>69220

>статей


Лол.
Статьи не нужны, нужен код. Будет лучший, чем ООП, способ писать код - будем писать по другому.
496 1469227
>>68014

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

497 1469256
>>69152
ООП не сводится к наследованию. Более того наследование лучше юзать чем меньше тем лучше.
Просто без ООП хуй ты более менее большой проект напишешь
498 1469323
>>69256
Сводится. Инкапсуляция -- это синтаксический сахар, а без наследования нет полиморфизма.
499 1469324
>>69323

>а без наследования нет полиморфизма.


Если речь не про тимплейты/дженерики, конечно, но они к ООП прямого отношения не имеют, это скорее элемент функциональщины.
500 1469342
>>69323

>без наследования нет полиморфизма.


Че за бред вообще?
501 1469344
>>69223
Попробуй заглянуть в стандартную библиотеку
502 1469360
>>69342
Приведи пример, когда полиморфизм в ООП реализован не через наследование. Интерфейсы в жабе -- это тоже про наследование, если что. Ad hoc полиморфизм по типу когда void func(int) и void func(double) считаются одной и той же функцией (методом) к ООП особ отношения не имеет. Тимплейты тоже. Все это можно сделать без ООП в языке типа Си.
503 1469377
>>69360
Генерики в жабе.
Впрочем, ты поднялся на слишком высокий уровень для этих обезьян.
504 1469388
>>69377
Дженерики без наследования тоже особо работать не будут. Это просто указатель на Object (по аналогии с указателем void в C), но со статической проверкой типов. Т.е. оно все равно имплицитно использует тот факт, что все объекты в Java наследуются от Object. Плюс просто так дженерики без extends/super использовать особо не имеет смысла (иначе почему бы не делать все через Object по старинке), а это уже наследование.
505 1469392
>>69388
Ок, уговорил.
Да вообще все идет по кругу. Когда я пришел в кодач, не понимал, че это все ООП хейтят. Теперь понял. Но объявилось новое поколение школоты. А я уже старый и мне даже спорить лень.
506 1469413
>>69392
Хейт к ООП не столько из-за самого ООП, сколько из-за мифологизации ООП как таблетки от всех болезней, которая наконец то всех нас спасет от высокоуровнего ассемблера а ля Си. Объяснение ООП нужно начинать с объяснения полиморфизма, как и почему он работает. А объяснение полиморфизма нужно начинать с, сюрприз, теории типов. Потом нужно переходить к тому, что наследование в ООП -- это не более, чем способ реализации полиморфизма. Вместо этого студентам ебут мозг примерами про кошечек и собачек, которые наследуются от Mammal, в результате нихуя не понятно. И проблема не в примерах, потому что примеры могут быть вполне хорошими, а в том, что пример сам по себе объяснением не является.
Из-за этого флера недосказанности со стороны ООП выглядит как секта, где все поклоняются ООП, но никто не может объяснить, как это говно работает и почему оно выразительнее процедурного программирования. Оно действительно выразительнее процедурного программирования (если мы под процедурным программированием подразумеваем чистый Си), но адепт ООП тебе никогда не объяснит, почему, потому что тогда все очарование пропадет и адепт лишится объекта поклонения.
507 1469418
>>69413

> Вместо этого студентам ебут мозг примерами про кошечек и собачек


А теория типов будет, значит, ясна человеку который учится программированию несколько недель?
Тем более всё запутает.
508 1469422
>>69418
Значит надо давать больше реального кода на си, показать хотя бы препроцессорную компиляцию, передачу массив по констптр и, я хуй знает, контейнеры в с++. Это полезные вещи, которые хорошо займут время преподавания ООП.
мимо
509 1469425
>>69422

> передачу массив по констптр и, я хуй знает, контейнеры в с++


Учим программированию или языку с++?
510 1469428
>>69418
И тут мы приходим к закономерному выводу, что учить новичков сразу ООП нельзя.
Ну и тут надо понимать, что учить на мультипарадигменном языке, где ООП одна из парадигм != учить ООП. Программированию вполне можно учить и на С++, и на Python, просто давать информацию дозировано.
Уже не говоря о том, что учить программировать можно на языке без ООП, на C или на Scheme, например.
511 1469436
>>69220
Где статьи, а где ты.
Со статьями все ок, а ты обосранный хуесос.
512 1469437
>>69425
Тред про с++ ващето. Так что учим программированию на плюсах
513 1469439
>>69428

>Уже не говоря о том, что учить программировать можно на языке без ООП, на C или на Scheme, например.


Да можно вообще учить программировать на ассемблере. А еще лучше - сразу в автокоде для МК-61, хуле.
Сортировка методом пузырька не сильно от этого изменится.

Учить ООП без наработанных на жопе мозолей от программирования без ООП, конечно, глуповато.
514 1469455
>>69439
Я учился кодингу с создания карт для варика 3.
Там процедурное программирование. Чуть лучше чем в Си, конечно.
515 1469487
>>69439

>Учить ООП без наработанных на жопе мозолей от программирования без ООП, конечно, глуповато.


Новичок не сможет нормально использовать ООП, если его учить сразу ООП. Тем более, что ООП не про алгоритмы и структуры данных, а про разработку полноценного софта, у которого есть как минимум ТЗ. Так что да, в идеале без наработанных на процедурном программировании мозолей к ООП вообще нельзя подпускать за километр.
516 1469547
>>69487
Короче.
ООП это всего лишь инструмент.
Можно программить на яве, где любой кусок кода надо обернуть в класс, и не пользовать ни одной идеи из парадигмы ООП.
А можно и наоборот.
Когда ты знаешь, что кроме молотка и отвертки есть еще гаечный ключ, дрель и токарный станок, ты не пытаешься ЛЮБУЮ РАБОТУ делать молотком. Но когда тебе надо забить гвоздь, ты не пытаешься использовать для этого отвертку.
Я видел людей, которых начинали учить сраз в парадигме ООП.
Они и программу, которая умножает две константы, пытались делать на иерархии из 10-ти классов.

В общем, "хейт к ООП" существует только во влажных мечтах анона, особенно того, который херачит на яваскрипте.
Природа даже для дрочки дала две руки, какую выбрать - сам решай.
517 1469576
>>69547

>особенно того, который херачит на яваскрипте.



ПЕРЕСТАНЬТЕ насмехатся над разными языками программирования
C быстрый
Java популярный
Ruby прикооольный
Python прекрасный
Javascript
Haskell интригующий
518 1469606
>>69576

> Java популярный


Искренне желаю, что его популярность упадет и никто это говно не будет использовать. Андроид правильный шаг сделал
519 1469609
>>56538
stl не разрабатывается, чтобы быть самым быстрым, а чтобы быть надёжным.
если тебе нужна скорость -- бери специально заточенные под это фреймворки или сам пиши
/th
520 1469621
>>69606
А, на что именно пересел Андроид?
Я просто за новостями не слежу особо.
521 1469625
>>69621
На Котлин
522 1469658
>>69547

>всего лишь инструмент


>что кроме молотка и отвертки есть еще гаечный ключ, дрель


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

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

Или еще лучше - посмотри на врача-хирурга. У него довольно много инструментов, но не менее важно, то что его набор также ограничен. Нету у него времени выбирать "идеальный".

>всего лишь инструмент


Подбирать "идеальный" инструмент на каждый пук - не самая лучшая стратегия.
Вон кладовщик на складе инструментов или продавец-консультант знает все обо всех инструментах. Кроме того, как ими собственно пользоваться.
523 1469678
Ананасы, может кто-то во всяких блогах\сайтах\книгах натылкался на разные идиомы\паттерны?

Типа такого:
https://news.ycombinator.com/item?id=20159216
https://habr.com/ru/post/326540/
https://en.wikibooks.org/wiki/More_C++_Idioms

Банда четырёх это замечательно, но хотелось бы ещё чего-то. Скажем так, для каких-то небольших\локальных решений, а не на уровне всей иерархии системы или её частей.
524 1469862
>>69576
С - самый простой и убогий язык из тех, что используются на практике.
Java - кобол нашего времени.
Ruby/Python - пыхоплеяда, высеры ГСМ-ов и неграмотных долбоебов, которые проделали большую работу изобретя квадратное колесо
Javascript - JavaScript
Haskell - язык программирования, менее вонючий чем все остальные, и от того нахуй никому не нужен.
525 1469865
>>69862
Раз все языки говно, то какой топчик?
526 1469870
>>69865
Д Р А К О Н
Р
А
К
О
Н
527 1469906
>>69862
Как же у человека в голове то насрано.
Впрочем он явно не кодит активно и судя по всему никогда и не будет, так что вреда особо не принесет.
528 1469918
>>69870
Сука содомит
529 1469919
>>69906
Нет, не угадал. И вреда разработке ПО, больше чем рандомная крестоблядь, принести довольно сложно.
530 1469926
Куда в 2к19 можно податься, хорошо зная кресты, чтобы зарабатывать не меньше чем за жс или го? Читаю статистику моего круга и облизываюсь на среднюю зп гофера в 150к. В нашей крупной продуктовой конторе столько платят только синиерам с 5+ годами опыта. Блохчейн сразу нахуй.
531 1469928
>>69926
Гейдев, тридэ
532 1469929
>>69928
В РФ есть геймдев?
533 1469930
>>69929
Конечно есть. Только не такой большой и не для всех
534 1469932
>>69930
Люблю кресты за то, что нужно рвать жопу, чтобы получать скромные по меркам любого другого стека зп.
535 1469956
>>69932
Что мешает перекатиться?
536 1469961
>>69956
Зарплата на 30% просядет, если снова на джуна устраиваться.
537 1469965
>>69956
Перекатываться между языками не так просто, как кажется. Ты можешь выучить синтаксис, но овладеть соответсвующим языку стеком на уровене хотя бы мидла можно только практикой. В этом плане С++ один из самый простых, ибо кроме правил языка, хоть и бездонных, в нем ничего нет. Нет здоровенных фреймворков типа спринга, не надо ебаться с конфигами серверов и билд-систем, не надо держать в голове особенности разных GC и подбирать их под задачу, чтобы увеличить RPM. Поэтому неудивительно, что за кресты не так хорошо платят, ибо сложные вещи типа метапрограммирования все равно на практике применяются довольно редко, а обычные фичи аналогичны таковым в других языках и изучить их не такая уж и проблема.
538 1469971
>>69862
Запахло несвежей копипастой..
539 1469975
>>69965

> Нет здоровенных фреймворков типа спринга


Qt

>Поэтому неудивительно, что за кресты не так хорошо платят


Да чуть ли не каждой второй веб-макаке с 2-3 годами опыта платят больше, чем мидлосиньерам на крестах. Ведь, конечно же, на рынке платят за знания, а не за способность произвести прибыльный продукт.
540 1469980
>>69975

> Qt


Десктоп-фронтенд на C++ не вписался в рыночек. А про веб ты прав, сегодня это намного прибыльнее крестов.
542 1470245
>>69965

>Нет здоровенных фреймворков типа спринга


boost
543 1470248
>>70245
А где-то требуется знание всего boost от корки до корки?
По-моему такие требования из области тыжпрограммист.
544 1470261
>>70248
Легаси........
545 1470294
>>70261
Ну легаси эт понятно.
Но буст - это же десятки независимых библиотек под совершенно разные предметные области.
547 1471192
Какой же clion охуенный, просто секс. После последней обновы заголовок окна объединен с панелью меню и при передаче аргументов методу класса подписываются имена переменных.
548 1471338
>>71192
в вижуал студии + решарпер как полгода+ есть и то и то. Но ты, вероятно, хейтер
550 1476047
>>62953
Конан оказался топчик, спасибо.
Тред утонул или удален.
Это копия, сохраненная 4 октября 2019 года.

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

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