The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Индекс форумов
Составление сообщения

Исходное сообщение
"Вышел релиз макропроцессора 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 например, в руках админа, программиста и тд, оно позволяет больше времени сидеть в кресле и попивать чаёк, нежели истязать глаза до крови перед монитором:)

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру