Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
> free(nullptr)
Я вот что-то не врубаюсь, нахуя зачем это оставили в крестах?
Или, более глобально, нафига делать кресты обратно совместимыми с сишечкой?
Как-бы если нужен пирфоманс и байтоёбство - идём насишечку, благо её стандарт тоже развивается (C11), а если нужен высокий уровень, ООП, все дела - нахуя ебать байты malloc'ами?
А уж компилировать проекты на С конпелятором С++ - это явное извращение.
> обратно совместимыми с сишечкой
Потому что изначально кресты паразитировали на сишке. А потом уже столько гибридного c/c++ софта понаписали, что совместимость пришлось оставить навсегда.
Это ж тебе не питон, чтобы всего за 10 лет почти перейти на новую, расово чистую версию.
Есть мнение, что совместимость с сишечкой - это главная причина успеха плюсов. Почитай дизайн и эволюцию крестов Страуструпа, если интересно.
> Как-бы если нужен пирфоманс и байтоёбство - идём насишечку
У меня всегда бомбит от этого тезиса. Насишечку идут, когда нужны сегфолты и буфероверфлоу. А перфоманс и байтоебство можно и в плюсах, не отказывая себе в прелестях RAII, ооп и прочих абстракций.
У тебя бомбит видимо от того, что ты не осилил писать на сишечке без сегфолтов и оверфлоу.
А другие осилили. Например написавшие ту ОС, под управлением которой ты сейчас пишешь эту чушь
Таки непонятно обвинение. Хочешь сказать, что в плюсах нельзя в пирфоманс? Или хочешь сказать, что в си есть приличные средства абстракции (кроме макросов, лел)? Или что си хоть как-то защищает программиста от выстрела в ногу?
Эко у тебя бомбануло от посягательства на свитую сишечку, что ты аж диагнозы мне начал ставить.
В сях есть вполне годные средства абстракций вроде непрозрачных типов. Бомбануло меня от того, что глупый неосилятор имеет наглость судить о том, в чем не разобрался. Ты песдиш что в сях всегда есть оверфлоу. Но это не так. Достаточно просто думать головой
отсосите оба, я тимлид, а сишка говно, кресты говно, эрланг говно, все остальные языки говно, весь код говно, вся цивилизация говно, а человек несовершенен, но, к счастью, смертен
Вот, кстати, когда пишут про жс, почему-то ругают язык. А как про сишку - так программистов.
Почему так, если в сущности здесь только два языка, каждый из которых позволяет легко написать чушь, из-за которой программу можно сразу выбрасывать? Потому, что сишка десятилетия была в ходу как практически безальтернативный язык для запиливания царского пирфоманса, а жс молодой.
У тебя бомбит видимо от того, что ты не осилил писать на жавоскрипте без андефайндов и падающих при ошибке http-запросов.
А другие осилили. Например написавшие тот сайт, под управлением которого ты сейчас пишешь эту чушь
> А на сях существует, хотя и сложный.
Да нет там ничего сложного. Там просто нужны самоконтроль и сила воли, прокачанные до 99 уровня. Или ревьювер с кнутом. Иначе рано или поздно срываешься в хаки и преждевременную оптимизацию ;(
З.Ы. Поэтому я больше люблю кресты с их няшными RAII и шаблонами. Рутины поменьше.
не существует способа написать хороший код. Поэтому он весь должен быть достаточно модульный, чтобы любой кусок, который не работает, или работает с багами, или просто непонятен, можно было быстро написать с нуля и заменить.
п.с. я даже сам не знаю, серьезно я или стоило выделить зеленым.
Есть такой забавный зверёк - Intel Galileo. Идейно - ардуино-совместимая плата от интела. Реально - одноплатник на аналоге P-II c линуксом на борту. Так вот, ардуинообразное поведение по USB там реализуется Node.js демоном, который в фоне ждёт передачи прошивки и запускает её от рута.
А вы говорите, драйвера на жс...
P.S. Да, ещё в "аналоге ардуино" по дефолту наличествует питон(второй), перл и gcc. Да, прямо на борту у embedded-девайса.
Можно вопрос, а нахуя себя мучать и пытаться писать на сишке без сегфолтов, если можно просто взять кресты, взять контейнеры и получить тот же перфоманс и большую надёжность при меньших усилиях?
Конечно абсракции. В С++ sort ограничен: начальный и конечный итератор должны быть одного типа, типы аргументов компаратора и элементов итератора должны быть совместимыми... А в Сишке всё абсрактно: запихиваешь ужа и ежа в void* и передаёшь абсрактную функцию сравнения. Вот мы и видим на конкретном примере, как увеличение уровня абсракции негативно влияет на производительность.
Берем обычный десктопный проект. В 98% участков кода перфоманса на любую чушь хватит. Зато кое где надо прям побайтоёбить. И вот чтобы в каждом таком месте не приходилось пилить мини либу на сях и линковать её, в плюсах оставили возможности из си.
> Зато кое где надо прям побайтоёбить.
Вот-вот. Другие пишут на всяких шарпах и жавах - и ничего, обходятся как-то без необходимости срать напрямую в память. А как кресты - так без ебли с сырыми указателями уже никак.
...и как только узкое горло, начинают искать какую-нибудь либу, которая может, а либа написана на сях или плюсах, и внутри та самая ебля с сырыми указателями.
Я вот не представляю, что такого нужно делать в обычном десктопном проекте, чтобы узким горлом были не сеть/диск, а что-то другое, для чего нужна либа аж на сях. И уж совершенно не могу представить, как в обычном десктопном проекте может не хватит перфоманса стандартных крестовых средств.
маткад тоже
> обычный десктопный проект
> может не хватит перфоманса стандартных крестовых средств
Речь же шла о перфомансе стандартных джава/шарп средств? В моей предметной области достаточно много узких мест
> Речь же шла о перфомансе стандартных джава/шарп средств?
Изначально, речь шла о " В 98% участков кода перфоманса на любую чушь хватит. Зато кое где надо прям побайтоёбить", т.е. о крестах. Я и привёл пример - куча программ, даже написанных на джаве/шарпе (объективно более медленных, чем кресты, за счёт оверхеда VM), вполне работают безо всякого байтоёбства и сырых указателей.
> В моей предметной области достаточно много узких мест
Прямо НАСТОЛЬКО узких, что не хватает крестовых STL/Boost, нужно ебать память напрямую?
А причём тут битовые поля? Битовые операции в любом языке есть.
Ну и, к тому же, очень часто битовые поля - признак плохой архитектуры и попытке сэкономить пару байт на спичках.
> обычный десктопный проект
Часто тебе для десктопного проекта нужны данные ядра и свой сетевой протокол?
Ну и да, для передачи данных по сети обычно используют JSON/Protobuf (если нет нужды в крайне высокой производительности - вроде игр и прочего), а ядро и драйверы - слишком специфичная область, с которой я и не знаком толком.
например, NMEA кодирует сообщения AIS (VDM) побитово. Сетевой протокол такой.
В вашем представлении "обычный десктопный проект" это не игра, не инженерный софт, не математический софт, не производственный софт. Что же это? Какая-то абстрактная бесполезная хуита утилита
А в это время большая часть програм на Си закатывает солнце обратно.
./test5: read and write
wrote 1048576 byte file 10 times in 0.17 seconds (59032134 bytes/sec)
read 1048576 byte file 10 times in 0.0 seconds (-2147483648 bytes/sec)
./test5 ok.
Типичный вывод сишкопрограммы. (в данном случае: Connectathon - популярный инструмент для тестирования NFS).
> производственный софт
По моему представлению, в производственном софте главное - всё же надёжность. А байтоёбство и прямая работа с памятью надёжности не прибавляет.
> математический софт
Вот здесь производительность как-раз может быть боттлнеком. Однако, вы часто пишете математический софт, когда есть Wolfram/MathCAD/etc?
> инженерный софт
Какой именно? САПРы?
> игра
Здесь байтоёбинг может быть уместен, хотя и не всегда нужен.
> NMEA кодирует сообщения AIS (VDM) побитово
Эээ... "NMEA 0183 is a combined electrical and data specification for communication between marine electronics such as echo sounder, sonars, anemometer, gyrocompass, autopilot, GPS receivers and many other types of instruments." - мы о десктопе говорим, или уже переместились в мир микроэлектроники? Если переместились - я, пожалуй, покину дискуссию, ибо знанями о морском оборудовании и GPS приёмниках не обладаю.
Иногда (редко) не получается выкусить пару вложенных циклов в осмысленную функцию. Для этих случаев goto допустимо (всё лучше, чем флагоёбство или функция через силу).
смутно представляю себе ситуацию, где goto адекватен и не заменяется на scoped exit. В более простых случаях (для освобождения ресурсов) можно оборачивать их в unique_ptr с указанием deleter'а.
Да всякая расчётная хуита алгоритмика, у которой куча локального контекста (поэтому не вытащить эти циклы в функцию).
> scoped_exit
> unique_ptr
Ну а вот это как раз не в тему. Там не надо освобождать ресурсы. Там надо просто прервать 2 цикла и продолжить код под ними, причём не по ошибке (поэтому исключение кидать не вариант).
Штука редкая, в типичном хуяк-хуяк-в-продакшен (где большинство циклов красиво заменяется на всякие find'ы) не встречается.
>> system("pause");
:))))))
очевидно. матёрые профессионалы пишут `getchar();`.
Может тебе free(nullptr) на могиле выгравировать?
Я вот что-то не врубаюсь, нахуя зачем это оставили в крестах?
Или, более глобально, нафига делать кресты обратно совместимыми с сишечкой?
Как-бы если нужен пирфоманс и байтоёбство - идём насишечку, благо её стандарт тоже развивается (C11), а если нужен высокий уровень, ООП, все дела - нахуя ебать байты malloc'ами?
А уж компилировать проекты на С конпелятором С++ - это явное извращение.
Потому что изначально кресты паразитировали на сишке. А потом уже столько гибридного c/c++ софта понаписали, что совместимость пришлось оставить навсегда.
Это ж тебе не питон, чтобы всего за 10 лет почти перейти на новую, расово чистую версию.
https://docs.python.org/3/library/typing.html
блин, ты и пистона своего не знаш
> Как-бы если нужен пирфоманс и байтоёбство - идём насишечку
У меня всегда бомбит от этого тезиса. Насишечку идут, когда нужны сегфолты и буфероверфлоу. А перфоманс и байтоебство можно и в плюсах, не отказывая себе в прелестях RAII, ооп и прочих абстракций.
А другие осилили. Например написавшие ту ОС, под управлением которой ты сейчас пишешь эту чушь
Эко у тебя бомбануло от посягательства на свитую сишечку, что ты аж диагнозы мне начал ставить.
https://www.youtube.com/watch?v=ImXeMoKBAHs
прямо как в той истории про молдаван, бордель и 10 баксов
а я про программирование
Абстрактная функция close может закрыть все что угодно, даже argc и errno.
Вот, кстати, когда пишут про жс, почему-то ругают язык. А как про сишку - так программистов.
Почему так, если в сущности здесь только два языка, каждый из которых позволяет легко написать чушь, из-за которой программу можно сразу выбрасывать? Потому, что сишка десятилетия была в ходу как практически безальтернативный язык для запиливания царского пирфоманса, а жс молодой.
У тебя бомбит видимо от того, что ты не осилил писать на жавоскрипте без андефайндов и падающих при ошибке http-запросов.
А другие осилили. Например написавшие тот сайт, под управлением которого ты сейчас пишешь эту чушь
Да нет там ничего сложного. Там просто нужны самоконтроль и сила воли, прокачанные до 99 уровня. Или ревьювер с кнутом. Иначе рано или поздно срываешься в хаки и преждевременную оптимизацию ;(
З.Ы. Поэтому я больше люблю кресты с их няшными RAII и шаблонами. Рутины поменьше.
Не существует способа написать хороший код на сях. А на жс существует, хотя и сложный. На жс можно эмулировать модули, а на сишке нет
п.с. я даже сам не знаю, серьезно я или стоило выделить зеленым.
А вы говорите, драйвера на жс...
P.S. Да, ещё в "аналоге ардуино" по дефолту наличествует питон(второй), перл и gcc. Да, прямо на борту у embedded-девайса.
@guesto, научите ещё авторов OpenSSL писать без бафероверфлоу, реально достали.
И да, сишный qsort работает примерно в 2 раза медленнее std::sort. Абсракции виноваты, наверное.
Вот-вот. Другие пишут на всяких шарпах и жавах - и ничего, обходятся как-то без необходимости срать напрямую в память. А как кресты - так без ебли с сырыми указателями уже никак.
> обычный десктопный проект
> может не хватит перфоманса стандартных крестовых средств
Речь же шла о перфомансе стандартных джава/шарп средств? В моей предметной области достаточно много узких мест
Изначально, речь шла о " В 98% участков кода перфоманса на любую чушь хватит. Зато кое где надо прям побайтоёбить", т.е. о крестах. Я и привёл пример - куча программ, даже написанных на джаве/шарпе (объективно более медленных, чем кресты, за счёт оверхеда VM), вполне работают безо всякого байтоёбства и сырых указателей.
> В моей предметной области достаточно много узких мест
Прямо НАСТОЛЬКО узких, что не хватает крестовых STL/Boost, нужно ебать память напрямую?
... битовыми полями. Да, приходится
Ну и, к тому же, очень часто битовые поля - признак плохой архитектуры и попытке сэкономить пару байт на спичках.
Часто тебе для десктопного проекта нужны данные ядра и свой сетевой протокол?
Ну и да, для передачи данных по сети обычно используют JSON/Protobuf (если нет нужды в крайне высокой производительности - вроде игр и прочего), а ядро и драйверы - слишком специфичная область, с которой я и не знаком толком.
В вашем представлении "обычный десктопный проект" это не игра, не инженерный софт, не математический софт, не производственный софт. Что же это? Какая-то абстрактная бесполезная хуита утилита
Типичный вывод сишкопрограммы. (в данном случае: Connectathon - популярный инструмент для тестирования NFS).
Зачем мне нужен unsigned? У меня нет времени, чтобы ебаться с ним!
По моему представлению, в производственном софте главное - всё же надёжность. А байтоёбство и прямая работа с памятью надёжности не прибавляет.
> математический софт
Вот здесь производительность как-раз может быть боттлнеком. Однако, вы часто пишете математический софт, когда есть Wolfram/MathCAD/etc?
> инженерный софт
Какой именно? САПРы?
> игра
Здесь байтоёбинг может быть уместен, хотя и не всегда нужен.
> NMEA кодирует сообщения AIS (VDM) побитово
Эээ... "NMEA 0183 is a combined electrical and data specification for communication between marine electronics such as echo sounder, sonars, anemometer, gyrocompass, autopilot, GPS receivers and many other types of instruments." - мы о десктопе говорим, или уже переместились в мир микроэлектроники? Если переместились - я, пожалуй, покину дискуссию, ибо знанями о морском оборудовании и GPS приёмниках не обладаю.
> scoped_exit
> unique_ptr
Ну а вот это как раз не в тему. Там не надо освобождать ресурсы. Там надо просто прервать 2 цикла и продолжить код под ними, причём не по ошибке (поэтому исключение кидать не вариант).
Штука редкая, в типичном хуяк-хуяк-в-продакшен (где большинство циклов красиво заменяется на всякие find'ы) не встречается.
-- а-а-а-а, кто-то где-то использует goto
-- срочно замените его на throw/catch!
или на лямбду!
"Now, that's a name I've not heard in a long time."