Автор Тема: [pure С] Макросы как инструмент построения eDSL  (Прочитано 68697 раз)

Илья Ермаков

  • Full Member
  • ***
  • Сообщений: 177
    • Просмотр профиля
    • OberonCore
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #60 : Апрель 10, 2011, 08:43:47 am »
Прошу прощения, это действительно немножечко другое, нежели сопрограммы, хотя реализация схожа, можно переделать.
По вопросу сопрограмм и оптимизации компилятором концевых вызовов (как варианте реализации) я писал на ОберонКоре, ветка с анализом проблемы GOTO. Позже дам ссылку, когда у местного провайдера кончатся проблемы.

Peter Almazov

  • Sr. Member
  • ****
  • Сообщений: 482
    • Просмотр профиля
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #61 : Апрель 10, 2011, 09:48:27 am »
Никакой поддержки ОС не требуется, легковесный библиотечный параллелизм, поскольку стек один, можно иметь очень много параллельных задач.
Кстати, в моём биосном примере стек тоже один.

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #62 : Апрель 11, 2011, 04:33:16 am »
На выходных мы с сыном решили переписать пример Vlad'а на КП/Блэкбокс, в учебно-тренировочных целях, так сказать. К тому же, сын выступил в качестве консультанта по языку С++, поскольку сам я с этим языком не дружу.  :)

Полной аналогии с исходным примером конечно нет, но такой цели и не ставилось. Комментировать особо не буду, и так всё видно.

Илья Ермаков

  • Full Member
  • ***
  • Сообщений: 177
    • Просмотр профиля
    • OberonCore
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #63 : Апрель 11, 2011, 07:43:42 am »
Обещал ссылку в тему сопрограмм.

Вот такая веточка у нас есть:
http://forum.oberoncore.ru/viewtopic.php?f=86&t=3237
И в ней я высказывал свои мысли про концевой вызов процедур:
http://forum.oberoncore.ru/viewtopic.php?p=59493#p59493

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #64 : Апрель 11, 2011, 11:00:53 am »
Мысли это хорошо, а реализацию то покажешь? :-)
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #65 : Апрель 11, 2011, 03:59:03 pm »
Полной аналогии с исходным примером конечно нет, но такой цели и не ставилось. Комментировать особо не буду, и так всё видно.

Да, он достаточно аналогичен. Без глобальных переменных :)

Илья Ермаков

  • Full Member
  • ***
  • Сообщений: 177
    • Просмотр профиля
    • OberonCore
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #66 : Апрель 11, 2011, 07:46:37 pm »
Мысли это хорошо, а реализацию то покажешь? :-)

Про концевой вызов - нету реализации; т.к. я не занимаюсь пока что вещами, требующими модификации компилятора.

А про лёгкий параллелизм - не покажу :), а вот если кому реально надо, для реальной задачи, готов в личке рассказать и показать (если человек объяснит, опять же, зачем надо).
А для праздного любопытства я не стану выделять эту реализацию из общего каркаса, время публикации которого ещё не пришло.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #67 : Апрель 11, 2011, 08:10:26 pm »
Тогда к чему было это упоминать? Ладно, Реализацию не можешь показать, тогда покажи хотя бы пример использования например применительно к обсуждаемой задаче. Тут ни выделять из каркаса ничего не надо, ни публиковать. Просто пример использования. Код.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

Илья Ермаков

  • Full Member
  • ***
  • Сообщений: 177
    • Просмотр профиля
    • OberonCore
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #68 : Апрель 11, 2011, 10:50:33 pm »
IMPORT Tasks;

PROCEDURE Task (IN par: ANYREC);
BEGIN
  WITH par: ... DO
    ...step1...;
    Tasks.Pass;
    ...step2...;
    Tasks.Pass;
    ...step3...
  END
END Task;

PROCEDURE X;
  VAR par: ...;
BEGIN
  par.. := ...
  Tasks.Begin(Task, par)
END X;

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #69 : Апрель 12, 2011, 04:14:29 am »
Да, он достаточно аналогичен. Без глобальных переменных :)
Должен сказать, что цели "избавиться от глобальных переменных" нами не ставилось. Ваш подход к решению привёл к тому, что глобальные переменные исчезли как бы нечаянно.  :)

