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-05 06:07 pm (UTC)
spamsink: (Default)
From: [personal profile] spamsink
При всём при том, любой мало-мальски сложный 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)
spamsink: (Default)
From: [personal profile] spamsink
Что значит "подбирать задачи"? В реальной жизни пользователям нужно решать конкретные практические задачи конкретного размера за требуемое время в рамках практических бюджетов. Исходя из этого они и выбирают языки реализации.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Profile

ak_47: (Default)
АК-47

Most Popular Tags

Expand Cut Tags

No cut tags
Powered by Dreamwidth Studios