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)
Ответ на: комментарий от eao197

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

Если ты думаешь, что за моим ником скрывается десяток человек, то это не так.

Да, очередной дятел.

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

int calculate_smth(int param)
{
  int val;
  try {
    val = access_resourse1();
  } catch (...) {
    try {
      val = access_resource2();
    } catch (...) {
      val = default_value;
    }
  }
}
Конечно, иногда самого внутреннего catch можно избежать, присвоив default_value сразу, но в общем и целом, лучше кодов возврата нет ничего, а exceptions хороши только на замену longjmp.

Да, очередной дятел.

Очередной кресточервь.

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

Если ты думаешь, что за моим ником скрывается десяток человек, то это не так.

Нет, я думаю, что от самоуверенных ламеров лучше максимально дистанцироваться.

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

На кону мочало. Мне уже столько раз приходилось дятлам объяснять, как нормально жить с исключениями, что делать это еще раз не буду.

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

Мне уже столько раз приходилось дятлам объяснять

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

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

а kawaii_neko может и опозорить перед почтенной публикой

Да, как и в теме с PImpl-ами.

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

лучше кодов возврата нет ничего

Ага int get_value(s *result); верх эстетики и юзабилити. Нужно только наедятся, что коды возврата не поменялись и что result будет валидным.

За что люблю сишников, так это за то, что они называют свой язык простым, а не примитивным. Такая тонка игра слов, но как она показательна.

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

На работе было выключено. Включил, чуть медленнее парсит, но на юзабилити не сказывается. Результаты лучше и варнинги показывает отлично. Все равно быстрее студии с VAX.

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

Оно от этого становится не «over-», а normal.

да вот ни разу это не так. то что написано на нем много, не значит что оно хорошее.

для всего свои инструменты, с той лишь разницей, что если ниша C понятна и никуда не денется (никто не будет системные вещи переписывать на плюсы и тянуть за собой весь плюсовый bootstrap, ну разве что полоумные какие, да и не нужно оно там), то с плюсами не совсем все понятно. сейчас дешевле писать прикладное что либо не на C/C++ а на java или чем то еще (разработчики дешевые и тысячи их) и соответственно поддерживать дешевле и проще (говнокод, но его может быть меньше).

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

Я попробовал kdevelop новый - так там вообще быстро валит. Но он темную системную тему не очень подхватывает у меня, поэтому не пересел на него.

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

Мне уже столько раз приходилось дятлам объяснять, как нормально жить с исключениями, что делать это еще раз не буду.

можно в фак отправить, для начала

https://isocpp.org/wiki/faq/exceptions

shty ★★★★★
()

go - gc тормозит да и синтаксис не радует.

swift - было бы классно на него пересесть, но оно слишком макоориентированное, может позднее, как туториалы по интеграции с линукс либами выложат.

rust - запрещает то, что реально работает. Мешает жить своими глупыми проверками. Впрочем существуют задачи, на которых он дает преимущество.

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

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

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

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

Если говорить про линукс, то чтоб собрать что-то «системное» на С тебе уже нужен компилятор, написанный на С++. И чтоб отладить что-то «системное» тебе нужен дебаггер на С++ же (см. changelog gdb). Да и всякие win, macOS так же собираются и отлаживаются средствами, написанными на С++. Так что твое заявление про полоумных, которые что-то тянут, явно нуждается в уточнении, что это твое личное мнение про частные случаи.

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

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

Что взять с дурилки, который в своих самых смелых фантазиях никогда даже не подумает о том, что можно написать простенькую обобщенную функцию, которая оборачивает произвольный функтор кидающий исключения в функтор, возвращающий optional

int calculate_smth()
{
  constexpr auto default_value = 42;
  
  auto val = trycatch(access_resource1)();
  if(!val)
  {
      val = trycatch(access_resource2)();
  }

  if(!val)
  {
      val = default_value;
  }

  return *val;
}

http://ideone.com/N9Fa1s

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

Если говорить про линукс, то чтоб собрать что-то «системное» на С тебе уже нужен компилятор, написанный на С++

Не используй шланг, всего и делов.

И чтоб отладить что-то «системное» тебе нужен дебаггер на С++ же (см. changelog gdb)

1/10, попробуй тоньше

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

Как там разоблачительная статья касаемо смысла писать на C? :-) Готовится? :-)

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

исключения - это не способ обработки ошибок а инструмент для отмотки ресурсов, схваченых через RAII и доведение информации об ошибке до того уровня, где её обработают по настоящему.

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

Не используй шланг, всего и делов

Т.е. ты не в курсе, что GCC переехал на С++? Сишник называется.

1/10, попробуй тоньше

Это к чему? Твои инструменты для работы написаны на С++, живи с этим.

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

можно написать простенькую обобщенную функцию

Ехал враппер через враппер, чтобы проверить код возврата. Крестоэлегантность во всей красе.

возвращающий optional

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

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

Если говорить про линукс, то чтоб собрать что-то «системное» на С тебе уже нужен компилятор, написанный на С++

