Вы читаете журнал [info]dz

dz - ЯП

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

Апрель 22, 2009


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

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

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

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

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

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

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

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

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


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

Comments:


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

мыслевслух

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

grep 'void *' *.c | wc -l | decrement_salary `who am i`
[User Picture]
From:[info]ivan_gammel
Date:Апрель 22, 2009 10:40 am none (UTC)
(Link)
В яве есть аннотации, которые с успехом могут заменять ключевые слова, относящиеся к runtime (да и не только).
[User Picture]
From:[info]dz
Date:Апрель 22, 2009 11:00 am none (UTC)
(Link)
не вполне понял - то есть "менять язык"?
[User Picture]
From:[info]hedin
Date:Апрель 22, 2009 11:21 am none (UTC)
(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:[info]dz
Date:Апрель 22, 2009 11:25 am none (UTC)
(Link)
pulic Object doSomething(Object in) throws Exception{
if (in instance of ...
}

Это, кстати, ограничение системы типов явы (классических ОО языков), вообще говоря...
[User Picture]
From:[info]ivan_gammel
Date:Апрель 22, 2009 02:17 pm none (UTC)
(Link)
Кстати, а почему бы не так, через APT:
class Foo {
   @source("Foo.doSomething.js") void doSomething() {}
}
@source("Bar.js") 
class Bar {
   void doSomething1() {}
   void doSomething2() {}
}
From:[info]growler
Date:Апрель 22, 2009 03:59 pm none (UTC)
(Link)
Инфёрред тайпс - изящно и полезно, но реального программера надо заставлять писать тип везде, где можно, чтобы тупо поймать за руку, если что-то не сходится.

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

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

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

в этом место можно помахать ФП ручкой и забыть про него окончательно
язык, в котором у фунцкий все первоклассные права, расширяется сам собой
если стоит цель не допустить этого, то надо выкидывать ФП
что в яве 7 и сделали
[User Picture]
From:[info]dimorlus
Date:Апрель 22, 2009 05:43 pm none (UTC)
(Link)
Полностью согласен. Правда от форта я никаких положительных эмоций не испытывал никогда, но сама идея писать язык на себе самом мне не нравится, и именно потому же, почему и вам. Это читать только пишущий в момент написания сможет.
(Удалённый комментарий)
[User Picture]
From:[info]permea_kra
Date:Апрель 22, 2009 09:00 pm none (UTC)
(Link)
А что гослинги? Я не в теме.
(Удалённый комментарий)
[User Picture]
From:[info]dz
Date:Апрель 23, 2009 04:08 am none (UTC)
(Link)
Детство в жопе. Автор ни разу не отвечал за стоимость разработки чем-то существенным.

(Ну и - зайдите на market.yandex.ru, там внутри работают два моих проблемно-ориентированных языка.)
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture]
From:[info]permea_kra
Date:Апрель 22, 2009 08:41 pm none (UTC)
(Link)
1) ghci
:l somemodule
:t somefunction
3) Прочитать книжку с маломальски нетривиальной математикой. Попытаться запрограммировать на, хотя бы (!) цепепе. Забыть сей бред как страшный сон.

Ну и по сути. Действительно удобный ЯП должен быть хорошим хост-языком для микро-DSL'ей и обеспечивать лёгкую интеграцию писанных на этих DSL'ях компонентов.
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture]
From:[info]dz
Date:Апрель 23, 2009 04:06 am none (UTC)
(Link)
1, 1.1, 1.2, 3: вообще не понял, при чём тут цепепе. вообще не понял, при чём тут математика. что фп - это dsl для математических задач - согласен. вы это хотели сказать? ;)
(Удалённый комментарий)
(Удалённый комментарий)
(Удалённый комментарий)
[User Picture]
From:[info]lleo.aha.ru
Date:Апрель 22, 2009 10:18 pm none (UTC)

странно

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

или есть?
From:[info]dmzlj
Date:Апрель 23, 2009 03:40 am none (UTC)

Re: странно

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

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

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

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

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

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

> Go to Top
LiveJournal.com