Про динамическую типизацию
Oct. 11th, 2012 01:33 pmПоразжигал немного в комментах у ребе Б. рознь к социальной группе "ленивые авторы языков". Чтобы не излагать свою позицию каждый раз заново, сохраню сюда.
Знаете, некоторые печальные даты надолго остаются в памяти людей: 11 сентября, 17 августа, 1917-й год, 1941-й. К ним стоит добавить 1995-й - год появления JavaScript, PHP, Ruby, ну и Java тоже. Кому-то захотелось по-быстрому добавить динамизма в веб-странички, и он за пару недель наговнякал интерпретатор, встроив его в браузер Netscape. Кому-то захотелось оживить свою домашнюю страничку, добавить счетчик посетителей, еще что-то, и он на коленке сделал такой вот изменятель страничек на стороне сервера. О больших проектах тогда никто не думал, personal home page назывался тот изменятель. А когда делаешь интерпретатор, проще всего сделать его на динамической типизации. Это банально очень просто. О системе типов вообще можно не задумываться, не говоря уже об их выводе. К сожалению, на фоне тогдашнего мейнстрима (Си, ранние плюсы, что там еще было?) эти скриптовые языки выглядели очень выигрышно, писать мелкие куски кода на них было намного проще. Что такое нормальная система типов тогда мало кто знал: хаскель был еще в пеленках, ML'и традиционно не выходили из университетов. Так что люди эти скрипты подхватили, стали добавлять все новые функции. Менять систему типов стало поздно. В итоге выросло то, что выросло. С тех пор одна масса людей занята тем, чтобы делать все более сложные интерпретаторы, которые бы не так тормозили, другая масса придумывает 121-й способ добавить в JS типы, а третья на динамических языках пишет и плачет в бложиках о том, как грустно им делается. И проблема не только и не столько в скорости, сколько в maintainability кода и усилиях на необходимые тестирование и отладку при росте проектов.
Единственная реальная причина появления динамически типизированных языков - лень и недальновидность авторов. Эволюционно динамические языки - тупиковая ветвь, хоть они и обречены рождаться вновь и вновь просто потому что их делать проще, а делать языки люди любят. Сегодняшняя популярность некоторых из них - случайность, исторический казус, следствие контраста между этими языками и мейнстримом начала 90-х. То, что много идиотов используют идиотские языки, говорит лишь о том, что идиотов много. Сегодня, когда есть языки с нормальной статической системой типов, никаких реальных преимуществ у динамической больше нет. Только я имею в виду действительно нормальные статически типизированные языки - как минимум с параметрическим и ad hoc полиморфизмами, с выводом типов. Не Си с джавой. Хаскель, окамл, скала - такого уровня. У этих конкретных языков могут быть свои проблемы, часто инфраструктурные, но речь сейчас не о них, речь о динамической vs. статической типизации в целом.
Знаете, некоторые печальные даты надолго остаются в памяти людей: 11 сентября, 17 августа, 1917-й год, 1941-й. К ним стоит добавить 1995-й - год появления JavaScript, PHP, Ruby, ну и Java тоже. Кому-то захотелось по-быстрому добавить динамизма в веб-странички, и он за пару недель наговнякал интерпретатор, встроив его в браузер Netscape. Кому-то захотелось оживить свою домашнюю страничку, добавить счетчик посетителей, еще что-то, и он на коленке сделал такой вот изменятель страничек на стороне сервера. О больших проектах тогда никто не думал, personal home page назывался тот изменятель. А когда делаешь интерпретатор, проще всего сделать его на динамической типизации. Это банально очень просто. О системе типов вообще можно не задумываться, не говоря уже об их выводе. К сожалению, на фоне тогдашнего мейнстрима (Си, ранние плюсы, что там еще было?) эти скриптовые языки выглядели очень выигрышно, писать мелкие куски кода на них было намного проще. Что такое нормальная система типов тогда мало кто знал: хаскель был еще в пеленках, ML'и традиционно не выходили из университетов. Так что люди эти скрипты подхватили, стали добавлять все новые функции. Менять систему типов стало поздно. В итоге выросло то, что выросло. С тех пор одна масса людей занята тем, чтобы делать все более сложные интерпретаторы, которые бы не так тормозили, другая масса придумывает 121-й способ добавить в JS типы, а третья на динамических языках пишет и плачет в бложиках о том, как грустно им делается. И проблема не только и не столько в скорости, сколько в maintainability кода и усилиях на необходимые тестирование и отладку при росте проектов.
Единственная реальная причина появления динамически типизированных языков - лень и недальновидность авторов. Эволюционно динамические языки - тупиковая ветвь, хоть они и обречены рождаться вновь и вновь просто потому что их делать проще, а делать языки люди любят. Сегодняшняя популярность некоторых из них - случайность, исторический казус, следствие контраста между этими языками и мейнстримом начала 90-х. То, что много идиотов используют идиотские языки, говорит лишь о том, что идиотов много. Сегодня, когда есть языки с нормальной статической системой типов, никаких реальных преимуществ у динамической больше нет. Только я имею в виду действительно нормальные статически типизированные языки - как минимум с параметрическим и ad hoc полиморфизмами, с выводом типов. Не Си с джавой. Хаскель, окамл, скала - такого уровня. У этих конкретных языков могут быть свои проблемы, часто инфраструктурные, но речь сейчас не о них, речь о динамической vs. статической типизации в целом.
no subject
Date: 2012-10-13 12:25 am (UTC)Итак, дворянин ли вы?
Другое значение "хама" - преклоняющийся перед властью и тп. Не думаю, что это мой случай. Как и остальные.
Вы как-то уж очень напираете на production опыт. Мне напомнить, что Эрланг создавался в компьютерной лаборатории высоколобыми учёными? Я подозреваю, что у Джо Армстронга на момент создания Эрланга не было production опыта. Есть ли у вас опровергающие моё подозрение факты?
Я предпочитаю опираться на ум и опыт разработчика, желательно, чтобы опыт был обширен. Эрланг создавался умными людьми, так и создатели Cloud Haskell не хуже. С обоими я знаком лично, правда, в разной степени. Jeff Epstein работает в Parallel Scientific, соответственно, я общался с ним много больше.
Поэтому я смотрю на CH много оптимистичней, чем вы.
У меня широкий production опыт встраиваемых систем, от шумомера до банкомата. Более 16 лет в сумме. Я не люблю ошибки, ибо поправить их я, обычно, не мог и они стоили больших денег работодателям. Я также не люблю ошибки, ибо мне "лень" их править - цена исправления пропорциональна времени между внесением и обнаружением, поэтому чем позже ошибка обнаружена, чем тяжелее придётся трудиться. "Лень" в кавычках, конечно, ибо я исправлю свою ошибку, и чужую тоже. Просто мне нравится их не допускать, есть в этом что-то такое, даже вы, я думаю, согласитесь.
Я думаю, вам просто нравится адреналин "исправления после тестирования на зеркале production системы". Так, чтобы заметно было, чтобы все восторгались вокруг, какой вы молодец.
Ибо я не вижу других причин в хвастовстве пропущенной ошибкой, кроме как повторения столь приятного воспоминания. В её исправлении как можно более быстрым способом также нет никакой особой доблести. И рассказ об этом также несёт исключительно психологическую нагрузку. И уж совсем нет вашей заслуги в том, что вы воспользовались при этом Эрлангом. Как нет заслуги Эрланга во всей этой феерии, ибо он всего лишь инструмент.
Broken window fallacy, вот ближайшее понятие, которое приходит на ум при чтении историй о горячей подмене кода.
no subject
Date: 2012-10-13 12:42 am (UTC)-про «Erlang теряет сообщения, Cloud Haskell это фиксит» мы вроде выяснили, что это ложь, причём ваша, а не автора презентации;
-про «Cloud Haskell это Erlang версии 2, done right» мы вроде тоже выяснили, что на версию 2 ни по фичам, ни по «багфиксам» не тянет.
Таким образом, я не совсем понимаю, к чему это полотно текста. К вашему гигантскому, но бесследному опыту? Ну так сами же говорите — эмбеддед, это очень узкая ниша, из которой делать заявления про программирование вообще немного странно и самонадеянно. К «не люблю делать ошибки» и диагностике по аватарке? Ну, видимо, вам приятнее верить в код без ошибок. Мне не жалко, у нас свобода вероисповедания пока. Если вам хочется просто выговориться, зачем вы делаете это в ответе мне?
no subject
Date: 2012-10-13 12:48 am (UTC)