+ Теперь на всех досках на 1 капчу 10 постов. + Для того, чтобы свести влияние пинга к минимуму, файлы из треда качаются параллельно по две штуки разом. + Разметка немного допилена (не помню уже, что именно менял, вроде чтоб ссылки лучше определялись). + Реализован новый быстрый поиск. Index-based, так сказать. Работает быстрее, чем ты тилибонькаешь свой стручок. + Исправлено добавление ссылок на посты при получении новых постов AJAX-ом. + Алерты заменены на всплывающие сообщения. + Исправлено отображение превью постов. + Добавлена возможность удалять файлы без удаления постов. + На доске /echo/ добавлена возможность редактировать ссылку на внешний трендель. В целом увеличена гибкость шаблонов и скриптов для создания нестандартных досок. + Добавлена доска /rpg/ для рпг-тредов (популярны на ычане). На этой доске имеется встроенная система голосования (ибо специфика такая). + Предусмотрена возможность добавлять доски, где нельзя постить файлы, и при этом можно создавать треды (раньше тред без файла никак нельзя было создать). + Примерно в 10-15 раз увеличена скорость рендеринга тредов/досок (закеширована одна тяжелая операция). + Добавлен диалог настроек. Настройки времени и стиля помещены туда. + Добавлена возможность выбирать тип капчи. В /pr/ железно зашита кодерская капча для защиты от дебилов. + Добавлена поддержка яндекс-капчи (горите в аду, суки, за такой уебанский апи). + Исправлено ошибочное отображение нулевого (0x0) разрешения для аудио- и видеофайлов. + Исправлено отображение ошибки при постинге, если ошибка произошла не на сервере, а где-то в пути (прокся не пустила и т.п.). + Добавлена возможность быстрого ответа на выбранный пост (форма телепортируется прямо к посту, потом уходит на место). + Добавлена возможность отрендерить все посты заново (при изменениях в разметке, например). + Рендеринг постов теперь выполняется вне транзакции. + Отрефакторены скрипты, теперь это чуть меньший быдлокод, чем был, хотя все равно та еще дрисня. + Постинг теперь осуществляется при помощи XHR, избавился от хака с использованием iframe. Бонус - отображение процесса загрузки. + Добавлен класс конфигурируемой доски (ура, слава яйцам!), теперь не обязательно на каждую доску делать свой класс, достаточно задать имя и название.
>>468630 Ну, знаешь, если уж компания, которая на этом специализируется, ничего не смогла сделать, то остается только расслабиться и получать удовольствие. Алсо, хитрый план: можно взять там платный тариф и в случае, если они обосрутся, требовать с них денег (разумеется, больше чем заплатил сам).
>>468635 Сделай, алгоритм там описан. Если тебе надо разобраться, то разбирайся, иначе не вижу смысла не использовать готовые оптимизированные решения "с накрутками".
>>468638 Лолшто? Сишку ж (без некоторых мелочей) можно считать подмножеством крестов. Синтаксис один в один, шо там функции, шо тут функции, только классов нет. Хз что там можно не осилить прочитать. Вот заголовок mpqs, что тебе там не понятно? [code lang="c"] #include <math.h> #include <stdio.h> #include <stdlib.h> #include <string.h> / for memset / #include <limits.h> / ULONG_MAX / #include <sys/types.h> #include <sys/resource.h> #include "gmp.h"
typedef struct { unsigned long q; / large prime / mpz_t x; unsigned int n; / number of primes stored / unsigned int a; / number of primes allocated / int p; / primes and/or indices / unsigned int e; / exponents / } relation_struct; typedef relation_struct relation[1];
typedef struct _trie_t { unsigned long p; / large prime / struct _trie_t left; struct _trie_t right; } trie_t;
>>468582 Ты ёбнутый? Новые крупные известные платформы появляются раз в 2-3 года, надо будет другой размер инта сделать — сделают. Надо будет другую реализацию — реализуют.
>>468845 Стандарт не устанавливает конкретных размер ниодного типа, кроме char который равен 1 байту (при чем не важно сколько в нем бит). int должен соотвествовать самому оптимальному способу представления целого числа на конкретной архитектуре - что фактически значит что int должен быть равен машинному слову конкретного процесора.
>>468868 Когда делаешь лабу по прожке, чем я собственно сейчас и занимаюсь. У меня возник порочный круг shared_ptr - enable_shared_from_this - weak_ptr. Никаких иных путей его разрешения, кроме как пихать инклюды посреди файлов не вижу, это норма?
>>468799 >GCC и есть де-факто стандарт, похуй, что он отличается от официального. вон из профессии, мразь
>>468845 >Я что-то путаю, или по сишному стандарту инт 16 бит? 1. базовым типом является char, размер которого в битах implementation defined 2. размеры всех типов считаются в кол-ве char'ов, sizeof возвращает размер в char'ах 3. на популярных платформах int имеет размер в 16 бит (DOS), 32 бит (Win/Lin), 64 бит (Linux) 4. на эмбеддед говне вообще может быть всё что угодно 5. для битоёбов есть типы int8_t, int16_t, int32_t 6. sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)
>>468871 >У меня возник порочный круг shared_ptr - enable_shared_from_this - weak_ptr. >порочный круг wat?
>>468890 >С++11 и С++14, меняющийся Qt - как всё это держать в голове и иметь в виду? 1. между 11 и 14 выбирать сразу 14 2. куте существует только два (4 и 5) и там общие концепты
>>468904 Язык до каждого ключевого слова + STL + Boost + Qt + какая-то предметная область (численные методы, сети, графика) + большая часть основных алгоритмов (сортировки, графы, это всё).
>>467478 > Всегда ли двоичное представление положительных чисел для знаковых и беззнаковых типов совпадает? Или возможно "implementation defined"? В стандарте такого нет. Единственно что они (типы) будут одинакового размера.
Сап, аноны. Помогите с чтением из файла. У меня записывается туда 8 структур по 4 строки и разделяются пробелами. Как считать из файла каждую строку в новую переменную и после считывания последнего элемента перескочить через строку?
Накидайте что надо знать, чтобы на собеседования плюсоразрабочиком ходить? Пишу сейчас на плюсах в НИИ, но с деньгами совсем плохо — скоро придётся менять работу, похоже, буду подтягиваться
>>468997 С клавиатуры ввожу несколько строчек: Фамилия, дата рождения и т.д... Записываю их в txt файл. После этого мне нужно считать из файла эти данные и записать их в переменные.
>>468998 ебанутые вопросы по памяти: - в чем причина замены std::auto_ptr на std::unique_ptr - разница между указателем на функцию и указателем на функцию-член-класса - обеснить работу dynamic_cast, для чего он нужен, когда он может работать и как его можно поломать - обеснить работу хеш-сетов (std::unordered_set) - найти ошибку: int x[100]; for (int p = x; p != x+sizeof(x); ++p) p = 0;
>>469032 А этими всеми стандартными умными указателями в реальной работе правда пользуются?
А в коде ошибка в том, что sizeof(x) нужно разделить на sizeof(int) (ну или просто написать p != x + 100) - компилятор при арифметических операциях над указателями учитывает за нас его тип и сам домножает числа на sizeof(тип).
>>469015 Ну это просто >>469032 За вопросы спасибо, пошёл разбираться с указателями, остальное лёгкое. int x[100]; for (int p = x; p != x+100; ++p) p = 0; Мне интересны в первую очередь не вопросы, а именно знания — ходовые фреймворки (я кроме буста ничем никогда не пользовался), типовые задачи, которые возникают на работе, инструменты (valgrind сейчас в ходу?) и.т.п. >>469053 > Чаще аллокаторы кастомные, говорят, что в гейдеве часто так делают при разработке двигла. Да, действительно правда. Наш кастомный аллокатор std::map по производительности выше стандартного то ли на четыре порядка, то ли на пять.
>>469050 Яндекс, насколько я знаю, что-то там свое пилил. Но как-то у них все через жопу там.
Олсо, я обещал рассказать про КРОКовский семинар, который я посетил в среду.
Я вообще об этой компании мало чего знал, поэтому когда туда шел, то думал, что увижу двухэтажное чуханское здание. Однако это была 11 этажная йоба с собственным дата-цетром и прочими плюшками.
Семинар был довольно уныл. Я думал, что там будут рассказывать за какие-то технологии и задумки, однако нам поясняли за их продукты. Причем довольно поверхностно.
Доставило, что у них есть свой фреймворк. Вообще у них весь процесс поставлен на поток. Прототип программы они клепают на своем фреймворке чуть ли не мышкой, показывают заказчику, а потом уже начинают наращивать функционал.
Автоматическая сборка, тестирование -- вот это все. Даже некоторые проекты сбраывают заказчику, а он, в свою очередь, уже у себя их собирает и разворачивает.
Дико припекло от того, что они пишут исключительно на C#/Java, аргументируя это тем, что сейчас куда важнее удобство разработки, чем скорость работы программы. C++ они, конечно, тоже используют, но очень мало. Специфичные задачи типа распознавания пикч.
И ещё довольно расстроился, когда они сказали, что "ну в любом случае, когда студент приходит на собеседование, то он обычно пяток языков знает".
Офис у них пиздат. Можно было по нему гулять, чем мы и занялись. Автоматы с дешевыми снеками, пиздатенькая столовая и прочие плюшки. Хотя в офисе довольно жарко было. Угощали компотом, чаем и булочками.
>>469061 > он обычно пяток языков знает Вот ненавижу подобные формулировки, что значит "знает пяток"? Где границы того, что все они называют знанием технологии? Умение применять её на практике? Знание тонкостей работы платформы, о которых все вспоминают реже раза в год? Всё вместе?
>>469064 Вот у меня от этого и полыхнуло. Я вот правил скрипты на bash, ruby. Писал программки на pascal, basic, python. Пилил сайты на php, дописывал к ним простенькие модули на Javascript, jQuery.
А ещё я один раз смотрел учебник Java и гонял примеры.
А значит ли это, что я знаю 8 ЯП + C++, ведь я на нем всякую лабуду пишу.
>>469061 >Дико припекло от того, что они пишут исключительно на C#/Java, аргументируя это тем, что сейчас куда важнее удобство разработки, чем скорость работы программы. Но ведь это здраво для бизнеса - какая разница, на чем рисовать окошки. >ну в любом случае, когда студент приходит на собеседование, то он обычно пяток языков знает Я в своём ВУЗе как минимум на пяти языках всякие императивные хелловорлды в течение семестра на каждый язык писал, лол.
>>469065 Подобная фигня, только без веба. Тоже моделировал разные физические процессы на разных языках, кодил всякую обработку сигналов и изображений. За всё время обучения успел покодить на: C/C++, C#, Java, Scala, Haskell. С использованием всяких Qt, CUDA/OpenCL, Boost, OpenCV. Но понимаю, что для рынка вообще не представляю никакого интереса. Пишу диплом и думаю, что походу придётся преподавать какую-нибудь никому не нужную физику или переучиваться.
>>469070 Ну я сел за написание ботнета. Поговаривают, что достаточно прибыльно. Ну и буду на собеседования ходить. Тут анончик писал, что таки устроился.
Олсо не смог ответить ни на один вопрос отсюдова >>469032 , так что дохуя чего надо будет изучить.
Наткнулся тут на какую-то пасту, где анон писал о том, что зря тратил время на учебники. Он писал всякие конспекты и пытался все учить. Сам так делаю, блядь. Сижу теперь озадаченный.
>>469069 >Что это такое? laba1.f90, laba2.cpp и laba3.java со всякими физическими и не очень задачками физфак же. >Meh. Это усложняет мне жизнь, ибо я хотел бы устроиться C++ бабуином. С++ бабуины не нужны, а быть Java/C# бабуином в 100 раз проще. >>469070 Нужен, братишка, еще как нужен. http://isi.nfsoi.org/http://isi.nfsoi.org/tasks
>>469073 >С++ бабуины не нужны Ну я, например, не очень в математике шарю. ВУЗ у меня специфичный, поэтому упора на математику нет. Такие дела. А я так понимаю, что сейчас на C++ никто не пишет без применение каких-то мат. залуп, да?
>>469076 да почему же? Я вот сферу деятельности немного менять планирую, например, этим летом и на плюсовика планирую устариваться, пока что сам подтягиваю знания по плюсам потихоньку, уверен что куда-нибудь да устроюсь.
>>469077 Ну. Где нужен С++? Там где нужно что-то быстро вычислять. Ну или в игорях во всяких. В этих областях математики, наверное, немерено. Я ничего против неё, конечно, не имею, но мне нужно время, чтобы освоить её, причем самостоятельно.
А львиная доля всякого ынтерпрайза на всяких Java/C# пишется.
>>469078 не обязательно связано с математикой. просто пройдись по вакансиям с++ на hh, сам удивишь, с математикой тут2 варианта обычно 1) игрострой 2) наука, но в ней обычно насрать на каком языке ты пишешь и какой знаешь, потребуется - выучишь
>>469061 >что сейчас куда важнее удобство разработки, чем скорость работы программы Вся суть крестоблядей. Оказывается нужно быстро код писать, а не искать утечки памяти. У меня так же пекло до момента когда я начал использовать буст и кутэ.
>>468625 Парни, есть реквест: В текстовике Пример строки: “\033[31mThis text is red, \033[34mand this text is blue.” Вывод: Красным: This text is red, синим: and this text is blue. Код, который написал я: http://pastebin.com/dMDGsqzD Проблема в том, что почему-то в массив пишутся совсем не те значения х, которые я предполагал => консоль не красится. Вместо следующими за [ — 3 и 1, я получаю два хуя, хранящихся в массиве - с подливой и без. Соответственно, я неправильно передвигаюсь по элементам массива (элемент x+1 нужно записывать как-то иначе?) или в чем дело?
>>469078 Еще забыл поддержку различного сорта громадных энтерпрайдов, написанных на плюсах и которые переписывать в высшей степени нерентабельно.
Например, в ЕМС основной их флагман -- Clariion написан на плюсах и развивается, расширяется тоже плюсовыми разработчиками. Но зато все все новые проекты уже пишутся только на всяких джавах и дотнетах.
В многих других крупных компаниях также -- написано какое-нибудь крупное приложение на плюсах, его нужно поддерживать, расширять, наполнять фичами. Переписывать его целиком на более современный язык дорого. Вот в такие компании с++ разработчики активно требуются. И их довольно много.
>>469094 Канонический быдлостуденческий говнокод-франкенштейн, собранный из кусков чужих лаб с фрагментами собственного уродства.
Вообще нихуя непонятно, что ты даже пытаешься сделать. Зачем ты инкрементируешь считанный символ? Ты вообще понимаешь, что строчка x++; не читает следующий символ из файла, а просто увеличивает значение символа на единицу?
>>469134 Ну это вообще днище. Нас на втором курсе это все учили делать.
>>468998 Исходя из моего опыта хождения по собеседованиям спрашивают обычно следующее (но специфика очень сильно зависит от конкретной предметной области и спектра решаемых задач): 1. Понимание принципов ООП, умение внятно их описать и объяснить, зачем они нужны. 2. Знание основных STL-евских структур данных и алгоритмов. Понимание, чем отличаются контейнеры, каким образом данные в этих контейнерах хранятся. 3. Понимание, что такое О-символика, каково асимптотическое время выполнения базовых операций над контейнерами и почему вызывать std::sort для std::list -- плохая идея. 4. Знание основных алгоритмов сортировки, поиска, алгоритмов на графах, строках, умение внятно объяснить, как работают хеш-таблицы и основные деревья поиска. 5. Глубокое знание синтаксиса и особенностей языка. Канонический вопрос про виртуальный деструктор, понимание как реализован полиморфизм в языке, что такое таблица виртуальных функций, и т.п.. 6. Понимание процесса сборки программы: компиляции, линковки. Что такое объявление и определение функции/переменной, для чего нужны заголовочные файлы, почему определение шаблонной функции нельзя поместить в .срр файл, оставив объявление в заголовочном. 7. Знание основ представления целых и вещественных чисел в памяти, стандарт IEEE 754, знание основ машинной арифметики, прямой, обратный, дополнительный код. 8. Знание базовых паттернов проектирования (синглтон, визитор и т.д., открываешь банду четырех и вперед по содержанию). 9. Понимание основ многопоточности. Что такое мьютекс, критическая секция, read/write mutex, promise/future. Это так, навскидку. Может, еще чего вспомню, добавлю.
>>469180 Мне приходилось аналог сортировки слиянием писать на одном из собеседований. А вообще, на ЕГЭ даже заставляют на бумажке писать довольно непростую (для школьника) программу. Так что взрослый дядя, претендующий на свои 50+к в месяц, уж должен уметь такие простые вещи как сортировки без ошибок писать.
>>469181 Практика. Берешь и пишешь простые вещи на бумажке. Начни с тех же сортировок, бинарного поиска.
>>469176 >Почему компилятор не кричит о несоответствии типов Потому, что ты вызываешь статик каст, лол. Попробуй использовать неявное приведение типов - компилятор ругнется. >почему через указатель на B вызывается функция A Потому, что у тебя объект как был класса A, так и остался A - ты преобразовал лишь указатель. Алсо зачем вообще пихать в указатель класса наследника ссылку на объект класса родителя?
>>469176 > через указатель на B вызывается функция A? Потому что в в vtable указатель на метода A. А вот по поводу хуиты со static_cast походу в стандарт лезть придётся.
>>469176 > Почему компилятор не кричит о несоответствии типов По твоему компилятор должен проанализировать весь твой код и понять, что у тебя по указателю на A лежит на самом деле экземпляр А, а не B? Static_cast в отличие от dynamic_cast'а не производит проверок на реальное соответствие типа. Как можно догадаться из названия, он выполняется на этапе компиляции, поэтому он небезопасен. Когда ты пишешь static_cast<B*>(a), ты как бы говоришь компилятору "слушай, братан, тут указатель a полюбому будет указывать на экземпляр класса В, поэтому не заморачивайся, а просто сделай приведение типа".
>>469181 суть теста "написать Х на бумажке" --- проверить, не напиздел ли кандидат в своем резюме и он вообще не знает как программировать. собственно тестировать этот кусок кода никто не будет и мелочи выковыривать не будут; могут только докопаться до важных граничных моментов --- например, в двоичном поиске или quicksort случай когда элементов один или два (там приколы с округлениями, если коряво написать, то можно зациклиться).
если хотят действительно проверить навыки, то дают тестовое задание на дом
>>469183 из реально ебанутого случая --- написать итератор по иерархическому дереву (типа дерева каталогов), который обходит все элементы дерева по одному разу
>>469191 тут нужно аккуратнее между тонкостями static_cast и reinterpret_cast, ты описываешь почти reinterpret_cast
>>469186 static_cast делает преобразование между двумя такими типа, для которых можно провести единственную цепочку по иерархии наследования либо существует оператор преобразования
в случае примера происходит т.н. upcast, т.е. преобразование от базового класса к производному static_cast не может сделать преобразование например между классом A и int, т.к. нет оператора преобразования
также static_cast не может преобразовать от базового класса к последнему потомку в ромбе множественного наследования: когда есть class A; class B: public A; class C: public A; class D: public B, public C. в этом случае преобразование от указателя на A к указателю на D (и наоборот) невозможно ввиду того, что не понятно по какому пути производить преобразования
Товарищи, есть базовый класс, есть много разных наследников. Есть ли способ, кроме dynamic_cast, в рантайме определять с каким именно из наследников мы имеем дело? dynamic_cast мне не нравится, потому что проверка в этом случае - несколько побочный эффект, а значит это немного не для моих целей инструмент. Более осязаемая причина: он не умеет работать с константными переменными.
>>469260 Ах, да, все наследники имеют используются для хранения всякой всячины, поэтому виртуальные функции ничего не решат, мне нужно именно понимать, кто передо мной.
Снова превозмогающее быдло в треде. Быстрее ли программы, связанные с библиотеками статично, программ, что связанны с библиотеками динамически? Или же во втором случае медленнее работает только первое обращение к какой-нибудь функции, а далее различий нету никаких?
>>469279 Ужасное решение, как минимум потому что не использует систему типов, а реализует какой-то самопальный протокол поверх языка, вследствие чего будет работать очень медленно и ненадежно, не говоря уже о том, что реализовывать это придется очень коряво и с поддержкой будет не меньше проблем.
>>469327 Ну вот есть у меня библиотека с парой контейнеров. Очень часто используется в основном приложении. Мне её динамической или статической делать? Будет ли разница заметна?
>>469345 >В итоге твой вариант пройдет полный цикл за n. Во втором варианте за n / 5. Ты забыл учесть время которое тебе нужно для считывания в строку, а там О(n). В итоге у анона решение в один проход с константной памятью, у тябя два прохода (второй раз каждый пятый символ), плюс линейный расход памяти.
>>469344 Понятно, что в общем случае неравносильно. Но я спрашивал про конкретно мой пример: 1) создали поток; 2) открыли файл; 3) больше пока ничего не делали.
>>469334 Вот здесь они всегда равносильны или нет?
Решил обмазаться ассемблером. Хочу написать сначала какую-нибудь простенькую программку, а потом проделать внимательно все из этого курса http://wasm.ru/wault/article/show/ollydbg01
Один вопрос, какой ассеблер делать и как в него вообще пидорится? Есть какая-нибудь IDE? Как вообще запускать программки на асм?
>>469437 >QMap<QPushButton *, QString> Что это за бред? Храни строку в каком-нибудь свойстве кнопки, например btn->setProperty("myString", "хуй говно пизда");
>>469468 >какой ассеблер делать Щито? Бери FASM, в нем много полезных фич. >как в него вообще пидорится? На том же васме можно найти туториал. >Есть какая-нибудь IDE? Нормальных не замечал. >Как вообще запускать программки на асм? Как и обычные программы, отличий-то нет.
>>468625 няши, есть один код, http://pastebin.com/RH5DQFQh не понимаю как он работает, объясните пожалуйста откуда берётся значение переменной b, и почему оно равно единице?
>>469515 С чего ты взял, что она равна единице? Функция f возвращает не значение, а указатель. Мы передаем этой функции число 2, а она возвращает указатель на третий элемент массива b. Это эквивалентно выражению cout << b[0+2].
>>469351 Я бы поставил на нет, да и вообще люблю линковать статически. Большинство крупных высокопроизводительных приложений это огроменные бинарники, куда динамически всё залинковано. Скорее всего ты занят premature optimization.
>>469437 > Есть какая-нибудь IDE? Visual Studio? Пиши вставки же. Не знаю, кто сейчас вообще на ассемблере пишет, компилятор ассемблерщикам давным давно в рот суёт, не в последнюю очередь из-за зоопарка платформ
>>469543 >компилятор ассемблерщикам давным давно в рот суёт Nope. >не в последнюю очередь из-за зоопарка платформ А с этим трудно спорить, кроссплатформенность - штука хорошая.
Есть такая залупа: http://pastebin.com/qDt8S1T8 Абсолютно разные по содержанию Elem(int), Elem(double), diffElem(int), и diffElem(double), но абсолютно одинаковые в плане синтаксиса Solution() и diffSolution() с точностью до замены первых двух функций на две последние. Как избавиться от копирования кода без лишних трудозатрат?
>>469547 > Nope. Можешь привести минимальный пример, где ассемблер обгоняет icpc или даже просто реализацию на mkl? Ну хоть чутка? Или хоть ссылку на какую-нибудь обоссанную статью на хабре?
Я так понимаю, после gotoh никто ничего подобного не вытворял, хотя люди явно пытались.
>>469550 Хабр не читаю, но про то, что компиляторы частенько тупят с векторизацией, знаю. MKL это интеловская математическая библиотека? Скорее всего, там тоже куча вставок. Утверждать не буду, ибо не видел.
>>469551 Эта кьютеблядь порвалась, заносите следующую. >>469553 > Хабр не читаю, но про то, что компиляторы частенько тупят с векторизацией, знаю. С этим не борются ассемблерными вставками. С этим борются алиасингом, и написанием кода без выебонов, который вылавливает компилятор. И смыванием в унитаз GCC ещё. Пш-ш-ш-ш-ш. > MKL это интеловская математическая библиотека? Скорее всего, там тоже куча вставок. Утверждать не буду, ибо не видел. Периодически просачиваются куски кода на конференциях — не вставляют, как я понимаю. Даже если так, то вставки это инструмент уровня разработчика MKL, а не пользователя-программиста далеко. >>469557 > Напоминаю в очередной раз. В том и проблема, что раз очередной. Давай разберём по частям всё этим джентльменом написанное: > MSVC8 (2006 год). 9 лет назад > MSVC10 (2010 год). 5 назад > Intel Compiler 7.1 (2003 год). > Даем подсказку: <...> векторизует код ровно так же, как в примере с интринсиками. Укладывается в полсекунды. 12 лет назад > Аналогичная подсказка MSVC всех версий ничего не дает, они продолжают разворачивать максимум по 4 итерации, никакого SSE. Ну, параша и параша, MSVC годится только для отладки > Intel Compiler 11 (2009 год). Одинарный цикл векторизует так же хорошо, как 7-й. В двойном цикле на этот раз догадывается хотя бы векторизовать внутренний, но тупит с выравниваниями, вставляя ненужный и неиспользуемый код по краям. 1 секунда. 6 лет назад. Векторизовал автоматически > GCC 4.7.0 (2012 год). В двойном цикле полностью разворачивает внутренний, внутри imul, все как у intel 7. Те же 2 секунды. SSE? Не, не слышал. Если сделать цикл одинарным, сдюживает его векторизовать, но делает это плохо: вместо попарного сложения результатов умножения отдельно вычисляет верхние и нижние биты результатов, потом возится с перестановками и перепаковками байтов в регистрах. 1 секунда, вдвое хуже интела и варианта с ручной векторизацией. Ой, ну про то, что GCC годится только для швабодки в срачельничек мы знаем. Хоть бы clang достали.
Мораль: этот джентльмен подтверждает мои тезисы.
Продолжим бичевание. Господа, вы знаете, что на SSE свет клином не сошёлся? И что если интел векторизовал пять лет назад в SSE, то в этом году он будет векторизовать уже в AVX, причём кроссплатформенно, т.е. если есть AVX, то программу сбренчит на AVX, если нет, то на SSE, и вставочки будут у icpc сосать, причмокивания? А знаете, что если это говно выполнять не велосипедируя, а используя MKL (или любой приличный аналог), то он будет задействовать не только векторизацию, но параллелизм, и кеш блокинг? Нет, не знаете? Я вас просветил.
>>469564 >>469570 Вот так пропагандируешь людям не байтоёбствовать, пропагандируешь, а они тебя байтоёбом клеймят. Стыдись, Qt-мразь, самоедствуй, или показывай аргументированно где я не прав.
>>469578 Хорошо. Моя аргументация относительно того, что кьют — говнина ебаная для неудачников базируется на двух китах. Внимай. 1) Кьют плох, как гуёвая библиотека. Плюсы (как и любой другой язык без сборки мусора) не предназначены для написания гуёв. От слова совсем. Там нельзя естественным образом использовать современные гуёвые парадигмы, код пишется очень медленно и глючный, IDE очень плохие. Единственное, зачем ещё держат кьют — кросплатформенность, но и там он весьма не очень. Кроссплатформенность достигается через еблю, тяжёлые либы, глючит под виндой, где сидит 99.99% гуепользователей... Программисты на Qt относительно дорогие, и в то же время, макаки, которые не отличают друг от друга компиляторы. Удел кьюта в качестве библиотеки — поддержка древнего легаси с ненавистью к своей потерянной жизни (т.е. для неудачников). Одна макака с решарпером заменяет целую группу кьютобезьян с тимлидом. 2) Для всего остального кьют не годится. Есть библиотеки, которые не требуют анального кьюторабства, легко заводятся с разными компиляторами, быстро изучаются и не навязывают свою парадигму программирования. Разонравилась библиотека? Выкинул из проекта за пару дней и заменил на конкурента. Всё, ты в дамках. А гуи напишут специально обученные люди, на чём-нибудь поприличнее. Как и любая монструозная свалка кьют обречён на гниение и вымирание.
>>469590 Кек. http://github.com/nukede/lobster Дико извиняюсь за тот говнокод. Готовлю обновления, где хоть чуть-чуть прибрался, но тем не менее, в этой программе есть реализация поиска корня методом простых итераций.
Правда для систем линейных уравнений, но все сводится к трем операциям 1. Построить итеративную форму 2. Проверить сходимость ряда 3. Начать поиск приближения.
Олсо, ты можешь загуглить другие методы поиска приближенного корня.
>>469602 > Что такое "Начальное приближение корня"? Это число, достаточно близко аппроксимирующее решение уравнения > И как найти корень? Методом просто итерации. Что это такое написано в Википедии (не проверял, но уверен)
>>469602 >Что такое "Начальное приближение корня"? Числа, с которых стартуешь приближать. В твоём случае это сначала 0, потом 11. >И как найти корень? ans = f(f...(f(x)))) (применяешь n раз), где f(x) = 0.25 * (1 - 2x^3) (выражаешь из уравнения x).
>>469610 Тебе его брать как начало последовательности ответов. Чем больше ты проитерируешь - тем точнее будет последний элемент последовательности. Зачем тебе это вообще?
>>469610 > То есть мне его брать за корень, За первое приближение > или зачем вообще оно дано? Чтобы метод простой итерации сошёлся в два разных значения. Если начинать из произвольной точки то будет сходиться медленно, и, возможно, в одну и ту же точку, хотя корней тут может быть аж три.
>>469613 >Что это за ёбаный монстр? Да. Я уже сказал, что лютый говнокод, постараюсь его обновить в ближайшее время.
>Что эта программа делает? Есть некоторая система линейных алгебраических уравнений. Нужно вычислить корни данной системы уравнений с некоторой точностью. В файлике описываешь матрицу свободных членов, матрицу коэффициентов. И запускаешь программу, которая подбирает нужны ответ.
В программе нужно запилить нормальную многопоточность, переписать очередь (а то она уж совсем ублюдски реализована), ну и генерацию файла адекватней запилить.
>>469611 >>469617 Один хер не понимаю об элементе последовательности, как он вообще находится, куда его пихать в программу? У меня в задании ведь нужно корень найти и уточнять его, пока модуль разности текущего корня и предыдущего больше заданной точности. Или я не так все понимаю? >>469615 Лаба же.
>>469624 Пиздос, я же тебе скинул готовую программу. Там есть класс SIM, в котором реализованы три необходимые функции. Хоть программа состоит из говна, да чего уж, даже этот класс немного смазан говном, но те три функции вполне неплохо описаны и выполняют свои задачи.
>>469628 Пикрелейтед. >>469629 > вики, хуева гора тем на cyberforum Ссылками, ссылками. И выжимку в одно предложение из каждого источника. Этого от тебя препод ждеёт.
>>469641 Аргументы есть, слив засчитан, Qt объявляется обоссаным в этом треде до тех пор, пока не будет контраргументов или хоть детального разбора уже приведённых.
>>469654 Какая-никакая кроссплатформенность везде, кроме мобильных устройств, достигается wine. При этом можно использовать другие фреймворки, с удобными IDE, написанной профессионалами документацией и, конечно, очень удобные. Сигналы/слоты с дополнительным шагом компиляции не очень нужны, для этого есть другие библиотеки, навскидку, буст.
>>469598 > Моя аргументация относительно того, что кьют — говнина ебаная > Кьют плох, как гуёвая библиотека. > Плюсы (как и любой другой язык без сборки мусора) не предназначены для написания гуёв. > нельзя естественным образом использовать современные гуёвые парадигмы, > код пишется очень медленно и глючный > IDE очень плохие. > там он весьма не очень. > тяжёлые либы, > глючит под виндой... > Программисты на Qt относительно дорогие, > Одна макака с решарпером заменяет целую группу кьютобезьян с тимлидом. > 2) Для всего остального кьют не годится. > ... > плохой потому что плохой > сосёт потому что гавнина ебаная > плохо зделали потому что тупа плоха
>>469672 Это не контраргументы. Непонятно кем написанный wine блядь у него залог кроссплатформенности, ну охуеть теперь. >можно использовать другие фреймворки Ну можно, да. Можно и в жопу ябаться. >с удобными IDE Удобство у всех разное. Кому-то удобно и в емакс пёхаться. >написанной профессионалами документацией А кто, простите, документировал Qt? Школьники из 5б? >сигналы/слоты не очень нужны Ты не нужен, блядь. >для этого есть другие библиотеки, навскидку, буст Что лучше - использовать зоопарк библиотек или один Qt?
>>469687 лолвут? abs - это модуль, если чё. Ну и да, на x_0=11 программа валится, ничего страшного в этом нет - тебе никто не гарантировал, что метод последовательных итераций сходится всегда.
>>469689 Вангую, что он просто прочитал пару статеек, нихуя не понял и требует от нас помощи. Я же написал, как реализуется задача. 1. Привести к итерационной форме 2. Проверить сходимость 3. Искать корни.
>>468625 Что за виртуальные функции? Какой смысл перед объявлением функции писать слово virtual и зачем нужно объявлять виртуальные функции или чисто виртуальные? чем они отличаются от просто виртуальных? в абстрактных классах если всё равно надо переопределять в подклассах?
>>469732 >>469721 Есть такая штука, которая называется полиморфизм, суть в двух словах: один интерфейс – одна реализация. Виртуальные функции – одно из средств реализации полиморфизма (полиморфизм подтипов).
> смысл перед объявлением функции писать слово virtual Пример из вики ясно поясняет зачем: http://goo.gl/ZafY7u
> чисто виртуальные? чем они отличаются от просто виртуальных? Методы без реализации, так можно построить интерфейс, с этим разберёшься чуть позже. Иногда супертип не должен представлять собой что-то конкретное, а должен быть абстрактным.
Надеюсь, что ты не обиделся на саженяшу, он у нас бывает не в духе. А теперь пиздуй внимательно шерстить учебник, ты бы ещё хелло ворлд попросил объяснить.
>>469809 Yep. У нас очень мало этого. Поэтому препод сказал, что нужно максимум дать, а кресты объяснять будет слишком долго. И он охуенно правильно сделал, ибо никто-нихуя-не-понимает. Пик стронгли релейтед.
Но препод просто 10/10. У нас с ним две пары в неделю. На первой, он дает нам лекцию, где поясняет за всякие ништяки. Например, сегодня он рассказывал на переполнение буффера и какие могут быть проблемы. Хоть я это и так знаю, но все равно с интересом послушал, ибо он все качественно оформляет и доступно рассказывает.
>>469811 Ох уж это рашкообразование, нам наоборот всё разжёвывали и дали минимум, чтобы можно было чиселки в массивах складывать. Программирование длилось три семестра, последний при этом был выделен под изучение STL. Те, кто был минимально заинтересован, научились писать внятный код только к четвёртому курсу. Хотя у нас больше физическая специальность, но кодить требовали постоянно на других предметах.
>>469804 >>469807 Может пока вы тут учебник нормальный посоветуете? Читаю страуструпа, но он писал про книги которые объясняют ООП без привязки к конкретному ЯП. Это какие? Не могу найти.
>>469813 Ну у нас, к сожалению, упор сделан на языки - английский, немецкий. О чем я дико жалею, но с другой стороны языки нужны, да.
К примеру, программирование у нас будет только в этом семестре. В общем, блядь, ну я не знаю. С одной стороны я ввязался в говно, надеясь на то, что будет что-то прогрессивное, но кроме языков, которые я пока не знаю, куда применить, я там не нашел ничего.
Хотя может быть, я буду когда-нибудь успешен и благодарен вузу. Олсо, препод по физике, пророчит мне зарплату под 9к ойро в гейропке и ставит в пример другими. А я горько усмехаюсь над ним, надеясь найти хоть какую-нибудь работу к окончанию вуза.
>>469817 Освоение языка даст тебе минимальную базу ООП, конкретные книги про ООП читать потом будешь. Мне вот учебник Лафоре понравился, очень доступно для новичков объясняет.
Господи блядь, почему никто из этих тупорылых студентов не догадается в течение семестра читать какого-нибудь Лафоре - я за один первый семестр её прочитал, сделал 80% заданий, всё было ясно и понятно. И я блядь даже не на программистской специальности учусь. Про переполнение буФФера им на лекциях по С++ рассказывают, ну обосраться теперь. Нахуй вы живете?
>>469817 ООП тащемта любому нормальному человеку и так становится понятно, когда он пишет хоть сколько-нибудь код. Как и ФП, например. Вот написал ты портянку, и думай как её отрефакторить. Если ты не совсем даун то быстро сообразишь, какие абстракции лучше всего подойдут.
>>469819 Дай ты людям шанс, этот то без лабы пришёл, можно и рассказать чуть-чуть а потом нахуй послать. Всё равно в треде почти нихуя не происходит.
>>469818 Тут уж дрочить на самообразование приходится, у большинства так. У некоторых студентов бывает шанс свалить на работку к научруку, вот этот шанс желательно не проябывать.
>>469819 Кек. Ну хоть какое-то разнообразие, а то я сейчас на праздниках начну всякое говно кодить и срать сюда охуительными вопросами. Олсо, мы так и не решили. Хочу захуячить клиент десктопный для вбыдлятни через API. OpenSSL и Sockets типа использовать, хочу опробовать boost.asio. Взлетит?
>>469822 Откуда такой бугурт? Ну далеко не программерская и не инженерная специальность. Тот парень, который спрашивал у меня за задачки, например, отлично шарит в английском и немецком языках. И ещё спортом занимается.
Да и годные лекции всегда годные, даже если какие-нибудь простые вещи рассказываю.
>>469831 >Взлетит? Из пушки по воробьям. Вот тебе пример использования апи, наговнокоженный за 15 минут в блокноте на жабаскрипте: https://ololoepepe.me/vktools/ Делать это все на крестах - тот еще изврат, вообще никакого смысла в этом нет. >отлично шарит в английском и немецком языках. И ещё спортом занимается Ну нихуя себе, умеет зубрить и прыгать на турничках. Прям мега достижения.
>>469837 На этапе изучения языка очень важно понимать разницу между всеми существующими компиляторами. Есть более веские причины считать Лафоре плохим учебником?
>>469840 >На этапе изучения языка очень важно понимать разницу между всеми существующими компиляторами. Это байтоебство высшей пробы. В идеале ты вообще не должен думать о компиляторе, а руководствоваться только стандартом.
>>469850 Отчасти >>469857 прав, это все байтоебство, это скучно и ведет к написанию факториалов вместо программ. >>469851 Маневр не удался. >>469855 Да тут хуй поймет, даун на дауне сидит, еще и не такое могут сморозить. >>469861 Ну короче сокет открываешь, коннектишься, данные передаешь/получаешь, закрываешь сокет. Сервер слушает на специальном сокете и создает новые сокеты при входящих соединениях, ты их в этот момент берешь и делаешь с ними все то же самое. Сокет можно рассматривать примерно как файл, только в файле у тебя произвольный доступ, а тут нет. Все, считай что почитал.
>>469871 В этом посте я поясняю за научное байтоёбство, самый удобный и быстрый линал и охуительные библиотеки для научных вычислений. Но меня можно не слушать, потому что вся эта хуита для меня пока не окупилась. Алсо, гейдев же.
>>469872 Ну вон смотри сколько кода на нем написано. Даже браузер, через который ты тут срешь, написан на этом божественном языке. Правда где бы мне работу найти.
>>469875 >Просто кто-то не осилил. Я работаю в этом направлении.
>>469874 >научное байтоёбство >наука >байтоебство Выбери одно. Алсо, для науки матлаб и пистон. >самый удобный и быстрый линал >удобный >С++ Ну-ну. >охуительные библиотеки для научных вычислений ... для которых есть байндинги во всех популярных языках, и которые работают в этих языках с такой же скоростью, потому что сами то библиотеки на крестах. >Алсо, гейдев же. С этим согласен, тут альтернатив нет, только веселые фермы для браузеров на жабаскриптах.
>>469878 > Ну вон смотри сколько кода на нем написано. Даже браузер, через который ты тут срешь, написан на этом божественном языке. Правда где бы мне работу найти. Да, теперь открой исходники и проблюйся от убогой костыльной портянки.
> Matlab и пиздон с scipy Удобное средство для отработки прототипов, но если удаётся сделать что-нибудь годное, то лучше переписать на кресты, чтобы быстро работало и была возможность воткнуть где-нибудь ещё. редко, но бывает. У кода на матлабе/пиздоне всё есть проблемы с производительностью.
> Си Кресты всё же удобнее, бенчмарков не проводил, ничего не скажу за проигрыш в скорости.
> Фортран Убери это говно обратно в двадцатый век.
>>469888 Nyet ti. >>469892 Нирикамендую. Помесь бульдога с носорогом, мало где используется, разве что для лаб годится. Впрочем, это так, голос с дивана, особо не вникал, попробовал и удалил на хуй.
>>469894 >бенчмарков не проводил, ничего не скажу за проигрыш в скорости. Почти нет проигрыша. Если не использовать RTTI, например, то вообще разницы не заметишь.
>>469894 >Убери это говно обратно в двадцатый век С радостью бы, но это невозможно. Хотя кое-кто из знакомых берется за переписывание программ на фортране на плюсы и делает это годами.
>>469906 Те же яйца в профиль. Есть свои плюсы и своя клоунада (привет, StringBuilder). Все уродство - в жирнейших тырпрайз фреймворках типа спринга с XML-ной или аннотационной дрисней. Высший пилотаж по самую макушку в говне - сочетание первого со вторым.
>>469906 Не сложнее. Алсо, перекатившись в жабу ты станешь владельцем самой крупной сети фабрик с фасадами и мостами. Главное в предметной области что-то понимать.
>>469909 Лол нет, абсолютно нативно использует, ведь компилируется в джявовский байткод. Единственные противоречия могут быть в парадигме, ну т.е. джявовские классы все мутабельные, и будет некрасиво их мешать со скалой без обёртки.
>>469915 >будет некрасиво их мешать со скалой без обёртки Ну то есть фактически без костылей не обойтись, о чем я и говорю. Либо писать говнокод, а это и без скалы на жабе можно делать.
>>469922 Он может и не быдлокодер, он наверняка даже круче большинства этих дегенератов, да и круче меня скорее всего, но от реалий и правда оторван. Таких даунов на работу берут, еще тупее чем студенты в этом треде.
>>468627 >In order to build and use ololord you will need the same libraries and tools as for every other project using Qt. >Qt Да ты же уёбок! Это поеботину на сервер тянуть только жуебок способен.
>>469955 Просто что машинное обучение, что компьютерное зрение - относительно молодые области, софт приходится пилить самим исследователям. В более старых отраслях рулят Фортран и C, ибо на них написаны все необходимые для работы вещи. Ну и еще есть R для статистических расчетов.
>>469936 >Часто общаюсь с манагерами, они говорят Понятно. "Манагеров" забыли спросить.
>>469955 Хуешинному хуечению, блядь. Я говорю о НАУКЕ - о молекулярной динамике, о методе конечных элементов, о различном Монте-Карловском моделировании, о прочих других алгоритмах с огромными разреженными матрицами - пистон никогда не будет использоваться в таких областях.
>>469962 >Я говорю о НАУКЕ Ебвть, о какой науке речь? В нормальной науке (читай: не в рашкинских говновузах "как отсрочить армию на 5 лет по N килорублей в год") как раз активно пользуют питон как glue между высокопроизводительными библиотеками, написанными на тех же фортранах и сях. И делают это потому что в процессе проверки гипотезы пердолиться с итераторами, типами возвращаемых значений и прочей байтоебской херней в хуй не всралось. Если гипотеза выстрелит, всегда найдется студент на кафедре, готовый за "отл" перехуярить все на чем-то быстром, а если не выстрелит, то не будет обидно за проебанные за байтоебством человекомесяцы.
>>469978 Спасибо, посмеялся. Я вот про что: std::thread, например, выполняет переданную функцию однократно. Я не могу понять, пробуждение -- это когда я запускаю его снова или имеется в виду, что в нем будет жить цикл, который будет заставлять его выполнять работу по изменению std::condition_variable?
>>469982 Поток засыпает, когда ты вызываешь у него sleep, wait у cond_var или любую другу функцию, которая что-то ожидает извне (ввод с консоли, чтение из БД, висение на сокете и т.п.). Тогда поток засыпает. Когда, соответственно, заканчивается sleep, приходит уведомление от cond_var, совершается ожидаемое действие, поток просыпается и продолжает выполнять свою работу.
>>469986 Понятно. А не реализует ли пересоздание потока через thread = std::thread( foo, arg1, arg2 ) тот же самый механизм? Id потока при этом не меняется.
Алсо, можно ли как-то передать переменную в уже работающий поток, не используя глобальные переменные?
>>469987 > не используя глобальные переменные Ну ты можешь в шаред память всё хуячить Можешь сокет локальный создать Пиздячить в стдин или открыть ещё пайк Файл создать
>>469845 >>469885 > ... для которых есть байндинги во всех популярных языках, и которые работают в этих языках с такой же скоростью, потому что сами то библиотеки на крестах. Я аж сиранул от своей безоговорочной капитуляции. Хорошо, что на толчке сидел. Ну-ка, какая библиотека позволяет на кластере считать из твоего любимого языка, и на всех популярных языках? Qt-мразь, ты вообще понимаешь, что ты некомпетентен вопиюще? >>469924 > Я хотел бы писать программы, а не костыли для подстраивания библиотек одного языка под парадигмы другого. Это ведь ты, да, ты, Qt-мразь? Ты понимаешь, что у тебя шизофрения? Ты понимаешь, что ты только что не хотел именно писать на Qt?
>>469967 > как раз активно пользуют питон как glue между высокопроизводительными библиотеками, написанными на тех же фортранах и сях. У нас дристоном только отсталая лаборатория пользуется, с даунами, там у чувака есть глава в диссере про веб-сервер на матлабе, а в научной новизне отправка почты после завершения расчёта. Плюсовые высокопроизводительные библиотеки под конечные элементы (e.g. libMesh) очень даже высокоуровнево конфигурируются без пердолинга, при этом можно спокойно считать нормальные нелинейные задачки, с которыми не справится помойка на этом самом дристоне.
>>469999 > с которыми не справится помойка на этом самом дристоне. Предвидя боль всяких детей, добавлю: помойка не справится в виду того, что плохо поддерживается MPI, с которым надо и на крестах-то пердолиться, а уж на дристоне я даже боюсь представить, как оно работает. Без MPI очень проблемно использовать больше 200 гигов оперативки, 8 ускорителей или 12 ядер (что относительно мало).
>>469987 Потоки операционной системы -- это достаточно низкоуровневая вещь. Поток может быть усыплен вообще в любой момент времени планировщиком операционной системы. На одноядерной машине так все время и происходит: каждому потоку выделяется квант времени, после чего он усыпляется и время дается другим потокам. Поэтому пытаться разобраться в том, когда поток будет усыплен, а когда разбужен бесполезно. Что касается пересоздания потока, ну просто в этом потоке сдвинется указатель на новопереданную функцию и все. Уснет ли он на этом моменте -- зависит от планировщика.
>можно ли как-то передать переменную в уже работающий поток, не используя глобальные переменные? Можешь в поток передавать ссылку или указатель на переменную и менять её значение из другого потока, но эта переменная должна быть либо атомарная, либо ты должен защищать её мьютексом, иначе случится гонка данных и получишь неопределенное поведение.
Ребята, хватить ругаться. Давайте лучше помолимся.
Digia, иже еси на небеси! Да святится имя Qt, Да приидет царствие Qt, Да будет воля Qt, яко на Linux и на Windows. Либы насущные даждь нам днесь; И остави нам сорцы наши, Якоже и мы оставляем компиляторам нашим; И не введи нас во искушение, но избави нас от GTK.
>>470034>>470036 Спорить с Qt-мразью — как играть в шахматы с голубем. Раскидает фигуры, нагадит на доску и улетит всем рассказывать, как он тебя уделал.
>>470083 Фанатизм не нужен, как и нигилизм. Вообще на бордах характерно упарывание в крайности, либо говно, либо охуенно, и каждый нахваливает свою парашу. У всех инструментов свои плюсы и минусы, ну. Даже винапи в определенных ситуациях может пригодиться. Только конченые мудаки как тот порвавшийся безаргументный спермодебил начинают агр поповоду инструментов.
>>469550 >где ассемблер обгоняет icpc или даже просто реализацию на mkl Проблема не в ассемблере, а в заебах компилятора и языка. Чтобы твой код обгонял ассемблерный, надо понимать почему, например, for ( int i=size(); i--; ) может компилироваться в более быстрый код, чем for ( int i = 0; i < size(); ++i ).
>>470095 >насемёнил Ну началось. Все кто не согласен с твоим кукареканием - семены. Давай разберем твои "аргументы", так и быть, заебал засирать тред. >Кьют плох, как гуёвая библиотека. Почему? >Плюсы (как и любой другой язык без сборки мусора) не предназначены для написания гуёв. Почему? >Там нельзя естественным образом использовать современные гуёвые парадигмы Какие именно парадигмы, почему нельзя? >код пишется очень медленно Примеры? Точные цифры? Сравнения с более быстрыми способами при равной сложности проекта и равной производительности? >глючный Примеры? >IDE очень плохие Критерий "плохости"? (Твои личные предпочтения не интересуют.) >Кроссплатформенность достигается через еблю Какую конкретно? >тяжёлые либы Тяжелые для каких устройств? >глючит под виндой В каких ситуациях? Примеры? >макаки, которые не отличают друг от друга компиляторы То есть ты утверждаешь, что разработчик гуёв должен знать все особенности каждого популярного компилятора? Для чего? >Удел кьюта в качестве библиотеки — поддержка древнего легаси Примеры использования кьюта в легаси. >с ненавистью к своей потерянной жизни (т.е. для неудачников). Переход на личности, не несущий никакой информации. >Одна макака с решарпером заменяет целую группу кьютобезьян с тимлидом. Примеры такой замены? Сравнение производительности труда? Конкретные компании и цифры? >Есть библиотеки, которые не требуют анального кьюторабства С оем же успехом можно сказать, что кьют не требует рабства этих самых библиотек. >легко заводятся с разными компиляторами Как и кьют. >быстро изучаются Как и кьют. >и не навязывают свою парадигму программирования. И требуют каждый раз вновь городить костыли и обертки, чтобы в итоге придти все к той же или похожей парадигме, потому что это удобно. >Разонравилась библиотека? Выкинул из проекта за пару дней и заменил на конкурента. Выкинул за пару дней, а потом два месяца прикручивал новую, с новыми костылями, потому что интерфейсы разные. >Как и любая монструозная свалка кьют обречён на гниение и вымирание. Что-то жаба не спешит умирать, хотя более монструозной свалки не найти. Алсо. >гуи >гуи >гуи Если ты не знал, там еще много всего есть, хотя бы та же система локализации, сигналы-слоты без пердольства с калбэками и без портянки из шаблонов на 50 строк ради вызова одной функции. А также работа с сетью и хттп на достаточно высоком для байтоебского языка уровне, с поддержкой все тех же сигналов и слотов (попробуй на курле это сделать, например, заебешься костыли городить). Полный список модулей можешь посмотреть сам, но ты же скажешь что все это не нужно или тебе не нравится, как оно сделано, а аргументировать или привести примеры опять не сможешь, и продолжишь аутотренинг о том, что ты тут всех затралил своими высерами.
>>470091 Ничего не понял, что ты сказал. с какого перепугу твоя параша будет быстрее работать? https://ideone.com/XMrfR2 Эта неочевидная ебуда работает точно столько же, а если убрать нагрузку, то будет работать медленнее. Не надо считать, что если в техникуме тебя научили писать на ассемблере, то ты от этого вдруг начнёшь обгонять компилятор. Я уже не говорю, что ты не знаешь про кеши, параллелизм и векторизацию, а только считаешь команды в наивной реализации компилятора. На дворе не 1975 год, пора отвыкать от байтоёбства. >>470098 > Почему? Причины приводятся дальше для текста. > Почему? Потому, что время жизни объектов в высокоинтерактивном приложении плохо контролируется программистом. > Какие именно парадигмы, почему нельзя? Не написать в одну строчку, не буду трудиться объяснять. > Примеры? Точные цифры? Сравнения с более быстрыми способами при равной сложности проекта и равной производительности? google://qt+vs+c#+programmer+performance У меня по четвёртой ссылке кьют поливают говном, по второй ссылке кьют поливают говном. Вот тебе сравнения. > Примеры? Погугли хоть. > Критерий "плохости"? (Твои личные предпочтения не интересуют.) Плохой статический анализ (решарпер для плюсов с Qt работать не бдует), неразвитые методы рефакторинга. Пока хватит. > В каких ситуациях? Примеры? В гугле. > То есть ты утверждаешь, что разработчик гуёв должен знать все особенности каждого популярного компилятора? Для чего? Я утвержадю, что разработчик гуёв не должен быть Qt-хуесосом. > Как и кьют. Это не так; Qt требует дополнительного шага в компиляции, и часто не работает с нелюбимыми разработчиками компиляторами (пруфы в гугле) > Как и кьют. C++ — куда более сложный язык, чем шарп, поэтому и изучается дольше. > Выкинул за пару дней, а потом два месяца прикручивал новую, с новыми костылями, потому что интерфейсы разные. Не аргумент. > Что-то жаба не спешит умирать, хотя более монструозной свалки не найти. Ну и какие новые проекты на жабе? Она с Qt одной масти, только Qt даже хуже.
Заебало твою простыню читать, одна анальная боль некомпетентного Qt-неудачника.
>>470112 >погугли >погугли >не аргумент >погугли >там сказали что это плохо >сям сказали что это лучше >погугли >это не так >погугли Ну как и ожидалось.
>>470098 >>глючит под виндой >В каких ситуациях? Примеры? Я не тот анон, что с тобой спорит, но у меня, например, есть одна проблема. В QGraphicsScene есть 2 QGraphicsItem один из них - картинка, а другой - прямоугольник. Так вот, при изменении размера через стандартный setScale(), прямоугольник ИНОГДА съезжает с границ пикселей картинки. То есть увеличиваешь его - все норм, ровно по границам пикселей лежит, увеличишь еще пару раз - съезжает, увеличишь еще - нормально стоит на границе нужного пикселя. Причем я пробовал оба варианта дистрибуции opengl и не-opengl, ничего не менялось.
>>470159 Да какой код, говорю же все стандартно, просто делаю setScale(). [code lang="cpp"] // добавляю в сцену 2 простых итема mImage = scene->addPixmap(pixmap); scene->addItem(mSelectionFrame); // По эвенту нажатия на кнопку увеличения масштаба или по колесу мыши происходит следующее: mImage->setScale(mScale); mSelectionFrame->setScale(mScale); [/code]
>>468625 помогите пожалуйста, не понимаю код http://pastebin.com/GZRsUw38 привыполнении выводится 8, но я не понимаю что значит выражение n&1, объясните пожалуйста что это такое
>>470112 >с какого перепугу твоя параша будет быстрее работать? С такого, что size() может быть неконстантным методом класса, или в теле цикла будет вызов такого метода, и компилятор понаставит ненужных проверок, не говоря уже о пересчете size() на каждой итерации.
>>470222 Это недостаточная байтоебля, ну. Зачем разбираться, как работает процессор, если можно написать for без третьего аргумента, как настоящий хакир?
>>470222 Я так и делаю. Суть в том, что компилятор спотыкается даже на такой безобидной фигне, и если не проверяешь выхлоп компилятора, не понимаешь где он может протупить, то код на асме ты вряд ли обгонишь.
>>470227 Пруфы были, что компилятор не спотыкается. И, да, от твоей байтоебли он _больше_ спотыкается и поэтому и нужно постоянно проверять. Это не твой уровень — так оптимизировать код, только если ты не пишешь высокопроизводительные библиотеки (что ты не делаешь судя по уровню владения темой)
>>470227 Но ведь для того, чтобы понимать, что [вызов метода + операция сравнения] тяжелее, чем просто операция сравнения, вовсе не нужно знать ассемблер.
>>470230 >Пруфы были, что компилятор не спотыкается Перечитай пост >>470218, и не тупи больше. Речь идет о методе класса, а не константе, как у тебя в примере. >от твоей байтоебли Это банальный branch hoisting. >Это не твой уровень Кашпировский в треде, всем заряжать баночки с водой.
>>470227 Не знаю, спотыкается ли. Например, когда я делаю
for (unsigned int n = v.size(), i = 0; i < n; ++i) fuck_your_mom(v, i);
я точно знаю, что я делаю: мне нужно зафиксировать размер вектор до цикла. Неважно, что там внутри цикла -- увеличит ли его размер ебля твоей мамаши, но итерации мне нужны с изначальным размером, и я точно полагаю, что не уменьшит.
Но когда я пару тредов назад спросил следующее: у меня есть (вместо звёздочек собачки т.к. иначе сожрётся) @@int_array_2D, я делаю внутри цикла switch (int_array_2D [ i ] [ j ] ) , и мне сказали, что отдельную переменную делать не надо, типа, здесь очевидно и так, что компилятор скопирует элемент массива в свитч.
>>470238 > Конечно. Просто у некоторых есть безоглядная вера в то, что компилятор все оптимизирует, и разницы не будет. Не путай незнание работы компилятора и байтоеблю. Не знаешь, как работает компилятор как раз ты. Вставить auto condition = size(); гораздо разумнее и понятнее, а работает быстрее.
#include <iostream> #include <iomanip> #include <math.h> using namespace std;
int main() { setlocale(LC_ALL, "Russian"); int number; cout << setiosflags(ios::left); cout.width(10); cout << "Число"; cout.width(25); cout << "Квадратный корень" << "Деление\n\n"; cout.setf(ios::fixed); cout.precision(2); for (number = 1; number <= 10; number = number + 1) {
cout.width(10); cout << number; cout.width(25); cout << sqrt(number) << static_cast<float> (number) / 2 << "\n"; } system("pause"); } </code> Как можно реализовать деление number на number из предыдущей итерации с проверкой деления на "0", не городя параллельный цикл?
есть шаблон BinaryTree, его наследники BinaryTreeTextFileIO, BinaryTreeRedBlack, их назначения и набор функций не пересекается идея создать инстанс сразу от двух последних шаблонов - это хорошая или плохая идея, и вообще реализуемая?
>>470396 >BinaryTreeTextFileIO >BinaryTree >TextFileIO Методы для работы с файлами приделаны к структуре данных, правильно понимаю? Это уже само по себе пиздец. Если ты еще и два таких класса в один объединишь, это совсем жопа с ручкой будет.
>>470400 >Это уже само по себе пиздец Ну почему? Может класс может ворочать деревьями на сотни гигабайт не загружая их полностью в оперативную память. Естественно такой класс должен уметь работать с ФС
>>470396 BinaryTreeTextFileIO добавляет методы загрузки и сохранения дерева в файл BinaryTreeRedBlack - добавляет функционал красно-черного дерева в чем проблема методов работы с файлами в классе? >>470401 хочется создать класс от 2х шаблонов сразу что-то вроде class MyTree: public BinaryTreeRedBlack<int>, BinaryTreeTextFileIO<int> или же сначала создать шаблон, наследующий от 2, а затем его инстанс, но это вопросы синтаксиса, а мне интересно, допустимо ли множественное ромбовидное наследование здесь, и насколько вообще допустима практика множественного наследования?
>>470098 >А также работа с сетью и хттп на достаточно высоком для байтоебского языка уровне Я смотрю, неосилятор закукарекал. В чем конкретно неудобство send/recv/readv/writev? >попробуй на курле это сделать Что сделать? Я сейчас в таком прекрасном настроении, что готов макнуть тебя рожей в говно и хорошенько повозить. Кстати, libcurl есть практически везде, а твой ебанутый libQtCore и libQtNetwork на сервер будет впердоливать только полный жуебок вроде тебя.
>>470414 я так понял, что с помощью этого паттерна можно завести универсальное расширение свойств для многих различных классов, но я не понимаю как решить мою проблему в общем случае: пусть есть базовый шаблон(класс), от него наследуют другие шаблоны(классы), каждый расширяет функционал предка так, что попарно они не пересекаются, хочется свободно и гибко наследовать сразу от нескольких шаблонов (иметь любую комбинацию расширений функционала начального предка).
>>470452 >Го не замена крестам Но он занимает нишу нативного языка со сборкой мусора. Плюс он уже очень популярен. >от синтаксиса раста можно вырвать глаза Зато там безопасность работы с памятью обеспечивается на уровне типов. Он занимает байтоебскую нишу. >а новые кресты такое же многословное уебанство Но они гораздо более юзабельные, чем предыдущие, и у них куча библиотек и тулзов. В итоге для ди просто не остается места. Он бы выжил, если бы на нем был бы популярный проект, или его проталкивала жирная корпорация, но этого нет.
>>470436 > Это все равно верх тупизма, особенно если учесть, что ОС и так вызовет memory map, как только память процесса превысит лимит. Вопиющее незнание вопроса. Подкачка (про которую ты вспомнил), memory map и напердоленная вручную буферизация это обычно три совершенно разных скорости работы (а если кончается оперативная память, то это обычно либо ошибка в программе, либо в днк, либо высокопроизводительное приложение).
>>470513 Не исключаю. Мне лень делать проект с библиотекой, если вход в библиотеку осуществляется нечасто, то разницы никакой точно нет. Если часто, надо делать замеры.
>>470513 Если что, у меня здоро-о-о-овый бинарник, к которому статически линкуется mkl, cudart, какая-то параша для проверки персечений. А вот MPI линкуется динамически, и не тормозит, и линковать его статически почему-то не принято. Так что я ставлю на то, что разницы особой нет. На шинде MPI не линкуется, бинарник не запускается, а его дёргает динамически шарп, но я перебдел, и вызовы в библиотеку ходят очень нечасто.
Про динамически залинковано я точно ошибся, там вообще весь пост несвязный, не знаю, почему я так написал.
>>470571 > то есть это - нехорошая идея? А зачем эта говнина вообще? Расплескивать интерфейс по куче малафьи. У тебя он такой большой, или надо постоянно подменять классы? KISS
Посоны, в чем дело? Есть вектор указателей на объекты типа std::vector< obj@ > vec. Он хранится в объекте. В конcтрукторе объекта делается resize и потом вектор заполняется через такой цикл:
for ( auto obj : vec ) { vec = new Obj(); }
После этого при обращении к объекту происходит сегафолт. Как выяснилось, объект не создается. В чем беда?
И еще один вопрос на ту же тему. В объект-хранитель вектора нужно написать функцию, которая возвращает указатель на один из объектов. Можно ли это реализовать на умных указателях?
>>470654 Есть объект, в нем вектор указателей. Нужна функция, которая выберет из вектора указатель и вернет, чтобы другая функция с ее помощью сошла с ним работать.
>>470676 Я уже разобрался. Скажи, а насколько вообще стоит дрочить на умные указатели? В С++11-стайл они входят в обязательном порядке или сырой указатель в коде норм, если все удаляется как надо?
>>470457 >В итоге для ди просто не остается места. Он бы выжил, если бы на нем был бы популярный проект, или его проталкивала жирная корпорация, но этого нет.
>>470706 Мимо проходил, отвечу. Я предпочитаю вилкой вычищать маллок и фри, когда дело идёт о серьёзных вычислениях. Когда игрушки играю для красивого кода, умные указатели.
>>470708 true. мы вон клепаем говнокод уже не первый год, однако это не мешает вполне успешно хуячить патенты на написанные говноништяки. а код потом в продакшене поправят.
Двачик. Как лучше поступить в таком случае: у нас есть пул потоков в обертках и главный. В главный постоянно поступают цифры. Надо раздавать цифры потокам, чтобы они хуярили их.
Самый логичный вариант -- notify_one при поступлении числа и глобальная переменная, в которой он хранится, пока его не возьмут на обработку. Но это как-то ебет инкапсуляцию во все дыры. Как это сделать грамотно?
>>470926 Что за обертки у потоков? Если самописные просто добавь ему метод "обработать число" - поток получает число как аргумент, обрабатывает и засыпает. А основной поток постоянно просматривает дочерние потоки, находит спящие и дергает их за метод с следующим числом на обработку. Если обработка очень долгая можно добавить нотификации от дочерних потоков что они свободны и готовы получать новое число (чтобы главный не тормошил постоянно их, а ждал пока освободятся) - но это уже ебля, так как нотификации будут рассылатся из разных потоков ну и пиздец.
>>471007 Обертки — объекты, в которых хранится поток, его флаги и функции для работы с ним. В принципе, оно и так нормально работает, но думал сделать на CV, чтобы все в конторе, куда делаю тестовое, охуели, как я могу.
В итоге решил забить, потому что мороки много, а программу это лучше не делает — наоборот, вместо lock-free механизма, который выглядит легко и работает быстро, получается мутотня с мьютексами и страшный код.
Послал в полночь, завтра узнаю, насколько я крутой падаван многопоточного программирования.
потом я, вооружившись поинтером на GUIElementObject и номером стоража, внутри GUIElementLogic делаю вычисления(например привожу позицию слайдера к виду [0. .. 1.]) и далее могу получить результат из манагера GUIElementObject где угодно.
Есть две функции. [code lang="cpp"] template< typename EventType, typename ... Args > std::shared_ptr< EventType > make_event_0 (Args &&... args) { auto result = std::make_shared< EventType > (std::forward< Args > (args)...); return result; }
template< typename EventType, typename ... Args > std::shared_ptr< EventType > make_event_1 (Args &&... args) { return std::make_shared< EventType > (std::forward< Args > (args)...); } [/code] На всяких stackoverflow и маерсах написано, что нужно юзать 1-й вариант, мол во 2-м шаред сразу разрушается. Только что проверил - оба возвращенные значения имеют по 1 strong ref Это маерсы со стеком пиздят, или это спермотанцы в компиляторе?
>>471318 Вообще, по логике вещей, эти штуки должны компилироваться в один и тот же код. Поэтому если не собираешься в кроссплатформенность, то не парься на этот счет вообще.
>>471318 В обоих случаях внутри функции происходит создание экземпляра shared_ptr, после чего при выходе из функции создается еще один экземпляр (который и является возвращаемым значением), а экземпляр внутри функции удаляется. Никакой разницы с точки зрения последовательности событий нет.
Насколько объявление класса friend'ом другого является нормальной практикой? Иногда это можно поправить наследованием, но когда классы друг с другом вообще плохо связаны, но один должен в некоторой ситуации покрутить в другом? Например, enable_shared_from_this хранит weak_ptr, который при захвате объекта должен быть инициализирован в конструкторе shared_ptr. Я не понимаю, как тут избавиться от друзей, и не знаю, нормально это или нет.
>>471484 Не вдаваясь в подробности, в моем случае все тоже можно решить наследованием, однако хотелось бы все же услышать авторитетное мнение про общий случай.
>>471530 >Чем кривой, как не криво? Тем что инкапсуляция ограничена классом, а не модулем. С модулями можно было бы указать, что вот эти классы в одном модуле, и имеют доступ к приватным полям друг друга.
Сап, программач. Как мне вызвать виртуальную функцию из класса, где она объявлена? Например, у меня есть класс Base. В нём есть virtual void init() = 0. В конструкторе этого класса я хочу написать что-то вроде this->init(); this->onCreate(); То есть, я хочу вызвать метод onCreate после инициализации класса, которая обязательно будет в функции init. Компилятор ругается на unresolved reference. По 1 на каждый подкласс. Если я определяю init как virtual void init(){}, то всё компилируется, но функции в подклассах не вызываются. Пикрандом.
>>471711 Никак. Сначала вызывается конструктор базового класса, а только потом - наследника. В базовом классе у тебя метод чисто виртуальный, поэтому и обратиться не к чему.
>>471722 Дружественная фабричная функция, создающая объект, вызывающая onCreate и затем возвращающая объект, не? [code lang="c++"] Base create(Type t) { Base o = 0; switch (t) { case Derived1Type: o = new Derived1; break; //... default: break; } if (o) o->onCreate(); return o; } [/code]
>>471711 А можешь объяснить, зачем оно тебе вообще надо? Я с ходу не могу вообще представить ситуацию, где конструктор Derived должен работать не по принципу "конструктор Base + еще что-то", более того, это противоречит абстракции.
>>471725 Всё вам объяснять, блядь. Я же написал. Хочу вызывать метод onCreate после инициализации класса. Инициализация у каждого класса своя, а onCreate - общий метод.
>>471740 NioController(T object, std::string fileName) { this->mObject = object; this->initLua(fileName); this->init(); // вот эта функция и есть виртуальная this->onCreate(); };
В init делаются все нужные биндинги для lua, которые нужны определённому Derived-классу. Для каждого биндинги свои. Метод onCreate вызывает lua-функцию onCreate. Вызов этой функции для каждого Derived-класса одинаковый.
Пиздец ты тупой. Тебе русским по белому сказали, что у тебя хуевая архитектура и что так, как ты хочешь, сделать нельзя, и даже пример привели. Хули тебе еще надо? Какая архитектура, такой и костыль (корявый, если ты не понял).
>>471748 Пошёл-ка ты нахуй. Я спросил, как можно реализовать костыль для моей архитектуры. Объяснять мне, какой я мудак и как неправильно делаю я не просил.
Ебашь фабрику или фабричный метод. По другому нельзя. Можешь добавить метод типа finishInit() и обязать ползователей своего класса вызывать его в конце конструкторов наследуюмых.
>>471898 > Скорее всего, вопрошающий дрочит на скорость и исключениями пользоваться не хочет. А тип вылет к хуям от нуллпоинтера это норм? Охуеть вообще
>>468625 ПРОБЛЕМА С++ В ТОМ ЧТО ТУПОЙ ПРЕПОД СТРАУСТРУП В СВОИХ КНИЖКАХ НАСАЖДАЕТ В ГОЛОВЫ НЕПОТНЫХ ЛОХОВ ИДЕАЛЫ ООП КОТОРЫМ ПРЕДСТОИТ БЫСТРО РАЗБИТСЯ О СПЛОШ КОМПРОМИСНУЮ РЕАЛИЗАЦИЮ У ДЖАВАМАКАК ИДЕАЛЫ ООП РАЗРУШАЮТСЯ НАМНОГО ПОЗНЕЕ КОГДА СБОРЩИК МУСОРА НАЧНЕТ ВЕШАТЬ СИСТЕМУ НА НЕСКОЛЬКО МИНУТ
int main { B ptrB=new B; B C; C=B->GetShit();//здесь возвращается дерьмо типа базового класса //а мне нужно дерьмо производного //как изменить метод, чтобы его не требовалось переопределять в любом производном классе? //в голову приходит только void GetShit();
Программачик, такой вопрос. Хочется сделать некий класс модуля, состоящий из модели, связанного с ней меню (виджета) и указателя на представление. Суть состоит в том, что в программе используется одно представление (основное окно программы, по сути), но к нему в разные моменты времени привязаны разные модели, каждой из которых соответствует свое основное меню. Собственно, как бы вы предложили это реализовать?
Модель всегда наследник одного и того же класса, представление -- тоже.
>>471986 А в чем проблема? Обычное же MVC - у вью метод который принимает модель и изменяет вью соответсвенно модели, контролер в нужные моменты скармливает вью нужные модели, вью изменяется.
>>471983 class MyShit: public B<int> { }; int main() { MyShit test(); }
template <class T> A<T> {private: T Value; protected: T GetValue(){return this->Value;} public: A(T value){this->Value=value;} };
template <class T> B<T>:public virtual A<T> { private: struct C { QString key; //other shit }; C TransmuteThisIntoC(); public: A<C>* SomeShit() { return new A<C>(TransmuteThisIntoC()); }//здесь первый наебок //in instantiation of class A<B<int>::C> //required from class B<int> //required from class MyShit //A<T> has incomplete type }; //второй наебок с любым вызовом GetValue<C>() //member function T GetValue() is declared as protected //то есть экземпляр класса A<C> не видит свой собственный метод throw PR_SOLVES_MY_PROBLEM();
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Предыдущий: