?

Log in

No account? Create an account
ЯП - dz

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

Апрель 22, 2009


Previous Entry Поделиться Next Entry
01:15 pm - ЯП
Ну и ещё одна мысль для программеров на бегу. Для обсуждения и размышлений.

ЯП не должны быть компактными. Я тоже восхищаюсь решениями с компактным базисом - мой разум испытывает удовольствие, видя решение задачи, которое собрано из минимального набора конструкционных элементов. Тут вот подкинули ссылку на язык io - спасибо, очень красиво. И Форт тоже - прелесть, какая лапочка. Ну и тэ дэ. Да и Фантом мой - чего греха таить - тоже вводит оч. компактный базис в мире ОС. Но ЯП создаются НЕ ДЛЯ ТОГО, чтобы я или ещё кто испытывал радость, глядя на то, как красив этот язык.

Это всё - machinery. Это ЛЮДЯМ показывать не надо. Это не инструмент для конечного пользователя. Фантомовский базис будет (и уже отчасти) обёрнут более практичными, хотя и менее гибкими сервисными службами. Форт породил стековые виртуальные машины, а frontend language для них - ява и сишарп, языки СИЛЬНО избыточные и многословные. Не случайно!

1. Исходный текст программы должен быть избыточен - иначе нет шанса ловить ошибки на уровне компиляции. Инфёрред тайпс - изящно и полезно, но реального программера надо заставлять писать тип везде, где можно, чтобы тупо поймать за руку, если что-то не сходится.

2. Читаемость программы чуть ли не важнее всего остального - поэтому ключевые слова, которые, вообще-то, не нужны по сути, нужны по форме.

3. Нет, тема "мы определим ключевые слова на самом языке" не канает, хотя и красива. Просто потому, что в этом месте вариативность нужно намертво запретить (вспомним, почему в яве нет дефайнов и перегруза операторов: язык должен быть один и не должен меняться по прихоти программера), а значит определение конструкций ЯП на нём самом не имеет смысла.

Но имеет смысл возможность порождать локальные синтаксисы, дополняющие или расширяющие основной - это да.

Переведу на бинарный. Грубо говоря, нуля и единички хватает чтобы выразить всё, что угодно. Но писать 0b111111110000000000000000 неудобно. Удобно писать Color.RED.

С другой стороны, очевидно, что компактность базиса - это "мало учить, много уметь". Отсюда понятно, что продить хороший ЯП - это задача поиска компромисса между компактностью, читаемостью и близостью ЯП к задачам, которые с его применением будут решаться. (Напомню - идеальный язык для задачи импорта эксельной таблицы в БД имеет один оператор Import_XLS_to_DB.)
 


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

Comments:


[User Picture]
From:bormotov
Date:Апрель 22, 2009 09:57 am

мыслевслух

(Link)
чтобы тупо поймать за руку, если что-то не сходится.
только не тупо, и не за руку. Хитро и за яйца!
[User Picture]
From:raydac
Date:Апрель 22, 2009 10:00 am
(Link)
я вот своё imho выскажу
язык программирования может быть любым (!)
главное что бы он был стабилен и не подвергался изменениям каждый год в целях "гонки вооружений"
(Удалённый комментарий)
[User Picture]
From:potan
Date:Апрель 22, 2009 10:16 am
(Link)
реального программера надо заставлять писать тип везде, где можно, чтобы тупо поймать за руку, если что-то не сходится.
Вот твк и появляются void* - что бы не думать, какой тип вписывать.
[User Picture]
From:dz
Date:Апрель 22, 2009 10:23 am
(Link)
это лечится легко.

grep 'void *' *.c | wc -l | decrement_salary `who am i`
(Удалённый комментарий)
[User Picture]
From:dz
Date:Апрель 22, 2009 11:00 am
(Link)
не вполне понял - то есть "менять язык"?
[User Picture]
From:hedin
Date:Апрель 22, 2009 11:21 am
(Link)
> реального программера надо заставлять писать тип везде, где можно

