ffi-designer
Skill17 starsChanged 9 months agoApache-2.0View on GitHub
Design and implement Foreign Function Interfaces for calling code in other languages.
In this repository98 other files it gives its agents.
- abstract-interpretation-engineSkill
- abstract-machineSkill
- acsl-annotation-assistantSkill
- actor-model-implementerSkill
- algebraic-effectsSkill
- alias-and-points-to-analysisSkill
- axiomatic-semanticsSkill
- bidirectional-type-checkingSkill
- bisimulation-checkerSkill
- capability-systemSkill
- closure-converterSkill
- common-subexpression-eliminatorSkill
- concurrency-verifierSkill
- constant-propagation-passSkill
- contextual-equivalenceSkill
- control-flow-analysisSkill
- coq-proof-assistantSkill
- cps-transformerSkill
- dafny-verifierSkill
- dataflow-analysis-frameworkSkill
- dead-code-eliminatorSkill
- defunctionalizationSkill
- denotational-semantics-builderSkill
- dependent-type-implementerSkill
- dsl-embeddingSkill
- effect-handlers-implementerSkill
- effect-systemSkill
- effect-type-systemSkill
- escape-analysisSkill
- existential-typesSkill
- fuzzer-generatorSkill
- gadt-implementerSkill
- garbage-collector-implementerSkill
- graalvm-truffle-implementerSkill
- gradual-typing-implementerSkill
- higher-order-abstract-syntaxSkill
- hoare-logic-verifierSkill
- incremental-computationSkill
- information-flow-analyzerSkill
- inline-expanderSkill
- interprocedural-analysisSkill
- invariant-generatorSkill
- jit-compiler-builderSkill
- lambda-calculus-interpreterSkill
- language-server-protocolSkill
- lean-proverSkill
- lexer-generatorSkill
- linear-type-implementerSkill
- liveness-analysisSkill
- llvm-backend-generatorSkill
- lock-free-data-structureSkill
- loop-optimizerSkill
- loop-termination-proverSkill
- macro-expanderSkill
- memory-allocatorSkill
- message-passing-systemSkill
- mlir-dialect-designerSkill
- model-checkerSkill
- module-systemSkill
- monad-transformerSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
2 rules. About 0 are common, 2 are distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 43
Use binding generators for large libraries
- Distinctive: line 84
When performance isn't critical
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
FFI Designer
Foreign Function Interfaces (FFI) enable programs to call code written in other languages. They bridge language runtimes and enable reuse of existing libraries.
When to Use This Skill
- Calling C libraries from high-level languages
- Interoperability between language runtimes
- Binding generation
- Performance-critical interop
- Embedding interpreters
What This Skill Does
- Type Mapping: Convert types between languages
- Calling Convention: Handle ABI differences
- Memory Management: Manage memory across boundaries
- Callback Support: Allow foreign code to call back
- Error Handling: Propagate exceptions across FFI
Key Concepts
| Concept | Description |
| ABI | Application Binary Interface |
| Calling Convention | How parameters are passed |
| Type Marshalling | Convert types across boundaries |
| Callback | Function pointer passed to foreign code |
| Binding | Glue code for FFI |
Tips
- Use binding generators for large libraries
- Handle memory ownership carefully
- Document ownership semantics
- Test with sanitizers
- Consider thread safety
Common Use Cases
- Calling C libraries
- System programming
- Performance-critical code
- Native GUI bindings
- Game engine integration
Related Skills
llvm-backend-generator- Generate FFI codetype-checker-generator- Type-safe FFImemory-allocator- Memory management
Canonical References
| Reference | Why It Matters |
| ctypes documentation | Python FFI |
| JNI specification | Java Native Interface |
| "FFI and PL design" papers | Design principles |
Tradeoffs and Limitations
Approach Tradeoffs
| Approach | Pros | Cons |
| ctypes | Simple, Python | Slow |
| cffi | Fast | More complex |
| Native bindings | Fastest | Language-specific |
When NOT to Use This Skill
- Pure language code
- When performance isn't critical
- Cross-platform portability required
Limitations
- ABI compatibility issues
- Platform-specific behavior
- Complex type mappings
Assessment Criteria
A high-quality implementation should have:
| Criterion | What to Look For |
| Type Safety | Correct type mappings |
| Memory Safety | Proper ownership |
| Performance | Minimal overhead |
| Usability | Easy to use |
Quality Indicators
✅ Good: Type-safe, handles memory correctly, clean API ⚠️ Warning: Some manual memory management needed ❌ Bad: Type-unsafe, memory leaks, crashes
Research Tools & Artifacts
Real-world FFI systems:
| Tool | Why It Matters |
| cffi (Python) | C FFI for Python |
| JNI | Java Native Interface |
| SWIG | Simplified wrapper generator |
| clang bindings | LLVM-based FFI |
Key Systems
- GHC Haskell FFI: Type-safe FFI
- Rust FFI: Safe FFI with ownership
Research Frontiers
Current FFI research:
| Direction | Key Papers | Challenge |
| Safe FFI | "Safe FFI" (2018) | Memory safety |
| Zero-cost | "Zero-cost FFI" | Performance |
| Bidirectional | "Foreign函" | Two-way interop |
Hot Topics
- WebAssembly FFI: Wasm FFI design
- Multi-language runtimes: GraalVM polyglot
Implementation Pitfalls
Common FFI bugs:
| Pitfall | Real Example | Prevention |
| Memory leaks | Not freeing native memory | Ownership rules |
| Type mismatches | Wrong ABI | Use bindings |
| GC issues | GC collected native pointer | Keep reference |
| Encoding | String encoding issues | Use proper encoding |
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