да сколько вам уже повторять что там не плюсы нужны.

И чтоб отладить что-то «системное» тебе нужен дебаггер на С++ же (см. changelog gdb).

wtf ?

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

Шок: системная либа в плюсах опциональна.

шок: а что только ли системная либа является bootstrap в плюсах ? вообщем думайте сами дальше.

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

да сколько вам уже повторять что там не плюсы нужны.

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

wtf ?

Разработчики GDB вслед за GCC начали переезд на С++.

This version of GDB now builds with a C++ compiler by default. It is still possible to build GDB with a C compiler by simply configuring it with --disable-build-with-cxx. However, future release will require a C++ compiler to build GDB.

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

Ну и какой-же там будет оверхед в сравнении с Си? Исключения(опционально) и vtable(опционально)?

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

А что, doxygen не умеет генерить документацию для макросов?

Странный вопрос. Правильный вопрос звучит так: «А что, doxygen не умеет разворачивать макросы?». Ответ - умеет. Но не факт, что в твоей команде будет именно doxygen и что тебе дадут его настраивать.

Но вот отладочный бинарь пухнет прилично :-) На порядок :-)

И что?

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

Но расскажи, ты действительно свято веришь в то, что тебе никогда не придётся пользоваться doxygen'ом?
Но не факт, что в твоей команде будет именно doxygen и что тебе дадут его настраивать.

Это что за раздвоение с переобуванием? :-) Лол :-)

И что?

Настораживает, что там за неведомая генерация такая, что разница на порядок? :-)

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

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

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

а что только ли системная либа является bootstrap в плюсах ? вообщем думайте сами дальше.

Ну как же мы можем додуматься, что ты вообще называешь называешь «bootstrap в плюсах».

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

Она тебя трогает?

Нет, ну интересно же :-) Тем более в треде про ненужность цепепе :-)

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

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

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

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

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

Ну как же мы можем додуматься, что ты вообще называешь называешь «bootstrap в плюсах».

да куча дополнительного г-на в бинарнике, поюзайте ваши templates, multiple inheritance, vtables ну и прочие радости.

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

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

никакого переезда на C++

Ты лжешь. В GCC уже используются шаблоны и классы. Собрать его компилятором Си уже невозможно.

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

Ну как же мы можем додуматься, что ты вообще называешь называешь «bootstrap в плюсах».

да куча дополнительного г-на в бинарнике, поюзайте ваши templates, multiple inheritance, vtables ну и прочие радости.

Расскажи подробнее о том, что остается от шаблонов в бинаре. И чем тебе помешали vtables.

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

Неверно. Мы получаем код, написанный на подмножестве языка Си++. Но Си++-код всегда пишется на подмножестве - полный язык слишком велик.

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

Мы получаем код, написанный на подмножестве языка Си++. Но Си++-код всегда пишется на подмножестве - полный язык слишком велик.

это конечно круто да. в чем смысл ? плюсы чтобы были плюсы ? да и то что язык слишком велик - ничего хорошего в этом нет, во всяком случае в embedded, во всяких прикладных поделиях пофик.

что остается от шаблонов в бинаре

сам посмотри, мне уже лень.

И чем тебе помешали vtables.

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

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

Ты лжешь. В GCC уже используются шаблоны и классы. Собрать его компилятором Си уже невозможно.

link в студию.

Ы. Так ты и правда этого не знал? O_o

https://github.com/gcc-mirror/gcc/blob/master/gcc/cfg.h#L61

https://github.com/gcc-mirror/gcc/blob/master/gcc/coretypes.h#L291

https://github.com/gcc-mirror/gcc/blob/master/gcc/coretypes.h#L293

https://github.com/gcc-mirror/gcc/blob/master/gcc/coretypes.h#L62

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

И чем тебе помешали vtables.

ну это прикольно в RT в рантайме бегать выбирать чтоже нам там вызвать ...

Ты исходники ядра видел? Там те же vtables, только вручную.

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

и что мы там видим ? C.

Хорош C

void VmObject::AddRegionLocked(VmRegion* r) {
    DEBUG_ASSERT(lock_.IsHeld());

    region_list_.push_front(r);
}

void VmObject::RemoveRegionLocked(VmRegion* r) {
    DEBUG_ASSERT(lock_.IsHeld());

    region_list_.erase(*r);
}
asaw ★★★★★
()
Ответ на: комментарий от tailgunner

Ы. Так ты и правда этого не знал? O_o

ok, С с классами, признаю что был не прав.

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

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

Ты исходники ядра видел? Там те же vtables, только вручную.

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

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

RT не видел этих vtables вручную в критичных местах

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

всегда можно сделать этого proof, давайка в плюсах тоже самое

Дать то же самое? Не вопрос, вот: всегда можно сделать этого пруф.

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

Открываешь корень исходников, первый же файл с расширением .с:

Сильно подозреваю, что конструкции вида «struct GTY(()) alias_set_entry» тоже транслируются в что-то плюсовое.

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