пятница, 13 сентября 2013 г.

Немного полемики. Автор - не убедил

http://namerec.blogspot.ru/2013/09/dsl.html
http://namerec.blogspot.ru/2013/09/dsl-2.html
http://namerec.blogspot.ru/2013/09/dsl-3.html

Что сказать? Автор - МЕНЯ ЛИЧНО - не убедил. И тем БОЛЕЕ - не переубедил.

Что сказать? Мнение - имеет право на жизнь.

Мы все готовы признавать свои ошибки и даже ВЫПЯЧИВАТЬ их.

Что - ЗДОРОВО. И делает честь тем, кто это делает.

Но!

Начну с посыла:
"Как я сказал уже выше, разнообразие функциональности по работе со строками в Pascal было не очень большим, с PChar работать было вообще неудобно, если не сказать - опасно, ввиду чего работа с абзацами (тогда мы не использовали этот термин, вообще, система понятий была несколько иной, я вынужден подбирать нечто похожее из современного, чтобы не утомлять читателя) "заворачивалась" в классы-обёртки, но всё равно, возни с форматированием было намного больше, чем бы хотелось.
И мы были вынуждены экономить память. Жёстко, брутально."

-- мы ВСЕ были в такой ситуации в 90-х. И ничего...

Не смертельно.. Причём тут DSL - непонятно.. :-(

Ещё (если придираться) есть у меня ощущение, что автор - "плавает в датах". 90-й или 93-й или 95-й годы - это как говориться "depends". Там и разные инструменты были и подходы.

Там "год - за десять шёл".

Ну ладно.. Считайте, что я грубо и мелочно придираюсь к автору.. Потому, что он меня "задел".. Может и так...

Я готов признавать свою неправоту.

Но! "мотивации" - "почему не надо делать DSL" - я простите - не увидел.

ДА. Есть опыт unsuccesful-story. Не более того. У меня таких - "миллионы". Спросите меня и я вам расскажу.

Я сам - столько всего "по-молодости" "наколбасил".

Отклонюсь немного в сторону - «Императивщина всё равно функциональнее декларативных ЯП.»

БРАВО! Очевидность - возведённая в РАНГ истины.

Простите уж.

Никто не спорит, что "императив" - МОЩНЕЕ "декларатива". МОЩНЕЕ. И ВЫРАЗИТЕЛЬНЕЕ.

Точка. 

Но это совсем не означает, что "императив" - "лучше"и скажем - читабельнее. Вот совсем. Поверьте мне на слово.

У меня был коллега, который МНОГИЕ задачи решал в стиле "пробежаться по списку элементов и посчитать матожидание". И это - РАБОТАЕТ! Но я ВСЕГДА ему говорил в таких случаях - "опиши КАКУЮ ЗАДАЧУ решаем". Да! это - СЛОЖНЕЕ. На первом этапе. НО, потом - оно того стоит. Теперь - он "начальник". Не у нас. А я всё ещё - "кодер" :-) Но - наука -пошла впрок.

"Текучие интерфейсы" vs DSL - ну это моему разуму - НЕ ПОДДАЁТСЯ. Это - ОРТОГОНАЛЬНЫЕ вещи.

То, что у автора - "не получилось"... Ну так - "бывает".. Все через это проходили.

По сути...

FunFromField(tabBALANCE1, 'АктуальноС', fnMax, vDate);

-- вот тут мне кажется и кроется - ПРОБЛЕМА. Это по-сути "не DSL", да простит меня автор.

В том-то и ПРОБЛЕМА, что "пользователя" заставляли "программировать" в терминах "полей и таблиц". Не "описав предметной области" и не "повысив уровня абстракции".

Далее....

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

-- я - "нормальный" программист. Руку, мне жать - незачем. Именно - "фу"... Хотя - я понимаю - откуда и что берётся.

И "ругать" - я НИКОГО не хочу... Есть "естественный ход событий". И есть mile-stone'ы и прочая "дребедень"..

DSL - это "не просто" скриптовый язык. Иначе бы не было бы ДВУХ разных терминов.

"вот и всё, что я хотел сказать о креветках"

А автор - МОЛОДЕЦ. ОЧЕНЬ насущные проблемы поднял. DSL - "с кандачка" и "просто так" - не пишется.

Надеюсь, что я его не задел. Никоим образом - не хотел.

P.S. На "закуску"...

WORDWORKER И BOOLEAN IN aFirst
 // Двусторонний, а не обратный польский &&
 aFirst IF
  WordToWork DO IF
   true
  ELSE
   false
  ENDIF 
 ELSE
  false 
 ENDIF 
 //WordToWork DO &&
; // %&&

WORDWORKER ИЛИ BOOLEAN IN aFirst
 // Двусторонний, а не обратный польский ||
 aFirst IF
  true
 ELSE 
  WordToWork DO IF
   true
  ELSE
   false
  ENDIF  
 ENDIF 
 //WordToWork DO ||
