8 repositorios
Rewriting or generating code at compile time using macros to implement custom language features or reduce boilerplate.
Distinct from Compile-Time Code Generation: Distinct from Compile-Time Code Generation: focuses on macro-based AST transformations rather than general code generation techniques.
Explore 8 awesome GitHub repositories matching software engineering & architecture · Macro-Driven Transformations. Refine with filters or upvote what's useful.
Haxe is a statically typed, multi-target programming language and open-source compiler toolkit that translates a single codebase into native executables and scripts for JavaScript, C++, C#, Java, Python, Lua, PHP, and Flash targets. It provides a unified type system with automatic type inference, a compile-time macro system for code transformation and generation, conditional compilation directives, and a static analysis engine that enforces null safety and eliminates dead code to produce smaller, safer outputs. The language is supported by the HashLink virtual machine, which executes platform
Provides a compile-time macro system for rewriting and generating code during compilation.
thiserror es una biblioteca de manejo de errores de Rust y macro procedimental diseñada para definir tipos de error personalizados. Funciona como un automatizador de implementación de traits que genera el código necesario para los traits de error de la biblioteca estándar en tiempo de compilación. La biblioteca se centra en eliminar el código repetitivo (boilerplate) mediante el uso de macros derive para implementar automáticamente métodos de visualización y origen. Permite la creación de structs y enums de error personalizados que pueden mapear errores de bajo nivel a variantes de alto nivel mientras se preserva la causa original y la información de backtrace. Sus capacidades cubren el formato de error personalizado mediante interpolación de plantillas, gestión de propagación de errores y la integración de backtraces de pila para depuración. Proporciona además mecanismos para automatizar la conversión de errores y rastrear orígenes de errores mediante campos designados.
Uses Rust procedural macros to generate the standard Display and Error trait implementations at compile time.
Racket es un lenguaje de programación de propósito general y multiparadigma de la familia Lisp, diseñado para la creación de lenguajes. Funciona como un banco de trabajo de lenguajes, proporcionando una plataforma para diseñar e implementar lenguajes de programación personalizados a través de un sistema flexible de macros y módulos. El sistema se distingue por ofrecer una suite integral para la ingeniería de semántica, permitiendo la construcción de subconjuntos de lenguajes especializados y capas educativas. Incluye herramientas para el diseño de lenguajes personalizados, como la generación de lexers y parsers, así como la capacidad de definir reglas de expansión de módulos y selección dinámica de lenguaje en tiempo de lectura. El proyecto proporciona un entorno de desarrollo integrado con un editor incorporado, depurador visual y un gestor de paquetes de software. Su superficie de capacidades se extiende a una biblioteca estándar de propósito general que cubre renderizado de gráficos 2D, procesamiento de datos binarios, integración con SQL y bases de datos deductivas, y la construcción de interfaces gráficas de usuario. El entorno admite la compilación de código fuente en archivos ejecutables independientes para su distribución.
Transforms source code into structured parse trees using a domain-specific language for semantics engineering.
Sweet-core es un compilador de código fuente a código fuente de JavaScript y un sistema de macros al estilo Lisp. Funciona como un transformador de sintaxis que extiende JavaScript permitiendo la definición de sintaxis y operadores personalizados durante el proceso de compilación. El sistema proporciona un framework para construir lenguajes específicos de dominio (DSL) mediante la expansión de macros recursivas e higiénicas y la creación de nuevas construcciones de lenguaje. Se distingue por admitir definiciones de operadores personalizados con asociatividad y precedencia configurables para controlar la evaluación de expresiones. El compilador incluye un sistema de módulos especializado para gestionar dependencias en tiempo de compilación e integración de helpers en tiempo de ejecución. Su arquitectura interna cubre la transformación del árbol de sintaxis abstracta (AST), la coincidencia de producción gramatical y la generación de objetos de sintaxis para garantizar la higiene léxica. Se proporciona una interfaz de línea de comandos para transformar archivos fuente en archivos o directorios de salida de JavaScript estándar.
Supports advanced macro-driven transformations for implementing custom language features and recursive syntax transformers.
BeeHive is a modular architecture framework for iOS applications. It provides a dependency injection container, an event bus middleware, a module lifecycle manager, and a service locator to organize an application into independent functional modules. The framework distinguishes itself by utilizing asynchronous module loading to reduce application startup time and prevent main thread blocking. It employs macro-driven automatic module registration to decouple instantiation from application logic and uses protocol-based service mapping to resolve dependencies without requiring direct imports. T
Uses compiler macros to automatically discover and register functional units during the build process.
Este proyecto proporciona un conjunto de directrices de arquitectura de software, estándares de codificación Lisp y patrones de programación funcional para el desarrollo en Clojure. Establece mejores prácticas para implementar lógica declarativa y gestionar el estado compartido mediante el uso de estructuras de datos persistentes y referencias atómicas. La guía cubre estándares para documentar APIs públicas y organizar directorios de proyectos para asegurar la distribución de librerías portables. Detalla la aplicación de reglas de formato y nomenclatura consistentes para mejorar la legibilidad del código fuente y la colaboración en equipo. El alcance se extiende a patrones de desarrollo idiomáticos, incluyendo la organización de namespaces, la estructuración de definiciones de funciones y suites de pruebas, y el diseño responsable de macros. También proporciona orientación sobre el manejo de la interoperabilidad con tipos externos y la gestión de la distribución de librerías mediante coordenadas estables.
Establishes best practices for designing complex macros by breaking them into small, testable functions.
CC es un framework de componentización de Android y herramienta de modularización diseñada para transformar aplicaciones monolíticas en componentes independientes. Proporciona un sistema para lanzar y depurar componentes individuales de forma aislada para reducir los tiempos de compilación y una capa de comunicación para ejecutar funciones a través de diferentes procesos de Android utilizando una interfaz unificada. El proyecto utiliza un plugin de bytecode en tiempo de construcción para registrar automáticamente componentes e interceptores, eliminando la necesidad de configuración manual de código repetitivo. Admite la migración de arquitectura incremental, permitiendo que una base de código se mueva hacia una estructura componentizada gradualmente sin requerir una reescritura completa. El framework maneja el mapeo de componentes a través de interfaces compartidas y enruta las llamadas a través de un pipeline de solicitudes basado en interceptación. Estas capacidades facilitan la gestión de módulos desacoplados y la invocación de servicios entre procesos.
Uses a build-time bytecode plugin to automatically register components and interceptors without manual configuration.
unplugin-auto-import is a JavaScript auto-import plugin designed to eliminate the need for manual import statements in JavaScript and TypeScript projects. It identifies and registers modules to automatically inject necessary dependencies during the build process. The project utilizes a unified bundler plugin interface to provide consistent transformation logic across Vite, Webpack, and Rollup environments. It includes a TypeScript declaration generator to produce type definition files for auto-imported identifiers, ensuring IDE autocompletion and type checking. Additionally, it provides a sta
Automatically discovers and registers modules and APIs during the build process to eliminate manual imports.