Про динамическую типизацию
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-25 10:48 pm (UTC)>например, транслятор синтезируемого подмножества VHDL с моделированием
в качестве аргумента за
>Эрланг - очень плохой язык
автоматически делает беседу с вами бессмысленной, мне кажется. Хотя это, конечно, весьма смешно.
>Тем не менее, моя позиция звучит, как "не знают лучшего". Не знаю, времени не хватило, слишком молоды, не работают над ошибками
Для такой позиции неплохо бы иметь хоть какие-то аргументы, кроме того, что это ваше мнение — или, хотя бы, авторитет в виде каких-то реальных проектов. Я бы попросил вас всё-таки показать ваш аккаунт на гитхабе, чтобы я мог оценить, насколько лучше писать работающие вещи на Haskell'е. Бессмысленные игры с эмуляцией зависимых типов на деньги работодателя меня не очень интересуют, простите.
>Вот интересный кусок
Сколько раз вы ещё собираетесь лгать, передёргивать и приписывать мне свои слова, после чего делать вид, что с вами стоит продолжать беседу, и задавать какие-то вопросы?
no subject
Date: 2012-10-25 11:31 pm (UTC)Экономия времени на создание ошибок и их исправление приводит к ускорению собственного развития.
Разумно предположить, что программисту лучше выбрать язык программирования, который подходит к наибольшему числу предметных областей и пропускающий наименьшее число ошибок. Этот язык позволит развиваться наиболее быстро.
Поэтому я меряю "годность" языка по числу предметных областей, где я его могу применить.
По этому критерию конкретно Эрланг является плохим языком. Прошу прощения, но Common Lisp или Scheme лучше.
А от высоконагруженных серверов, торчащих в веб, меня отделяет всего лишь желание этим заняться.
У меня нет аккаунта на гитхабе. Вот мой репозиторий на mskhug: http://thesz.mskhug.ru/svn/
>Сколько раз вы ещё
Я не настолько изощрённый интриган. Вроде, после строки с "вот интересный кусок" я просто повторил свой вывод из известных мне фактов.
Надо же, как вы смогли прочитать.
Каюсь, ваше непонимание - полностью моя вина. Понятность, она полностью на ответственности говорящего.
no subject
Date: 2012-10-26 12:12 am (UTC)От чего-либо работающего вообще, судя по
>нет аккаунта на гитхабе
тоже. Мне только непонятно, зачем вы пытаетесь проливать свет своего висящего в воздухе мнения на окружающих тогда, особенно всюду упираясь в «мне нравится», «я считаю» и прочее «я, мне, я, мне».
>вы обвинили автора distributed-process в отсутствии мониторов процессов, когда они там есть
>Это снова ваша фантазия[, я этого не говорил]
>Вот интересный кусок...
>Сколько раз вы ещё собираетесь... приписывать мне свои слова
>Я не настолько изощрённый интриган
Нет, конечно. Вы вполне неизощрённый мудак, не стесняющийся лгать, передёргивать и приписывать собеседнику свои слова. Обычное дело в интернете.
no subject
Date: 2012-10-26 12:49 am (UTC)Вы серьёзно? Аккаунт на гитхабе для вас критерий способности создать рабочий код?
>Мне только непонятно, зачем вы пытаетесь проливать свет своего висящего в воздухе мнения на окружающих тогда, особенно всюду упираясь в «мне нравится», «я считаю» и прочее «я, мне, я, мне».
Ну, здесь я пользуюсь западной этической системой, ибо она мне кажется удобной в этом случае.
>вы обвинили
Да мне не жалко. Бывает. Ну, опустил пару шагов из логической цепочки. Даже попытался исправить мою ошибку, сказав, что от мониторов до деревьев супервизоров один шаг.
>Нет, конечно.
Как хорошо получилось! Это очень ценная формулировка. Несомненно, она создаст правильное впечатление у любого читателя этой нитки. Большое спасибо. Я бы сам не смог сделать лучше.
no subject
Date: 2012-12-01 03:30 am (UTC)Какие ж они бессмысленные, если работодатель за это платит?
no subject
Date: 2012-12-01 09:55 am (UTC)no subject
Date: 2012-12-01 10:59 am (UTC)А что тогда критерий?
no subject
Date: 2012-12-01 01:16 pm (UTC)no subject
Date: 2012-12-01 02:17 pm (UTC)no subject
Date: 2012-12-02 09:05 am (UTC)no subject
Date: 2012-12-02 11:02 am (UTC)Можно, конечно, ответить, что если говно покупают, то не такое уж говно. На что можно возразить, что если за игру в angry birds платят, значит не такая уж бессмысленная деятельность, какой бы она кому ни казалась.
Другое дело, что работодатели и клиенты идиоты, но "уж я-то" по примеру продукта или коду на github'е сам способен определить, годное там или нет. Непонятно только, какие выводы можно сделать по отсутствию аккаунта.
no subject
Date: 2012-12-02 11:20 am (UTC)no subject
Date: 2012-12-02 12:01 pm (UTC)no subject
Date: 2012-12-02 01:00 pm (UTC)