Макроязык и DSL - это синонимы?
От: Аноним  
Дата: 09.07.08 06:30
Оценка:
Если нет, то в чем разница?

09.07.08 13:14: Перенесено модератором из 'C/C++' — Кодт
Re: Макроязык и DSL - это синонимы?
От: jazzer Россия Skype: enerjazzer
Дата: 09.07.08 06:57
Оценка: +2 -1
Здравствуйте, Аноним, Вы писали:

А>Если нет, то в чем разница?


Во-первых, это разные понятия, преследующие разные цели.
Макроязык — это язык, созданный для генерации программ, и обычно он не является частью языка, не знает о языке ничего, кроме его синтаксиса, необходимого для лексического анализа, и вообще может генерить любой текст на любом языке (и частенько предоставляется в виде отдельной программы, как, например, препроцессоры срр и m4).
Хотя есть и макроязыки, встроенные в язык, например, Немерле.

DSL — это язык, натурально подходящий для описания конкретной задачи (domain), но при этом синтаксис этого языка приводится к синтаксису языка-хозяина, так чтобы программа, написанная на DSL, в то же время являлась корректной программой на языке-хозяине.

Таким образом, вполне можно реализовать DSL, используя макроязык, если он есть и его возможностей достаточно, но частенько их недостаточно (в смысле, что DSL получается практически нечитабельным) и используются еще и другие возможности, например, перегрузка операторов.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[2]: Макроязык и DSL - это синонимы?
От: Аноним  
Дата: 09.07.08 07:35
Оценка:
В книге "Основы COM" автор Дейл Роджерсон называет VB макроязыком, я вот и хотел узнать насколько это правильно.
Если использовать Ваше определение макроязыка, то VB трудно назвать макроязыком.

Автоматизация облегчает интерпретируемым языкам и макроязыкам доступ к компонентам СОМ, а также
облегчает написание самих компонентов на этих языках. В Автоматизации делается упор на проверку типов во
время выполнения за счет снижения скорости выполнения и проверки типов во время компиляции. Но если
Автоматизация проста для программиста на макроязыке, то от разработчика на С++ она требует гораздо больше
труда. Во многих случаях Автоматизация заменяет код, генерируемый компилятором, кодом, который написан
разработчиком.
....
Вам придется побеспокоиться об этом при разработке макроязыка для своего приложения. Макроязык будет
гораздо мощнее, если сможет использовать компоненты СОМ. Но каким образом макроязык получит смещения
функций в vtbl? Я сомневаюсь, что Вы захотите писать синтаксический анализатор С++ для разбора
заголовочного файла интерфейса СОМ.
...
Интерфейс IDispatch, как и вся Автоматизация, разрабатывался для Visual Basic — чтобы его можно было
использовать для автоматизации таких приложений, как Microsoft Word и Microsoft Excel. В конце концов из
Visual Basic вырос Visual Basic for Applications — язык для Microsoft Office. Подмножество Visual Basic for
Applications — Visual Basic Scripting Edition (VBScript) — можно использовать для автоматизации элементов
управления на страницах Web. Версия 5.0 Microsoft Developer Studio использует VBScript в качестве своего
макроязыка.



Здравствуйте, jazzer, Вы писали:

J>Здравствуйте, Аноним, Вы писали:


А>>Если нет, то в чем разница?


J>Во-первых, это разные понятия, преследующие разные цели.

J>Макроязык — это язык, созданный для генерации программ, и обычно он не является частью языка, не знает о языке ничего, кроме его синтаксиса, необходимого для лексического анализа, и вообще может генерить любой текст на любом языке (и частенько предоставляется в виде отдельной программы, как, например, препроцессоры срр и m4).
J>Хотя есть и макроязыки, встроенные в язык, например, Немерле.

J>DSL — это язык, натурально подходящий для описания конкретной задачи (domain), но при этом синтаксис этого языка приводится к синтаксису языка-хозяина, так чтобы программа, написанная на DSL, в то же время являлась корректной программой на языке-хозяине.


