LINUX.ORG.RU

Ушат помоев в сторону крестолюбов

 , , ловите наркомана,


15

14

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

Последние 7 лет я пишу сугубо на C, и только под Linux (да, да -std=gnu99 и accept4, dup3, __attribute__((cleanup(dtor))) и прочие приятности, позволяющие сделать волосы шелковистее на 15.5%) и не понимаю, для чего вообще нужен C++? То, что на сишке делается красиво и элегантно, в крестах напоминает соитие парализованных дцпшников (к сожалению, утерял картинку, но именно этот образ всплывает в голове, когда вижу очередную порцию крестолапши).

Давайте посмотрим на типичного C++ разработчика: он использует STL, boost, многие любят Qt (не только для GUI), якобы чтобы «писать кроссплатформенный код». В итоге болезный не знает током ни WinAPI, ни POSIX — ничерта. Он абсолютно не разбирается, как работает целевая система, для которой пишет код! Крестокодер просто не осознает, какой лютый ужас кроется за его любимыми iostream-ами, какое лютое говно лежит в boost::filesystem::path, насколько убого-низкоуровневым является boost::asio в 2016 году.

Только крестораб может эпично обосраться и просадить производительность, забыв передавать по ссылке параметры для «горячих» функций (то есть, просто забыв написать «&» в нужном месте).

Также эти убогие завистливо смотрят на type inference в языках, проектировавшихся не как «C на стероидах», и в ответ начинают лепить template и auto не к месту, от чего код адово пухнет и даже IDE перестает его понимать.

Серьезно, просто прекратите писать на этом языке. В следующий раз, начиная новый проект, выберите java (щютка)/go/swift/rust/c. Прекратите насиловать труп и отравлять зловонием все вокруг!

Перемещено true_admin из talks

★★★★

Последнее исправление: a1batross (всего исправлений: 2)

Ответ на: комментарий от RazrFalcon

Вот вам и сишники. Как только дело доходит до написания портируемого кода

Жалкие попытки крестоутенка оправдать плюсовые говноподелки, жрущие и тормозящие. Деточка, для тебя «кроссплатформенность» — это пустой пук, а я на этой теме немало посношался, чтобы уверенно сказать: C++ — предпоследний язык (последний само собой asm), на котором я буду писать что-то действительно кроссплатформенное. Он тупо для этого не приспособлен.

Это не говоря о том, что т. н. «кроссплатформенный софт» являет собой жутко пожирающее ресурсы говно.

kawaii_neko ★★★★
() автор топика
Ответ на: комментарий от kawaii_neko

Это не говоря о том, что т. н. «кроссплатформенный софт» являет собой жутко пожирающее ресурсы говно.

Царь умер, да здравствует царь!

GoodRiddance
()
Ответ на: комментарий от lenin386

Ну так что, ленин, всё ленишься? Где обещанный код? Спасай ситуацию, а то местные неадекваты от C, похоже, даже не понимают чего от них хотели: сортируют неупорядоченные контейнеры, тащат berkeley db...

asaw ★★★★★
()
Ответ на: комментарий от anonymous

Зачем тебе make_pair с emplace? Зачем тебе emplace, если есть initalizer_list?

Смысл был не в том, чтобы сделать недоконстанту, а в том, чтобы сравнить удобство работы с отличными от тривиальных структурами данных.

asaw ★★★★★
()
Ответ на: комментарий от basp

а что по вашему мнению является высокоуровневым аналогом asio в 2016 году?

Зачем нужен аналог убожества? Боженька дал вам mordor, go и корутины, но нет, мы хотим пороться в жёппы и писать лапшекод, в котором через полтора месяца хрен кто разберется.

kawaii_neko ★★★★
() автор топика
Ответ на: комментарий от kawaii_neko

а я на этой теме немало посношался

Ваше ЧСВ не перестаёт умилять.

RazrFalcon ★★★★★
()
Ответ на: комментарий от kawaii_neko

Обосрамс №2. Ну так я дождусь сегодня от крестопрофи пояснений к утечкам памяти в простейшем примере?

Ты что совсем поехавший? В том коде нет утечек.

Dudraug ★★★★★
()

Ооо, цепепе :-)

Есть ещё один аспект, который характерен для писателей на цепепе :-) Они много любят говорить о том, что на цепепе можно писать по-разному, дескать, свобода :-) Однако, вот ведь незадача, начитавшись книг от всяких разных «гуру» (много их), наставления последних возводятся в ранг неоспоримых :-) И шаг в сторону становится проблематичным - «гуру» не велят :-) И начинается соблюдение сотен и сотен правил от «экспертов» :-) Так, если «эксперт» написал в книжке, что в качестве pimpl может быть только std::unique_ptr<T>, значит T* - ни-ни :-) Это же надо деструктор писать, в котором будет delete, а это уже не по-современному, да и эксперты не одобряют :-) И так далее :-)

