Языково-ориентированное программирование: следующая парадигм
От: Сергей Дмитриев, Зверёк Харьковский (пер  
Дата: 02.03.06 16:55
Оценка: 545 (15) :)
Статья:
Языково-ориентированное программирование: следующая парадигма
Автор(ы): Сергей Дмитриев
Дата: 02.03.2006
Пришло время следующей технологической революции в разработке софта – и становится все очевиднее, какой она должна быть. Новая парадигма программирования – вот она, перед нами. Она еще не вполне сформировалась – разные части известны под разными именами вроде Intentional Programming, MDA, порождающее программирование и т.д. Я предлагаю объединение этих новаторских подходов под общим именем «языково-ориентированного программирования»; данная статья объясняет основные принципы новой парадигмы.


Авторы:
Сергей Дмитриев, Зверёк Харьковский (перевод)

Аннотация:
Пришло время следующей технологической революции в разработке софта – и становится все очевиднее, какой она должна быть. Новая парадигма программирования – вот она, перед нами. Она еще не вполне сформировалась – разные части известны под разными именами вроде Intentional Programming, MDA, порождающее программирование и т.д. Я предлагаю объединение этих новаторских подходов под общим именем «языково-ориентированного программирования»; данная статья объясняет основные принципы новой парадигмы.
FAQ — це мiй ай-кью!
Re: Языково-ориентированное программирование: следующая пара
От: CrazyPit  
Дата: 03.03.06 13:32
Оценка:
Здравствуйте, Сергей Дмитриев, Зверёк Харьковский (перевод), Вы писали:

Тема интересная и актуальная. А когда будет доступна полная версия в электронном виде?
Re: Языково-ориентированное программирование: следующая пара
От: Зверёк Харьковский  
Дата: 16.03.06 21:10
Оценка: 42 (5) :)
Статья в свежей компьютерре на ту же тему:
http://offline.computerra.ru/2006/630/258015/

2rsdn team: может, выложить уже полную версию, а?
FAQ — це мiй ай-кью!
Re[2]: Языково-ориентированное программирование: следующая п
От: fionbio  
Дата: 18.03.06 09:42
Оценка: +5
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>Статья в свежей компьютерре на ту же тему:

ЗХ>http://offline.computerra.ru/2006/630/258015/

ЗХ>2rsdn team: может, выложить уже полную версию, а?


Изучать подход DSL, игнорируя Common Lisp и другие лиспы — всё равно,
что марксизм учить, не читавши Маркса, физику, не зная, кто такой Эйнштейн,
с той мотивацией, что "я умный, сам всё придумаю". Лисп может нравиться или
не нравиться, но в среде лисперов есть огромные наработки на тему DSL,
и проходить мимо них мне кажется, как минимум, неразумным.

http://www.maxkir.com/sd/languageWorkbenches.html#4
Re[2]: Языково-ориентированное программирование: следующая п
От: Зверёк Харьковский  
Дата: 20.03.06 13:51
Оценка:
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>2rsdn team: может, выложить уже полную версию, а?


up. Есть кто живой?
FAQ — це мiй ай-кью!
Re[3]: Языково-ориентированное программирование: следующая п
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 21.03.06 06:57
Оценка:
Здравствуйте, Зверёк Харьковский, Вы писали:

ЗХ>>2rsdn team: может, выложить уже полную версию, а?

ЗХ>up. Есть кто живой?

небольшое уточнение — ты считаешь, что именно этот перевод надо выложить раньше всех остальных не выложенных статей, в том числе из #4 (как бы это объяснить их авторам?) или что вообще надо немедленно выложить все невыложенные в online статьи из журнала?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Языково-ориентированное программирование: следующая п
От: Зверёк Харьковский  
Дата: 21.03.06 20:24
Оценка:
Здравствуйте, Odi$$ey, Вы писали:

ЗХ>>>2rsdn team: может, выложить уже полную версию, а?

ЗХ>>up. Есть кто живой?