J>Таким образом, вполне можно реализовать DSL, используя макроязык, если он есть и его возможностей достаточно, но частенько их недостаточно (в смысле, что DSL получается практически нечитабельным) и используются еще и другие возможности, например, перегрузка операторов.
Re[3]: Макроязык и DSL - это синонимы?
От: jazzer Россия Skype: enerjazzer
Дата: 09.07.08 07:59
Оценка:
Здравствуйте, Аноним, Вы писали:

А>В книге "Основы COM" автор Дейл Роджерсон называет VB макроязыком, я вот и хотел узнать насколько это правильно.

А>Если использовать Ваше определение макроязыка, то VB трудно назвать макроязыком.

Здесь речь не о текстовых/языковых макросах внутри языка программирования, а о макросах как они существуют в ворде, скажем, т.е. фактически скриптование приложения (canned commands). В этом смысле он, безусловно, является DSL, так как область применения явно определена: данное приложение.

Такой макроязык никакого отношения к языку, на котором написано само приложение, не имеет.

Вообще, нужно различать, когда мы имеем в виду язык для предметной области (DSL), не связанный ни с каким другим языком, и он же, связанный с каким-то языком-хозяином (в таких случаях его называют встроенным (embedded) DSL).

И в каждый момент надо понимать, о каком именно DSL мы говорим.

Хотя оба эти термина можно понимать в очень широком смысле, например, библиотека с хорошим интерфейсом формирует своего рода встроенный DSL для выполнения задач, для которых она предназначена.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[3]: Макроязык и DSL - это синонимы?
От: Кодт Россия  
Дата: 09.07.08 08:32
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>В книге "Основы COM" автор Дейл Роджерсон называет VB макроязыком, я вот и хотел узнать насколько это правильно.

А>Если использовать Ваше определение макроязыка, то VB трудно назвать макроязыком.

<...цитата...>

Это либо косяк переводчика, либо каша в голове Роджерсона. Вместо слова "макроязык" следует читать "скриптовый язык".
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[4]: Макроязык и DSL - это синонимы?
От: jazzer Россия Skype: enerjazzer
Дата: 09.07.08 08:36
Оценка:
Здравствуйте, Кодт, Вы писали:

А>>В книге "Основы COM" автор Дейл Роджерсон называет VB макроязыком, я вот и хотел узнать насколько это правильно.

А>>Если использовать Ваше определение макроязыка, то VB трудно назвать макроязыком.

К>Это либо косяк переводчика, либо каша в голове Роджерсона. Вместо слова "макроязык" следует читать "скриптовый язык".


Ну вот в ворде есть макросы? Есть, даже в меню пункт специальный.
Язык для их написания есть? Есть. Стало быть...

P.S. На самом деле, я не уверен, что знаю все тонкости значения слова макрос.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[5]: Макроязык и DSL - это синонимы?
От: Кодт Россия  
Дата: 09.07.08 09:43
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Ну вот в ворде есть макросы? Есть, даже в меню пункт специальный.

J>Язык для их написания есть? Есть. Стало быть...

Так ведь это макро- (т.е. укрупнённые) команды предметной области — исполняющей системы ворда.
Когда предметной областью является некий язык, то язык макросов называется макроязыком.
В остальных же случаях это обычно называется языком сценариев — сиречь, скриптов.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re[6]: Макроязык и DSL - это синонимы?
От: jazzer Россия Skype: enerjazzer
Дата: 09.07.08 09:46
Оценка:
Здравствуйте, Кодт, Вы писали:

К>Здравствуйте, jazzer, Вы писали:


J>>Ну вот в ворде есть макросы? Есть, даже в меню пункт специальный.

J>>Язык для их написания есть? Есть. Стало быть...

К>Так ведь это макро- (т.е. укрупнённые) команды предметной области — исполняющей системы ворда.

К>Когда предметной областью является некий язык, то язык макросов называется макроязыком.
К>В остальных же случаях это обычно называется языком сценариев — сиречь, скриптов.

а, т.е. терминологический водораздел проходит по линии "язык макросов" / "макроязык"...

понятно, но неочевидно
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: Макроязык и DSL - это синонимы?
От: Severn Россия  
Дата: 09.07.08 10:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Если нет, то в чем разница?