anonymous
()
Ответ на: комментарий от asaw

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

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

kawaii_neko ★★★★
() автор топика
Ответ на: комментарий от tailgunner

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

Dudraug ★★★★★
()
Ответ на: комментарий от Dudraug

несет какой-то фееричный бред.

А помнишь, как ты приводил пример наследования от std::vector<> ? :-)

anonymous
()
Ответ на: комментарий от kawaii_neko

а для крестов вроде как mfc

Его аффтара надо закопать, посыпав известью чтоб не восстал :)

slackwarrior ★★★★★
()
Ответ на: комментарий от anonymous

Зачем тебе make_pair с emplace? Зачем тебе emplace, если есть initalizer_list?

Я бы еще спросил зачем ему std::make_pair если он параметры шаблона указывает явно. Но да ладно, тред не об этом.

Dudraug ★★★★★
()
Ответ на: комментарий от kawaii_neko

И вообще, чего ты ко мне пристал со своей виндой?

Деточка, ты охренела? К тебе никто не приставал, а про винду ты сам говоришь.

А какие были их альтернативы в 90-х? На C поедешь с WinAPI работать, а для крестов вроде как mfc/wtl/atl есть.

Ты упоролся? Схрена ты скатился в 90 и венду? Я тебя про это спрашивал?

Типичный крестофанбой.

Это ты еще себя в зеркале не видел.

Pavval ★★★★★
()
Ответ на: комментарий от Stil

Кстати твоего говнокода мы так и не увидели.

Его царь покусал небось :)

slackwarrior ★★★★★
()
Ответ на: комментарий от kawaii_neko

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

Ты читать умеешь? Ушат помоев в сторону крестолюбов (комментарий) Сначала обычный хэш осиль.

asaw ★★★★★
()
Ответ на: комментарий от RazrFalcon

Я не про то, на чём пишут. А то я компилятор на vimscript видел. Это ж не значит, что ниша vimscript — написание компиляторов.

Miguel ★★★★★
()

крестолюбов

Статья же теперь.

anonymous
()
Ответ на: комментарий от invy

C++ везде

Хватит брехать-то! Назови хоть одну охрененную вещь, написанную на крестах.

На этом говне только игрушки пишут, да всякие быдлоподелки. В общем, одну ненужную пургу!

anonymous
()
Ответ на: комментарий от anonymous

А помнишь, как ты приводил пример наследования от std::vector<> ? :-)

Где? Я приводил гипотетический пример как бы было неплохо. Говорил, что такая возможность есть в c# и говорил как это применяется. Я никогда не говорил, что в с++ можно наследоваться от вектора! И я никогда не говорил, что того же результата не добиться другими способами. Я просто высказал свое мнение о том как мог бы измениться с++ в будущем и что можно было бы улучшить если бы например началось создание std2::*. Я в тот раз говорил о том, что неплохо бы иметь дополнительные синтаксические возможности. Я говорил о том, что неплохо бы иметь возможность делать сериализацию и через свободные функции и через наследование от вектора. Тот разговор был спором о вкусовщине.

Автор же треда демонстрирует фееричное незнание языка. Он обсирает unordered_map даже не прочитав мана о нем.

Dudraug ★★★★★
()
Ответ на: комментарий от anonymous

Назови хоть одну охрененную вещь, написанную на крестах.

Node.js

anonymous
()
Ответ на: комментарий от anonymous

Хватит брехать-то! Назови хоть одну охрененную вещь, написанную на крестах.

4.2

RazrFalcon ★★★★★
()
Ответ на: комментарий от anonymous

Хватит брехать-то! Назови хоть одну охрененную вещь, написанную на крестах.

llvm

vvviperrr ★★★★★
()
Ответ на: комментарий от kawaii_neko

Боженька дал вам mordor,

ОМГ. чмо ваще не в теме. мордор та еще фекаль. И да, написанная на крестах.

anonymous
()
Ответ на: комментарий от kawaii_neko

C++ — предпоследний язык (последний само собой asm), на котором я буду писать что-то действительно кроссплатформенное. Он тупо для этого не приспособлен.

Т.е. не для дебилов?

Pavval ★★★★★
()
Ответ на: комментарий от slackwarrior

Ну конечно, щас побежали все легаси переписывать, в котором std::unique_ptr нет и не будет :)

Нет, в «современном» коде не принято оголять указатели :-) Это же ужас-ужас, написать delete в десткруторе/операторе присваивания (да, кстати, последний обязательно надо писать через swap, как подсказывают гуру, лол) :-) Лучше уж заинклюдить 600 кб из <memory> лишь только для того, чтобы написать std::unique_ptr<T>, вместо class T; T* impl_ без инклюдов вообще :-)

