← All posts tagged C++

lovesan

Не освоишь ты ни ни С, ни С++, ни за 21, ни за 221 день. Даже если очень захочешь. Потому что для этого дела требуется особая ебнутость на всю голову, которая у тебя вряд ли имеется. И, конечно, чугунный зад. Только трушный некрофил будет получать кайф от динозавровых языков, где нет даже сраного сборщика мусора, не говоря уже об Exception handling и всём остальном. Каждый день в ебаном С++ людей гибнет больше, чем в автокатастрофах.

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

lovesan

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

Их не волнует ни сдача продуктов, ни сложность дебага, ни даже красота и простота кода. Ни концепции, ни идеи, ни логика, ни продакшн, ни даже бабки. Нихуя.

Их волнует только то, как бы выдрочиться в кругу таких же задротов: Смотрите! Я знаю шаред_птр! А я! А я! Интрузив_птр! А я знаю как правильно писать деструкторы! А я вчера квиксорт написал и он не сегфолтится! А я буст воткнул в проект! А я! Мама, смотря, я на темплейтах написал числа фибоначчи!

Пиздец блядь, гвозди бы делать из этих людей.

lovesan

бля, ну какой же все-таки C++ феноменально уебанский язык.

Чего, блять, стоят одни эти лямбды с их [] для указания замкнутых переменных — это же просто пиздец.
Это как в похапе!

lovesan

juick.com

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

1. Статическая типизация это говно ссаное нахуй не нужное, потому что на практике решает система ограничений на значения, причем опционально подключаемая(потому что для тьюринг-полного языка натянуть ее повсюду невозможно). Не так давно хаскелоиды и сочувствующие это стали называть "зависимые типы" и выдавать за охуенное изобретение, хотя на самом деле это, во-первых, называется constraint propagation, во-вторых к типизациям отношение имеет крайне отдаленное, и в-третьих, это было в компиляторах лиспа уже лет 20 назад(в том же CMUCL).

2. Монада(как и много других вещей в хаскеле и пр.) это такой классический пример изъебства на пустом месте. Вот знаете, типа как в С++ можно на шаблонах нахреначить факториал(и даже больше — один всем известный наркоман даже интерпретатор схемы написал) в компайл-тайме. Ну можно, да, ну охуеть, только вот встают вопросы — ну типа, во-первых, нахуя это вообще надо, считать факториалы в компайл-тайме, а во-вторых, нахуя их считать с таким страшным изъебством если на C++ без шаблонов и то получается проще на порядки. Это дает охуенный простор для задротства, конечно, но блять, а как насчет решения задач?

Кстати, насчет задроства — уже упомянутый C++ дает просто огромнейший простор для задрачивания бессмысленной хуеты на пустом месте. Раньше это был эталонный язык для подобного рода занятий(кстати, именно этим и объясняется любовь к нему определенного круга лиц). Сейчас, как я понимаю, C++ в этих делах отходит на второе место, в пользу хаскеля.

3. Блять, парсер-комбинаторы это же игрушка, ну правда. Парсить что-либо в продакшне парсер-комбинаторами, а не нормальными парсерами(от LL(1) и packrat+PEG до GLR), это знаете, типа как узнавать размер файла считав его весь в массив и вызвав функцию length. То есть, ну ок, может и нормально, если ты питонщик, и вообще, получаешь инвалидное пособие за умственную отсталость, но блять, в приличном обществе за такое надо руки отрубать.


А и кстати — DSL в рантайме, на фвп и прочей хуете это пиздец говно и кривота. DSL надо писать или на лиспе или, если лиспа у вас по странным причинам нету, конпилировать заранее с помощью чего-то типа ANTLR.

lovesan

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

Вот C++

Блять, C++ можно использовать чтобы векторы-матрицы на стеке перемножать(хотя и то, тут лучше на GPGPU что-нибудь). А вот блять для чего-то большего — это получается пиздец.

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

Самую лучшую вариацию на тему обработки этого острого угла в C++, я видел в COM(Ага, в COM, не в Qt — в Qt совсем говно сраное). Там есть такой концепт как Outgoing interfaces. Это когда мы реализуем какой-то интерфейс, и поставляем указатель на реализацию этого интерфейса нашим объектом какому-нибудь другому объекту, который будет дергать методы нашего интерфейса, типа, когда возникнут какие-либо события.

Но, мало того что вместо одного, блять, ссаного замыкания, мы городим реализацию outgoing COM-интерфейса, так рантайм COM требует вдобавок реализовать кучу сраных обвесок на тему аггрегации и управления памятью(в основном для обхода циклических ссылок — потому что подсчет ссылок, на котором основано управление временем жизни объектов в COM, с ними понятное дело, не справляется) и самому объекту "с событиями", и нам. Короче, пиздец, ад и содомия.