Хочу отметить, что не смотря на то что КП несравненно меньше и проще языка С++, он тем не менее оказался достаточно выразительным и пригодным для такого применения.

Из недостатков (или особенностей, которые вызвали неудобство) могу отметить следующие:
  • Отсутствие полноценных конструкторов заставляет эмулировать их при помощи довольно корявого вызова обычного метода сразу после NEW.
  • Отсутствие шаблонов классов вызвает затруднение при описании вектора, который может состоять из однотипных элементов абсолютно любого типа (в примере описан вектор, который может состоять только из процедур).

Про достоинства сильно "трещать" не буду, ибо пользы от этого мало.  :D

vlad

  • Hero Member
  • *****
  • Сообщений: 1391
    • Просмотр профиля
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #70 : Апрель 12, 2011, 05:10:35 am »
Да, он достаточно аналогичен. Без глобальных переменных :)
Должен сказать, что цели "избавиться от глобальных переменных" нами не ставилось.

Просто глобальные переменные - это лакмусовая бумажка :) Показывающая будущие проблемы в сопровождении. Поэтому я привык их избегать любой ценой.

Хочу отметить, что не смотря на то что КП несравненно меньше и проще языка С++, он тем не менее оказался достаточно выразительным и пригодным для такого применения.

Выразительностью я бы не стал особо восхищаться... А то, что КП пригоден - никто не сомневался.

Из недостатков или особенностей, которые вызвали неудобство) могу отметить следующие:
  • Отсутствие полноценных конструкторов заставляет эмулировать их при помощи довольно корявого вызова обычного метода сразу после NEW.

Оно не просто коряво. Оно концептуально неверно и ведет к граблям. Используйте фабрики.

  • Отсутствие шаблонов классов вызвает затруднение при описании вектора, который может состоять из однотипных элементов абсолютно любого типа (в примере описан вектор, который может состоять только из процедур).

Да, подобные велосипеды не добавляют выразительности ;) И заставляют идти по пути глобальных переменных :)

DIzer

  • Гость
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #71 : Апрель 12, 2011, 06:29:47 am »

Оно не просто коряво. Оно концептуально неверно и ведет к граблям. Используйте фабрики.

Да фабрики хороши - одна проблема - не гарантируют создания экземпляра  ИСКЛЮЧИТЕЛЬНО по ЗАДАННЫМ правилам или я ошибаюсь?.

igor

  • Sr. Member
  • ****
  • Сообщений: 438
    • Просмотр профиля
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #72 : Апрель 12, 2011, 07:55:53 am »
Всё-таки нужно различать прикладной код и библиотечный.

Если я пишу какую-либо прикладную программу, в которой нужно однократно решить изначальную задачку (см. самое первое сообщение Geniepro в теме), то лучшим решением будет то, которое я предложил в начале.

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

Решение, основанное на использовании макросов, мне откровенно не нравится (концептуально, а не по исполнению!). Что-то типа библиотеки для ленивых. Но говорю это с большой долей субъективизма.

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #73 : Апрель 12, 2011, 09:39:52 am »

Оно не просто коряво. Оно концептуально неверно и ведет к граблям. Используйте фабрики.

Да фабрики хороши - одна проблема - не гарантируют создания экземпляра  ИСКЛЮЧИТЕЛЬНО по ЗАДАННЫМ правилам или я ошибаюсь?.
Почему же? Они именно для этого и есть, то есть для создания объектов по жестким заданным правилам.
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"

valexey

  • Administrator
  • Hero Member
  • *****
  • Сообщений: 1990
    • Просмотр профиля
Re:[pure С] Макросы как инструмент построения eDSL
« Ответ #74 : Апрель 12, 2011, 09:42:09 am »
Решение, основанное на использовании макросов, мне откровенно не нравится (концептуально, а не по исполнению!). Что-то типа библиотеки для ленивых. Но говорю это с большой долей субъективизма.
Не нравится сама идея создания и использования eDSL, или же реализация её посредством макросов?
"но сейчас, чтобы компенсировать растущую мощность компьютеров, программисты используют фреймворки"