November 1st, 2007

with Cat The Cat

Решил вынести в пост.

Смотрите.

Так называемая "серебряная пуля" была упомянута в работе товарища Брукса (который "Мифический человеко-месяц").

Вот статья про нее: http://en.wikipedia.org/wiki/No_Silver_Bullet

Брукс говорит, что все, с изобретением ЯВУ прогресс остановился, мы уперлись в сложности предметных областей.

Разница в выразительности (отношение строк кода) между (макро)ассемблером и ЯВУ времен миф.чел-мес. была, как я могу предположить, где-то раза в три-пять.

Today's languages, such as C,C++, and Java are considered to be improvements, but not of the same order of magnitude.

Однако измерения показывают, что между C++, Java и OCaml, Haskell и Erlang разница в выразительности такая же, как между ассемблером и обычными ЯВУ.

Я стандартно пишу меньше в три-пять раз в строках кода по сравнению C/C++. Мой код после исправления товарищами (rvp74, lomeo, deni_ok и многими другими;) еще сокращается.

Поэтому языки семейства ML и языки типа Эрланг - это и есть серебряная пуля современности.

(было тут)
with Cat The Cat

Еще про REPL.

На работе временное затишье в области политики и gaperton пишет решение своей задачи на Эрланге.

Периодически заходит в нашу комнату и делится впечатлениями.

Надо сказать, что компилятор в руки он не брал уже два года. Тем не менее, код он написал и даже не без изящества, которым, надеюсь, поделится.

Ему не нравится REPL. REPL, говорит, хорошая штука, "но если я чего поменял, то мне все те же тесты надо заново прогонять." "Надо осваивать приблуду для тестирования," говорит.

Собственно, это хорошо демонстрирует разницу между REPL с типами и REPL без типов.

Если у меня проверяются типы, то я не могу банально опечататся, и моя функция на выходе гарантировано создаст значение нужного типа, область значений фиксирована. Скорее всего, изменилась область определения моей функции и вот реакцию на новые краевые и экстремальные значения я и проверяю с помощью REPL.

При композиции функций область значения одной функции является областью определения других. Правильность этой композиции мне проверяют автоматически.

В Эрланге данные об областях определения и значений не распространяются, поэтому необходимо специфицировать поведение большой системы с помощью тестов. Получается, что REPL не столь полезен.

Ну, еще менее опасно создавать сильно связанные компоненты. Типа того.