?

Log in

No account? Create an account
dz

> Свежие записи
> Архив
> Друзья
> Личная информация
> DZ Online

Апрель 14, 2009


Previous Entry Поделиться Пожаловаться Next Entry
06:32 am - "ты, Завалишин, как e в степени x - хоть кол на голове теши"
Наконец, пришли математики с предъявой - чо я тут про ОО, а это частный случай, а они про общий, а я про это молчок.

Пацаны - а знаете анекдот? Как математик идёт мимо камерного театра, замечает вывеску, и заинтересованно заходит внутрь. Через минуту выходит разочарованный со словами "тривиальный случай - ка равно трём"...?

Я вот примерно в этом же ключе случай рассматриваю - частный, тривиальный, но ОЧЕНЬ практичный. А фп мне симпатично, но пока что это и всё. Вы за него сначала сами повоюйте, чтоб хотя бы я начал вас до конца понимать. А то, извините за самомнение, но пока даже я всего не понял, рассчитывать на широкие массы программеров - ну - как бы это сказать - преждевременно.

Ну и - предлагаю некоторое утверждение, которое и сам считаю спорным. Я его породил в процессе обдумывания предъяв фп-шников, вспомнив по дороге про Форт. Который жуть какой красивый, только это не вызывает никакого желания им пользоваться, а после первой попытки - даже очень успешной - когда ты тратишь полчаса на написание, а уже через час тебе надо два часа на прочтение - понимаешь, что на нём точно не надо ничего никогда писать. Если это хочешь иногда и читать тоже.

Мысль вот какая. Надо выбирать не самый широкий базис, не самую всеобъемлющую парадигму, а МИНИМАЛЬНО возможный базис. Идеален не тот ЯП, на котором можно написать ЛЮБУЮ программу, а тот, на котором можно написать ЛЮБУЮ НУЖНУЮ тебе программу. То есть - никому не нужны к-мерные театры. Для 3-мерных существ ВПОЛНЕ достаточно 3-мерных, и давать в этом месте гибкость - бессмысленно и ВРЕДНО.

Утверждение: Правильный, хороший ЯП, неполноценен и ИЗБЫТОЧЕН, а полноценный и неизбыточный (лисп, форт, ассемблер стековой машины) - вреден и чрезмерен.

Утверждение: программирование - это НЕ написание программы, а написание ТАКОЙ программы, процесс написания которой позволяет организовывать мышление программиста эффективным с точки зрения формализации предметной области способом. Запуск программы на исполнение - важный, но почти побочный эффект её написания. (это вообще кто-то древний сказал...)

PS: Я прощёлкал - а когда это в течении последних 75 лет присваивание признали функционально кошерным?

PPS: Мне тут ещё фразу подарили: "третий элемент кортежа похож на емейл". Пишу, чтобы не забыть. Очень хочу посмотреть на спеку для ФП-библиотеки функций, в которой говорится, что все функции принимают в качестве параметра кортежи с третьим элементом, похожим на емейл. Сплю и вижу. Сплю, вижу, и фигею, дорогая редакция. /* int [] myfunc( int [] ); third int in array supposed to be x coordinate in inches */

(92 комментария | Оставить комментарий)

Comments:


[User Picture]
From:dz
Date:Апрель 14, 2009 10:25 am
(Link)
это вообще можно на всех языках - фпщики легко покажут ++ на лиспе - опять же, с неудачным синтаксом.
[User Picture]
From:thesz
Date:Апрель 14, 2009 11:40 am
(Link)
Lisp, встроенный в синтаксис C++, всего один (я больше не видел), а вот объектных лиспов - сколько лисперов. ;)

Так что разница есть.

Разница в том, насколько просто создавать свои микроязыки.

В Java это невозможно в принципе, отсюда появляются монстры наподобие MPS.
(Удалённый комментарий)
[User Picture]
From:thesz
Date:Апрель 14, 2009 12:05 pm
(Link)
Просто с Java и DSEL такой редкий случай - вероятность настолько мала, что приближается к "невозможно в принципе".

Например, для DSEL необходимо уметь переопределять существующие операторы и создавать новые. Это как минимум, поскольку для нормального DSEL нужен mixfix синтаксис. Или макросы, как в Лиспе.

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

Вот и приплыли. То, что на Лиспе легко, на Java практически не реализуемо.

Разница в выразительности налицо.
[User Picture]
From:dz
Date:Апрель 14, 2009 12:41 pm
(Link)
а откуда обязательное требование положить dsel код в исходник с именем .java?
[User Picture]
From:blacklion
Date:Апрель 14, 2009 01:07 pm
(Link)
Иначе два dsel'а будут плохо (неудобно) взаимодействовать. И их нельзя будете переплетать :)

MPS мне вот не нравится сама по себе, как реализация — но идеи там у Дмитриева очень правильные.
[User Picture]
From:thesz
Date:Апрель 14, 2009 02:24 pm
(Link)
Потому, что он embedded.

Он должен быть в синтаксисе языка носителя, использовать его проверку типов и его рантайм. Дополнительные действия по запуску программы на DSEL должны быть минимальны.

Этим он и ценен - отсутствует цикл разработки "большого языка" с синтаксическим анализом, проверкой типов, интерпретатором и библиотекой времени исполнения.

Например, ассемблер с метками, переходами и прочим я могу сделать не вылезая из Хаскеля: http://thesz.livejournal.com/440974.html#cutid1

(++ - соединение списков, программа представлена списком команд, команды перехода содержат в аргументах списки команд, исполнение которых надо начать. получается циклическая бесконечная структура.)
prog1 = [Const 0]++prog1loop1 -- таким образом мы осуществляем продолжение выполнения.

prog1limit = 20

prog1loop1 = [          -- на входе: count
                        -- содержимое стека после команды:
       Const 1          -- count 1
      ,Plus             -- count
      ,Input            -- count input
      ,Const prog1limit -- count input proglimit
      ,Cmp LT           -- count flag (flag = input < proglimit)
      ,B prog1loop1     -- count (flag был использован)
      ,Output           -- (пусто)
   ]
Наличие всех меток мне проверит Хаскель, как и синтаксис. Мне только небольшой интерпретатор надо написать.

В противном случае мне пришлось бы писать разбор, проверку и интерпретатор.

А бейсик ты уже видел. ;)

> Go to Top
LiveJournal.com