Skip to content

Commit e4c53f2

Browse files
committed
add kernel-ffi docs page
1 parent e022cd7 commit e4c53f2

File tree

7 files changed

+203
-2
lines changed

7 files changed

+203
-2
lines changed

docs/3-manual/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# CodePod App User Manual
1+
# User Manual
22

33
Try it at https://test.codepod.io
44

docs/4-kernel-ffi/README.md

Lines changed: 201 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,201 @@
1+
# Kernel-FFI
2+
3+
## Overview
4+
5+
Kernel-FFI is a transparent, language-agnostic framework that enables seamless cross-language function calls and object manipulation within interactive notebooks. It allows you to call functions, access variables, and work with objects across different programming languages as if they were native to your current language.
6+
7+
![kernel-ffi-intro](./assets/kernel-ffi-intro.png)
8+
9+
## What is Kernel-FFI?
10+
11+
Kernel-FFI solves the challenge of multi-language development in interactive environments like Jupyter Notebooks. Traditional approaches require extensive manual configuration, boilerplate code, and often lack support for modern programming constructs like object-oriented programming and recursive calls.
12+
13+
### Key Features
14+
15+
- **Transparent Cross-Language Calls**: Call functions in other languages as if they were native
16+
- **Object-Oriented Programming Support**: Create and manipulate objects across language boundaries
17+
- **No Boilerplate Code**: Automatic source-level transformation eliminates manual bindings
18+
- **Interactive Development**: Works seamlessly with Jupyter's dynamic, exploratory programming model
19+
- **Language Agnostic**: Supports multiple programming languages with different paradigms
20+
21+
## Supported Languages
22+
23+
Kernel-FFI supports a wide range of programming languages:
24+
25+
### Dynamic Languages
26+
- **Python**: Data science, machine learning, web development
27+
- **JavaScript/TypeScript**: Web frontend/backend, Node.js applications
28+
- **Julia**: Scientific computing, multiple dispatch
29+
- **Ruby**: Web development (Rails), metaprogramming
30+
- **Racket**: Functional programming, DSLs
31+
32+
### Static Languages
33+
- **Rust**: Memory safety, systems programming
34+
- **Go**: Cloud services, microservices
35+
- **C++**: Systems programming, performance-critical applications
36+
- **C#**: .NET ecosystem, Windows development
37+
38+
## Usage in CodePod
39+
40+
Kernel-FFI can be directly used in CodePod. Just create pods of different languages, and call each other as if they are native!
41+
42+
<!-- ![unified-framework](./assets/codepod-unified-framework.png) -->
43+
<img src={require("./assets/codepod-unified-framework.png").default} alt="unified-framework" width="600" />
44+
45+
46+
## How It Works
47+
48+
<!-- ![simple-loop](./assets/simple-loop.png) -->
49+
<img src={require("./assets/simple-loop.png").default} alt="simple-loop" width="800" />
50+
51+
### 1. Automatic Discovery
52+
Kernel-FFI automatically discovers and maintains a registry of programming constructs (functions, classes, variables) defined in each kernel. As you add, modify, or remove code, the registry updates to reflect the current state.
53+
54+
### 2. Transparent Transformation
55+
When you use a function or object from another language, Kernel-FFI automatically transforms your code into an intermediate representation that can be executed across language boundaries.
56+
57+
### 3. Seamless Execution
58+
The transformed code is executed in the target language kernel, and results are automatically converted back to your native language format.
59+
60+
## Remote Object Reference
61+
62+
<!-- ![objRefSequence](./assets/objRefSequence.png) -->
63+
<img src={require("./assets/objRefSequence.png").default} alt="objRefSequence" width="800" />
64+
65+
66+
## Use Cases
67+
68+
### Multi-Language Data Science
69+
Combine Python's data science libraries with Julia's performance or Rust's memory safety:
70+
71+
```python
72+
# Python code calling Julia functions
73+
import numpy as np
74+
from julia import fast_algorithm
75+
76+
data = np.array([1, 2, 3, 4, 5])
77+
result = fast_algorithm(data) # Calls Julia function
78+
```
79+
80+
### Web Development with Multiple Languages
81+
Use TypeScript for frontend logic while leveraging Python's backend capabilities:
82+
83+
```typescript
84+
// TypeScript code calling Python functions
85+
import { processData } from './python-module';
86+
87+
const userData = { name: "John", age: 30 };
88+
const processed = await processData(userData); // Calls Python function
89+
```
90+
91+
### System Programming Integration
92+
Combine high-level languages with low-level performance:
93+
94+
```rust
95+
// Rust code calling Python ML functions
96+
use python_ml::{train_model, predict};
97+
98+
let model = train_model(training_data); // Calls Python function
99+
let prediction = predict(model, input); // Calls Python function
100+
```
101+
102+
## Getting Started
103+
104+
### Prerequisites
105+
- Jupyter Notebook environment
106+
- Supported language kernels installed
107+
- Kernel-FFI framework
108+
109+
### Basic Setup
110+
1. Install the required language kernels
111+
2. Configure Kernel-FFI in your Jupyter environment
112+
3. Start creating multi-language notebooks
113+
114+
### Example: Simple Cross-Language Function Call
115+
116+
**Host Language (Python):**
117+
```python
118+
def calculate_sum(a, b):
119+
return a + b
120+
121+
class DataProcessor:
122+
def __init__(self, name):
123+
self.name = name
124+
125+
def process(self, data):
126+
return f"Processed {data} by {self.name}"
127+
```
128+
129+
**Client Language (TypeScript):**
130+
```typescript
131+
// Call Python function
132+
const result = await calculate_sum(5, 3); // Returns 8
133+
134+
// Create Python object
135+
const processor = new DataProcessor("TS Client");
136+
137+
// Call method on Python object
138+
const processed = await processor.process("test data");
139+
```
140+
141+
## Advanced Features
142+
143+
### Object-Oriented Programming
144+
Kernel-FFI supports full OOP across languages:
145+
146+
- **Object Instantiation**: Create objects in one language and use them in another
147+
- **Method Calls**: Call methods on foreign objects transparently
148+
- **State Management**: Maintain object state across language boundaries
149+
- **Automatic Cleanup**: Resources are automatically managed
150+
151+
### Recursive Calls
152+
Support for complex multi-language workflows:
153+
154+
- **Non-blocking Communication**: Side-channel communication prevents blocking
155+
- **Recursive Function Calls**: Functions can call back to other languages
156+
- **Asynchronous Support**: Handle async operations across languages
157+
158+
### Type Safety
159+
Maintains type safety across different language paradigms:
160+
161+
- **Dynamic Languages**: Runtime type checking and conversion
162+
- **Static Languages**: Compile-time type information preservation
163+
- **Automatic Serialization**: Handles complex data structures
164+
165+
## Architecture
166+
167+
Kernel-FFI uses a three-layer architecture:
168+
169+
1. **Source Analysis**: Parses and identifies cross-language usage patterns
170+
2. **Intermediate Representation**: Converts operations to language-agnostic format
171+
3. **Target Execution**: Generates and executes code in target languages
172+
173+
### Communication Model
174+
- **Jupyter Protocol**: Leverages existing Jupyter messaging
175+
- **Side-Channel**: HTTP-based communication for non-blocking operations
176+
- **Object Store**: Global registry for managing cross-language objects
177+
178+
## Benefits
179+
180+
### For Developers
181+
- **Reduced Complexity**: No need for manual FFI bindings
182+
- **Increased Productivity**: Focus on logic, not language integration
183+
- **Interactive Development**: Immediate feedback in notebook environment
184+
- **Language Flexibility**: Choose the best language for each task
185+
186+
### For Teams
187+
- **Skill Utilization**: Leverage team members' language expertise
188+
- **Code Reuse**: Share functionality across language boundaries
189+
- **Maintenance**: Single source of truth for cross-language functionality
190+
191+
## Getting Help
192+
193+
- **Documentation**: [https://codepod.io/docs/kernel-ffi](https://codepod.io/docs/kernel-ffi)
194+
- **Source Code**: Open-source implementation available
195+
- **Community**: Join discussions and contribute
196+
197+
## Conclusion
198+
199+
Kernel-FFI represents a significant advancement in multi-language development for interactive environments. By providing transparent, language-agnostic cross-language function calls, it enables developers to leverage the strengths of different programming languages without the traditional overhead of FFI setup and maintenance.
200+
201+
Whether you're working on data science projects that benefit from multiple language ecosystems, building web applications that span frontend and backend languages, or developing systems that require both high-level expressiveness and low-level performance, Kernel-FFI provides the tools you need to work seamlessly across language boundaries.
302 KB
Loading
426 KB
Loading
225 KB
Loading
308 KB
Loading

docs/8-press/README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Press & Screenshots
1+
# Screenshots
22

33
This document contains screenshots and gallery assets to give you an overall
44
feel of what coding in CodePod IDE looks like.

0 commit comments

Comments
 (0)