; // %||

WORDWORKER НЕ
 // Правосторонний, а не обратный польский !
 WordToWork DO !
; // %!

WORDWORKER РАВНО
 // Правосторонний, а не обратный польский ==
 WordToWork DO ?==
; //%==

WORDWORKER НЕРАВНО
 // Правосторонний, а не обратный польский !=
 WordToWork DO ?!=
; //%!=

WordAlias "НЕ РАВНО" НЕРАВНО

WORDWORKER БОЛЬШЕ
 WordToWork DO >
;

WORDWORKER МЕНЬШЕ
 WordToWork DO <
;

WORDWORKER "БОЛЬШЕ ИЛИ РАВНО"
 WordToWork DO < !
;

WORDWORKER "МЕНЬШЕ ИЛИ РАВНО"
 WordToWork DO > !
;

WORDWORKER ЯВЛЯЕТСЯ OBJECT IN anObj
 WordToWork DO anObj pop:object:Inherits
;

WORDWORKER НЕЯВЛЯЕТСЯ OBJECT IN anObj
 WordToWork DO anObj pop:object:Inherits !
;

WordAlias "НЕ ЯВЛЯЕТСЯ" НЕЯВЛЯЕТСЯ

WORDWORKER =+ INTEGER IN anInc
 WordToWork DO anInc + =:^ WordToWork
;

WORDWORKER =- INTEGER IN anInc
 WordToWork DO anInc - =:^ WordToWork
;

WORDWORKER2 ПОКА
 @ ( WordToWork1 DO ) WHILE ( WordToWork2 DO )
;

WordAlias ДА true

WordAlias НЕТ false

....

: K397288098

 CONST N 150
 
 10 LOOP (
 "Список всех документов"
 "Перевести фокус в список"
 "Нажать {('Enter')}"
 N раз ( "Следующий документ в списке"
 "Дать системе перерисоваться" )
 N раз ( "Предыдущий документ в списке"
 "Дать системе перерисоваться" )

 ОМ
 "Список всех документов"
 "Перевести фокус в список"
 N раз "Стрелка вниз"
 "Нажать {('Enter')}"
 N раз ( "Предыдущий документ в списке"
 "Дать системе перерисоваться" )
 N раз ( "Следующий документ в списке"
 "Дать системе перерисоваться" ) )
;

K397288098

....

К чему это я? Да просто к тому, что идея - "управления из языка процессом компиляции" как это сделано в FORTH - по-моему - НЕЗАСЛУЖЕННО забыта.

А эта идея - позволяет "определять грамматику на лету". Только и всего.

А Python. Ну да - "неплохой" язык. Динамический. И с интересными "плюшками". И я - ЗНАЮ - как он устроен.

Всё та же "стековая машина" и "словари".

Что касается "батареек"  - ДА. Они там - МОЩНЫЕ. Сам как-нибудь - попробую использовать. Если задача подходящая возникнет.

5 комментариев:

  1. >Что сказать? Автор - МЕНЯ ЛИЧНО - не убедил. И тем БОЛЕЕ - не переубедил.
    >вот тут мне кажется и кроется - ПРОБЛЕМА. Это по-сути "не DSL", да простит меня автор.

    Получился просто очередной сферический императивный язык. Я тоже не увидел в нём ориентированность на конкретную задачу.

    >Никто не спорит, что "императив" - МОЩНЕЕ "декларатива". МОЩНЕЕ. И ВЫРАЗИТЕЛЬНЕЕ.

    Я спорю. =)

    >P.S. На "закуску"... "А ваш язык программирования так может?"

    может, причём лучше чем javascript. Только при чём здесь "управления из языка процессом компиляции"?

    ОтветитьУдалить
    Ответы
    1. "Только при чём здесь "управления из языка процессом компиляции"?"

      Притом, что ИМЕННО это отличает (на мой взгляд) DSL-языки от "просто"-скриптовых-языков.

      DSL ОРИЕНТИРОВАН именно на то, чтобы на НЁМ выводить ПОНЯТИЯ и ГРАММАТИКУ "предметной области".

      Удалить
  2. "Я спорю. =)"

    ЛЮБОЙ императив (полный по Тьюрингу) - МОЩНЕЕ декларатива..

    Попробуйте доказать обратное...

    Было бы интересно...

    Хотя это не значит, что декларатив не стоит применять...

    ОтветитьУдалить
  3. http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%BD%D0%BE%D1%82%D0%B0_%D0%BF%D0%BE_%D0%A2%D1%8C%D1%8E%D1%80%D0%B8%D0%BD%D0%B3%D1%83

    ОтветитьУдалить
  4. "Хотя это не значит, что декларатив не стоит применять..."
    -- те же dfm или xml скажем...

    ОтветитьУдалить