fosstodon.org is one of the many independent Mastodon servers you can use to participate in the fediverse.
Fosstodon is an invite only Mastodon instance that is open to those who are interested in technology; particularly free & open source software. If you wish to join, contact us for an invite.

Administered by:

Server stats:

8.6K
active users

#metaprogramming

0 posts0 participants0 posts today

Sometimes in #Lisp #Programming, particularly #MetaProgramming, though admittedly rarely, there arises a need to have an expression considered to be in a higher lexical environment (i..e. excluding one or more immediately enclosing environments). A special case of that is to consider the expression to be in the top-level environment).

I've come up with a nice formalism that is easy to retrofit with a low amount of work: the in-env-above operator.

(in-env-above x e1 e2 e3 ...)

searches the environment for variable x, and removes every environment frame it traverses. Then expressions e1 e2 ... are expanded and evaluated in the remaining environment chain. if x is not found, they are in the top-level environment. We allow x to be nil to express that intent.

By identifying the target env using a variable binding expected to be in it, we eliminate the need to implement an extra identifying mechanism, or using relative addressing like "3 levels up".

Macros often introduce gensyms; one of those can be used.

Метапрограммирование 2.0: макросы и генерация кода в современном мире

Забудьте про скучные «Hello, World». Макросы и шаблоны давно стали полноценными инструментами архитектора кода: от хитрых C++-шаблонов до процедурных макросов Rust и Java-аннотаций, автоматически генерирующих целые фреймворки. В этой статье мы рассмотрим примеры, где metaprogramming избавляет от рутины и экономит часы работы над проектом. Детали как всегда под катом.

habr.com/ru/companies/ruvds/ar

#ruvds_статьи #метапрограммирование #генерация_кода #макросы #code_generation #Rust #Java #C++ #metaprogramming #шаблонный_код

ХабрМетапрограммирование 2.0: макросы и генерация кода в современном миреЗабудьте про скучные «Hello, World». Макросы и шаблоны давно стали полноценными инструментами архитектора кода: от хитрых C++-шаблонов до процедурных макросов Rust и Java-аннотаций, автоматически...

I love this magick:

```
In [1]: import model

In [2]: model.Tooter
Out[2]: model.Tooter

In [3]: model.Tooter.account
Out[3]: <sqlalchemy.orm.attributes.InstrumentedAttribute at 0x7fbf7bd31bc0>

In [4]: model.Tooter.account == 'foo'
Out[4]: <sqlalchemy.sql.elements.BinaryExpression object at 0x7fbf8183a960>
```

:) #python #SQLAlchemy #metaprogramming

Документация приложения — дело рук самого приложения

Знакомо ли вам чувство, когда на поддержке есть сервис, о принципах работы которого знает буквально пара человек? В таких условиях очередная задача по миграции с одного решения на другое эквивалентна по-дурацки спродюсированному квесту из ролевой игры: ищем документацию, просматриваем глазами код, вызваниваем тех немногих, кто посвящен в таинства организации компонента системы. В какой-то момент порог негодования в нашей команде достиг критической отметки. Количество сервисов на поддержке приближалось к двум десяткам. Сами же сервисы не развивались, а просто существовали как есть. Более того, никакой общей доменной области, никаких актуальных описаний архитектуры. Мы решили навести порядок и разметить сервисы для понимания их архитектурных компонентов. После обсуждения взяли прицел на автоматизируемый процесс описания системы, а не на ручную поддержку документации. Добро пожаловать под кат — рассказываю о нашем пути, а в конце делюсь ссылкой на библиотеку.

habr.com/ru/companies/tbank/ar

ХабрДокументация приложения — дело рук самого приложенияЗнакомо ли вам чувство, когда на поддержке есть сервис, о принципах работы которого знает буквально пара человек? В таких условиях очередная задача по миграции с одного решения на другое эквивалентна...

Грязные трюки C++ из userver и Boost

Привет, я Антон Полухин из Техплатформы Екома и Райдтеха Яндекса. Моя команда разрабатывает userver — современный опенсорсный асинхронный фреймворк с богатым набором абстракций для быстрого и комфортного создания микросервисов, сервисов и утилит на C++. Когда мы пишем какой‑то код для userver и для таких сложных проектов, как Boost , периодически мы сталкиваемся с нестандартными проблемами. И эти нестандартные проблемы требуют нестандартных решений. Вот о таких решениях мы сегодня и поговорим. А именно: — Посмотрим, как работают исключения на платформе Linux x86, и сделаем с ними что‑то интересное. — Залезем ещё глубже под капот исключений и сделаем их ещё быстрее. — Сделаем висячую ссылку на невалидный объект, и всё будет хорошо. — А под конец то, что все любим, — погрузимся в шаблонное метапрограммирование.

habr.com/ru/companies/yandex/a

ХабрГрязные трюки C++ из userver и BoostПривет, я Антон Полухин из Техплатформы Екома и Райдтеха Яндекса. Моя команда разрабатывает userver  — современный опенсорсный асинхронный фреймворк с богатым набором абстракций...

#gamedev #metaprogramming
I just spent the afternoon using JavaPoet to create a generator that will capture the style names from a UI Skin file and create an asset manager and a list of constants for easy access.

I probably could have done this incredibly tedious task by hand in a much shorter amount of time but now I have a nifty utility that will reduce an hour-long task to nths of a second! Just in case I find ANOTHER UI skin that I prefer... AGAIN...

Did you know that you can `undef_method :method_name` in a class, which not only removes the method definition from the class, but also ensures that it doesn't inherit that method from parent classes?

This is useful (rarely!) when you might inherit from a class and one of the parent's methods is not applicable in your more-specialized class.

docs.ruby-lang.org/en/3.3/Modu

docs.ruby-lang.orgclass Module - Documentation for Ruby 3.3