anonymous
()
Ответ на: комментарий от anonymous

Хватит брехать-то!

Да, срочно перестань :)

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

ненужную

/0

Илиткоманя, выйди из браузеранейм — ходи по инетам илитно через cURL или свисти илитно в модем ртом :)

anonymous
()

В итоге болезный не знает током ни WinAPI, ни POSIX — ничерта.

В этом и есть суть кроссплатформенной разработки. Чтобы один код можно было скомпилировать без изменений под любую платформу. Создал я проект на том же Qt, вёл всю разработку под Linux, а потом открыл в Qt Creator под виндой, нажал «Build» и проект мало того, что собрался, так ещё и работает нормально. Кстати, многие организации и люди не захотят программировать «только под Linux» как это делаешь ты. И тем фактом, что они таки выпустили свой софт под онтопик, ты должен быть благодарен именно лёгкости портирования.

какой лютый ужас кроется за его любимыми iostream-ами, какое лютое говно лежит в boost::filesystem::path

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

просадить производительность, забыв передавать по ссылке параметры

В случае Си можно забыть сделать free для какой-нибудь небольшой структуры в цикле и получить memory leak (в C++ хотя бы есть RAII, чтобы в большинстве случаев delete вызвался сам). Если там не гигабайты в секунду текут, то проблема тоже может обнаружится не сразу. Однако просадка производительности таки приятнее, чем внезапное падение программы с несохранёнными данными. Кстати, уход программы в подкачку породит фризы на порядки более эпичные, чем любое лишнее копирование в C++. А нормальным людям достаточно запомнить правило «передавай по ссылке всё кроме элементарных типов, если нет ОЧЕНЬ веских причин делать иначе». В итоге & ставится на автомате для всех структур и классов (кроме умных указателей).

И да, в Си ссылок нет, поэтому там структуры передают по указателю. И если забыть это сделать, то просадка производительности будет абсолютно такая же, как и для POD-структур в C++.

код адово пухнет

Ты ведь понимаешь, что реализация ООП средствами Си заставляет пухнуть код гораздо сильнее, а использование макросов вместо шаблонов затрудняет отладку?

Но больше всего мне интересно, каким образом заставляет пухнуть код ключевое слово auto. В любой ситуации, когда длина требуемого имени типа длиннее слова auto (4 буквы), применение auto гарантированно уменьшает размер кода. Если приведёшь хоть один пример кода, где auto заменяет имя типа длинной больше 4 символов и при этом размер кода без auto (всё остальное остаётся неизменным) меньше, чем с ним, то я обещаю больше никогда не использовать C++.

KivApple ★★★★★
()
Последнее исправление: KivApple (всего исправлений: 1)
Ответ на: комментарий от kawaii_neko

Тебе выше скинули линк на готовое решение. Ты походу совсем больной. Сравнивать с++ и си и говорить, что первый говно - глупо. Если ты хотел потроллить, то выбрал плохую тему. С++/STL лучше сравнивать с c#/.net.

Пока незачет, приходи на пересдачу.

Dudraug ★★★★★
()
Ответ на: комментарий от Pavval

Ты упоролся? Схрена ты скатился в 90 и венду? Я тебя про это спрашивал?

Кажется, у тебя начался бред, иначе откуда такой странный вопрос? Фотошопы растут из 90-х годов — что тогда было в наличии?

kawaii_neko ★★★★
() автор топика
Ответ на: комментарий от Dudraug

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

UVV ★★★★★
()
Ответ на: комментарий от kawaii_neko

Кажется, у тебя начался бред, иначе откуда такой странный вопрос? Фотошопы растут из 90-х годов — что тогда было в наличии?

За такое время такие крупные проекты потихоньку переписываются. У меня сейчас на рботе проект изначально (лет 10 назад) был на чистом с++, сейчас половина проекта уже .NET и если б не упоротый тимлид, то уже с++ там осталось бы дай бог 20%.

Dudraug ★★★★★
()
Ответ на: комментарий от KivApple

А нормальным людям достаточно запомнить правило «передавай по ссылке всё кроме элементарных типов, если нет ОЧЕНЬ веских причин делать иначе». В итоге & ставится на автомате для всех структур и классов (кроме умных указателей).

Так было до тех пор, пока в цепепе не добавили std::move :-) Теперь эксперты распиарили новую идиому, типа, если нужна копия аргумента в функции, то пишите f(T), а на f(const T&) :-) Правда, эксперты начинают озадачиваться цепочкой вызовов конструкторов перемещения в случаях f(g(h(object))) :-) Лол :-)

anonymous
()
Ответ на: комментарий от asaw

Я тебя просил обычную хэш-таблицу

И ты ее получил. Правда истощенный крестофанбойством умишко этого не осилил понять. Зачем ты просишь что-то написать, если настолько туп, что не понимаешь элементарного кода?