А вообще, когда у меня дело доходит до "событий" в C++, я стараюсь пользоваться старыми добрыми виндовыми очередями сообщений(кстати, обработка событий в DirectShow много где основана именно на них, а не на исходящих интерфейсах, что интересно).

Ну типа, LRESULT CALLBACK HandleMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) ... }

Гораздо проще и приятнее, чем городить нормальную ОО-архитектуру на C++(последнее все-равно ведь не выйдет, как ни старайся).

lovesan

[ Про управление памятью, ответ на #1762666/9 ]

Полюбому — одни неосиляторы вокруг. В майкрософте неосиляторы на какой-то хуй в COM ввели всю эту поебень с управлением памятью, в GObject там что-то, про извращения из буста и Qt я даже не говорю. А самые самые неосилившие неосиляторы придумали такую хрень как сборщики мусора — пиздец ведь, да? Ну надо же какие неосиляторы то блять, вообще нихуя не осилили — дрочат там какие-то оптимизирующие эвристики автоматического управления памятью, выдумывают алгоритмы для автоматизированного менеджмента ресурсов в многопоточной среде, а какие-то malloc/new/free/delete в нужных местах расставлять — не осилили. Вот лохи то тупые, ебта!



Блядь, когда у тебя программа состоит из чего-то крупнее трех статических массивов с интами и двух динамических с флоатами, которые тебе надо перемножить и вывести на stdout чтобы сдать лабораторку в твоем ПТУ — хуюшки ты уследишь за всем ручками. Это я еще не говорю про коллбеки-интерфейсы, про интеграцию с чужим кодом, про интеграцию с разными языками программирования, с разными рантаймами и прочее. И не надо пиздеть что это все от неосиляторства. "Неосиляторство" это отмазка малолетних долбоебов, даже на тех самых C++ то толком не писавших.

lovesan

Кстати, я тут начал писать небольшую библиотеку-обертку над Direct3D 10/11

На плюсцах, но с COM-интерфейсом(т.е. использовать можно хоть из лиспа).

Может, кому полезно будет. Сорцы вот тут:
github.com
Там есть и пример — в директории Triangle.

lovesan

XULRunner'у не хватило 512 памяти и 512 свопа чтобы скомпилироваться.
Кончилась память, да.

Конкретно, вот этот файл сожрал при компиляции все что можно и завалил билд-процесс:

parser/html/nsHtml5StateSnapshop.cpp

x86_64-pc-linux-gnu-g++: Internal error: Killed (program cc1plus)

Ну, C++, че

lovesan

Нет, ну правда. C# покрывает абсолютно все области применения C++, кроме тех, где и C++ применять по-хорошему нельзя, но его туда пихают потомущо дебилы(ембеддед, например).

lovesan

Вынесу из комментов.
juick.com

[ Почему приложения на Java тормозят, хотя язык и рантайм сами по себе — вполне производительные ]

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

Кстати, с C++ такая же история, на самом деле.
Ну то есть, сам язык — очень низкоуровневый, для него существуют мегаоптимизирующие компиляторы, да. Но, любое более-менее сложное приложение на крестах — куча тормозного говна. Причина та же, что и с жабой, и плюс, "абстракции"(а точнее — костыли) для управления памятью добавляют дополнительного оверхеда.

lovesan

Кэши NTFS и диска это просто невыносимая победа.

Я тут попробовал, от нехер делать, mmap'ить, а потом декодировать в строки(вообще, с помощью модуля для работы с текстом из программы для моего стартапа, но думаю, что например cffi+babel дадут те же результаты) все более-менее текстовые файлы из сорцов SBCL(считая что они все в utf-8), каких около 20 мегабайт, рекурсивно обходя директорию с сорцами.

Так первый раз это заняло 32 секунды(из них времени на перекодирование — 1 секунда, примерно), а второй и последующие — в районе 2 секунд(даже после перезапуска процесса). Я предполагал улучшение показателей, конечно, но все-равно охуел.

Чуваки, если у вас в программе что-то якобы тормозит, то 95% что это I/O. Дисковое I/O — в первую очередь; хотя и другие виды I/O, типа загрузки ресурсов на видеокарту, сокетов, и прочего — тоже нихуевый источник тормозов.

Поэтому я всегда уже давно считаю, что ни Си, ни C++, нигде в прикладном программировании не нужны. C++, впрочем, даже в системном то нахуй не сдался, но это уже другой вопрос. Брать сишечку или кресты "для производительности" это просто задротство, и неумение эту самую производительность замерять.