thedeemon: (Default)
[personal profile] thedeemon
Поразжигал немного в комментах у ребе Б. рознь к социальной группе "ленивые авторы языков". Чтобы не излагать свою позицию каждый раз заново, сохраню сюда.

Знаете, некоторые печальные даты надолго остаются в памяти людей: 11 сентября, 17 августа, 1917-й год, 1941-й. К ним стоит добавить 1995-й - год появления JavaScript, PHP, Ruby, ну и Java тоже. Кому-то захотелось по-быстрому добавить динамизма в веб-странички, и он за пару недель наговнякал интерпретатор, встроив его в браузер Netscape. Кому-то захотелось оживить свою домашнюю страничку, добавить счетчик посетителей, еще что-то, и он на коленке сделал такой вот изменятель страничек на стороне сервера. О больших проектах тогда никто не думал, personal home page назывался тот изменятель. А когда делаешь интерпретатор, проще всего сделать его на динамической типизации. Это банально очень просто. О системе типов вообще можно не задумываться, не говоря уже об их выводе. К сожалению, на фоне тогдашнего мейнстрима (Си, ранние плюсы, что там еще было?) эти скриптовые языки выглядели очень выигрышно, писать мелкие куски кода на них было намного проще. Что такое нормальная система типов тогда мало кто знал: хаскель был еще в пеленках, ML'и традиционно не выходили из университетов. Так что люди эти скрипты подхватили, стали добавлять все новые функции. Менять систему типов стало поздно. В итоге выросло то, что выросло. С тех пор одна масса людей занята тем, чтобы делать все более сложные интерпретаторы, которые бы не так тормозили, другая масса придумывает 121-й способ добавить в JS типы, а третья на динамических языках пишет и плачет в бложиках о том, как грустно им делается. И проблема не только и не столько в скорости, сколько в maintainability кода и усилиях на необходимые тестирование и отладку при росте проектов.

Единственная реальная причина появления динамически типизированных языков - лень и недальновидность авторов. Эволюционно динамические языки - тупиковая ветвь, хоть они и обречены рождаться вновь и вновь просто потому что их делать проще, а делать языки люди любят. Сегодняшняя популярность некоторых из них - случайность, исторический казус, следствие контраста между этими языками и мейнстримом начала 90-х. То, что много идиотов используют идиотские языки, говорит лишь о том, что идиотов много. Сегодня, когда есть языки с нормальной статической системой типов, никаких реальных преимуществ у динамической больше нет. Только я имею в виду действительно нормальные статически типизированные языки - как минимум с параметрическим и ad hoc полиморфизмами, с выводом типов. Не Си с джавой. Хаскель, окамл, скала - такого уровня. У этих конкретных языков могут быть свои проблемы, часто инфраструктурные, но речь сейчас не о них, речь о динамической vs. статической типизации в целом.

Date: 2012-10-11 11:06 am (UTC)
From: [identity profile] thedeemon.livejournal.com
В том-то и проблема, что кто-то поленился типизировать ответ от сервера, и приходится либо писать бойлерплейт, либо держать типы в уме и молиться богам Кобола, что данные придут подходящие.

Если все строго типизировать, никаких Array<Object> и его проблем не будет.

Date: 2012-10-11 11:15 am (UTC)
From: [identity profile] geekyfox.livejournal.com
и как ты предлагаешь "типизировать ответ от сервера"? на уровне клиента или на уровне протокола?

Date: 2012-10-11 11:36 am (UTC)
From: [identity profile] thedeemon.livejournal.com
На уровне протокола.

Date: 2012-10-11 11:46 am (UTC)
From: [identity profile] geekyfox.livejournal.com
ок. теперь покажи мне хотя бы одну технологию "типизировать данные на уровне протокола", которая тебе реально нравится.

Date: 2012-10-11 12:18 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Ну вот есть масса бинарных протоколов (IP, UDP, TCP, etc), есть масса бинарных форматов файлов (картинки те же), там все описано типизированными структурами, это ок.

Если говорить про работу с базой, то если у нас есть нормально типизированные данные, и мы с ними работаем а-ля linq to objects, мы же получаем типизированный результат? Это ок. Так и с базой надо, только проблема есть с синхронизацией изменения схем в базе и программе.

Если говорить про интерфейсы и DOM, то есть всевозможные GUI фреймворки, где контролы и их свойства типизированы, это тоже ок.

Date: 2012-10-11 12:32 pm (UTC)
From: [identity profile] geekyfox.livejournal.com
у IP/UDP/TCP нету версионности метаданных.

а вот с версионностью метаданных обязательно получается ёбля в гамаке стоя в темноте с комарами, навроде WDSL или корбы какой.