Засталять дело гиблое. Void бог с ним, это осмысленное заявление.
pulic Object doSomething(Object in) throws Exception{
if (in instance of ...
}
непобедимо (почти цитата из живого проекта).

Но рекомендовать и давать инструмент конечно стоит.

>Расширяющие синтаксисы ...
мне стремно, очень близко к переопределениям. На эти грабли протно наступили prototype.js и подобные в js.
Когда подключаеш библиотеку и куча кода ломается.
ИМХО встраиваемые языки намного безопаснее, а результат практически тотже. Только надо научить IDE резолвить эти вставки. Те чтобы встраиваемый код был для основного не строчкой уходящей в eval. А чемто более структурированным.

те не
Interpreter interpreter = new Interpreter();
interpreter.eval(new String("...".getBytes("UTF-8"), "UTF-8"));
String string = (String) interpreter.get("test");

а скорее както так.
< script language="myDomainSpecificLang" contextPass="closure">
...
< /script>
[User Picture]
From:dz
Date:Апрель 22, 2009 11:25 am
(Link)
pulic Object doSomething(Object in) throws Exception{
if (in instance of ...
}

Это, кстати, ограничение системы типов явы (классических ОО языков), вообще говоря...
(Удалённый комментарий)
(Удалённый комментарий)
From:growler
Date:Апрель 22, 2009 03:59 pm
(Link)
Инфёрред тайпс - изящно и полезно, но реального программера надо заставлять писать тип везде, где можно, чтобы тупо поймать за руку, если что-то не сходится.

в нагрузку к type inference обычно идут отсутствие void*, null и других Object, поэтому реальный программер, столкнувшись с реальным языком с реальным type inference первые недели читает, в основном, многострочую ругань компилятора и бьется головой об стену в попытках научиться обходиться без привычного null.
зато потом на него снисходит просветление, компилятор становится послушным, а type inference -- рабочим инструментом, чтобы избавить код от лишнего мусора и сконцентрироваться на задаче.

не мной замеченный парадокс -- на языках с type inference проблем с типизацией меньше. если программа собралась, то она, скорее всего, уже работает. а в яве ещё надо убедиться, что нет npe

Нет, тема "мы определим ключевые слова на самом языке" не канает, хотя и красива. Просто потому, что в этом месте вариативность нужно намертво запретить

в этом место можно помахать ФП ручкой и забыть про него окончательно
язык, в котором у фунцкий все первоклассные права, расширяется сам собой
если стоит цель не допустить этого, то надо выкидывать ФП
что в яве 7 и сделали
[User Picture]
From:dimorlus
Date:Апрель 22, 2009 05:43 pm
(Link)
Полностью согласен. Правда от форта я никаких положительных эмоций не испытывал никогда, но сама идея писать язык на себе самом мне не нравится, и именно потому же, почему и вам. Это читать только пишущий в момент написания сможет.
(Удалённый комментарий)
[User Picture]
From:permea_kra
Date:Апрель 22, 2009 09:00 pm
(Link)
А что гослинги? Я не в теме.
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture]
From:permea_kra
Date:Апрель 22, 2009 08:41 pm
(Link)
1) ghci
:l somemodule
:t somefunction
3) Прочитать книжку с маломальски нетривиальной математикой. Попытаться запрограммировать на, хотя бы (!) цепепе. Забыть сей бред как страшный сон.

Ну и по сути. Действительно удобный ЯП должен быть хорошим хост-языком для микро-DSL'ей и обеспечивать лёгкую интеграцию писанных на этих DSL'ях компонентов.
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture]
From:za1chas
Date:Апрель 22, 2009 10:18 pm

странно

(Link)
ты так это надрывно излагаешь, будто есть люди, которые с этим не согласны ;)

или есть?
From:dmzlj
Date:Апрель 23, 2009 03:40 am

Re: странно

(Link)
Естественно. Пункт нулевой - язык никому ничего не должен. "Кто же его посадит - он же памятник"
[User Picture]
From:cd_riper
Date:Апрель 23, 2009 07:04 am
(Link)
> Исходный текст программы должен быть избыточен - иначе нет шанса ловить ошибки на уровне компиляции.

А как же динамическая типизация?
Питоны, Руби, ПХП и проч.
[User Picture]
From:bormotov
Date:Апрель 23, 2009 07:11 am
(Link)
Питоны и руби созданы для макетирования, в первую очередь. Для того этапа разработки, когда в типах мы еще не уверены, и нужно с минимальным расходом проверить несколько моделей, чтоб продвинуться дальше.
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture]
From:dz
Date:Апрель 26, 2009 08:24 pm

Re: Ответы на Ваши вопросы

(Link)
http://dz.livejournal.com/362438.html#cutid1

Прочитайте внимательно и старайтесь удерживаться в означенных рамках.
Это - обязательное условие для присутствия здесь.
Спасибо.

Конкретно: Вас не звали учить и нести истину. Дискутировать - вперёд. Учить - назад.

> Go to Top
LiveJournal.com