Но ты не можешь даже без копирования строк и поиска их концов strlen()

Опиши, откуда берутся 11 malloc-ов в твоем примере. Право слово, второй день подряд меня веселишь.

kawaii_neko ★★★★
() автор топика

Ко-ко-ко! Си плюс плюс плохой! Ко-ко-ко! Си рулит!

В Си плюс плюс ужас в стандартной библиотеке! Вы мне не верите? Да-да, там ужас. Это настолько очевидно, что я не буду приводить ни одного пруфа. Все ведь знают наизусть исходники boost::filesystem::path и знают что именно там не так! Это очевидно! А стандартная библитека для Си пишется исключительно гениальными программистами и там всё идеально оптимизированно!

А ещё там можно забыть & и будет плохо. А в моём Си нельзя забыть free! Ведь совершенно очевидно, где его нужно ставить и никакой программист не может его забыть. А вот где ставить & совсем не очевидно!

А ещё в C++ есть template. Очень неудобный механизм! #define гораздо удобнее и прозрачнее! А главное, с ним не работает проверка типов и отладчики в него не заходят. Я ведь умнее компьютера и он не вправе выдавать мне ошибки про несовместимость типов!

А ещё в C++ нет нормального вывода типов! Зато в Си то он есть!

В общем, прекратите писать на этом ужасном языке, я привёл огромное количество неопровержимых, идеально логичных и ненуждающихся в разъяснениях аргументов!

KivApple ★★★★★
()
Ответ на: комментарий от Pavval

Т.е. не для дебилов?

Т.е. не для тех, кто ценит своё время :-)

anonymous
()
Ответ на: комментарий от asaw
# define MAXP 10

# include <stdio.h>
# include <stdlib.h>

#define _GNU_SOURCE
#define __USE_GNU
#include <search.h>


typedef struct
{
    char * key;
    int i;
    char * s;
} S;

S s[MAXP] = {0};

struct hsearch_data * hash;

void add (char * v1, int v2, char * v3)
{
    ENTRY e;
    static int i = 0;
    ENTRY * unused;


    s[i].key = v1; s[i].i = v2, s[i].s=v3;.
    e.key = v1; e.data=&s[i];

    hsearch_r (e, ENTER, &unused,  hash);

    i++;
}

S * search (char * arg)
{
    ENTRY e;
    ENTRY * rv;


    if (!arg)
        return 0;

    e.key = arg;
    e.data = NULL;

    hsearch_r (e, FIND, &rv,  hash);

    if (!rv)
        return 0;
    else
        return rv->data;

}

int main (void)
{
    int i;

    hash = calloc(1, sizeof(struct hsearch_data));
    hcreate_r(MAXP, hash);

    add ("one", 1, "cat");
    add ("two", 2, "dogs");
    add ("three", 3, "cows");

    for (i=(MAXP-1); i>=0; i--)
    {
     S * sea = search(s[i].key);

     if (sea)
        printf ("%s (%d) %s \n", sea->key, sea->i, sea->s);
    }
}

lenin386 ★★★★
()
Последнее исправление: lenin386 (всего исправлений: 2)
Ответ на: комментарий от anonymous

Это всего лишь значит, что надо не слушать экспертов, а думать своей головой и понимать, что создание объекта (даже с помощью конструктора перемещения) имеет какую-то стоимость. А значит если объект никто не собирается изменять в функции (либо эти изменения должны быть видны вызывающему), то только передача по ссылкам.

KivApple ★★★★★
()
Ответ на: комментарий от anonymous

Правда, эксперты начинают озадачиваться цепочкой вызовов конструкторов перемещения в случаях f(g(h(object))) :-)

Эти говноэксперты (Да, ты! :)) перепутали плюсы с лишпом. Эта несопровождабельная кашка из скобачек бывает отдельно запрещена статик-коде-анализаторами в CI цепочке. Воизбежание экономии строчек самоуверенными пионерами, нанятыми по объявлению «эффективными манагерами»(ТМ).

anonymous
()
Ответ на: комментарий от lenin386

Ага, замечательно. Ну и как в этой лапше разобраться что из всего написанного нужно мне, а что - хэш-таблице, чтобы она работала? Я вот не просил добавлять в S char * key; например, да и это может быть невозможно, если автором S является кто-то третий.

asaw ★★★★★
()
Ответ на: комментарий от Pavval

Даже если новых разрабов набрать

Ну если набрать новых разрабов таких как ТС, то они может и перепишут на Plain C. Правда, переписывать они будут в несколько раз дольше лет, чем писался оригинальный софт (если поставить цель 100% повторение функционала), а из-за утечек памяти он будет жрать больше, чем аналогичный софт от других разработчиков, но которые выбрали питон.

KivApple ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.