ak_47: (Default)
[personal profile] ak_47
Программизма псто.

В интернетах живо обсуждают пост Эрика Ниблера о ranges in C++. Одни радуются что наконец в С++ появляются какие-никакие современные элементы программирования. Другие сокрушаются тем, что современное программирование на С++ - обло, озорно, огромно, стозевно и лаяй.

На своей новой работе я впервые за очень много лет вылез из среды С/С++ и вот что мне подумалось.

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

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

Date: 2019-03-06 08:58 am (UTC)
From: [identity profile] ak-47.livejournal.com
Да, ради производительности до сих пор пишут на С++. Но нужно упомянуть и такие пункты:

* С++, на котором это пишут, скорее С++ 98, да ещё и с кастом решениями вместо стандартной библиотеки. При этом после какого-то размера проект всё равно превращается в ужас-ужас. Я уже склоняюсь к тому, чтобы согласиться с Торвальдсом - ради производительности уже пишите на С, лучше будет.

* Если писать на т.н. "modern C++", вот на таком как в посте у Эрика, то производительности очень даже может уже и не оказаться.

* С++ всё сильнее уходит в нишевые области. А нам в своё время его продали как general purpose language. Для общих целей С++ всё менее и менее адекватен. Кто в здравом уме будет писать код в продакшен как вот это вычисление с ranges? И насколько это проще и элегантнее выглядит на других языках.

Date: 2019-03-06 09:26 am (UTC)
From: [identity profile] spamsink.livejournal.com
"Кастом-решения вместо стандартной библиотеки" - это, в первую очередь, Boost. Сам по себе он компилируется медленно, но когда идеи переходят в стандарт, становится быстрее. Писать на С, достигая той же производительности, вряд ли возможно: в языке нет средств для того уровня оптимизации, какой может достигать C++. Простейший пример: сишный библиотечный sort не может работать иначе, кроме как вызывая функцию сравнения по указателю. В С++ язык позволяет компилятору оптимизировать std::sort путем инлайнов настолько, насколько это теоретически возможно.

Если писать на modern C++, то для достижения оптимальной производительности может понадобиться profile feedback, но это современные компиляторы уже умеют.

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

В конце концов, на каком языке написаны браузеры, которыми мы все пользуемся?

Date: 2019-03-06 10:20 am (UTC)
From: [identity profile] ak-47.livejournal.com
Этот пример с сортом ещё Старустрип приводил в каком-то мохнатом году. Да, всё верно, но и в С компилятор может многое заинлайнить. С 77 года много воды утекло. В С++ чтобы всё корректно инлайнилось, ненужные копии не создавались, а нужные уничтожались по мере возможности компилятором - надо именно что постигать китайскую грамоту. Ладно мы уже по 20+ лет сидим в этом всём и нам как бы нормально. Но это не нормально что на освоение языка у людей должны уходить годы. Когда, собственно, продукты писать?

Мне кажется что С++ сейчас стоит перед неким распутьем: или он будет модернизироваться и улучшаться как язык (скорее всего с потерей backward compatibility), или его преимущества просто перестанут играть роль пред лицом цены и скорости производства на нём.

Сегодня браузер написан на С++ во многом из-за легаси: написать качественный движок для браузера уже сравнимо с написанием ОС.
Edited Date: 2019-03-06 10:24 am (UTC)

Date: 2019-03-06 05:16 pm (UTC)
From: [identity profile] spamsink.livejournal.com
Продукты писать тогда, когда требования известны, задачи поставлены, потребности определены, и стоит цель оптимизировать производительность и функциональность. В индустрии таких ситуаций хватает.
Понятно, что эксперименты, прототипы и пр. на С++ писать нет смысла; для этого питон есть.

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

Date: 2019-03-07 08:33 am (UTC)
From: [identity profile] ak-47.livejournal.com
Это верно, пока что альтернативы С++ для проектов где нужна скорость я не вижу. Всё что я видел до сих пор не дотягивает, либо по возожностям, либо по имеющейся экосистеме, либо по доступности девелоперов и т.д.. Но индустрия не стоит на месте. По-моему, таких как я, которые пишут на С++, но не довольны языком, достаточно много. Если появится хорошая альтернатива, то многие перейдут на неё.

Profile

ak_47: (Default)
АК-47

Most Popular Tags

Expand Cut Tags

No cut tags
Powered by Dreamwidth Studios