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

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

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

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

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

Date: 2019-03-06 12:26 am (UTC)
chaource: (Default)
From: [personal profile] chaource
// OXPEHETb OT C++.
// A BOT Scala:
$ amm
Loading...
Welcome to the Ammonite Repl 1.6.3
(Scala 2.12.8 Java 1.8.0_181)
If you like Ammonite, please support our development at www.patreon.com/lihaoyi
tmp@ def triples(n: Int): Seq[(Int, Int, Int)] =
for {
z <- 1 to n
x <- 1 to z
y <- 1 to x
if x*x + y*y == z*z
} yield (x, y, z)
defined function triples

tmp@ triples(20)
res1: Seq[(Int, Int, Int)] = Vector((4, 3, 5), (8, 6, 10), (12, 5, 13), (12, 9, 15), (15, 8, 17), (16, 12, 20))
Edited Date: 2019-03-06 12:27 am (UTC)

Date: 2019-03-06 10:37 am (UTC)
From: [personal profile] vythe
Ачо, правда кормят? Ужасно не хочу учить китайский, но всё равно ж придётся... А если с кормёжкой, то не так обидно :-)

Date: 2019-03-06 11:21 am (UTC)
From: [personal profile] vythe
После прочтения ссылки на ranges мой бедный мозг свернулся в шарик - развернуть его в трубочку будет уже прогрессом... :-)

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

Date: 2019-03-07 12:30 pm (UTC)
From: [personal profile] vythe
Дык это... что, в С++ уже ввели сборку мусора? Эти ваши ренджи - точнее, проекции/view, потому что ренджей как таковых не существует - это функция, навешенная на чужой итератор. Я хочу полюбоваться, как оно будет сшивать листы объектов, созданных в разных областях видимости.

Что я вижу в этой рекламной статье - чудовищно переусложнённый язык, очередная попытка впарить занятым людям функциональное программирование, и всё делается буквально через задницу (потому как yield это List<>, вывернутый мясом наружу). Ленивая/lazy раздача означает, что все эти итераторы будут бесконечно долбить друг друга в ухо в поисках содержимого. А вызов функции денег стоит, между прочим.

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

А кто хочет бинарной совместимости, нормальных дженериков и встроенные колбеки, тому следует писать на джаве. :-)

Date: 2019-03-06 04:25 pm (UTC)
fenikso: (Default)
From: [personal profile] fenikso
Не надо валить на C++ проблемы make :) Можно взять тот же Bazel и забыть про make.

Ranges конечно шикарный пример как на C++ писать так чтобы гарантированно разрывать мозг. Может где-то к C++30 и упростят его. Или наоборот, добавят гарантированности, тут как стандарт ляжет :)

Date: 2019-03-05 02:35 pm (UTC)
From: [identity profile] ny-quant.livejournal.com

С тех пор как я написал последний относительно серьезный кусок кедра на С++ прошло лет 7. Думаю что читать на С++ я смог бы и сейчас. А вот если писать, то уже вряд ли. В общем жалею, что такой полезный для трудоустройства skill утрачен. Но тому что больше писать не надо очень рад. Временами это была чистая мука.

Date: 2019-03-05 09:54 pm (UTC)
From: [identity profile] laoxia.livejournal.com
чепуха. C++ - это как на велосипеде. Один раз научился, потом не разучушсьа. Максимум пару недель на вспомнить, и с новыми силами собирать новые велосипеды.

Date: 2019-03-06 09:09 am (UTC)
From: [identity profile] ak-47.livejournal.com
Кто его знает... Вот я сейчас походил на интервью, так могу сказать что всё больше компаний вообще не спрашивают знание конкретного языка, а больше напирают на фундаментальные знания и опыт. Причём, чем более senior должность, тем меньше будет конкретных технологий. И я считаю что это правильно.

Те места, где меня спрашивали по С++ (в Сиднее) можно разделить на три неравные группы:

1) трейдинг - им, по большому счёту, наплевать на технологии. Компании надо делать деньги, а что там будет за технология, вопрос вторичный. Так сложилось что в таких компаниях много фанатов С++. Может потому что им больше особо некуда идти в Австралии?

2) легаси - всякие динозавры, какие-то в оборонке, какие-то в иншуре и прочих древних платформах. Кладбище с живыми мертвецами.