OE>небольшое уточнение — ты считаешь, что именно этот перевод надо выложить раньше всех остальных не выложенных статей, в том числе из #4 (как бы это объяснить их авторам?) или что вообще надо немедленно выложить все невыложенные в online статьи из журнала?


Ладно, закроем этот вопрос для ясности. А то флейм выйдет.
FAQ — це мiй ай-кью!
Re: Языково-ориентированное программирование: следующая пара
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 27.03.06 08:57
Оценка: 2 (1)
Здравствуйте, Сергей Дмитриев, Зверёк Харьковский (перевод)

Может в данной теме это и оффтопик, но вот статья о другом подходе к разработке DSL, на основе существующего языка (Ruby, как можно было догадаться ):
Creating DSLs with Ruby

Broadly speaking, there are two ways to create a DSL. One is to invent a syntax from scratch, and build an interpreter or compiler. The other is to tailor an existing general-purpose language by adding or changing methods, operators, and default actions. This article explores using the latter method to build a DSL on top of Ruby.


Взято из Ruby Code &amp; Style.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Языково-ориентированное программирование: следующая пара
От: Didro Россия home~pages
Дата: 07.04.06 17:03
Оценка:
С трудом формализуемые в возбудившемся от количества новых парадигм студенческом мозге родились два вопроса:


Спасибо.
Re[2]: Языково-ориентированное программирование: следующая п
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.04.06 17:56
Оценка: +1 -2
Здравствуйте, Didro, Вы писали:

D>С трудом формализуемые в возбудившемся от количества новых парадигм студенческом мозге родились два вопроса:


Плюнь на парадигмы. А вот возбудившийся мозг — это хорошо.

D>

D>Спасибо.

Пожалуйста.

PS.: Не заморачивайся с "парадигмами". Большие Дяди(TM) пытаются навешать друг другу лапшу на уши, и поднять на этом толику денег. А остальные ведутся на квазинаучную терминологию.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[2]: Языково-ориентированное программирование: следующая п
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.04.06 22:30
Оценка: :)
Здравствуйте, Didro, Вы писали:

