Π‘Π°ΠΌΠΎΡΠ°ΡΡΠΈΡΡΡΡΠ°ΡΡΡ ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π° F#, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ LLM (Ollama) Π΄Π»Ρ Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ, ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΈ Π½Π°ΠΊΠΎΠΏΠ»Π΅Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ² Π² Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ Π±Π°Π·Π΅ SQLite. Π Π΅Π°Π»ΠΈΠ·ΡΠ΅Ρ Π·Π°ΠΌΠΊΠ½ΡΡΡΠΉ ΡΠΈΠΊΠ» Β«Π Π°Π·ΠΌΡΡΠ»Π΅Π½ΠΈΠ΅ β ΠΠ΅Π½Π΅ΡΠ°ΡΠΈΡ ΠΊΠΎΠ΄Π° β ΠΡΠΎΠ²Π΅ΡΠΊΠ° Π² REPL β Π‘ΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ Π² GAC-ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠ΅Π΅ΡΡΡΒ».
- π§ LLMβΠ°Π³Π΅Π½Ρ Π½Π° Π±Π°Π·Π΅ Ollama Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΎΠΉ JSONβΡΡ Π΅ΠΌ (Structured Outputs)
- π¦ ΠΠΎΠΊΠ°Π»ΡΠ½ΡΠΉ Π°Π½Π°Π»ΠΎΠ³ GAC β Π±Π°Π·Π° SQLite, Ρ ΡΠ°Π½ΡΡΠ°Ρ ΠΊΠΎΠ΄ ΠΈ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
- π Π¦ΠΈΠΊΠ» ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠΉ ΡΠ²ΡΠ·ΠΈ β Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΎΡΠΈΠ±ΠΎΠΊ ΡΠ΅ΡΠ΅Π·
dotnet fsi - π§© ΠΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ β ΡΠ°Π·Π±ΠΈΠ²Π°Π΅Ρ ΡΠ»ΠΎΠΆΠ½ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΡΠ°Π³ΠΎΠ²
- π’ ΠΠ΅ΡΡΠΈΠΎΠ½ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ SemVer β Π²ΡΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΡ ΠΈΠΌΠ΅ΡΡ ΡΡΡΡΠΈΠΊΡ
_major_minor_patch - β ΠΡΡΡΠΎΠ΅Π½Π½ΠΎΠ΅ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΡΠ΅ΡΡΡ Ρ ΡΠ°Π½ΡΡΡΡ Π²ΠΌΠ΅ΡΡΠ΅ Ρ ΠΊΠΎΠ΄ΠΎΠΌ ΠΈ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅
- π« ΠΠ΅Π· Π²Π½Π΅ΡΠ½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ β ΡΠΎΠ»ΡΠΊΠΎ .NET SDK, Ollama ΠΈ Microsoft.Data.Sqlite
- .NET SDK 6+
- Ollama Ρ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΠΎΠΉ ΠΌΠΎΠ΄Π΅Π»ΡΡ (ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ
qwen2.5-coder:latest) - ΠΠ°ΠΊΠ΅Ρ
Microsoft.Data.Sqlite(ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ΅ΡΠ΅Π·dotnet add package)
-
ΠΠ»ΠΎΠ½ΠΈΡΡΠΉΡΠ΅ ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΠΉ:
git clone https://github.com/yourusername/autonomous-fsharp-agent.git cd autonomous-fsharp-agent -
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΠΏΡΠΎΠ΅ΠΊΡ F#:
dotnet new console -lang "F#" -o AgentFSharp cd AgentFSharp
-
ΠΠΎΠ±Π°Π²ΡΡΠ΅ ΠΏΠ°ΠΊΠ΅Ρ SQLite:
dotnet add package Microsoft.Data.Sqlite
-
ΠΠ°ΠΌΠ΅Π½ΠΈΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅
Program.fsΠ½Π° ΠΊΠΎΠ΄ ΠΈΠ· ΡΠ΅ΠΏΠΎΠ·ΠΈΡΠΎΡΠΈΡ. -
Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ Ollama Π·Π°ΠΏΡΡΠ΅Π½Π° ΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ Π΄ΠΎΡΡΡΠΏΠ½Π°:
ollama list ollama run qwen2.5-coder:latest
-
ΠΠ°ΠΏΡΡΡΠΈΡΠ΅ Π°Π³Π΅Π½ΡΠ°:
dotnet run "Π‘ΠΎΠ·Π΄Π°ΠΉ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π»Π°"ΠΠ»ΠΈ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² β ΡΠΎΠ³Π΄Π° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡ Π²Π²Π΅ΡΡΠΈ Π·Π°Π΄Π°ΡΡ Π²ΡΡΡΠ½ΡΡ.
dotnet run "Π‘ΠΎΠ·Π΄Π°ΠΉ ΡΡΠ½ΠΊΡΠΈΡ Π΄Π»Ρ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ ΡΠ°ΠΊΡΠΎΡΠΈΠ°Π»Π°"ΠΠ³Π΅Π½Ρ ΡΠ³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΊΠΎΠ΄, ΠΏΡΠΎΠ²Π΅ΡΠΈΡ Π΅Π³ΠΎ Π² F# Interactive, ΠΏΡΠΎΠ³ΠΎΠ½ΠΈΡ ΡΠ΅ΡΡΡ ΠΈ ΡΠΎΡ ΡΠ°Π½ΠΈΡ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ Π² Π±Π°Π·Ρ.
dotnet run "Π Π°Π·ΡΠ°Π±ΠΎΡΠ°ΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π±Π°Π½ΠΊΠΎΠ²ΡΠΊΠΈΠΌΠΈ ΡΡΠ°Π½Π·Π°ΠΊΡΠΈΡΠΌΠΈ: ΡΠΈΠΏ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, ΡΡΠ½ΠΊΡΠΈΡ Π²Π°Π»ΠΈΠ΄Π°ΡΠΈΠΈ, ΡΡΠ½ΠΊΡΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π°"ΠΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ (LLM) ΡΠΎΡΡΠ°Π²ΠΈΡ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°Π³ΠΎΠ², ΠΈ Π°Π³Π΅Π½Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡ ΠΈΡ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ, ΠΎΠ±Π½ΠΎΠ²Π»ΡΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠ°Π³Π°.
ΠΡΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ², ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡ Π²Π²Π΅ΡΡΠΈ Π·Π°Π΄Π°ΡΡ:
ΠΠ²Π΅Π΄ΠΈΡΠ΅ Π·Π°Π΄Π°ΡΡ Π΄Π»Ρ Π°Π³Π΅Π½ΡΠ° (ΠΈΠ»ΠΈ Π½Π°ΠΆΠΌΠΈΡΠ΅ Enter Π΄Π»Ρ Π΄Π΅ΠΌΠΎ-Π·Π°Π΄Π°ΡΠΈ):
- Config β Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊ Ollama, ΡΡ Π΅ΠΌΡ JSON, ΡΠΈΡΡΠ΅ΠΌΠ½ΡΠ΅ ΠΏΡΠΎΠΌΠΏΡΡ
- DatabaseRegistry β ΡΠ°Π±ΠΎΡΠ° Ρ SQLite, ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΎΠ², ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Ρ ΡΠΎΠΏΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ
- CoreEngine β Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ Ollama API ΠΈ Π·Π°ΠΏΡΡΠΊ
dotnet fsi - Orchestrator β ΡΠΈΠΊΠ» Π³Π΅Π½Π΅ΡΠ°ΡΠΈΠΈ, ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (
executeReasoningLoop) - Planner β ΡΠ°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΡΠ»ΠΎΠΆΠ½ΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ Π½Π° ΠΏΠΎΠ΄Π·Π°Π΄Π°ΡΠΈ (
runPlannedTasks)
CREATE TABLE registry (
id TEXT PRIMARY KEY, -- Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, "calculateFactorial_1_0_0"
name TEXT NOT NULL, -- Π±Π°Π·ΠΎΠ²ΠΎΠ΅ ΠΈΠΌΡ (Π±Π΅Π· Π²Π΅ΡΡΠΈΠΈ)
kind TEXT NOT NULL, -- 'type' ΠΈΠ»ΠΈ 'function'
signature TEXT NOT NULL,
version_major INTEGER NOT NULL,
version_minor INTEGER NOT NULL,
version_patch INTEGER NOT NULL,
source_code TEXT NOT NULL,
test_code TEXT,
description TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
CREATE TABLE dependencies (
parent_id TEXT NOT NULL,
child_id TEXT NOT NULL,
PRIMARY KEY (parent_id, child_id),
FOREIGN KEY (parent_id) REFERENCES registry(id) ON DELETE CASCADE,
FOREIGN KEY (child_id) REFERENCES registry(id) ON DELETE CASCADE
);- ΠΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΠ°Π²ΠΈΡ Π·Π°Π΄Π°ΡΡ.
- ΠΠ³Π΅Π½Ρ ΠΈΠ·Π²Π»Π΅ΠΊΠ°Π΅Ρ Π°ΠΊΡΡΠ°Π»ΡΠ½ΡΠΉ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ ΠΈΠ· ΠΠ (ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ).
- LLM Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ JSON Ρ ΠΏΠΎΠ»ΡΠΌΠΈ:
name,kind,signature,version,source_code,test_code,dependencies. - Π‘ΠΈΡΡΠ΅ΠΌΠ° ΡΠΊΠ»Π΅ΠΈΠ²Π°Π΅Ρ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡ + Π½ΠΎΠ²ΡΠΉ ΠΊΠΎΠ΄ + ΡΠ΅ΡΡΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ Π²
dotnet fsi. - ΠΡΠ»ΠΈ ΡΠ΅ΡΡΡ ΠΏΡΠΎΡ ΠΎΠ΄ΡΡ, ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ Π² ΠΠ; ΠΈΠ½Π°ΡΠ΅ ΠΎΡΠΈΠ±ΠΊΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Π΄Π»Ρ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ (Π΄ΠΎ 5 ΠΏΠΎΠΏΡΡΠΎΠΊ).
- ΠΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎΡ ΠΎΠ΄ΠΎΠ²ΠΎΠΉ Π·Π°Π΄Π°ΡΠ΅ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ Π·Π°ΡΠ°Π½Π΅Π΅ ΡΠΎΡΠΌΠΈΡΡΠ΅Ρ ΡΠΏΠΈΡΠΎΠΊ ΡΠ°Π³ΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΊΠ°ΠΊ ΠΎΡΠ΄Π΅Π»ΡΠ½Π°Ρ ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½Π°Ρ Π·Π°Π΄Π°ΡΠ°.
ΠΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ Π½Π°Ρ
ΠΎΠ΄ΡΡΡΡ Π² ΠΌΠΎΠ΄ΡΠ»Π΅ Config ΡΠ°ΠΉΠ»Π° Program.fs:
| ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ | ΠΠΏΠΈΡΠ°Π½ΠΈΠ΅ | ΠΠ½Π°ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ |
|---|---|---|
modelName |
ΠΠΌΡ ΠΌΠΎΠ΄Π΅Π»ΠΈ Ollama | "qwen2.5-coder:latest" |
ollamaUrl |
ΠΠ΄ΡΠ΅Ρ Ollama API | "http://localhost:11434/api/chat" |
connectionString |
ΠΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ SQLite | "Data Source=gac_registry.db" |
"Π‘ΠΎΠ·Π΄Π°ΠΉ ΡΠΈΠΏ Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ ΡΠΎΡΠΊΠΈ Π² Π΄Π²ΡΠΌΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²Π΅""ΠΠ°ΠΏΠΈΡΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ°ΡΡΡΡΠ° ΡΠ°ΡΡΡΠΎΡΠ½ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ Π΄Π²ΡΠΌΡ ΡΠΎΡΠΊΠ°ΠΌΠΈ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΈΠΏ Point""Π Π°Π·ΡΠ°Π±ΠΎΡΠ°ΠΉ ΠΌΠΎΠ΄ΡΠ»Ρ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Π³Π΅ΠΎΠΌΠ΅ΡΡΠΈΡΠ΅ΡΠΊΠΈΠΌΠΈ ΡΠΈΠ³ΡΡΠ°ΠΌΠΈ: ΡΠΈΠΏΡ, ΡΠ°ΡΡΡΡ ΠΏΠ»ΠΎΡΠ°Π΄ΠΈ, ΠΏΠ΅ΡΠΈΠΌΠ΅ΡΡΠ°"
- ΠΠ°Π²ΠΈΡΠΈΠΌΠΎΡΡΡ ΠΎΡ ΠΊΠ°ΡΠ΅ΡΡΠ²Π° LLM β ΠΌΠΎΠ΄Π΅Π»Ρ Π΄ΠΎΠ»ΠΆΠ½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ JSONβΡΠ΅ΠΆΠΈΠΌ; ΠΈΠ½ΠΎΠ³Π΄Π° Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠΈΠΏΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΡΠΏΡΠ°Π²Π»ΡΡΡΡΡ Π·Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΉ.
- ΠΡΡΡΡΡΡΠ²ΠΈΠ΅ Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΎΡΠΈΡΡΠΊΠΈ β ΡΡΡΠ°ΡΠ΅Π²ΡΠΈΠ΅ Π²Π΅ΡΡΠΈΠΈ ΠΎΡΡΠ°ΡΡΡΡ Π² Π±Π°Π·Π΅; ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ Π½Π΅ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ .
- ΠΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΈΠ΄Π΅Π°Π»Π΅Π½ β ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΡΠ΄Π°ΡΡ Π»ΠΈΡΠ½ΠΈΠ΅ ΡΠ°Π³ΠΈ; Π΄ΠΎΠΏΡΡΡΠΈΠΌΠΎ ΡΡΡΠ½ΠΎΠ΅ Π²ΠΌΠ΅ΡΠ°ΡΠ΅Π»ΡΡΡΠ²ΠΎ.
- ΠΡΠ΄ΡΡΠΈΠ΅ Π½Π°ΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ:
- ΠΠ²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΠΈΠ· ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°
- ΠΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΡΠ°Π³ΠΎΠ²
- ΠΠ΅Π±βΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ ΠΌΠΎΠ½ΠΈΡΠΎΡΠΈΠ½Π³Π°
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π΄ΡΡΠ³ΠΈΡ ΡΠ·ΡΠΊΠΎΠ² (F# ΡΠ΅ΠΉΡΠ°Ρ ΠΆΡΡΡΠΊΠΎ Π·Π°ΡΠΈΡ)
MIT. ΠΡ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΈ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠΎΠ΄.