ЩО Є N2O НАСПРАВДІ?
N2O — це формальна філософія та інженерна вправа водночас. Вона обмежує автора бути ефективним та точним не втрачаючи при цьому повноти та функціональності. Це накшталт внутрішньої дисципліні при проектуванні програмного забезпечення. Ця філософія більше 8 років застосовується на практиці для побудови систем SYNRC, та визначає стандартний мінімальний набір для демонстрації однієї з сучасних моделей реактивного веб-програмування, яка включає: веб-сокет веб-фреймвок з бінарною серілізацією, пушами та контролем DOM елементів зі сторони сервера. N2O вчить будувати прості та надійні системи на будь-якій мові програмування.
Мови програмування розділені на чотири рівня як для клієнтської (мобільної та веб розробки) так і для серверної розробки (бекенд системи). Нульовий рівень — тотальні формальні алгебраїчні мови програмування, що забезбечують повноту, функціональність та доведення властивостей прогрм згідно сучасних уявлень про математичне моделювання та системи залежних типів побудованих на розшаруваннях. Перший рівень — формальні функціональні мови програмування, як правило System F, System Fω які успішно використовуються в промисловості та забезпечують достатньо формальний запис який піддається масштабуванню у великих командах завдяки потужному ядру компіляторів. Другий рівень — неформальні (без формальної операційної чи денотаційної семантики) чи формальних верифікаторів, які проте успішно використовуються в промисловості, можуть бути як з розвиненими системами типів з узагальненими шаблонами та типами сумами, так і однотипними мовами програмування з динамічною типізацією. Третій рівень — мови які погано піддаються масштабуванню у промисловому виробництві (на основі спостережень за власним досвідом).
- Client Tier 3:(JavaScript、Lua)
- Client Tier 2:(Swift、Kotlin、TypeScript)
- Client Tier 1:(UrWeb、OCaml)
- Client Tier 0:(Formality)
- Server Tier 3:(PHP、Python、Perl、Ruby)
- Server Tier 2:(Erlang、Elixir)
- Server Tier 1:(Standard ML、Haskell、F#、Rust)
- Server Tier 0:(Coq、Agda、Lean)
Філософія N2O визначає структуру операційних середовищ (runtimes) як операційну систему лямбда-інтерпретаторів які працюють на паралельному обчислювальному середовищі (ядрах процесорів). Кожне з ядер процесорів виконує в нескінченному циклі команди лямбда-інтерпретаторів, переключаючи через певний проміжок часу на потік команд іншого інтерпретатора. Таке визначення дає змогу вбудувати цю структуру у віртуальну машину Erlang.
- Головний процес додатку
- Супервізор додатку
- Проміжні супервізори
- Кінцеві пул процесорів повідомлень
Client Tier 3 —(JavaScript、Lua):
N2O.JS CLIENT
ECMAScript клієнтська інфраструктура для усіх рівнів N2O специфікації.
- UTF-8.JS — UTF-8 серіалізація
- IEEE-754.JS — Бінарний формат представлення дійсних чисел
- ZLIB.JS — ZLIB декомпресія термів
- ETF.JS — Erlang Term Format серіалізатор
- N2O.JS — N2O/WebSocket JavaScript протокольний цикл
- MQ.JS — N2O/MQTT JavaScript протокольний цикл
- NITRO.JS — NITRO/JavaScript біндінги для DOM джерел
- VALIDATION.JS — NITRO/JavaScript валідація DOM джерел
Server Tier 2 —(Erlang、Elixir):
SYNRC ERLANG N2O.DEV
These repos brought us money.
- synrc/n2o — N2O 7.12.0 Distributed WebSocket Server
- synrc/kvs — KVS 7.11.5 Key Value Store
- synrc/mad — MAD 7.1.1 Erlang Package Manager
- synrc/bpe — BPE 5.12.0 Business Process Engine
- synrc/nitro — NITRO 5.12.4 Nitrogen Web Framework
- synrc/rest — REST 5.10
- synrc/active — ACTIVE 4.11
- synrc/fs — FS 4.10
- synrc/exe — EXE 2.11
- synrc/rpc — RPC 1.11.1 Swift protobuf ASN.1 JavaScript
- synrc/review — REVIEW 1.11 MQTT Chat with File Upload
- synrc/sample — SAMPLE 1.11 WebSocket Chat with File Upload
O7 ELIXIR
These repos was requested by Elixir community.
Server Tier 1 — (SML、Haskell、F#、Rust):
O1 STANDARD ML
This is first System-F implementation for SML/NJ and MLton.
O3 HASKELL
This is second System-F implementation.
O61 F#
This is third System-F implementation.
O83 RUST
This is proof-of-concept of formal CPS interpreter with SMP runtime.
- o83/kernel — KERNEL SMP OS and K interpreter
Server Tier 0 — (Coq、Agda、Lean):
O89 LEAN4
This is LEAN 4 N2O full-stack.
- o89/n2o — N2O WebSocket Server
- o89/nitro — NITRO Nitrogen Web Framework
- o89/bum — BUM Lean4 Package Manager
O29 COQ
Coq.io based system-level Coq programming.
- o29/n2o — N2O Coinductive Shell
HEART ADVICE
Each language, N2O TECH is implemented in, should
embed its philosophy most naturally and compact. If some layer between
the base library of a language is needed, it
could be provided, but it should be reduced
to zero if possible. In some cases, some parts
of a base library could be replaced with better replacement.
N2O should provide client companion library usually
implemented in a different set
of client languages: JavaScript, Swift, Kotlin.
If you did everything right, N2O should not
be more than 500 LOC in any language.