Ну что не синонимы, так это точно. Например VBA — его область применения достаточно узко ограничена объектной моделью офиса. Поэтому можно сказать, что VBA — это DSL. Но никак не наоборот.
Re[2]: Макроязык и DSL - это синонимы?
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 09.07.08 11:58
Оценка: :)
Здравствуйте, jazzer, Вы писали:

J>DSL — это язык, натурально подходящий для описания конкретной задачи (domain), но при этом синтаксис этого языка приводится к синтаксису языка-хозяина, так чтобы программа, написанная на DSL, в то же время являлась корректной программой на языке-хозяине.


Поправка: это только embedded или internal DSL. Есть и другие DSL, например makefile.
Re[2]: Макроязык и DSL - это синонимы?
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.08 12:22
Оценка:
Здравствуйте, Severn, Вы писали:

А>>Если нет, то в чем разница?

S>Ну что не синонимы, так это точно. Например VBA — его область применения достаточно узко ограничена объектной моделью офиса. Поэтому можно сказать, что VBA — это DSL. Но никак не наоборот.

VBA — это самый что ни на есть язык общего назначения VB 6 с набором библиотек и средой заточенной под автоматизацию десктоп-приложений (даже не офиса).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Макроязык и DSL - это синонимы?
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.08 12:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Если нет, то в чем разница?


Нет. В некоторых приложениях мкроязыки могут быть ДСЛ-ями, но в общем случае это не верно. Например, BNF с расширениями применяемый в YACC-ах — это ДСЛ. Или формат конфигов некоторых приложений тоже ДСЛ.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Макроязык и DSL - это синонимы?
От: Severn Россия  
Дата: 09.07.08 12:47
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Severn, Вы писали:


А>>>Если нет, то в чем разница?

S>>Ну что не синонимы, так это точно. Например VBA — его область применения достаточно узко ограничена объектной моделью офиса. Поэтому можно сказать, что VBA — это DSL. Но никак не наоборот.

VD>VBA — это самый что ни на есть язык общего назначения VB 6 с набором библиотек и средой заточенной под автоматизацию десктоп-приложений (даже не офиса).


"Заточен под..." означает, что имеет ограниченную область применения.
Если приведешь осмысленные примеры использования VBA вне офиса, студии, автокада или какого-нибудь другого автоматизируемого контекста, то соглашусь, что VBA — язык общего назначения.
Re[4]: Макроязык и DSL - это синонимы?
От: VladD2 Российская Империя www.nemerle.org
Дата: 09.07.08 14:38
Оценка:
Здравствуйте, Severn, Вы писали:

VD>>VBA — это самый что ни на есть язык общего назначения VB 6 с набором библиотек и средой заточенной под автоматизацию десктоп-приложений (даже не офиса).


S>"Заточен под..." означает, что имеет ограниченную область применения.


Не то выделил. Надо было захватить "с набором библиотек и средой", потому как слова "заточенной под автоматизацию десктоп-приложений" относятся только к ним.

S>Если приведешь осмысленные примеры использования VBA вне офиса, студии, автокада или какого-нибудь другого автоматизируемого контекста, то соглашусь, что VBA — язык общего назначения.


Я уже говорил, что VBA == VB 6. Никаких отличий, ну разве что, кроме невозможности создать исполняемый файл.

ДСЛ-ем может являеться только язык. Если на языке можно написать любую задачу, то это язык общего назначения. Точка. Обсуждать тут нечего.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Макроязык и DSL - это синонимы?
От: LaptevVV Россия  
Дата: 09.07.08 14:52
Оценка:
Здравствуйте, jazzer, Вы писали:

J>P.S. На самом деле, я не уверен, что знаю все тонкости значения слова макрос.

