Size: a a a

Генератор непрочитанных сообщений

2020 May 08

P

Panda🤔 in Генератор непрочитанных сообщений
Macros allow us to abstract at a syntactic level. A macro invocation is shorthand for an "expanded" syntactic form. This expansion happens early in compilation, before any static checking. As a result, macros can capture many patterns of code reuse that Rust’s core abstractions cannot.
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
ты так объясняешь будто я не пхпшник
источник

A

Aleksandr Khristenko in Генератор непрочитанных сообщений
Alexander Kladov
что мне это дает?
Это тебе дает возможность писать вещи, которые без  макросов ты не напишешь.
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
Aleksandr Khristenko
Это тебе дает возможность писать вещи, которые без  макросов ты не напишешь.
например?
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Например расчкт чего-то который считается по разному в зависимости от платформы
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
Dmitriy Tkachenko
Например расчкт чего-то который считается по разному в зависимости от платформы
почему я не могу это в функции какой-то делать?
источник

A

Aleksandr Khristenko in Генератор непрочитанных сообщений
Alexander Kladov
например?
Например я хочу написать свой строковый интерполятор.
И в условиях пыхи мне надо будет передавать туда строку + дергать руками get_defined_vars и передавать.
В случае с макросами я бы сделал interpolate!("my string") а макрос уже сам бы развернулся в получение get_defined_vars и дальнейшую работу.
Или я хочу какую-либо конструкцию, которая будет при вызове возвращать результат из функции.
Гипотетически это можно делать и на inline function если они есть, но их нет.
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Alexander Kladov
почему я не могу это в функции какой-то делать?
Потому что ты оперируешь переменными, которые определены в препроцессоре, их в компиляторе просто нет
источник

A

Aleksandr Khristenko in Генератор непрочитанных сообщений
Alexander Kladov
например?
Еще одни пример.
Мы делаем prepare!('select * from db where ...')->get([]);
Макрос в момент компиляции разбирает строку с запросом, на основе схемы данных определяет какие параметры должны быть переданы внутрь и какие данные будут возвращены и создает DTO для этих вещей.
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
Dmitriy Tkachenko
Потому что ты оперируешь переменными, которые определены в препроцессоре, их в компиляторе просто нет
источник

A

Aleksandr Khristenko in Генератор непрочитанных сообщений
Но, надо не забывать что макросы хоть и позволяют многие вещи - довольно хреново интегрируются в IDE.
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
я видимо тупой
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
до сих пор не понимаю чем это лучше функций
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Это и есть функции
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Просто они раскрываются до компиляции
источник

A

Aleksandr Khristenko in Генератор непрочитанных сообщений
Alexander Kladov
до сих пор не понимаю чем это лучше функций
Макросы это такая кодогенерация на стероидах.
источник

DT

Dmitriy Tkachenko in Генератор непрочитанных сообщений
Типа чем константы лучше переменных)
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
Aleksandr Khristenko
Макросы это такая кодогенерация на стероидах.
:(
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
рокетсаенс
источник

AK

Alexander Kladov in Генератор непрочитанных сообщений
Dmitriy Tkachenko
Типа чем константы лучше переменных)
тем что не меняются
источник