DSL для пользовательских задач
От: dmz Россия  
Дата: 28.12.08 09:19
Оценка: 2 (1)
Не уверен, что это подходит в декларативное программирование... Больше нестройных размышлений, чем по сути.

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

Примеры из жизни:

TaskJuggler — планирование проектов.
  task test "Software testing" {
    task alpha "Alpha Test" {
      effort 1w
      depends !!software
      allocate test, dev2
      note "Hopefully most bugs will be found and fixed here."
    }

    task beta "Beta Test" {
      effort 4w
      depends !alpha
      allocate test, dev1
    }
  }


Лично я использую, но неудержимо тянет написать свое, с блекджеком и прочим. Раздражает слишком развесистый синтаксиси отсутствие некоторых функций.
Вот еще пример — Faces, тоже, для того же, но базе питона — чем-то даже лучше TJ, но прибит гвозями к GUI, а GUI стремный и глючный.



    def PlanAndControl():

    title = "Planing and Controlling"

    #for meeting etc

    resource = dev1 & dev2 & dev3 & tester & doc

    start = up.Deliveries.Begin.start

    end = up.Deliveries.Done.end

    load = WeeklyMax("4H")


    

    def Deliveries():

    title = "Milestones"

    account = "rev"



    def Begin():

        title = "Projectstart"

        start = Multi("2002-01-16", delayed="2002-01-24")

        credit = 33000.0 



        

    def Prev():

        title = "Technology Preview"

        milestone = True

        start = up.up.Software.Backend.end

        credit = 13000.0 

        gantt_same_row = up.Begin


Вот еще пример — уже собственный DSL — планирование рейсов:
РЕЙС "ТРИЛАЙН - ТРИЛАЙН" 

НАЧАЛО               "2008-03-01 06:10:00"
ПРОДОЛЖИТЕЛЬНОСТЬ    4 ЧАСА 

ПУНКТ  1 "ТРИЛАЙН"
ПРИБЫТИЕ  10 МИНУТ   ОТ РЕЙС/НАЧАЛО
УБЫТИЕ    5  МИНУТ   ОТ ПРИБЫТИЕ

ПУНКТ 2 "ТАГАНСКАЯ ПЛОЩАДЬ"
ПРИБЫТИЕ  5 ЧАСОВ   ОТ РЕЙС/НАЧАЛО
УБЫТИЕ    5 МИНУТ  ОТ ПРИБЫТИЕ

ПУНКТ 3 "ДИНАМО"
ПРИБЫТИЕ  3 ЧАСА  20 МИНУТ ОТ ПУНКТ#2/УБЫТИЕ
УБЫТИЕ    5 МИНУТ ОТ ПРИБЫТИЕ

ПУНКТ 66 "ЧИСТЫЕ ПРУДЫ"
ПРИБЫТИЕ  3 ЧАСА  20 МИНУТ ОТ РЕЙС/НАЧАЛО
УБЫТИЕ    5 МИНУТ ОТ ПРИБЫТИЕ


По результатам обсуждения с людьми, близкими по менталитету к заказчикам продукта, пришлось отказаться от предоставления пользователю возможности редактировать DSL напрямую, так что DSL сериализуется в XML/DOM, из него на клиенте генерируется динамическая форма, которая при самбите обходится и по которой генерируется все тот же DSL, но уже измененный. Но сам DSL фактически пропал раз пользователю недоступен — можно было и тупо XML туда-сюда гонять. Лично я по поводу этого решения испытываю сожаление — по моему, довольно стройная получалась в начале концепция.

Это я к чему. Есть ли у вас живые успешные примеры DSL, который рассчитан на редактирование конечными пользователями систем (не разработчиками) ?
Просто хочется иметь какое-то количество решений для домашнего и не очень применения — планирование проектов, построение roadmap-ов, управление сметами/бюджетами и т.п. Без GUI — задачи редуцируются до достаточно примитивных утилит — которые на входе получают текст на DSL с описанием, на выходе — отчет в каком-то виде. Интересно, может ли у таких продуктов быть вообще В ПРИНЦИПЕ немаргинальная аудитория? Видите ли вы перспективы в использовании подобного подхода? Ну и вообще...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.