В ветках С++ тоска — изредка правда встречаются фрики, которые не имея опыта пилят странные велосипеды, что доставляет массу веселья, да 3 с половиной опытных плюсовиков немножко оторвавшихся от реальности. О подобных персонажах и тенденциях развития С++ и хочется поговорить. Вообще С++ классный язык появившийся в нужное время, который покрыл потребности инженеров — тот-же С, но с классами и шаблонами. И если классы и виртуальные функции на С еще можно самому написать, пусть и ценой излишних усилий, то аналогов шаблонам там нет. И все было класно, но потом в комьюнити пролезли фрики оторванные от реальности и стали пилить чудовишную дичь под названием Boost: в разы замедлившаяся компиляция, километры невнятных ошибок, быстродействие даже не на уровне Питона, а в 3 раза хуже (пруф: http://rsdn.org/forum/flame.comp/6943929.1
Дальше было хуже, из своей резервации они пролезли в комитет, да спасибо друзья за смартпоинтеры и пару других удобных вещей, но то что вы делаете сейчас просто ни в какие ворота! Внимание, на дворе 2017 год, а в языке нет юникодных строк, нет файловых операций, нет модульности и корутин, зато с азартом обсуждаются новые фичи метапрограммирования. Блин, дорогие ученые, да я рад за вас, пилите, если вам это нужно, но не в ущерб же интересам инженеров на которых был положен болт.
Посмотрев любой мастер класс по плюсам уже через пять минут ловишь себя на мысли — да все упоролись, то что на других языках делается не задумываясь тут предмет для получасового обсуждения. Вот не самый упоротый случай:
Чувак на полном серьезе рассказыват, что вместо того чтобы пилить класс строк для того чтобы сравнивать строки независимо от регистра, можно написать класс-свойство, который передать в шаблон стандартной строки и который будет переводить строки в нижний регистр перед тем как положить в память, ну и потом можно эти строки сравнивать. Друг, ты совсем что-ли? Может лучше просто написать функцию (а лучше чтобы она была в стандартной библиотеке) compareCaseInsensitivity? Это и проще и в коде сразу понятно, что происходит
Короче, мой месседж — С++ маргинализируется и становится убежищем фриков, на интересы инженеров там положили болт.
“Внутри С++ сидит более компактный и понятный язык, отчаянно пытающийся выбраться наружу.” — Бьерн Страуструп
Здравствуйте, MTD, Вы писали:
MTD> В ветках С++ тоска — изредка правда встречаются фрики, которые не имея опыта пилят странные велосипеды, что доставляет массу веселья, да 3 с половиной опытных плюсовиков немножко оторвавшихся от реальности.
MTD>Чувак на полном серьезе рассказыват, что вместо того чтобы пилить класс строк для того чтобы сравнивать строки независимо от регистра, можно написать класс-свойство, который передать в шаблон стандартной строки и который будет переводить строки в нижний регистр перед тем как положить в память, ну и потом можно эти строки сравнивать. Друг, ты совсем что-ли? Может лучше просто написать функцию (а лучше чтобы она была в стандартной библиотеке) compareCaseInsensitivity? Это и проще и в коде сразу понятно, что происходит
Видео не смотрел, но пример более чем показателен.
Если строка например изначально в верхнем регистре, а потом будет сравниваться 100 раз, то будешь делать фактически 100 раз приведение к нижнему регистру. А если это национальный алфавит и прочие умляуты, где приведение в нижний регистр дорого?
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>А альтернативы всё равно нет.
Ну как сказать. Надо смотреть на предметную область. Например, сервера писать меня Go впечатлил — код пишется раз в 5-10 быстрее, чем на С++, по производительности одинаково. Конечно, на плюсах можно на голом epoll поднатужится и чуть обойти, но времени на разработку тогда уйдет раз в 20 больше.
Ниша для С++ конечно есть и будет еще очень долго, уверен, мне до пенсии на хлеб с икрой хватит, но речь про то, что люди в С++ задающие развитие сейчас малость оторвались от реальности.
Здравствуйте, MShura, Вы писали:
MS>Видео не смотрел, но пример более чем показателен. MS>Если строка например изначально в верхнем регистре, а потом будет сравниваться 100 раз, то будешь делать фактически 100 раз приведение к нижнему регистру. А если это национальный алфавит и прочие умляуты, где приведение в нижний регистр дорого?
Про преждевременную пессимизацию не писал только ленивый. Сначала надо написать понятно и чтобы работало правильно, потом по необходимости начинать оптимизировать. Вот ты привел пример с быстродействием и мимо, например, почему ты не предложил сравнивать хеши?
Здравствуйте, rudzuk, Вы писали:
R>Твоя попаболь доставляет куда сильнее.
Тем не менее моя боль позволяет общаться конструктивно, то есть приводить аргументы, а тебе, Nuzhny и кто там еще сейчас набежит только страдать и остается.
MTD>“Внутри С++ сидит более компактный и понятный язык, отчаянно пытающийся выбраться наружу.” — Бьерн Страуструп
MTD>Увы, его отчаянные попытки тщетны.
Я слышал, что планируется создание некоего "C++ lite" — простого подмножества. Было бы круто. А всё остальное, не вошедшее в это подмножество, надо смыть в унитаз
Здравствуйте, MTD, Вы писали:
R>>Твоя попаболь доставляет куда сильнее. MTD>Тем не менее моя боль позволяет общаться конструктивно, то есть приводить аргументы, а тебе, Nuzhny и кто там еще сейчас набежит только страдать и остается.
Ну-ну, обиделся за минус? Ты начал тему в соответствующем разделе и пообещал угар. А вместо этого плач Ярославны. У кого боль-то?
Я пишу на связке Питон + С++, никаких проблем не испытываю. И в С++ последнем мне всего хватает. А чего не хватает, то на OpenCL переписываю. Так что мне все твои больные темы намного менее интересны того, чем занимается комитет сейчас. Даже так: С++ наоборот начал поворачиваться ко мне лицом не только благодаря метапрограммированию. Ещё специальные математические функции в стандарт добавил, тот же clamp появился и т.п.
Здравствуйте, MTD, Вы писали:
MTD>Ну как сказать. Надо смотреть на предметную область. Например, сервера писать меня Go впечатлил — код пишется раз в 5-10 быстрее, чем на С++, по производительности одинаково. Конечно, на плюсах можно на голом epoll поднатужится и чуть обойти, но времени на разработку тогда уйдет раз в 20 больше.
Если посмотреть strace'ом, чем там программа на Go занимается, то можно с изумлением увидеть, что унутре нее тот же epoll (и completion port на венде, причем из тех же исходников).
Но вот что в этом Go мне в плане производительности действительно не нравится, это то, что библиотека евонная так и норовит на каждый чих чего-нибудь маленькое зааллоцировать в куче, а сборщику мусора потом подбирать.
Здравствуйте, Nuzhny, Вы писали:
R>>>Твоя попаболь доставляет куда сильнее. MTD>>Тем не менее моя боль позволяет общаться конструктивно, то есть приводить аргументы, а тебе, Nuzhny и кто там еще сейчас набежит только страдать и остается.
N>Ну-ну, обиделся за минус?
И в чем ты увидел проявление обиды? Ткни пальцем пожалуйста.
N>Ты начал тему в соответствующем разделе и пообещал угар. А вместо этого плач Ярославны. У кого боль-то?
Ты бы читал, прежде чем писать — да у меня боль. Я в ответе rudzuk этого не отрицал. С выяснением этого закончили?
N>Я пишу на связке Питон + С++, никаких проблем не испытываю.
Рад за тебя. А меня не устраивает, что на каждом более-менее крупном проекте гора своих велосипедов, например в одной компании где я работал было 5 классов-строк и два для работы с датой и временем. Мне бы хотелось, чтобы наконец в стандарте появились адекватные средства для этого. Ты против?
N>Так что мне все твои больные темы намного менее интересны того, чем занимается комитет сейчас.
У тебя все хорошо, непонятно тогда отчего ты так разволновался?
Здравствуйте, MTD, Вы писали:
N>>Ну-ну, обиделся за минус? MTD>И в чем ты увидел проявление обиды? Ткни пальцем пожалуйста.
В том что диагностировал у меня какую-то боль.
MTD>Рад за тебя. А меня не устраивает, что на каждом более-менее крупном проекте гора своих велосипедов, например в одной компании где я работал было 5 классов-строк и два для работы с датой и временем. Мне бы хотелось, чтобы наконец в стандарте появились адекватные средства для этого. Ты против?
Нет, не против. Я спрашиваю, почему ты оффтопишь!
MTD>У тебя все хорошо, непонятно тогда отчего ты так разволновался?
Потому что, снимая майку у девушки, я ожидаю там увидеть сиськи. Если их нет, то волнуюсь. Также и в твоей теме.
Здравствуйте, Pzz, Вы писали:
Pzz>Если посмотреть strace'ом, чем там программа на Go занимается, то можно с изумлением увидеть, что унутре нее тот же epoll
Поразительно, кто бы мог подумать.
Pzz>Но вот что в этом Go мне в плане производительности действительно не нравится, это то, что библиотека евонная так и норовит на каждый чих чего-нибудь маленькое зааллоцировать в куче, а сборщику мусора потом подбирать.
Будто STL не такая. Те же аллокации на каждый чих, например, возможность перевести число в строку в выделенный буфер только в С++17 добавили. Мапе дать буфер и сказать его использовать из коробке тоже нельзя.
Здравствуйте, MTD, Вы писали:
MTD>Короче, мой месседж — С++ маргинализируется и становится убежищем фриков, на интересы инженеров там положили болт.
Просто для С++ почему-то не нашлось корпорации, которая бы родила к нему простой, но обширный рантайм.
Кто писал на Qt меня поймут — там есть всё, что нужно обыкновенному программисту для обыкновенных задач.
И опнсорса развитого на С++ нет — все велосипедят сами как умеют.
Здравствуйте, scf, Вы писали:
scf>Кто писал на Qt меня поймут — там есть всё, что нужно обыкновенному программисту для обыкновенных задач.
Кстати да, очень удобный фреймворк. Мне доводилось писать на разных железках, на некоторых были старые компиляторы в которых не было части стандартной библиотеки и Boost там не собирался, но Qt работал вообще везде и сразу из коробки ты получал все, что нужно для работы. Неудивительно, что столько фриков от труЪ С++ Qt ненавидят — ведь там можно просто сесть и писать код решающий конкретную задачу.
Здравствуйте, Nuzhny, Вы писали:
N>>>Ну-ну, обиделся за минус? MTD>>И в чем ты увидел проявление обиды? Ткни пальцем пожалуйста.
N>В том что диагностировал у меня какую-то боль.
Не приписывай себе чужие заслуги — это rudzuk диагностировал, а я не стал отрицать. Так что незачет.
MTD>>Рад за тебя. А меня не устраивает, что на каждом более-менее крупном проекте гора своих велосипедов, например в одной компании где я работал было 5 классов-строк и два для работы с датой и временем. Мне бы хотелось, чтобы наконец в стандарте появились адекватные средства для этого. Ты против?
N>Нет, не против. Я спрашиваю, почему ты оффтопишь!
Выражайся понятней.
MTD>>У тебя все хорошо, непонятно тогда отчего ты так разволновался?
N>Потому что, снимая майку у девушки, я ожидаю там увидеть сиськи. Если их нет, то волнуюсь. Также и в твоей теме.
Ты про то, что угара нет? А по моему есть, в 3 раза слить Питону — это надо постараться.
Здравствуйте, MTD, Вы писали:
Pzz>>Если посмотреть strace'ом, чем там программа на Go занимается, то можно с изумлением увидеть, что унутре нее тот же epoll
MTD>Поразительно, кто бы мог подумать.
Это даже в инструкции где-то написано, но пальцем не покажу.
Pzz>>Но вот что в этом Go мне в плане производительности действительно не нравится, это то, что библиотека евонная так и норовит на каждый чих чего-нибудь маленькое зааллоцировать в куче, а сборщику мусора потом подбирать.
MTD>Будто STL не такая. Те же аллокации на каждый чих, например, возможность перевести число в строку в выделенный буфер только в С++17 добавили. Мапе дать буфер и сказать его использовать из коробке тоже нельзя.
У Go, в силу того, что там не возбраняется завести локальную переменную, передать ее адрес куда-нибудь, где его сохранят, и выйти из процедуры, всякое заведение локальной переменной является потенциальной аллокацией из кучи. Компилятор пытается угадать про каждую переменную, переживет ли она выход из области видимости, где она определена, или не переживет. И в зависимости от этого заводит ее либо в стеке, либо в куче. Это называется escape analysis. А поскольку компилятор у Go, в плане кодогенерации, доволько игрушечный, то правильно угадывает он не всегда.
Скажем, простой вызов recvfrom аллоцирует буфер для сетевого адреса раза три на пакет, в разных форматах. И все промежуточные становятся добычей сборщика мусора. Когда у него дотуда руки дойдут...
Кстати, в Go судьба куска памяти, в котором живет переменная, мало зависит от того, выделели его через new, или объявили локальную переменную. Выделение через new может быть уоптимизировано в создание переменной на стеке, а объявление локальной переменной может превратиться в аллокацию из кучи.
Здравствуйте, MTD, Вы писали:
MTD>В ветках С++ тоска — изредка правда встречаются фрики, которые не имея опыта пилят странные велосипеды, что доставляет массу веселья, да 3 с половиной опытных плюсовиков немножко оторвавшихся от реальности. О подобных персонажах и тенденциях развития С++ и хочется поговорить. Вообще С++ классный язык появившийся в нужное время, который покрыл потребности инженеров — тот-же С, но с классами и шаблонами. И если классы и виртуальные функции на С еще можно самому написать, пусть и ценой излишних усилий, то аналогов шаблонам там нет. И все было класно, но потом в комьюнити пролезли фрики оторванные от реальности и стали пилить чудовишную дичь под названием Boost
На самом деле: Boost классная вещица!
Использовать boost в своих наработках приятно.
MTD>Дальше было хуже, из своей резервации они пролезли в комитет, да спасибо друзья за смартпоинтеры и пару других удобных вещей, но то что вы делаете сейчас просто ни в какие ворота! Внимание, на дворе 2017 год, а в языке нет юникодных строк, нет файловых операций, нет модульности и корутин, зато с азартом обсуждаются новые фичи метапрограммирования. Блин, дорогие ученые, да я рад за вас, пилите, если вам это нужно, но не в ущерб же интересам инженеров на которых был положен болт.
Зачем это всё,когда есть библиотеки?
К чему всё это тащить именно в ЯП?
MTD>Посмотрев любой мастер класс по плюсам уже через пять минут ловишь себя на мысли — да все упоролись, то что на других языках делается не задумываясь тут предмет для получасового обсуждения. Вот не самый упоротый случай:
...так ведь у каждого — свои мозги, правда в приведенном видео ИМХО ими так и не воспользовались...
MTD>Короче, мой месседж — С++ маргинализируется и становится убежищем фриков, на интересы инженеров там положили болт.
Что такое интересы инженеров? Можно посмотреть примеры именно инженерных интересов?
Вот чем таким инженерные интересы в разработке ПО отличаются, ну скажем от интересов врачей, бухгалтеров, диспетчеров?
MTD>
MTD>“Внутри С++ сидит более компактный и понятный язык, отчаянно пытающийся выбраться наружу.” — Бьерн Страуструп
А разве новые стандарты (от C++11 и позднее) не сделали C++ компактнее и ближе к запросам разработчиков софта?
Здравствуйте, MTD, Вы писали:
MTD>Про преждевременную пессимизацию не писал только ленивый. Сначала надо написать понятно и чтобы работало правильно, потом по необходимости начинать оптимизировать. Вот ты привел пример с быстродействием и мимо, например, почему ты не предложил сравнивать хеши?
А можно написать строку, которая все строки будет держать в общей хеш-таблице, по одному экземпляру на каждое конкретное значение. Тогда сравнение строк сведется к сравнению указателей, и памяти будет меньше расходоваться.