Автор темы
Всем привет.
Пишу язык программирования SkyForge уже около полутора лет. Это мой пет-проект,
который неожиданно дорос до чего-то рабочего. Хочу поделиться — может кому-то
будет интересно, может кто-то найдёт баги.
Что это такое
Язык с русским синтаксисом, написанный на Python. Компилируется в Python AST
или интерпретируется напрямую. Есть свой лексер, парсер, интерпретатор.
пусть имя = "Мир"
функция привет(имя) {
вернуть "Привет, " + имя
}
лог(привет(имя))
Что уже реализовано
Что мне кажется самым интересным
1. AutoREST
Одна строка генерирует CRUD-API + админку + OpenAPI для всех таблиц:
app.из_схемы("""
users (id PK, name TEXT NOT_NULL, email TEXT UNIQUE)
products (id PK, title TEXT, price REAL)
""")
Django REST + DRF на то же самое — 6 файлов и 200+ строк. Тут — 3 строки
и один файл. Под капотом парсер схемы, ORM и веб-фреймворк.
2. Транспилятор
Изначально был только интерпретатор, который на вычислениях работал в 30-100
раз медленнее CPython. Добавил транспилятор .skf -> Python AST -> compile().
Получилось ускорение вплоть до 130x на рекурсии:
fib(32):
интерпретатор: ~60 секунд
транспилятор: ~0.37 секунды
Работает для функций, циклов, включений, лямбд, интерполяции строк.
Классы и async пока не поддерживаются — там обычный интерпретатор.
3. LSP-сервер для VS Code
Отдельный PyPI-пакет skyforge-lsp на pygls. Даёт диагностику в реальном
времени, автодополнение, hover-документацию, переход к определению (F12),
outline. Расширение для VS Code пока не в маркетплейсе, ставится из репо.
Статус
Технические детали
Чего нет и не будет скоро
- Нормальной экосистемы. Библиотек на самом SkyForge почти нет,
всё через Python-мост
Ссылки
Буду рад фидбэку. Особенно интересует:
Критика приветствуется, отвечу на все вопросы в комментах.
Пишу язык программирования SkyForge уже около полутора лет. Это мой пет-проект,
который неожиданно дорос до чего-то рабочего. Хочу поделиться — может кому-то
будет интересно, может кто-то найдёт баги.
Что это такое
Язык с русским синтаксисом, написанный на Python. Компилируется в Python AST
или интерпретируется напрямую. Есть свой лексер, парсер, интерпретатор.
пусть имя = "Мир"
функция привет(имя) {
вернуть "Привет, " + имя
}
лог(привет(имя))
Что уже реализовано
- ООП с наследованием (класс X наследник Y, это, супер)
- Async/await с реальным параллелизмом через потоки
- Генераторы (выдать x)
- Pattern matching (совпадает x { случай ... })
- Опциональные типы с проверкой в рантайме
- Декораторы (@кешировать, @повторить, @таймер_декоратор)
- Исключения (попробовать/поймать/наконец/бросить)
- Python-мост — подключить_питон("numpy") даёт доступ ко всему PyPI
- Веб-фреймворк (маршруты, шаблоны, middleware, сессии, /docs)
- ORM поверх SQLite
- Свой тестовый фреймворк (@Тест, ожидать_равно, ...)
- Stdlib: транслит, русские склонения, PBKDF2, JWT, regex, base64, хэши
Что мне кажется самым интересным
1. AutoREST
Одна строка генерирует CRUD-API + админку + OpenAPI для всех таблиц:
app.из_схемы("""
users (id PK, name TEXT NOT_NULL, email TEXT UNIQUE)
products (id PK, title TEXT, price REAL)
""")
Django REST + DRF на то же самое — 6 файлов и 200+ строк. Тут — 3 строки
и один файл. Под капотом парсер схемы, ORM и веб-фреймворк.
2. Транспилятор
Изначально был только интерпретатор, который на вычислениях работал в 30-100
раз медленнее CPython. Добавил транспилятор .skf -> Python AST -> compile().
Получилось ускорение вплоть до 130x на рекурсии:
fib(32):
интерпретатор: ~60 секунд
транспилятор: ~0.37 секунды
Работает для функций, циклов, включений, лямбд, интерполяции строк.
Классы и async пока не поддерживаются — там обычный интерпретатор.
3. LSP-сервер для VS Code
Отдельный PyPI-пакет skyforge-lsp на pygls. Даёт диагностику в реальном
времени, автодополнение, hover-документацию, переход к определению (F12),
outline. Расширение для VS Code пока не в маркетплейсе, ставится из репо.
Статус
- 79/79 тестов проходят (examples/всё.skf)
- На PyPI: skyforge-lang 1.0.7 и skyforge-lsp 0.1.0
- Документация: skyforge-docs.onrender.com
- Сайт документации написан на самом SkyForge (один файл docs.skf)
- Render, CI пока нет, всё вручную
Технические детали
- ~1500 строк ядро (core.py), ~600 строк транспилятор
- Зависимости: только pygls для LSP. Ядро на чистом stdlib
- Python 3.9+
- На Windows были проблемы с cp1251 и BOM — обошёл через
Чего нет и не будет скоро
- Нормальной экосистемы. Библиотек на самом SkyForge почти нет,
всё через Python-мост
- Отладчика
- Форматтера и линтера
- Нормальных миграций БД (при изменении схемы AutoREST нужно пересоздавать БД)
- Marketplace для VS Code
- Поддержки классов в транспиляторе
Ссылки
- PyPI: pypi.org/project/skyforge-lang
- LSP: pypi.org/project/skyforge-lsp
- GitHub: github.com/skytech-alt/SkyForge-Docs
- Документация: skyforge-docs.onrender.com
Буду рад фидбэку. Особенно интересует:
- Где вы видите нишу для такого языка? (кроме "обучение по-русски")
- Что важнее развивать: транспилятор до ООП или писать пакетный менеджер?
- Кто-нибудь реально хочет использовать это в работе, или это остаётся
Критика приветствуется, отвечу на все вопросы в комментах.