Про динамическую типизацию
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-11 06:50 am (UTC)no subject
Date: 2012-10-11 07:21 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2012-10-11 07:00 am (UTC)no subject
Date: 2012-10-11 07:19 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:Школота, доступность
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-10-11 07:31 am (UTC)Кто вам такую чухню сказал? Про системы типов было всё известно ещё в 70-х после Алгола, ФП-логическое-ООП уже тогда были в полный рост. А уж в 90-х и Лисков с КЛУ, и Мейерс с Эйфелем, да как бы и Вирт.
Университет кстати тогда практически все программеры б-м проходили, это вам не сейчас. И лабы у них были на уровне "сделайте после лекций компилятор языка с загрузчиком и отладчиком за семестр".
no subject
Date: 2012-10-11 07:49 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:...
From:no subject
Date: 2012-10-11 07:43 am (UTC)no subject
Date: 2012-10-11 07:48 am (UTC)другое дело, что немногие умеют писать без "объектно-ориентированных архитектур".
no subject
Date: 2012-10-11 08:09 am (UTC)то что проходит у рядового быдлокодера под графом "объектно-ориентированая архитектура"... это уже не видят, это исключительно нюхают. :)))
(no subject)
From:ТРезвость
From:(no subject)
From:(no subject)
From:Декораторы vs менеджеры
From:no subject
Date: 2012-10-11 10:29 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:Добавлять методы к типам в рантайме
From:Re: Добавлять методы к типам в рантайме
From:Re: Добавлять методы к типам в рантайме
From:...
From:...
From:(no subject)
From:no subject
Date: 2012-10-11 08:15 am (UTC)Угу... если не учитывать уже существующей кодовой базы, наличия горы документации и примеров, поддержки разнообразными тулзами.
Да... никаких реальных приимуществ.
Как у динозавров (в эпоху их царствования)
по сравнению с млекопитающими. :)
Совсем никаких. :))
\\У этих конкретных языков могут быть свои проблемы, часто инфраструктурные, но речь сейчас не о них, речь о динамической vs. статической типизации в целом.
Вот так всегда.
"Он конечно сукин сын, но это НАШ сукины сын"... :))
no subject
Date: 2012-10-11 10:34 am (UTC)(no subject)
From:no subject
Date: 2012-10-11 08:30 am (UTC)сплошные статьи, гуглёж и троллинг знающих людей
no subject
Date: 2012-10-11 09:33 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-10-11 08:34 am (UTC)а динамические - в отсутствии статической типизации
В ответ статические языки судорожно придумывают костыли вроде Reflections и Groovy
А динамические языки шлют всех лесом и ничего не делают сторону от утиной типизации.
no subject
Date: 2012-10-11 08:49 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-10-11 08:38 am (UTC)no subject
Date: 2012-10-11 10:19 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:С++ vs Nasa и Boston Dynamics
From:Re: С++ vs Nasa и Boston Dynamics
From:Re: С++ vs Nasa и Boston Dynamics
From:...
From:...
From:...
From:Re: С++ vs Nasa и Boston Dynamics
From:Re: С++ vs Nasa и Boston Dynamics
From:...
From:...
From:...
From:...
From:...
From:...
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-10-11 08:48 am (UTC)Тут, конечно, ключевой момент в динамической исполняющей среде. Язык-то может быть и статически типизированным.
Простая стыковка с "инородными" системами типов, выраженными, например, в сериализационных форматах и в структуре баз данных. Да, в статике тоже можно, и даже можно почти как в динамике (type providers те же), но в динамике с этим проще.
no subject
Date: 2012-10-11 09:14 am (UTC)OCaml, правда, нашёлся.
В общем, пока с этими языками беда. Но будем надеяться, что со временем станет полегче.
no subject
Date: 2012-10-11 10:18 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:(no subject)
From:...
From:...
From:...
From:...
From:(no subject)
From:...
From:...
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:...
From:...
From:...
From:...
From:...
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:...
From:...
From:...
From:...
From:...
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-10-11 09:17 am (UTC)но вот этим, по моему, со времен Ada вообще никто целенаправленно не заморачивался.
no subject
Date: 2012-10-11 09:22 am (UTC)Системы типов заслуживают научных исследований, однако им нет места в практике программирования. Забудьте о типах, они никак не помогут и не спасут от ошибок, и уж тем более не заслуга типизации масштабируемость, не надо рассказывать сказки про белого бычка.
no subject
Date: 2012-10-11 09:27 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:...
From:...
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-10-11 09:51 am (UTC)no subject
Date: 2012-10-11 10:18 am (UTC)no subject
Date: 2012-10-12 07:53 am (UTC)(no subject)
From:(no subject)
From:no subject
Date: 2012-10-11 10:25 am (UTC)no subject
Date: 2012-10-11 11:18 am (UTC)или хотя бы в своих разработках, чтобы иметь преимущество над проектами конкурентов.
no subject
Date: 2012-10-12 08:12 am (UTC)Языков разной степени правильности уже немало создали - от C# и D до Scala, Haskell, Ocaml, Clean, ATS и др., но придумать язык мало, нужен хороший рантайм, нужны библиотеки, нужна инфраструктура, это все с большим трудом нарастает (а нередко так толком и не появляется). Сделаешь свой универсальный язык, получишь задачу на годы по обеспечению всех этих компонентов.
Пофантазировать о созании нового правильного языка можно, но это отдельная тема, как-нибудь в другой раз. Строгая статическая типизация и вывод типов обязательны. Дальше в плане идей лично я бы скрестил Ocaml, Ometa и Ωmega, например.
(no subject)
From:(no subject)
From:no subject
Date: 2012-10-11 11:26 am (UTC)Предсказываю появление смешанного диалекта на базе Питона или ЖабаСкрипта, где можно писать интерпретируемый код без явной типизации, но для компиляции потребуется объявить переменные заранее. Ну, типа как в Genie, Vala..
no subject
Date: 2012-10-11 11:50 am (UTC)Проблема номер один - плохая поддерживаемость проектов размером в 10K+ LoC, особенно в больших и текучих командах. Это критично для бизнеса.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:...
From:...
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-10-11 11:43 am (UTC)no subject
Date: 2012-10-11 11:46 am (UTC)(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:...
From:no subject
Date: 2012-10-11 11:47 am (UTC)А вообще это типичный плач ярославны "вот мы замутили такие клёвые и ПРАВИЛЬНЫЕ(tm) технологии, а ими никто не пользуется, у всех какое-то дурацкое легаси". Эсперантисты передают всем таким людям горячий привет из девятнадцатого века.
no subject
Date: 2012-10-11 11:56 am (UTC)Это не плач, так, историческая справка. Легаси же и правда дурацкое. Им есть причины пользоваться, но это не делает его менее дурацким.
no subject
Date: 2012-10-11 12:05 pm (UTC)Во многих задачах от языка не требуется большой производительности. Например, если веб-приложение отвечает за <= 100 мс - это ОК. Perl да и другие языки с динамической типизацией с этой задачей легко справляются. Это справедливо и в отношении многих других приложений, часто программа упирается в диск, память или сеть, а не процессор.
Вы сами сказали, что во время появления JS, PHP и Ruby не было нормальных языков со статической типизацией. А программы писать на высокоуровневых удобных языках хотелось уже тогда, а не десяток лет спустя. Стало быть, появление озвученных языков - далеко не случайность, а вполне закономерное явление.
Наконец, люди не спроста так тащатся от питонов, пэхопе и иже с ними. Вы когда говорите, что вот в этом месте хотите сложить два числа, а вот в этом - вывести на экран, вы же думаете о числах, как о простых объектах, безо всяких там типов Int и String. В связи с этим динамическая типизация более понятна простым смертным, создает меньшую когнитивную нагрузку.
А у нас в отрасли кризис специалистов. Зачастую в программирование приходят бывшие админы, физики, врачи и тп. Ни у них, ни у компаний, которые их нанимают, нет пяти лет на полноценное обучение профессии. Знаешь PHP, условные операторы и циклы? Добро пожаловать в программисты!
Вот и имеем то, что имеем.
no subject
Date: 2012-10-11 12:31 pm (UTC)Да, написать скрипт на 20 строк просто, и это хорошо. Написать аналогичный на приличном языке с выводом типов примерно так же просто.
В индустрии много малограмотных - это проблема, да. Но динамические языки ее не решают, на самом деле. Они ее чуть-чуть откладывают - позволяют быстро начать, а потом уже завязнуть в череде багов и циклах тестирования и отладки.
(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:(no subject)
From:ТОП: 19:04 MSK
Date: 2012-10-11 03:03 pm (UTC)Почитать текст со всеми комментариями по ссылке (http://tools.t30p.ru/?http%3a%2f%2fthedeemon.livejournal.com%2f54732.html).
Это Ваш 1-й ТОПовый пост в этом году.
Посмотреть статистику автора можно в карточке топблогера (http://rating.t30p.ru/?thedeemon.livejournal.com&p=tops).
no subject
Date: 2012-10-11 04:23 pm (UTC)no subject
Date: 2012-10-11 05:15 pm (UTC)Историю создания упомянутых языков можете нагуглить самостоятельно.
То, что делать язык с дин.типами проще, чем со статическими, очевидно каждому, кто занимался созданием интерпретаторов и компиляторов или хотя бы интересовался темой. Я занимался.
Основные преимущества, которые в середине 90-х давала динамическая типизация - 1) меньше нужно описывать и указывать типы, 2) можно единообразно обрабатывать значения разных типов, 3) рефлексия, 4) сборка мусора, которой почти не было в тогдашнем мейнстриме. Первое покрывается выводом типов, второе полиморфизмом, третье и четвертое доступно и в стат. языках. Большая часть моей аудитории это все отлично понимает, нет нужды разжевывать.
(no subject)
From:(no subject)
From:(no subject)
From:no subject
Date: 2012-10-11 04:54 pm (UTC)