D>
  • Насколько описанные в статье (из КТ) идеи соотносятся с идеями, заложенными в R#? Просто читая статью «Ориентация на язык» то тут, то там всплывают аналогии с высказываниями из статьи про R#.

    Идеи пересекаются просто потому что речь идет о разных реализациях одного и того же подхода/прадигым.

    D>
  • Применяется ли сегодня (новая для меня) парадигма\методология КОП(COP, компонентно-ориентированное программирование, в классическом варианте «Component-Oriented Programming = Polymorphism + (Really)Late Binding + (Real) Information Hiding»). И если да, правильно ли считать, что просто КОП находится на другом(более низком) уровне абстракции разработки ПО нежели Метапрограммирование. И что обе эти парадигмы могут дополнять друг друга? Т.е. с помощью инструментов Метапрограммирования мы описываем предметную область, а при генерации кода используем идеи КОП. (сказанное звучит поверхностно, поскольку нет глубокого понимания идей ни той, ни другой парадигмы).

    КОП и МП могут прекрасно существовать вместе и дополнять друг-друга. КОП больше ориентируется на рантайм, а МП на реализацию. Но они имеют общую задачу. Обе парадигмы призваны упростатить разработку сложных систем путем выделения в программах отдельных частей которыми можно оперировать как высокоуровневыми сущьностями.

    МП может помогать реализовывать компонентые идеи. А метакод может быть организован в виде компонентов. Например, правила R# и макросы Nemerle по сути являются компонентами, так как подгружаются компилятором во время его работы.
    ... << RSDN@Home 1.2.0 alpha rev. 637>>
  • Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re: Языково-ориентированное программирование: следующая пара
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 14.04.06 08:29
    Оценка: 1 (1)
    Здравствуйте, Сергей Дмитриев, Зверёк Харьковский (перевод), Вы писали:

    СДЗ>Пришло время следующей технологической революции в разработке софта – и становится все очевиднее, какой она должна быть. Новая парадигма программирования – вот она, перед нами. Она еще не вполне сформировалась – разные части известны под разными именами вроде Intentional Programming, MDA, порождающее программирование и т.д. Я предлагаю объединение этих новаторских подходов под общим именем «языково-ориентированного программирования»; данная статья объясняет основные принципы новой парадигмы.


    ИМХО, сильно бросается в глаза то, что автор отталкивается от Java (язык и стиль использования которого располагают к многословности
    Автор: eao197
    Дата: 31.03.06
    ) и от IDE для Java. Естественно, что в этом случае в качестве недостатков существующего положения дел приводится:

    Программиста ограничивает зависимость от инфраструктуры, которую нельзя изменить – в частности, языков программирования и сред разработки. Если мне нужно некоторое расширение языка, придется подождать, пока его внесет автор. Если мне нужны дополнительные функции в IDE, придется ждать, пока это сделает производитель. Эти-то зависимости и ограничивают мою свободу.

    Что, как следствие, приводит к очевидной необходимости добавления еще одного инструмента, MPS

    А между тем:

    Ruby attacks the productivity problem by making the core elements as expressive as possible, so the programmer doesn't have to rely on IDEs and other tools on top of the language to get stuff done. Few programmers today would even consider doing Java without Eclipse/IDEA or C# without Visual Studio, but lots of programmers happily write Ruby code in good text editors that aren't born with specialization for one particular language, like TextMate for OS X, which is the big hit in Ruby/Rails circles.

    Вместо Ruby, имхо, с таким же успехом можно подставить Nemerle, Lisp или Smalltalk


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[2]: Языково-ориентированное программирование: следующая п
    От: dshe  
    Дата: 14.04.06 09:05
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>А между тем:

    E>

    E>Ruby attacks the productivity problem by making the core elements as expressive as possible, so the programmer doesn't have to rely on IDEs and other tools on top of the language to get stuff done. Few programmers today would even consider doing Java without Eclipse/IDEA or C# without Visual Studio, but lots of programmers happily write Ruby code in good text editors that aren't born with specialization for one particular language, like TextMate for OS X, which is the big hit in Ruby/Rails circles.

    E>Вместо Ruby, имхо, с таким же успехом можно подставить Nemerle, Lisp или Smalltalk

    Smalltalk в этом списке, наверное, лишний. Я не гуру в Smalltalk'е, но вот, что я нашел:
    http://www.smalltalk.ru/articles/smalltalk.html

    Интегрированная среда разработки (IDE)

    Традиционно, среда разработки Smalltalk считается самой продуктивной с точки зрения программирования. С момента появления языка, среда была неотъемлемой его частью. Это была одной из его главных концепций — программирование посредством манипулирования реальными объектами, быстрое прототипирование и эволюционный дизайн.

    ...

    --
    Дмитро
    Re[3]: Языково-ориентированное программирование: следующая п
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 14.04.06 09:17
    Оценка: +1 :)
    Здравствуйте, dshe, Вы писали:

    D>Smalltalk в этом списке, наверное, лишний.


    Smalltalk я упомянул не потому, что им можно пользоваться без IDE (какому-нибудь Smalltalk-еру такое бы предложить ), а потому, что синтаксис и динамическая типизация Smalltalk-а способствуют созданию internal DSL-ей на самом языке Smalltalk.
    См. например: здесь или здесь
    Автор: Andrei N.Sobchuck
    Дата: 18.10.05


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re: Языково-ориентированное программирование: следующая пара
    От: Disappear  
    Дата: 14.04.06 16:15
    Оценка: 4 (1)
    Здравствуйте, Сергей Дмитриев, Зверёк Харьковский (перевод), Вы писали:

    СДЗ>Статья:

    СДЗ>Языково-ориентированное программирование: следующая парадигма
    Автор(ы): Сергей Дмитриев
    Дата: 02.03.2006
    Пришло время следующей технологической революции в разработке софта – и становится все очевиднее, какой она должна быть. Новая парадигма программирования – вот она, перед нами. Она еще не вполне сформировалась – разные части известны под разными именами вроде Intentional Programming, MDA, порождающее программирование и т.д. Я предлагаю объединение этих новаторских подходов под общим именем «языково-ориентированного программирования»; данная статья объясняет основные принципы новой парадигмы.


    СДЗ>Авторы:

    СДЗ> Сергей Дмитриев, Зверёк Харьковский (перевод)

    СДЗ>Аннотация:

    СДЗ>Пришло время следующей технологической революции в разработке софта – и становится все очевиднее, какой она должна быть. Новая парадигма программирования – вот она, перед нами. Она еще не вполне сформировалась – разные части известны под разными именами вроде Intentional Programming, MDA, порождающее программирование и т.д. Я предлагаю объединение этих новаторских подходов под общим именем «языково-ориентированного программирования»; данная статья объясняет основные принципы новой парадигмы.


    Мне кажется, что ЯОП — это слишком "высокий полет", даже в ближайшие 5-8 лет. А вот если спуститься пониже то нас могут ждать такие замечательные парадигмы как СОП (субъектно-ориентированное программирование)
    Все наверное читали эту статью:
    http://offline.computerra.ru/2006/633/262140/

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

    Есть неплохая лекция на эту тему:
    дамы и господа! Герб Саттер
    http://www.parc.com/cms/get_article.php?id=533
    Re: Языково-ориентированное программирование: следующая пара
    От: fionbio  
    Дата: 14.04.06 19:08
    Оценка: 6 (1)
    Часть I. Почему defmacro.
    Часть II. Синдром NIH — бич нашей отрасли.
    Re: Языково-ориентированное программирование: следующая пара
    От: Maxim S. Shatskih Россия  
    Дата: 15.04.06 16:22
    Оценка: 1 (1) -3
    Плохая парадигма. Много лишнего труда — сначала создать язык, а потом на этом языке решить задачу.

    Смесь нескольких языков — это кошмар в поддержке.

    Гуевыми конструкторами и визардами почти ничего серьезного и реально работающего не сделаешь, это давно известно.
    Занимайтесь LoveCraftом, а не WarCraftом!
    Re[2]: Языково-ориентированное программирование: следующая п
    От: Maxim S. Shatskih Россия  
    Дата: 15.04.06 16:24
    Оценка:
    D>
  • Применяется ли сегодня (новая для меня) парадигма\методология КОП(COP, компонентно-ориентированное программирование, в классическом варианте «Component-Oriented Programming = Polymorphism + (Really)Late Binding + (Real) Information Hiding»).

    Да. Это COM.
  • Занимайтесь LoveCraftом, а не WarCraftом!
    Re: Языково-ориентированное программирование: следующая пара
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 15.04.06 22:39
    Оценка: 6 (2) +3 -2
    Здравствуйте, Сергей Дмитриев, Зверёк Харьковский (перевод), Вы писали:

    ИМХО закоренелого консерватора

    Я скажу грубость, но статья откровенно фантазёрская.
    Это конечно очень замечательно брать существующие DSL'и придумывать новые и проч. ит проч., но чрезмерное использование DSL порождает больше проблем чем, пользы. В том числе
    1. Надёжность
      Не секрет, что даже самый простой язык сложно учить. Базовая часть SQL один из самых простых языков, но даже с её помошью можно наворотить весьма и весьма трудноотлаживаемые конструкции. Нельзя создать абсолютно дуракозащищённую систему. Даже самые передовые промышленные языки типа C# имеют свои грабли. Где же гарантия, что DSL'ы будут и достаточно мощными, и лишёнными граблей? А нет такой гарантии. Почему многие используют MFC? Библиотека-то так себе. потому что есть огромный опыт использования и если случилось что-то плохое, то скорее всего ты не первый и известно как с этим бороться. А это, заметьте, в рамках Си++, всего одна библиотека. А если новый язык?
    2. Языки
      В результате, если раньше человек учил один язык и грабли одного языка, то теперь он будет учить 5-6 языков и грабли 5-6 языков. Насколько реально заставить среднего специалиста учить 5-6 языков? А вообще много ли программистов действительно (со всеми граблями) знает больше 3-4 языков?
    3. Диалекты
      Вот много ли специалостов по БД знают синтаксис MS SQL, Oracle, Postgre и MySQL так чтобы набирать и отлаживать код без подглядывания в документацию? А ведь это даже не разные языки. Разные языки это не беда. Хотя Си++ и C# внешне очень похожи, всё же за 5-6 секунд можно понять на каком языке написан код. А вот поймете ли вы написан код на C# 1.0 или C# 2.0 так же быстро? Диалекты это очень серьёзная проблема ведущая к тотальной несовместимости. Взять к примеру Си++. Где гарантия что DSL будучи однажды придуманным не будет меняется? Скорее наоборот, есть гарантия, что он объязательно будет меняться. Хорошо если это приведёт к ошибкам компиляции, а если кто-то решит, что логическая операция NOT должна иметь меньший приоритет, чем AND, потому что так правильнее?
    4. Совместимость
      Между языками нужны мостики. Будет ли это CLR (C# <-> VB.Net), COM (C++ <-> Delphi), ADO (Anything <-> SQL), но этот мостик должен быть. Автор подозрительно умалчивает об этой технической проблеме. А ведь она одна из важнейших. Причём ведь ещё очень хочеться не проиграть в производительности. Ну по крайней мере не очень сильно.
    5. Взаимозаменяемость, обучение
      На каждый используемый язык нужно минимум 2-3 человека которые будут его знать, а иначе проект будет очень зависим от конкретных личностей. А если таких языков 10? Причём если Си++, Java, C# это общепринятые языки, то нанять человека знающего DSL внутреней разработки просто нельзя. Значит увеличивается время ввода в курс дела нового сотрудника. Кроме того DSL внутренней разработки это такая штука у которой есть автор и все остальные. И когда уходит автор, новый автор начинает его переделывать под себя. Внутренние разработки всегда имеют личностный и проектный налёт и очень редко действительно универсальны.
    6. Поддержка
      Поддержка всего этого хозяйства тоже не подарок. Так же как и координация разработки. Кто-то мыслит кортежами, кто-то списками, кто-то массивами, кто-то хешами, потому что в их DSL другого нет. Координировать всё это должен человек-оркестр, который всех понимает и переводит всех для всех. Ну и где такого взять? Вы видели много проектов где логика действительно грамотно разделена между прилодением и БД, так чтобы и поддерживать было легко и производительность высокая? А ведь это всего 2 языка. а если 5?

    В целом к введению в проект новых языков надо относиться очень осторожно. Не надо уподобляться ООН, где большая часть сотрудников это армия переводчиков, которая что-то постоянно синхронно и асинхронно переводит, а большая часть бюджета — их зарплаты.
    Должны быть очень серьёзные причины чтобы заставлять людей учить новый язык (я думаю изучение языка программирования по сложности сопоставимо с человеческим языком). У нас, помимо языка общего назначения — русского, есть не так уж много DSL'ей. Математические знаки (физика пользуется математическими знаками) и химические. Других я и не припомню. Если нам в жизни хватило всего 3х языков, зачем их плодить в программировании и называть это прогрессом, когда вместо разработки продукта у нас будет вавилонское столпотворение?
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[2]: Языково-ориентированное программирование: следующая п
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 15.04.06 23:54
    Оценка: +2
    Здравствуйте, adontz, Вы писали:

    Покури на досуге Nemerle и уверен, что твое мнение резко изменится.

    Что до DSL-ей, то ты их все равно будешь изобретать и использовать так как без них сложные задачи практически не решаются. Вопрос только в том будут ли это чистые и интуитивно понятные решения или эмуляция (например, на базе объектов) кривыми средствами устаревшего языка.
    ... << RSDN@Home 1.2.0 alpha rev. 637>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.