LINUX.ORG.RU

m4 используется в ряде проектов OSS (не помню в каких - видел года 3 назад). При желании можно на CL простой препроцессор наваять - макросы на CL генерируют код на С. Все зависит от конкретной задачи.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

> При желании можно на CL простой препроцессор наваять - макросы на CL генерируют код на С

а можно примерчик? как это будет выглядеть? просто не представляю себе смесь C и CL.

k_andy ★★★
()
Ответ на: комментарий от k_andy

а на тему gpp кто-то что-то сказать может?

cvv ★★★★★
() автор топика
Ответ на: комментарий от k_andy

>просто не представляю себе смесь C и CL.

кстати никто не говорил о смешивании Ц и ЦЛ ;) препроцессор написан -на- ЦЛ, а в самом Сишном коде могут быть метаданные любого характера, на основе которых генерится сишный код.

Pi ★★★★★
()
Ответ на: комментарий от Pi

Ну у меня были мысли о генерации объявлений верхнего уровня, что-то типа:

// типа ФНЧ с f_ср = 0.3
@! my_filter = (low-pass-filter 0.3)

low-pass-filter выдает 

// состояние фильтра
struct my_filter_state {
  double[n] xs;
  double[m] ys;
};

double my_filter(my_filter_state* st, double x)
{
 // вычисляет рез-т
}

а реализуется она примерно так:

(defun low-pass-filter (name f_cp)
  (qs "
$(generate-filter-state <каие-нить параметры>)

double $name (my_filter_state* st, double x)
{
 // вычисляет рез-т
}
"))

что-то типа того.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Такой DSL позволит не писать врчную реализации цифровых фильтров и не использовать динамическое распределение памяти (а также вычисление коэффициентов полинома выполнить во время препроцессирования). Вообщем может быть полезно при программировании вских там AVR'ок.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

> ...что-то типа того.

Всё! Пропали выходные... буду думать :)

k_andy ★★★
()
Ответ на: комментарий от k_andy

Я смешивал Схему и Си. Используя libtcc для динамической компиляции сгенерённого сишного кода. Руль!

anonymous
()

Есть очень забавная штука - openc++. По сути это применение идей заложенных в лиспе к Си++. Выглядит кривовато и до практического применения пока далеко, но поиграться с ним можно.

Также для задач автоматической генерации всякого рода wrapper-ов и прослоек можно обратить внимание на стандартные опции -fdump-* в gcc. Это, конечно, не препроцессор, но иногда бывает полезно.

anonymous
()
Ответ на: комментарий от anonymous

У openc++ один очень существенный недостаток в design - метапрограммы пишутся на C++.

Есть еще MetaC - помнится это аналог defmacro для C, метапрограммы пишутся на С.

А тот подход, который я описал, годится для применения с любыми языками.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

> И еще поправка - идей, заложенных не в Lisp'е, а в CLOS (метаклассы в смысле) и Smalltalk.

Это не так. В OpenC++ можно трансформировать любые грамматические конструкции программы. MOP это одно из возможных применений.

anonymous
()
Ответ на: комментарий от Begemoth

> У openc++ один очень существенный недостаток в design - метапрограммы пишутся на C++.

Вприницпе можно прикрутить любые биндинги.

> А тот подход, который я описал, годится для применения с любыми языками.

В твоем подходе отсутствует полный доступ к окружению компилятора/интерпретатора. Например, в точке вызова макроса x я не могу определить была ли ранее определена функция y. Это тоже не есть гуд.

anonymous
()
Ответ на: комментарий от Begemoth

>Есть еще MetaC - помнится это аналог defmacro для C, метапрограммы пишутся на С.

имеется ввиду defmacro с LISP-a??

cvv ★★★★★
() автор топика
Ответ на: комментарий от anonymous

> Это не так. В OpenC++ можно трансформировать любые грамматические конструкции программы. MOP это одно из возможных применений.

Упс. Забыл.

> В твоем подходе отсутствует полный доступ к окружению компилятора/интерпретатора. Например, в точке вызова макроса x я не могу определить была ли ранее определена функция y. Это тоже не есть гуд.

Согласен. Я и ставил такой цели.

Begemoth ★★★★★
()
Ответ на: комментарий от cvv

>Есть еще MetaC

насколько я понял он пока только альфа. мне интересны проверенные временем решения.

cvv ★★★★★
() автор топика
Ответ на: комментарий от anonymous

>Также для задач автоматической генерации всякого рода wrapper-ов и прослоек можно обратить внимание на стандартные опции -fdump-* в gcc.

>Это, конечно, не препроцессор, но иногда бывает полезно.

почитал доки. немогу понять каким боком это может быть полезно

cvv ★★★★★
() автор топика
Ответ на: комментарий от cvv

> почитал доки. немогу понять каким боком это может быть полезно

Например можно использовать для тех же задач что и Simplified Wrapper and Interface Generator (SWIG).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.