metaclass: (Default)
[personal profile] metaclass
http://dev.by/blogs/main/kuda-uhodyat-chempiony-sportivnogo-programmirovaniya
"НТ ООО «ЛюксСофт». Инженер-программист. В последнее время занимаюсь разработкой предметно-ориентированного языка программирования для нашего продукта."

За разработку самодельных встроенных языков надо отправлять добывать уран, самодельными ломами и лопатами.

Date: 2013-05-15 02:17 pm (UTC)
From: [identity profile] juan-gandhi.livejournal.com
За диэсэли?
Элементарно же, есть типовые действия, и само собой получается, что дерево вызовов постепенно абстрагируется до выражения на каком-то язычке.

(сознаюсь, только что понял, что мне нужно сейчас имплементировать try/catch/finally)

Date: 2013-05-15 02:25 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Так оно есть во всех нормальных языках, и почти все они нормально интегрируются в системы.
И заодно на халяву получаем всю инфраструктуру языка.

Date: 2013-05-15 02:50 pm (UTC)
From: [identity profile] blacklion.livejournal.com
Предметно-ориентированный язык может быть куда интереснее, чем десяток предметно-ориентированных вызовов (по сути — библиотека) к существующему скриптовому языку.

Date: 2013-05-15 05:24 pm (UTC)
From: [identity profile] vp.livejournal.com
Ээээ.. Можете накидать пару случаев, чем он может быть интереснее?
Предметный язык, как правило, решает одну единственную задачу: дать возможность вынести алгоритмы на "позднюю" реализацию, отдать на сторону клиента, чтобы делать какие-то настройки силами клиента без изменения продукта. В этом случае чем сильнее язык - тем выгоднее.

Своя реализация любого языка будет априори на два порядка более убогой, чем интеграция ЛЮБОГО нормального языка: жабы, питона, сишарпа и т.п.

Как-то так.

Date: 2013-05-15 05:27 pm (UTC)
From: [identity profile] blacklion.livejournal.com
Ну, например, он может быть интересным синтаксисом под задачу. я тут недавно видел спец-язык управления аппаратурой генетического эксперимента (секвенция, вот это вот всё) — там вовсе не было ничего похожего на C (а, значит, жабу, питон, сишарп, итп). Свой набор ДВУМЕРНЫХ инструкций, отвечающих структуре аппаратуры.

Хотите — назовите это конфигурационным файлом, но там была тьюринг-полнота :)

Вы мыслите языками для программистов. А бывают языки вовсе не для них.

Date: 2013-05-15 05:36 pm (UTC)
From: [identity profile] vp.livejournal.com
как только захочется сделать что-то типа цикла - так сразу уже на этом этапе будет убогость и ограничения.

А можно пример "интересного синтаксиса" ? Чтобы мы вот щас тут ахнули?

Date: 2013-05-15 05:38 pm (UTC)
From: [identity profile] blacklion.livejournal.com
А можно пример "интересного синтаксиса" ? Чтобы мы вот щас тут ахнули?
Нет. Там была закрытая (пока) разработка.

А так — ну вот возьмите TeX, из специальных языков. Был бы он удобнее, если бы был библиотекой к паскалю? Что-то сомневаюсь.

Date: 2013-05-16 06:29 am (UTC)
From: [identity profile] asvil (from livejournal.com)
TeX это те ещё жабы

Date: 2013-05-15 05:51 pm (UTC)
From: [identity profile] blacklion.livejournal.com
К тому же у вас вообще неправильная постановка вопроса. Мы можем и сблевать. Надо что бы заказчик ахнул. А не мы.

Date: 2013-05-15 06:02 pm (UTC)
From: [identity profile] vp.livejournal.com
Нет, мы тут все много чего страшного видели, и красивое описание предметной области все оценим.

Date: 2013-05-15 05:33 pm (UTC)
From: [identity profile] blacklion.livejournal.com
Т.е. можно плясать от языка и добавитьв него предметную область. А можно идти от предметной области и добавить условно говоря мощную конфигурируемость. Мы, программисты, в силу огромных ментальных шор, по-умолчанию считаем правильным первый путь, когда если конфиг нельзя выразить в виде "имя=значение", то сразу нужен привычный нам синтаксис и вот это вот всё. Но правилен ли он?

Язык системы со сложной предметной областью должен всё же отталкиваться от предметной области (от того, что привычно ПОЛЬЗОВАТЕЛЮ, в чём он профессионал), а не от наших с вами привычек писать скобочки и делать значащие пробельные отступы (т.е. от того, что привычно НАМ, в чём МЫ профессионалы).

Date: 2013-05-15 05:43 pm (UTC)
From: [identity profile] metaclass.livejournal.com
Скобки и отступы все равно придется делать, если в предметке есть деревья и нам надо их выразить в виде текста.

Если же спрятать текст за каким-нибудь редактором-визуализатором - теоретически, это можно сделать удобнее, на практике же чаще всего получается неудобное безумие.

Date: 2013-05-15 05:50 pm (UTC)
From: [identity profile] blacklion.livejournal.com
ну не придирайтесь вы так механически-то, это даже не интересно.

Date: 2013-05-15 05:53 pm (UTC)
From: [identity profile] vp.livejournal.com
Я согласен. Но опять таки, как правило это вынос наружу именно ЛОГИКИ и алгоритмов. Худо-бедно конфигурации можно ради пользователя задать в каком-то приятном для гуя виде. А вот с логикой все тухло, ее нужно писать. Логика - это программа.

