18 dépôts
Mechanisms for mapping managed methods to native memory addresses so native libraries can trigger runtime logic.
Distinct from Functional Event Callbacks: Specifically about bridging managed methods as C-style function pointers, distinct from event-based callbacks in pure managed code.
Explore 18 awesome GitHub repositories matching programming languages & runtimes · Function-Pointer Callbacks. Refine with filters or upvote what's useful.
JSPatch is a JavaScript native bridge and method swizzler that allows for the dynamic injection of logic into a hosted native environment. It functions as a cross-language data mapper and execution engine, enabling the replacement of native function pointers with JavaScript wrappers to modify application behavior at runtime. The project provides the ability to perform runtime application patching by overriding native class methods and object properties. This allows for the modification of application logic and the application of hotfixes using JavaScript code loaded from local files or remote
Encapsulates JavaScript functions as native blocks to be executed as asynchronous callbacks by the host environment.
JNA is a foreign function interface and native memory mapper that allows Java applications to call functions in shared native libraries without writing custom JNI wrapper code. It serves as a JNI alternative framework for invoking C functions and mapping native data structures using high-level interfaces. The library distinguishes itself through its ability to translate Java objects and primitives into C-style structs, unions, and pointers for cross-platform memory exchange. On Windows, it provides a dedicated toolkit for interacting with Component Object Model objects using both early and la
Enables mapping Java methods to native function pointers, allowing external libraries to trigger logic within the JVM.
HybridCLR is a hybrid C# execution engine and assembly loader designed for Unity. It provides a system for hot-updating C# logic across all platforms at runtime without requiring the application to be rebuilt or reinstalled. The project is distinguished by its mixed-mode execution, which runs unmodified code at native speed while using a high-performance interpreter for updated functions. It includes a generic type resolver that allows hot-updated code to use generic classes and functions regardless of whether they were pre-instantiated in the main binary. To protect proprietary source code,
Facilitates high-speed data exchange between the managed runtime and native languages via a specialized bridge.
BlocksKit is a low-level utility library for Apple platform development, specifically designed for managing the execution flow and memory of blocks within macOS and iOS applications. It provides a collection of helper functions to simplify the use of blocks in Objective-C and C, reducing boilerplate code and addressing inherent technical limitations. The library focuses on bridging Objective-C blocks with legacy C-based APIs by providing compatible wrapper structures and function-pointer emulation. It enables the passing of blocks through system interfaces that require strict C-style callback
Maps block invocations to standard function pointers to satisfy strict type requirements in low-level system interfaces.
CXX is a code generator that produces a safe, zero-overhead FFI bridge between Rust and C++. It lets functions and data types from either language be used directly in the other, with static type safety enforced at compile time and no copying, serialization, or runtime checks across the boundary. The bridge supports the full range of cross-language interactions: Rust can call C++ functions and use C++ types, and C++ can call Rust functions and use Rust types. Standard library types like strings, vectors, and smart pointers are mapped automatically between the two languages, while opaque types
Transfers Rust closures as function pointers to C++ for callback-based event handling.
CppGuide is a curated collection of educational resources and practical guides focused on C++ server development, Linux kernel internals, concurrent programming, network protocols, and security exploitation. It provides structured learning paths for backend developers, covering everything from interview preparation to building high-performance network servers and understanding operating system fundamentals. The guide distinguishes itself by offering in-depth, hands-on tutorials that walk through real-world implementations, including building a Redis-like server from scratch, designing custom
Documents registering function pointers for decoupled coordination between kernel subsystems.
Carp is a statically typed Lisp compiler that compiles Lisp-like syntax directly to C source code, enabling seamless integration with existing C libraries and low-level system programming. It manages memory deterministically at compile time using ownership tracking and linear types, eliminating garbage collection pauses and runtime overhead while ensuring type safety through an inferred static type system. The language distinguishes itself through compile-time macro expansion and metaprogramming capabilities, allowing code generation and transformation before final binary output. It enforces
Provides a mechanism to obtain void pointers to functions for low-level interoperability.
sds est une bibliothèque de chaînes dynamiques en C qui fournit un wrapper de gestion mémoire pour les chaînes allouées sur le tas. Elle implémente un stockage binaire sûr en suivant explicitement la longueur des chaînes, ce qui permet à la bibliothèque de gérer les caractères nuls au sein des données. La bibliothèque se distingue par une architecture mémoire utilisant des pointeurs de fonction interchangeables pour l'allocation et la libération, permettant l'intégration de gestionnaires de mémoire personnalisés. Elle utilise un suivi de longueur stocké dans l'en-tête pour offrir une récupération de longueur en temps constant et maintient un remplissage de tampon terminé par un caractère nul pour assurer la compatibilité avec les fonctions de chaîne C standard. La boîte à outils couvre un large éventail de capacités de manipulation de chaînes, notamment la concaténation, la tokenisation, la jointure et l'extraction de plages. Elle fournit également des utilitaires pour la mutation de tampon sur place, comme le rognage et le recadrage, et inclut des alternatives de formatage de chaîne optimisées par rapport aux fonctions d'impression standard.
Provides interchangeable function pointers for allocation and freeing to enable custom memory managers.
Rhai est un moteur de script embarqué et un langage à typage dynamique conçu pour être intégré dans des applications Rust. Il fonctionne comme un compilateur d'arbre de syntaxe abstraite (AST) et une couche d'interopérabilité native, permettant aux développeurs de mapper des types et des fonctions Rust dans un environnement de script pour une communication bidirectionnelle. Le projet sert de framework pour créer des langages dédiés (DSL) personnalisables. Il permet de définir des opérateurs, une syntaxe et des environnements d'exécution restreints personnalisés, facilitant la création de langages spécialisés avec des jeux de fonctionnalités sur mesure. Le moteur couvre un large éventail de capacités, notamment le sandboxing avec limitation de ressources pour une exécution sécurisée, l'organisation modulaire du code et un traitement complet des données pour les types numériques, chaînes de caractères et binaires. Il fournit également des outils pour la manipulation d'AST, la sérialisation de l'état d'exécution et l'observabilité au runtime via l'inspection de la pile d'appels et des interfaces de débogage. Le moteur est conçu pour un déploiement multiplateforme sur tout CPU ou système d'exploitation supporté par le compilateur natif.
Provides mechanisms to map script-defined functions to native memory addresses so the host application can trigger runtime logic.
flutterrustbridge is a code generation tool that automatically creates type‑safe Dart bindings for Rust functions, enabling direct cross‑language calls between Flutter and a Rust backend. It provides an async FFI adapter that transforms synchronous Rust functions into Dart async methods with background thread management, a cross‑language object manager that wraps persistent Rust structs as Dart objects preserving state across calls, and trait object interop that converts Rust traits into Dart abstract classes for seamless bidirectional use. The project handles the full lifecycle of integrat
Enables Rust code to invoke Dart callbacks, supporting bidirectional communication between the two languages.
JavaCPP est un pont JNI C++ et une interface de fonction étrangère qui fournit un générateur de binding, un chargeur de bibliothèque native et un gestionnaire de mémoire native. Il automatise la création de wrappers Java autour des en-têtes C++ natifs et des bibliothèques partagées pour permettre l'interopérabilité entre les deux langages. Le projet dispose d'un générateur de binding C++ qui analyse les fichiers d'en-tête pour produire automatiquement le code de liaison et les interfaces nécessaires pour appeler des fonctions natives. Il inclut un chargeur de bibliothèque native qui localise et extrait les binaires spécifiques à la plateforme depuis le classpath vers un cache local pour l'exécution au runtime. Le système gère l'accès à la mémoire native haute performance via le mappage direct de pointeurs et le suivi des ressources pour prévenir les fuites de mémoire. Il gère le mappage de types complexes pour les structures de données C++ et prend en charge le mappage de rappels (callbacks) natifs pour lier des pointeurs de fonction aux méthodes Java. La boîte à outils permet le remplacement de méthodes gérées par des implémentations C++ ou assembleur pour optimiser le temps d'exécution et réduire la surcharge des ressources.
Links native function pointers or virtual functions to Java methods, allowing C++ code to trigger runtime logic.
Asterinas est un noyau de système d'exploitation sécurisé en mémoire conçu pour prévenir les data races et la corruption mémoire. Il fonctionne comme un noyau compatible Linux-ABI, permettant l'exécution de binaires Linux existants et de charges de travail conteneurisées tout en offrant un modèle de distribution de système d'exploitation déclaratif. Le projet se distingue en agissant comme un hôte de conteneurs pour machines virtuelles et un OS invité pour le confidential computing, lui permettant de s'exécuter au sein d'environnements d'exécution isolés matériellement comme Intel TDX. Il implémente une base de calcul de confiance minimale en isolant les opérations dangereuses de bas niveau et sépare les mécanismes fondamentaux du noyau des implémentations de politiques spécifiques. Le système couvre un large éventail de capacités, incluant la gestion de la mémoire physique et virtuelle, le multi-processing symétrique et l'abstraction matérielle pour diverses architectures CPU. Il inclut également le support pour les runtimes de conteneurs sécurisés, un ensemble complet de primitives réseau et socket, ainsi qu'une toolchain spécialisée pour la compilation et l'émulation du noyau. Le projet prend en charge le déploiement multi-architecture sur les plateformes x86-64, RISC-V 64 et LoongArch 64.
Implements kernel-level callback registration for coordinating subsystems such as logging and power management.
Walt est un transpiler et un langage typé qui convertit une syntaxe de type JavaScript au format binaire WebAssembly. Il fonctionne comme une chaîne d'outils pour développer une logique haute performance pour les navigateurs et les runtimes en traduisant le code source typé au format texte WebAssembly. Le projet inclut un chargeur intégré au bundler qui automatise la recompilation des fichiers source pendant le processus de build. Il fournit un gestionnaire de mémoire linéaire utilisé pour définir des mises en page de données personnalisées, des structs et des allocateurs de mémoire au sein d'un tas contigu. Le langage prend en charge les signatures de fonctions définies, les types numériques et la capacité d'exporter des fonctions et des globales ou d'importer des fonctions externes depuis l'environnement hôte. Il permet l'utilisation de fermetures fonctionnelles, de pointeurs de fonction et d'organisation de données structurées via des offsets de mémoire binaire.
Implements callbacks by mapping function references to indices within a WebAssembly table.
node-ffi est une bibliothèque d'interface de fonction étrangère (FFI) pour Node.js qui permet d'appeler des fonctions depuis des bibliothèques dynamiques C natives sans écrire de bindings C++ manuels. Il sert de système pour charger des objets partagés et des DLL en mémoire de processus, traduire des valeurs JavaScript en représentations binaires et exécuter des binaires externes au runtime. Le projet utilise un wrapper autour de la bibliothèque libffi pour construire des frames d'appel et exécuter des fonctions natives avec des arguments dynamiques. Il se distingue en fournissant un gestionnaire de mémoire native pour allouer des pointeurs bruts et un système de mapping qui connecte des structures C complexes à des objets JavaScript. La boîte à outils couvre un large éventail de capacités d'interopérabilité native, incluant la traduction automatique des types de données et la création de stubs de mémoire exécutables permettant aux bibliothèques natives de déclencher des callbacks JavaScript. Pour maintenir la réactivité du thread principal, il prend en charge un modèle d'exécution asynchrone qui décharge les appels de fonctions natives vers un pool de threads séparé.
Creates executable memory stubs that map JavaScript functions as C-style function pointers for native library callbacks.
libffi est une bibliothèque d'interface de fonction étrangère (FFI) qui permet d'appeler des fonctions écrites dans d'autres langages au moment de l'exécution. Elle sert de wrapper ABI multi-architecture et de générateur de frames d'appel dynamiques, permettant l'exécution de fonctions externes basées sur des descriptions de types d'arguments et de valeurs de retour au runtime. Le projet fournit une interface portable pour gérer diverses conventions d'appel à travers différentes architectures matérielles et systèmes d'exploitation. Il inclut des capacités d'allocation de fermetures exécutables, permettant au code étranger de déclencher des callbacks au sein d'un langage hôte via des tables de saut stockées en mémoire exécutable. Au-delà de l'invocation de fonctions, la bibliothèque gère des stubs d'assembleur bas niveau et utilise la mise en cache des plans d'appel pour réduire la surcharge liée au mappage des types vers les registres. Elle inclut également un convertisseur de script de version binaire pour transformer les scripts de version basés sur des symboles entre différents formats d'éditeur de liens.
Creates executable closures that allow native libraries to trigger logic and functions within the host language.
uniffi-rs is a Rust FFI binding generator and multi-language binding tool. It functions as an automated binding scaffolder that creates type-safe foreign function interfaces and native wrappers for Rust libraries in languages such as Swift, Kotlin, and Python. The project provides a system for cross-language interface definition, allowing functions and data structures to be specified in a shared format to ensure consistent API signatures across platforms. It further serves as an FFI memory management layer, handling object lifetimes and thread safety when sharing state between Rust and foreig
Exports traits so foreign code can pass callback implementations into Rust functions.
Rusqlite is an embedded database interface and relational database driver that provides a client library for interacting with SQLite. It functions as an SQL query wrapper, enabling the management of local file-based or in-memory databases through a safe interface. The library allows for the extension of native database capabilities by implementing custom scalar functions, collations, and virtual tables. It also supports the embedding of the database engine directly into the application binary to remove external library dependencies. The project covers a broad range of capabilities including
Allows registering native application functions as callbacks that the database engine invokes during query execution.
Oils is a Unix shell interpreter and scripting language runtime that combines a modern shell language with POSIX and Bash compatibility. It functions as a structured data shell, integrating JSON and J8 formats to manage complex data without relying on string parsing. The system is distinguished by a C++ transpiled interpreter that converts a subset of Python source code into strongly typed C++ for high-performance execution. It features a garbage-collected typed runtime that supports prototype-based polymorphism, lexical closures, and reference-based variable mutation. To decouple shell logic
Provides the ability to send blocks of code as arguments to procedures for implementing callbacks.