Про парадокс Блаба

Jun 08, 2016 01:02

Поль Грэм пишет о мощности языков. В данном случае программирования.
Программисты очень привязываются к своим любимым языкам, а я не хочу оскорбить ничьи чувства, поэтому я объясню свою позицию, используя гипотетический язык с названием Блаб ( Read more... )

Leave a comment

john_archer June 8 2016, 12:53:41 UTC
А математическая индукция в этом случае работает?

Reply

y_ug June 8 2016, 20:16:33 UTC
Ну, если совсем строго говоря -- конечно, не работает. Но это ведь была метафора, призванная показать наличие в языках неких уникальных фишек, ценность которых непонятна посторонним. Реальная, ощутимая ценность, которая повышает производительность и устраняет ошибки.
Мы же знаем что на ассемблере в здравом уме писать мнего кода никто не захочет, что Кобол и Бейсик несовершенны, что Фортран, его сколько ни перелицовывай, всё-таки устарел, что ПЛ-1 оказался слишком сложным, что макросы и указатели в Си провоцируют ошибки, что в с++ зачем-то ввели шаблоны, лямбды и вывод типов, а в яву женерики и тоже лямбды, и тоже, вывод типов, что отсутствие контроля типов в динамических языках ведёт опять-таки к ошибкам.

Reply

john_archer June 9 2016, 09:34:01 UTC
С примерами, как ты выше проиллюстрировал, она обретает законченный вид.

Отсюда и вопрос. Что же касается того, что и куда ввели опосля, то, к сожалению, далеко не всегда поздние добавления и «улучшизмы» являются таковыми.

Не во всех динамических языках, кстати говоря, отсутствует контроль типов. Пример - Scala. При этом, он лаконичнее Явы и более, на мой взгляд, понятный, что тоже немаловажно.

Т.е. теория эволюции работает и в случае языков, хотя её пытаются остановить разные любители придумывать упрощенные языки для неспециалистов. А ведь интересную задачку пытаются решить - изобрести инструментарий под разные предметные области (вспомни ту же Дракулу), но по мере расширения натыкаются на традиционные ограничения: тут не подумали, тут навставляли костылей, а здесь решили сделать времянку на соплях, да она и осталась.

Reply

y_ug June 9 2016, 21:43:30 UTC
На самом деле вид вовсе не законченный. Пропущено напоминание о том, что "итерация -- от лукавого, рекурсия -- от Бога". Дело в том что Грэм (а это, как-никак, основатель y-combinator и hacker news) писал не "в общем", а про совершенно конкретный случай. Про то как и почему он писал в середине 90-х на практически голом лиспе веб-сервер и коммерческое приложение к нему, которое потом продал яхе. Фишки были в том, что функциональный код получается компактнее и содержит меньше ошибок (если компилируется:), а также в возможности благодаря свойствам лисп-машины менять определения отдельных лисповских функций на лету прямо на работающем сервере, что помогло сильно ускорить разработку ( ... )

Reply

john_archer June 10 2016, 10:27:35 UTC
Ух ты, сколько ты всего интересного понаписал. Так, погоди, давай с конца… Ты писал, что в динамических языках нет контроля типов, я привёл пример Scala, в которой он есть, при этом он(а) представляет собою динамический язык ( ... )

Reply

y_ug June 10 2016, 21:10:22 UTC
Мы здесь вообще-то обсуждаем цитату апологета лиспа, который лисп как раз и есть и динамический, и функциональный. Когда речь зайдёт о системах реального времени потребностями в гарантированном быстром отклике, где важен чуть ли не каждый такт процессора -- пропоём соответствующие дифирамбы в сторону с/c++ с их подходами к преобразованиям типов и адресной арифметикой ( ... )

Reply

john_archer June 10 2016, 10:35:44 UTC
Насчёт указателей и ссылок, насколько я помню, в С++, осознав проблему, сделали попытку замутить безопасные аналоги. Нельзя сказать, что это такое уж окостыливание, скорее, нежелание сидеть и ждать у моря погоды, сиречь, поддержки в компиляторе этих «примитивов» - да и не к компилятору, а ко времени исполнения, по идее, эти ухищрения имели отношение, я тут не скажу даже, стоит ли всё, что со временем становится частью библиотеки, пытаться перетащить в компилятор.

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

Reply


Leave a comment

Up