URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 51700
[ Назад ]

Исходное сообщение
"Вышел релиз макропроцессора GNU M4 1.4.13"

Отправлено opennews , 03-Апр-09 18:21 
"GNU M4 1.4.13 released (stable) (http://lists.gnu.org/archive/html/m4-announce/2009-04/msg000...)" - вышел релиз макропроцессора GNU M4 1.4.13 (http://www.gnu.org/software/m4/). В новой версии проведена работа по увеличению производительности, добавлена опция "--with-syscmd-shell" для указания shell-интерпретатора, отличного от /bin/sh, из gnulib унаследован ряд патчей для улучшения портируемости.

URL: http://lists.gnu.org/archive/html/m4-announce/2009-04/msg000...
Новость: https://www.opennet.ru/opennews/art.shtml?num=21083


Содержание

Сообщения в этом обсуждении
"Вышел релиз макропроцессора GNU M4 1.4.13"
Отправлено ixrws , 03-Апр-09 18:21 
Прекрасно, увеличение производительности для m4 не помешает. Как раз вчера начал клепать набор собственных макросов для проекта, увлёкся:) Долгой жизни проекту!

"Вышел релиз макропроцессора GNU M4 1.4.13"
Отправлено Аноним , 04-Апр-09 08:45 
русское хау-ту или быстрый старт есть по м4?

"Вышел релиз макропроцессора GNU M4 1.4.13"
Отправлено ixrws , 04-Апр-09 09:00 
>русское хау-ту или быстрый старт есть по м4?

http://lib.custis.ru/index.php/M4
Самый что ни на есть быстрый старт, но лучше конечно читать доки, в том же формате info. Хорошая и полная документация, удобно работающая невылезая из emacs:)


"Вышел релиз макропроцессора GNU M4 1.4.13"
Отправлено Аноним , 04-Апр-09 09:30 
Спасибо большое. :-)

"Вышел релиз макропроцессора GNU M4 1.4.13"
Отправлено northbear , 04-Апр-09 22:47 
А для чего вы его используете, если не секрет?

Я в свое время с помощью этой дряни генерил конфиги для sendmail'а. Синтаксис m4 это какой-то наркотический бред. Одни строки обзначенные апострофами разной направленности чего стоят. Зачем нужно было такое делать, я до сих пор не могу понять.
По началу я думал что это они сделали для увеличения скорости синтаксичекого анализа. Но как-то попробовал прикинуть код, оказалось от этого ничего быстрей не становится...


"Вышел релиз макропроцессора GNU M4 1.4.13"
Отправлено ixrws , 05-Апр-09 12:12 
Насчёт наркотиков, бреда и опострафов. Хм, ничего такого бредового не заметил, всё таки надо понимать, что это мощьнейший препроцессор, очень гибкий.
Строки не обозначаются разными опострофами, сделайте info m4 и там написано, что это просто по дефолту, они могут обозначаться любыми символами, с помощью changequote(`[',`]') - это как раз пример из мануала. Можно потом уже писать foo([string]) .
Не вдавался в глубокие познания относительно причин этого, но полагаю что это удобно для создания действительно сложных макросов и их использования, а также для устранения конфликтов с тем, как строки обрабатываются в конкретных языках программирования.
Ну и немного о синтаксисе, по мне так удобный макропроцессор. Если грамотно пользоваться отступами и переводами строк, то и макросы получаются удобочитаемыми. Я правда не работал с оригинальным m4 и не знаю насколько gnu m4 сильно отличается от него, молод просто, чтобы застать его предка:) Но думаю, что немного неудобств внесено именно расширением m4 до его нынешнего состояния. Но если серьёзно, то синтаксис по мне так удобен, прост, а идеология напоминает идеологию функциональных языков, типо lisp, что особо интересно:)

Теперь насчёт использования. Ну в основном использую его как замену Сишному препроцессору на сложных макросах. Поскольку пишу в основном на С, то хотелось найти такой препроцессор, который бы позволял писать нетривиальные макросы с разбором и трансформацией параметров. Чтобы возможно было его использовать для упрощения обращения к некоторым многословным конструкциям. В итоге нашёл 2а применения:
-создание сложных макросов с вариантной подстановкой и прочими прелестями
-создание макросов для упрощения взаимодействия со всякими монстрами, типо gobject и dbus.
Фактически, работая сейчас над maps приложеним для freerunner получается упрощённая прослойка для dbus. Где допустим вызовы: coal_func(`coal_obj',`create',`DBUS_PATH_DBUS',`DBUS_INTERFACE_DBUS', object)
int out;
coal(`object.RequestName("org.foo",2):(&out)')
Означают создание объекта по интерфейсу и обращение к методу RequestName.
В общем некий такой m4 биндинг к libdbus:) Нечто подобное делаю и для gobject, но там в основном по мелочи и чисто для себя. А вот dbus биндинг стараюсь делать более-менее общим, чтобы возможно он был полезен и другим.
Это конечно подобно использованию прокси в gobject, но затея заключается в том, чтобы как можно более упростить доступ к объектам, исключая многословие и как можно меньше делать в рантайме, чтобы уменьшить оверхед. Есть ещё такой небольшой гол, как асинхронность, thread safe и вариантость с присутствием или отсутствием основного цикла. Но это по мере работы над gps проектом. Потому как теория это одно, а вот опробировать на приложении с несколькими рабочими потоками и асинхронными вызовами - придётся:)
Во что этот биндинг выльется через месяц-два сказать сложно, первоначальная затея была польностью реализовать xml-интроспекция парсер на perl + парсер на том же перле для С файлов, реализующий собственный язык-надстройку, типо objective-c. Но всё упростилось до одного xml парсера на перле + m4 макросов для С. Ну а как оно дальше будет удобно или нет, так оно и будет развиваться, в любом случае m4 остаётся приоритетным языком для макросов, уж очень он удобен.
PS: будучи гибким препроцессором, m4 просто даёт возможность писать мощьнейшие макросы, позволяя программисту избавится от значителного рантайма и реже править заголовочные файлы, перекладывая работу на регекспы и генерацию макросов по ним. А не вручную править зависимые от чего-бы то ни было макросы. Ну конечно, применений тьма, оно понятно. Но пожалуй autotools и мощьный аналог шаблонам, по крайней мере для меня, это главное:)
ПИЭС: m4 такое же средство как perl например, в руках админа, программиста и тд, оно позволяет больше времени сидеть в кресле и попивать чаёк, нежели истязать глаза до крови перед монитором:)


"Вышел релиз макропроцессора GNU M4 1.4.13"
Отправлено Vasdi , 26-Июл-09 10:59 
На счёт `кавычек'. Пример из документации:

define(`foo', `This is macro `foo'.')
=>
foo
=> This is macro foo.

Т.е. с помощью несимметричных кавычками можно показать `подстроку' внутри строки.