Date: 2012-10-11 12:41 pm (UTC)
From: [identity profile] nponeccop.livejournal.com
Ну тут надо вспомнить DCOM и CORBA, имеющие типизированные протоколы, которые не взлетели. Да что там, гуглобуфера и те летают низко-низко.

Касательно "написания кучи тайпкаст-бойлерплейта" - есть хорошие решения, например высокоуровневые парсеры в instance FromJSON в Data.Aeson. Парсеры - не бойлерплейт, т.к. помимо стыковки типизированного и нетипизированного выполняют валидацию входных данных.

Date: 2012-10-11 01:26 pm (UTC)
From: [identity profile] zamotivator.livejournal.com
Мы (SciDB) на гуглобуферах живём, и работает, и замечательно, и довольны

Date: 2012-10-11 01:33 pm (UTC)
From: [identity profile] nponeccop.livejournal.com
анекдоты свидетельствами не являются

Date: 2012-10-11 01:34 pm (UTC)
From: [identity profile] zamotivator.livejournal.com
Да какие проблемы, возьмите исходный код и посмотрите, вот вам и свидетельство.

Date: 2012-10-11 02:01 pm (UTC)
From: [identity profile] nponeccop.livejournal.com
Дело не в том, что я сомневаюсь, что вы используете гуглобуфера. Дело в том, что факт использования вами гуглобуферов не может быть свидетельством того, что они взлетели. Я вот COM и MPI использую, оба протокола типизированные, что теперь говорить, что это взлетевшие технологии?

См. http://en.wikipedia.org/wiki/Anecdotal_evidence . Accurate determination of whether an anecdote is "typical" requires statistical evidence, а его у нас нет.

Date: 2012-10-11 02:07 pm (UTC)
From: [identity profile] zamotivator.livejournal.com
В таком рассмотрении соглашусь.
Я лично рассматриваю вопрос прагматично (как решать проблемы с имеющимися на рынке инструментами наименее гемморойным путём), а глобально...
Говорят, и на PHP пишут. Это же не повод мне изучать PHP, верно?

Date: 2012-11-30 07:23 pm (UTC)
From: [identity profile] permea-kra.livejournal.com
mpi, кстати, в своей зоне (HPC) очень даже взлетел, софт, его использующий, имеет миллионы инсталляций =).

ИИ

Date: 2012-12-14 11:53 am (UTC)
From: [identity profile] andybil.livejournal.com
Валидация входных данных === Искуственный Интеллект. Задача пока нерешаемая.

Date: 2012-10-11 12:45 pm (UTC)
From: [identity profile] w00dy.livejournal.com
dom тоже типизированный, если что.

Date: 2012-10-11 12:30 pm (UTC)
From: [identity profile] thesz.livejournal.com
Session types в ассортименте?

Правда, это нравится мне, не владельцу журнала.

Date: 2012-10-11 12:33 pm (UTC)
From: [identity profile] geekyfox.livejournal.com
а его можно использовать в клиенте на джаве?

Date: 2012-10-11 12:56 pm (UTC)
From: [identity profile] thesz.livejournal.com
Ответом будет однозначное "да".

Вас же не затруднит написать кодогенаратор на Хаскеле?

Date: 2012-10-11 01:10 pm (UTC)
From: [identity profile] geekyfox.livejournal.com
а, кодогенератор... вот вы знаете, при всём моём уважении к хаскелю, в стране моего нынешнего обитания легальны и более интересные наркотики

Date: 2012-10-11 01:29 pm (UTC)
From: [identity profile] thesz.livejournal.com
Мне известны примеры использования ЯП типа Хаскеля для генерации кода на Java. getter/setter и даже некая логика.

Делалось для уменьшения нагрузки на мозг. Чтобы осталось время на другие полезные вещи, например, на ещё один проект.

Date: 2012-10-11 12:34 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Любая технология, которая генерирует весь boilerplate код из модели данных :)

Date: 2012-10-11 12:47 pm (UTC)
From: [identity profile] geekyfox.livejournal.com
и это, например...?

Date: 2012-10-12 08:13 am (UTC)
From: [identity profile] aamonster.livejournal.com
Вот просто чтобы вам было больно - Microsoft Entity Framework.

Или вы уже готовы отказаться от слова "любая"?

Date: 2012-10-17 12:02 pm (UTC)
From: [identity profile] potan.livejournal.com
SUN RPC, CORBA, DCOM.

Profile

thedeemon: (Default)
Dmitry Popov

December 2025

S M T W T F S
 12 3456
789101112 13
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 30th, 2026 07:27 pm
Powered by Dreamwidth Studios