3) очень редкие исключения, где делают интересныеж технологии и продукты и на С++ - на весь Сидней таких, наверное, по пальцам пересчитать.

В итоге я после 20+ лет на С++ впервые решил пойти на работу где нет С++. Может сделал ошибку, будущее покажет, но пока что не очень страдаю. Вернее страдаю от того насколько я отстал от остального мира.
Edited Date: 2019-03-06 09:10 am (UTC)

Date: 2019-03-05 06:07 pm (UTC)
From: [identity profile] spamsink.livejournal.com
При всём при том, любой мало-мальски сложный performance-critical код пишется на C++. Всё хвастовство типа "код из-под нашего JIT-компилятор даёт код той же производительности" разбивается в пух и прах, когда выясняется, что на задачах реальных размеров требования к памяти у программы на С++ оказывается в разы меньше, а 100 Gb против 200 Gb - две большие разницы.
Edited Date: 2019-03-05 06:08 pm (UTC)

Date: 2019-03-05 10:03 pm (UTC)
From: [identity profile] laoxia.livejournal.com
чепуха, ничего не разбивается, просто надо грамотно подбирать задачи и грамотно считать, например, не учитывать время пока заводится JWM и вообще есть целый набор приемов и для скорости и для памяти. Это раз. Два "на задачах реальных размеров требования" никто производительность не считает, доказывать преимущества как писалось в пункте 1 надо специально подобранных правильных примерах.

Date: 2019-03-06 12:44 am (UTC)
From: [identity profile] spamsink.livejournal.com
Что значит "подбирать задачи"? В реальной жизни пользователям нужно решать конкретные практические задачи конкретного размера за требуемое время в рамках практических бюджетов. Исходя из этого они и выбирают языки реализации.

Date: 2019-03-06 12:52 am (UTC)
From: [identity profile] laoxia.livejournal.com
В реальной жизни, когда дело доходит до конкретных практические задачи конкретного размера, то бюджеты уже сверстаны, за уменьшение требуемого времени уже получены премии и продвижения по службе.

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

Date: 2019-03-06 09:30 am (UTC)
From: [identity profile] spamsink.livejournal.com
В реальной жизни пользователь хочет, чтобы на его компьютере, который уже куплен, браузер мог, не тормозя и не сжирая всю память, держать N открытых табов.

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

Date: 2019-03-06 09:46 am (UTC)
From: [identity profile] laoxia.livejournal.com
>пользователь хочет,

не важно чего пользователь хочет, важно за что платят заказчики.

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

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

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

Имеем многолетнюю конкуренцию регулярно обновляющихся приложений, стремящихся выжать максимум производительности и функциональности из одного и того же парка машин. За это время способ достижения близкого к оптимуму соотношения стоимость/производительность обычно бывает найден, в отношении используемого языка программирования - в частности. Узнав, на каком языке написаны браузеры, мы выясним, какой язык крупные игроки считают близким к оптимуму для написания проектов подобного размера и с подобными требованиями. Так на каком же?

Date: 2019-03-07 06:26 am (UTC)
From: [identity profile] laoxia.livejournal.com
чепуха№2. Я не знаю как там в гугле и мозиле, но вот когда мелкосовту надо добавить новый пункт в меню их браузера, просто завозят очередную деревеньку из Инднии, тех кто пас коров сажают праграмиздами, тех кто пас коз - тестерами. Именно поэтому Microsoft Internet Explorer и имеет такой дикий успех, и пользватели выбирают именно этот браузер.

Чуть более серьезно: браузерописание, это такой мизерный процент от все того чего пишут, что мне даже не удобно серьезно на это отвечать.

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
Это верно, пока что альтернативы С++ для проектов где нужна скорость я не вижу. Всё что я видел до сих пор не дотягивает, либо по возожностям, либо по имеющейся экосистеме, либо по доступности девелоперов и т.д.. Но индустрия не стоит на месте. По-моему, таких как я, которые пишут на С++, но не довольны языком, достаточно много. Если появится хорошая альтернатива, то многие перейдут на неё.

Date: 2019-03-06 10:13 am (UTC)
From: [identity profile] robert-myname.livejournal.com
А кто кормит за знание китайского?

Date: 2019-03-06 10:21 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