Как я начал писать макросы для Rust на Gluon

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Во многих языках есть специальный механихм для кодогенерации - макросы. Иногда из реализуют на отдельном достаточно примитивном языке, основанном на простой подстановке текста (препроцессоры PL/I и C, m4), но даже в таком варианте удается делать интересные и полезные вещи. Другой популярный вариант - макросы реализуются на том же языке, что и программа, в которой они используются. Такой подход ведет свое начало из Lisp (удобный тем, что формат программ и данных там одинаков), активно применяется в Julia, OCaml(camlp4/5), Scala, Haskell, Rust, а наибольшего развития получил в Nemerle, где макрос может может запускаться как до, так и после проверки и вывода типов, и в последнем варианте иметь доступ к типам.

При этом макросах все возможности языка не нужны, скажем высокая эффективность и безопасность Rust пользы здесь не принесут и могут только затруднить разработку.

К тому же все это функциональные или императивные языки, и мне стало интересно, что бы мог дать логический язык, в плане написания макросов. Появилась идея реализовать Prolog на Nemerle, но внезапно выяснилось, что последний, несмотря на заботу одной большой и известной компании, умер, и компилятор сигфотлится на доступных версиях mono. Тогда я решил (надеюсь, временно) снизить планку и попробовать всего лишь функциональный, но сравнительно легко встраиваемый Gluon. Макросы в Rust приходится оформлять отдельным пакетом, что не очень удобно, если макрос хочется разработать для однократного применения. Так почему бы не реализовать макрос, который просто получает как параметр код на Gluon и его выполняет?

Сейчас Gluon должен вернуть строку, которая будет парсится как код на Rust. Хотелось бы конечно уметь возвращать массив токенов, но я не сумел протянуть в Gluon необходимые типы.

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

Источник: https://habr.com/ru/post/583828/


Интересные статьи

Интересные статьи

8 июня 2009 года Фил Шиллер выступил на WWDC. Всего 36 секунд он неловко говорил о VoiceOver, Zoom, White on Black (с  iOS 6 называется Invert Colors) и Mono Audio....
img source На прошлой неделе для Rust комьюнити случилось огромное событие — вышла версия компилятора 1.39, а в месте с ней и стабилизация async-await фичи. В этом посте я постараюсь резюмиров...
Получить трафик для интернет-магазина сегодня не проблема. Есть много каналов его привлечения: органическая выдача, контекстная реклама, контент-маркетинг, RTB-сети и т. д. Вопрос в том, как вы распор...
Cтатья будет полезна тем, кто думает какую выбрать CMS для интернет-магазина, сравнивает различные движки, ищет в них плюсы и минусы важные для себя.
Если вы последние лет десять следите за обновлениями «коробочной версии» Битрикса (не 24), то давно уже заметили, что обновляется только модуль магазина и его окружение. Все остальные модули как ...