пятница, 11 июня 2010 г.

[prog.flame] Свежие высказывания Торвальдса о C++ навели на мысли о причинах маргинальности Lisp-а и Haskell-я

Ув.тов.z00n поделился ссылкой на свежую критику языка C++ от Линуса Торвальдса. Вкратце, Торвальдс говорит вот о чем (ниже идет пересказ того, что я понял):

Производительность разработчика определяется не только количеством строк кода. Производительность так же сильно зависит и от коммуникаций между разработчиками. Чем больше нужно общения, тем хуже. Лучше всего, когда коммуникаций нет вообще. Но для этого нужно, чтобы разработчики следовали определенной культуре разработки. В разработке ядра Linux такая культура сформировалась не в последнюю очередь из-за простоты языка C. Код на C легко читать, в нем нет неявных зависимостей от “контекста”. Если человек видит вызов sctp_connect(), он сразу понимает, о чем идет речь. Тогда как обращение к connect() в C++ном коде может означать все, что угодно. Этим-то C++ и плох. Если кто-то находится “в теме”, то в C++ном коде ему будет разобраться несложно. Но вот всем остальным на это потребуется гораздо больше времени и сил для того, чтобы сначала разобраться с контекстом, а затем уже с самим кодом. Плюс к вышеперечисленному разработка ядра – это очень специфическая вещь, для которой C является очень хорошим инструментом. Но это вовсе не значит, что C должен использоваться везде и всюду без разбору.

Во-первых, меня в очередной раз поразило, насколько разумные вещи говорят многие заслуженные программисты (Торвальдс, Страуструп (не смотря на то, что многим стиль его речи не нравится), Кнут, Вирт и др.).

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

Этим же, имхо, определяется и успех Java – язык таков, что все пишут однотипный код. Посему чужой код на Java понять проще, чем чужой код на C++.

Этим же, имхо, определяется и то, почему всякие Haskell-и и OCaml-ы пока не захватили весь мир: хардкорные функциональщики не задумываются о читабельности своего кода. Желающие могут, например, посмотреть на реализацию Data.Tree – обилие однобуквенных идентификаторов и операторов непривычного для обычного программиста вида (<$>, <|, |>, :<).

Вот кто захочет придти на проект, который развивался в течении 5-7 лет средней руки программистами, в условиях меняющихся требований, цейтнотов, исправленных на скорую руку просчетов, с кучей workaround-ов для сторонних компонентов, исходник которого будет представлять из себя плохозакомментированную многоэтажную математическую формулу?

Отправить комментарий