Изначально макросы выполняли только текстовую подстановку. Потом изобрели синтаксические макросы — тоже подстановка, но с проверкой синтаксиса — это шаблоны в С++ именно такие. Потом изобрели вычислительные макросы — inline-функции в С++ именно они.
То есть суть макросов — подстановка.
А скриптовый язык, как ни крути, интерпретируется. С этой точки зрения макросы в офисе — вовсе не макросы, а все же скриптовый язык.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re: Макроязык и DSL - это синонимы?
От: LaptevVV Россия  
Дата: 09.07.08 14:56
Оценка: :)
Здравствуйте, Аноним, Вы писали:

А>Если нет, то в чем разница?

Что такое DSL — пока плохо себе представляю.
А вот о макросах могу точно сказать. Основная суть макросов — подстановка (макроопределения на место макровызова). Сначала была только текстовая, потом синтаксическая (шаблоны в С++), потом вычислительная (inline-функции).
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[5]: Макроязык и DSL - это синонимы?
От: Severn Россия  
Дата: 09.07.08 15:17
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Severn, Вы писали:


VD>>>VBA — это самый что ни на есть язык общего назначения VB 6 с набором библиотек и средой заточенной под автоматизацию десктоп-приложений (даже не офиса).


S>>"Заточен под..." означает, что имеет ограниченную область применения.


VD>Не то выделил. Надо было захватить "с набором библиотек и средой", потому как слова "заточенной под автоматизацию десктоп-приложений" относятся только к ним.


S>>Если приведешь осмысленные примеры использования VBA вне офиса, студии, автокада или какого-нибудь другого автоматизируемого контекста, то соглашусь, что VBA — язык общего назначения.


VD>Я уже говорил, что VBA == VB 6. Никаких отличий, ну разве что, кроме невозможности создать исполняемый файл.


Скажем, проект на VB6 на 100к строк кода, БД c нескольким десятком таблиц и нехилой логикой по расчету статистики. Следуя твоей логике, такой проект можно с равным успехом реализовать на VBA и на VB6.

Я согласен, что язык позволяет писать достаточно сложные конструкции, но так или иначе он всегда используется в контексте объектной модели приложения. Как следствие, типичная программа на VBA — оперирование объектами этих приложение. Как следствия, такая программа — domain specific.

VD> Если на языке можно написать любую задачу, то это язык общего назначения.

Язык общего назначения, это тот, на котором _действительно_ пишут любые задачи.
Матлаб скажем тоже довольно сложный язык. Так что теперь, бизнес приложения на нем ваять?
VD>Точка. Обсуждать тут нечего.

Патамучта

Вообще, можно долго спорить о том, является ли DSLем VBA, JScript, XSLT или что еще. Думаю, это не так важно. Лишь бы инструмент исопльзовался по назначению.
Re[2]: Макроязык и DSL - это синонимы?
От: Lloyd Россия  
Дата: 09.07.08 17:28
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>А вот о макросах могу точно сказать. Основная суть макросов — подстановка (макроопределения на место макровызова). Сначала была только текстовая, потом синтаксическая (шаблоны в С++), потом вычислительная (inline-функции).


А как же Lisp?
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[2]: Макроязык и DSL - это синонимы?
От: Кодт Россия  
Дата: 09.07.08 17:36
Оценка:
Здравствуйте, LaptevVV, Вы писали:

LVV>Что такое DSL — пока плохо себе представляю.


Ну, дословно: domain-specific language. Язык, заточенный под предметную область. В противовес языкам общего назначения.

LVV>А вот о макросах могу точно сказать. Основная суть макросов — подстановка (макроопределения на место макровызова). Сначала была только текстовая, потом синтаксическая (шаблоны в С++), потом вычислительная (inline-функции).


"Macros" — мн.ч. от "macro", которое, в свою очередь, сокращение от "macro instruction".
Хоть википедия и не последняя инстанция, но всё же: http://en.wikipedia.org/wiki/Macro_%28computer_science%29
Даёт обзор разных смыслов.
... << RSDN@Home 1.2.0 alpha rev. 655>>
Перекуём баги на фичи!
Re: Макроязык и DSL - это синонимы?
От: palm mute  
Дата: 09.07.08 17:50
Оценка: +1
Здравствуйте, Аноним, Вы писали:

А>Если нет, то в чем разница?


Разница в том, что первое иногда используется для построения второго.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.