Единственную альтернативу такому подходу я встречал, когда видел систему программирования от сименса. Вот там был дикий вырвиглаз. Вместо нормального языка там были разные блок-схемы, какие-то квадратики и прочий бред, который нужно было бешено тягать мышью и строить так "алгоритм". Я не согласен, что это удобнее и нагляднее, ибо человек, программист, который с этим работал, мучился и матерился.

Date: 2013-05-15 05:58 pm (UTC)
From: [identity profile] blacklion.livejournal.com
Тут вопрос, надо ли сохранять чистоту встраиваемого языка (за что ратуют анти-DLS-щики — взял готовы интерпретатор, докинул предметную библиотеку, всё) или таки нужен свой язык, пусть и очень похожие на существующий, но с ним несовместимый, потому что базовые концепции предметки внесены в язык а не в библиотеку. Я за второе.

Пример вот такой, из мейнстрима — LINQ в C# не делается голым первым методом, как голая библиотека. потребовалась поддержка со стороны компилятора, а не только библиотека. Был с очередным релизом изменён сам язык что бы поддержать концепции некоторой определённой предметной области (запросы к коллекциям и базам данных в частности). И C# с LINQ (это 3.0, я не помню?) — это не тоже самое что C# до LINQ (2.0?) + библиотека из предметной области. Это по сути новый язык.

Вот примерно так.

Date: 2013-05-16 08:53 am (UTC)
From: (Anonymous)
Вообще-то .Net 2 тоже самое, что и даже 3.5 с несколькими дополнительными библиотеками.

Date: 2013-05-15 07:51 pm (UTC)
From: [identity profile] shredder-by.livejournal.com
Вот как раз релейную логику (http://ru.wikipedia.org/wiki/Ladder_Diagram) и придумали не для программистов, а для электриков. И таки текстом (http://ru.wikipedia.org/wiki/Structured_Text) тоже можно писать, только эксплуатационному персоналу в основной массе понятнее квадратики.

Date: 2013-05-15 08:07 pm (UTC)
From: [identity profile] mikhalych (from livejournal.com)
Так, ну вот не надо насчёт Сименса!
Между прочим весь этот "вырви глаз" описывается стандартом IEC61131-3 (собственно вот сюда (http://ru.wikipedia.org/wiki/%D0%9F%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B9_%D0%BB%D0%BE%D0%B3%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D0%BA%D0%BE%D0%BD%D1%82%D1%80%D0%BE%D0%BB%D0%BB%D0%B5%D1%80#.D0.AF.D0.B7.D1.8B.D0.BA.D0.B8_.D0.BF.D1.80.D0.BE.D0.B3.D1.80.D0.B0.D0.BC.D0.BC.D0.B8.D1.80.D0.BE.D0.B2.D0.B0.D0.BD.D0.B8.D1.8F_.D0.9F.D0.9B.D0.9A)) и вполне решает 2 задачи, описание процесса в предметной области и стандартизацию, позволяющую таскать код между контроллерами разных производителей.
(сам пишу на Сименсе уже 13 лет)
Edited Date: 2013-05-16 09:30 am (UTC)

Date: 2013-05-15 06:40 pm (UTC)
From: [identity profile] thedeemon.livejournal.com
Значит ли это, что SQL, Makefile, regexp'ы, lex/yacc/PEG и другие DSL'и не стоило изначально изобретать, а надо было везде продолжать писать на коболе/паскале/си? Ведь это предметные языки, априори на два порядка более убогие...

Date: 2013-05-15 06:46 pm (UTC)
From: [identity profile] vp.livejournal.com
SQL - это как раз таки "новая сущность". Язык идеален для работы с множествами. Его предметная область - это не автоматизация алгоритмов. А вот обратная сторона субд, разные языки хранимых процедур на птичьих языках - вот это вполне можно делать на чем-то стандартном.
Regexp.. Я его ненавижу вообще-то :) Но штука вполне себе самостоятельная. Язык выборки из строки.


Короче, где описывается алгоритм и действия - то можно менять.

Date: 2013-05-15 09:02 pm (UTC)
From: [identity profile] naartir.livejournal.com
> Я его ненавижу вообще-то :)

Рэбэ, а як Вы хітрым спосабам пазамяняеце кавалкі тэксту ў файле? Альбо знойдзеце што-небудзь па хітрым шаблёне? Без рэгэкспу

Date: 2013-05-15 11:13 pm (UTC)
From: [identity profile] ihar hrachyshka (from livejournal.com)
Напишет программу на Сишарп.

Date: 2013-05-16 11:34 am (UTC)
From: [identity profile] vp.livejournal.com
Ну а что мне мешает поменять их кодом?

Date: 2013-05-15 05:02 pm (UTC)
From: [identity profile] jakobz.livejournal.com
С одной стороны - идея хорошая и правильная. С другой - на практике всегда такая херня получается, что проще было сразу брать лисп.

EDSL и всякие монады в расчет не берем - это как раз работает.

Речь про DSL, идея которого - отделить условных "идиотов" - веб-верстальщиков или там бизнес-аналитиков, путем написания условно "умными" для условных "идиотов" своего тупого языка для своей песочницы. И вот это вроде с виду может и работает, конечно (см. те же SQL, PHP и 1C), но трахаться с языками для "идиотов" приходится тем же самым "умным" в конечном итоге.

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 7th, 2025 01:16 pm
Powered by Dreamwidth Studios