|
|
|
Апрель 22, 2009
01:15 pm - ЯП Ну и ещё одна мысль для программеров на бегу. Для обсуждения и размышлений.
ЯП не должны быть компактными. Я тоже восхищаюсь решениями с компактным базисом - мой разум испытывает удовольствие, видя решение задачи, которое собрано из минимального набора конструкционных элементов. Тут вот подкинули ссылку на язык io - спасибо, очень красиво. И Форт тоже - прелесть, какая лапочка. Ну и тэ дэ. Да и Фантом мой - чего греха таить - тоже вводит оч. компактный базис в мире ОС. Но ЯП создаются НЕ ДЛЯ ТОГО, чтобы я или ещё кто испытывал радость, глядя на то, как красив этот язык.
Это всё - machinery. Это ЛЮДЯМ показывать не надо. Это не инструмент для конечного пользователя. Фантомовский базис будет (и уже отчасти) обёрнут более практичными, хотя и менее гибкими сервисными службами. Форт породил стековые виртуальные машины, а frontend language для них - ява и сишарп, языки СИЛЬНО избыточные и многословные. Не случайно!
1. Исходный текст программы должен быть избыточен - иначе нет шанса ловить ошибки на уровне компиляции. Инфёрред тайпс - изящно и полезно, но реального программера надо заставлять писать тип везде, где можно, чтобы тупо поймать за руку, если что-то не сходится.
2. Читаемость программы чуть ли не важнее всего остального - поэтому ключевые слова, которые, вообще-то, не нужны по сути, нужны по форме.
3. Нет, тема "мы определим ключевые слова на самом языке" не канает, хотя и красива. Просто потому, что в этом месте вариативность нужно намертво запретить (вспомним, почему в яве нет дефайнов и перегруза операторов: язык должен быть один и не должен меняться по прихоти программера), а значит определение конструкций ЯП на нём самом не имеет смысла.
Но имеет смысл возможность порождать локальные синтаксисы, дополняющие или расширяющие основной - это да.
Переведу на бинарный. Грубо говоря, нуля и единички хватает чтобы выразить всё, что угодно. Но писать 0b111111110000000000000000 неудобно. Удобно писать Color.RED.
С другой стороны, очевидно, что компактность базиса - это "мало учить, много уметь". Отсюда понятно, что продить хороший ЯП - это задача поиска компромисса между компактностью, читаемостью и близостью ЯП к задачам, которые с его применением будут решаться. (Напомню - идеальный язык для задачи импорта эксельной таблицы в БД имеет один оператор Import_XLS_to_DB.)
|
![[User Picture]](http://l-userpic.livejournal.com/4235723/937678) | | From: | bormotov |
| Date: | Апрель 22, 2009 09:57 am none (UTC) |
|---|
| | мыслевслух | (Link) |
|
чтобы тупо поймать за руку, если что-то не сходится. только не тупо, и не за руку. Хитро и за яйца! ![[User Picture]](http://l-userpic.livejournal.com/99136951/11465707) | | From: | raydac |
| Date: | Апрель 22, 2009 10:00 am none (UTC) |
|---|
| | | (Link) |
|
я вот своё imho выскажу язык программирования может быть любым (!) главное что бы он был стабилен и не подвергался изменениям каждый год в целях "гонки вооружений" ![[User Picture]](http://l-userpic.livejournal.com/12095228/499522) | | From: | hedin |
| Date: | Апрель 22, 2009 11:32 am none (UTC) |
|---|
| | | (Link) |
|
Не согласен, вполне достаточно полноценной обратной совместимости. ![[User Picture]](http://l-userpic.livejournal.com/101538122/855511) | | From: | potan |
| Date: | Апрель 22, 2009 10:16 am none (UTC) |
|---|
| | | (Link) |
|
реального программера надо заставлять писать тип везде, где можно, чтобы тупо поймать за руку, если что-то не сходится. Вот твк и появляются void* - что бы не думать, какой тип вписывать. ![[User Picture]](http://l-userpic.livejournal.com/116380519/156519) | | From: | dz |
| Date: | Апрель 22, 2009 10:23 am none (UTC) |
|---|
| | | (Link) |
|
это лечится легко.
grep 'void *' *.c | wc -l | decrement_salary `who am i` В яве есть аннотации, которые с успехом могут заменять ключевые слова, относящиеся к runtime (да и не только). ![[User Picture]](http://l-userpic.livejournal.com/116380519/156519) | | From: | dz |
| Date: | Апрель 22, 2009 11:00 am none (UTC) |
|---|
| | | (Link) |
|
не вполне понял - то есть "менять язык"?
![[User Picture]](http://l-userpic.livejournal.com/12095228/499522) | | From: | 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]](http://l-userpic.livejournal.com/116380519/156519) | | From: | dz |
| Date: | Апрель 22, 2009 11:25 am none (UTC) |
|---|
| | | (Link) |
|
pulic Object doSomething(Object in) throws Exception{ if (in instance of ... }
Это, кстати, ограничение системы типов явы (классических ОО языков), вообще говоря...
Кстати, а почему бы не так, через APT:
class Foo {
@source("Foo.doSomething.js") void doSomething() {}
}
@source("Bar.js")
class Bar {
void doSomething1() {}
void doSomething2() {}
}
| From: | 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]](http://l-userpic.livejournal.com/49527465/525021) | | From: | dimorlus |
| Date: | Апрель 22, 2009 05:43 pm none (UTC) |
|---|
| | | (Link) |
|
Полностью согласен. Правда от форта я никаких положительных эмоций не испытывал никогда, но сама идея писать язык на себе самом мне не нравится, и именно потому же, почему и вам. Это читать только пишущий в момент написания сможет. А что гослинги? Я не в теме. ![[User Picture]](http://l-userpic.livejournal.com/116380519/156519) | | From: | dz |
| Date: | Апрель 23, 2009 04:08 am none (UTC) |
|---|
| | | (Link) |
|
Детство в жопе. Автор ни разу не отвечал за стоимость разработки чем-то существенным.
(Ну и - зайдите на market.yandex.ru, там внутри работают два моих проблемно-ориентированных языка.)
1) ghci :l somemodule :t somefunction 3) Прочитать книжку с маломальски нетривиальной математикой. Попытаться запрограммировать на, хотя бы (!) цепепе. Забыть сей бред как страшный сон.
Ну и по сути. Действительно удобный ЯП должен быть хорошим хост-языком для микро-DSL'ей и обеспечивать лёгкую интеграцию писанных на этих DSL'ях компонентов. ![[User Picture]](http://l-userpic.livejournal.com/116380519/156519) | | From: | dz |
| Date: | Апрель 23, 2009 04:06 am none (UTC) |
|---|
| | | (Link) |
|
1, 1.1, 1.2, 3: вообще не понял, при чём тут цепепе. вообще не понял, при чём тут математика. что фп - это dsl для математических задач - согласен. вы это хотели сказать? ;)
ты так это надрывно излагаешь, будто есть люди, которые с этим не согласны ;)
или есть? | From: | dmzlj |
| Date: | Апрель 23, 2009 03:40 am none (UTC) |
|---|
| | Re: странно | (Link) |
|
Естественно. Пункт нулевой - язык никому ничего не должен. "Кто же его посадит - он же памятник" ![[User Picture]](http://l-userpic.livejournal.com/62520568/13065816) | | From: | cd_riper |
| Date: | Апрель 23, 2009 07:04 am none (UTC) |
|---|
| | | (Link) |
|
> Исходный текст программы должен быть избыточен - иначе нет шанса ловить ошибки на уровне компиляции.
А как же динамическая типизация? Питоны, Руби, ПХП и проч. ![[User Picture]](http://l-userpic.livejournal.com/55653301/937678) | | From: | bormotov |
| Date: | Апрель 23, 2009 07:11 am none (UTC) |
|---|
| | | (Link) |
|
Питоны и руби созданы для макетирования, в первую очередь. Для того этапа разработки, когда в типах мы еще не уверены, и нужно с минимальным расходом проверить несколько моделей, чтоб продвинуться дальше. ![[User Picture]](http://l-userpic.livejournal.com/72758527/15188013) | | | Ответы на Ваши вопросы | (Link) |
|
![[User Picture]](http://l-userpic.livejournal.com/116380519/156519) | | From: | dz |
| Date: | Апрель 26, 2009 08:24 pm none (UTC) |
|---|
| | Re: Ответы на Ваши вопросы | (Link) |
|
http://dz.livejournal.com/362438.html#cutid1Прочитайте внимательно и старайтесь удерживаться в означенных рамках. Это - обязательное условие для присутствия здесь. Спасибо. Конкретно: Вас не звали учить и нести истину. Дискутировать - вперёд. Учить - назад. |
|