Флейм
GameDev.ru / Флейм / Форум / Язык программирования ν (Ню, Nu)

Язык программирования ν (Ню, Nu)

Поделиться

Страницы: 1 2 3 4 Следующая

Great V.Пользовательwww12 окт. 201723:21#0
Йо.
ПишуВыдумываю язык, общая продолжительность работ 2-3 года.
Начиналось все с влажных фантазий на тему "С++, только без костылей", сейчас переросло в что-то только отдаленно напоминающие кресты. Своя философия, все дела.
На данный момент пилю наброски транслятора (т.к. конечный выхлоп не машинные команды или ассемблер). Работы еще вагон и джве тележки, хоть это уже и не первая (и даже не десятая) итерация.
Здеся, собственно, буду выкладывать прогресс и основные идеи языка. Вот так вот.

Досье:



Ню - язык программирования со статической типизацией и контекстно-зависимыми правилами синтаксического разбора.
Основные идеи заложенные в Ню - гибкость, быстродействие, широкая область применения, ориентированность на создание DSL.
Язык проектируется с расчетом на активное использование среды разработки и код-стандарта. Цель такого подхода - дать как можно больше возможностей, которые потом можно было бы развивать с помощью среды разработки и ограничивать код-стандартом.
Результат трансляции Ню - промежуточный код, который легко поддается парсингу (назовем его "легким кодом", лайт-кодом).
В дальнейшем этот код может быть транслирован, например, в llvm и скомпилирован под определенную платформу.
За счет такого подхода область применения Ню не ограничивается обычным программированием и может покрывать и другие области.

Особенности:



- Отсутствие forward declaration.
- Минимальные ограничения на имена объектов.
- Контроль видимости объектов внутри областей.
- Произвольное количество операторов.
- Перегрузка функций и операторов по количеству и типу аргументов, типу возвращаемого значения.
- Перегрузка функций по типу открывающих и закрывающих скобок.
- Контекстно-зависимый синтаксический разбор.
- Препроцессор средствами самого языка.
- Контекстно-зависимая обработка литералов.

Предыстория:



Первое время после перехода с Dark Basic на С++ я совсем не замечал минусы последнего. Это и не удивительно, если учитывать то, насколько они различаются по сложности.
Тем не менее, со временем меня начал доставать forward declaration, ограниченное число операторов, недоделанный препроцессор и другие очень странные вещи.
Вот и родилась идея запилить что-то свое.

Цели:



Целей у языка много...
+ 1) Создание DSL (Domain-specific language, предметно-ориентированный язык)

TBD

Идеи:



Грубо говоря, язык можно разделить на четыре основные части: имена, типы, функции и переменные.
В особенности можно записать контекстно-зависимые правила синтаксического разбора, каскадную компиляцию, обработчики литералов и другие вундервафли, названия которых я попытаюсь объяснить ниже.
+ Имена
+ Типы и переменные
+ Функции и операторы


Прогресс:



TBD

Пишу с микроволновкипланшета, а потому обновляться тема будет с черепашьей скоростью...

Правка: 14 окт. 2017 20:04

Great V.Пользовательwww12 окт. 201723:22#1
[reserved]
Great V.Пользовательwww12 окт. 201723:22#2
[reserved]
Great V.Пользовательwww12 окт. 201723:23#3
[reserved]
return [](){};Участникwww12 окт. 201723:31#4
Тему не читал (т.к. нет ничего), но используй llvm.
Джек АллигаторПостоялецwww13 окт. 20170:18#5
Great V.
> "С++, только без костылей"
Rust

> На данный момент пилю наброски транслятора (т.к. конечный выхлоп не машинные
> команды или ассемблер). Работы еще вагон и джве тележки, хоть это уже и не
> первая (и даже не десятая) итерация.
Почему не используешь flex+bison?

Sbtrn. DevilПостоялецwww13 окт. 20171:00#6
Джек Аллигатор
> без костылей
> Rust
Это было бы даже смешно, если бы не было так не смешно.
Джек АллигаторПостоялецwww13 окт. 20171:18#7
Sbtrn. Devil
- хочу С++, только без костылей
- Rust
- да нууу, там тоже есть костыли, поэтому я продолжу стрелять себе по ногам в крестах. и насрать на все удобства и что этих костылей на порядки меньше.
так чтоли?
+ Показать

Правка: 13 окт. 2017 1:24

Great V.Пользовательwww13 окт. 20172:24#8
return [](){};
Тут есть одна интересная идея.
Если выхлоп подобного транслятора представить не в виде машинных инструкций или llvm, а в виде чего-то очень легкого для парса (чтобы не пришлось писать супер-крутой парсер и для выхлопа транслятора) - то можно было бы использовать язык не только в качестве языка программирования, а и в качестве, например, языка разметки (или еще чего, хз).
Но об этом чуть позже. Я к этому вопросу обязательно вернусь, когда основы разъясню : )
MrShoorУчастникwww13 окт. 20173:02#9
Джек Аллигатор
> - Rust
Чо там у нас с инфраструктурой для Rust?
Как дела с IDE?
Как дела с отладчиками?
Как дела с профайлерами?
Как дела со сторонними библиотеками? Как например подключить PhysX? Или как писать UI?

Правка: 13 окт. 2017 3:05

jaguardУчастникwww13 окт. 20173:13#10
Адовый ад и израэлевый израэль.
Что делает язык, какие проблемы решает, какие удобные конструкции можно запилить одной строчкой - не, такие проблемы мы решать не хотим. Мы хотим блжад переопределить общепринятый и удобный способ создания комментариев. Почему? А без причины, нам так захотелось.

Фак май брейнфак..

Panzerschrek[CN]Участникwww13 окт. 20176:31#11
Great V.
Привет.

>Начиналось все с влажных фантазий на тему "С++, только без костылей
У меня тоже всё с этого начиналось. Думаю, много кто хочет запилить убийцу крестов.

> Грубо говоря, язык можно разделить на четыре основные части: имена, типы,
> функции и переменные.
А шаблоны, исчисление времени компиляции и т. д. как же?

> контекстно-зависимые правила синтаксического разбора
Ересь какая. В крестах все писатели компиляторов от контекстозависимости плюются. Оно зачем тебе?

> На данный момент пилю наброски транслятора
А что уже есть то? Лексический/синтаксический анализ, построение промежуточного кода, генерация машинного кода?


PS:
Тоже пилю свой язык, но не "Nu", а "Ü".
На данный момент есть компилятор, генерирующий llvm-ir: https://github.com/Panzerschrek/U-00DC-Sprache

Компилятор уже может всякие функции, структуры, пространства имён, методы, шаблоны классов.

Great V.Пользовательwww13 окт. 20178:57#12
jaguard
Остынь, приятель : )
Во-первых, я как бы намекнул, что печатаю с планшета, а потому тема будет наполнятся долго.
Во-вторых, переопределяю комментарии я не просто так, ведь символы "/" и "*" могут использоваться пользователями для именования объектов.
Да и комментарии бывают самые разные, начиная от # и ремов и заканчивая всякими <!-- --!> в языках разметки. Как по мне - так дело привычки, не более.
Great V.Пользовательwww13 окт. 20179:17#13
Panzerschrek[CN]
Йо : )

Panzerschrek[CN]
> А шаблоны, исчисление времени компиляции и т. д. как же?
Все это будет, но не в прямом виде. Например, сохранить синтаксис плюсов для шаблонов (угловые скобки) не получиться.
Все это будет реализовано средствами каскадной компиляции, о которой я напишу чуть позже.

Panzerschrek[CN]
> Ересь какая. В крестах все писатели компиляторов от контекстозависимости
> плюются. Оно зачем тебе?
Чтобы можно было задавать разные приоритеты операторов для разных областей.
А чего плюются? Что там аццкого то?

Panzerschrek[CN]
> А что уже есть то? Лексический/синтаксический анализ, построение промежуточного
> кода, генерация машинного кода?
Пока-что закончен лексический анализатор и парсер. Если в двух словах - то работа с именами (определение, переопределение, доступ к вложенным и ранее определенным объектам, етц.)
Из планируемых объектов готовы пока только неймспейсы, т.к. на них было легче всего все это тестить.
Генерация машинного кода не планируется, если что.

У меня сейчас скорее фаза дизайна. Нужно переварить все то, что накопилось за последний год и понемногу запихивать в язык.

Джек АллигаторПостоялецwww13 окт. 201711:57#14
MrShoor, Рим не один день строился.

> Чо там у нас с инфраструктурой для Rust?
Полный порядок.
https://crates.io/

> Как дела с IDE?
> Как дела с отладчиками?
> Как дела с профайлерами?
https://forge.rust-lang.org/ides.html
https://areweideyet.com/
https://gist.github.com/KodrAus/97c92c07a90b1fdd6853654357fd557a

> Как дела со сторонними библиотеками? Как например подключить PhysX? Или как
> писать UI?
Биндинги за пару минут пишутся: https://doc.rust-lang.org/book/first-edition/ffi.html
Их уже много готовых есть: https://crates.io/search?q=bindings&sort=downloads хотя конкретно для PhysX ещё не сделали.
У меня вот в проекте куча всякого сишного: OpenGL, glfw, freetype.
UI - тоже никто не мешает подключить сишную библиотеку: https://github.com/cyndis/qmlrs
https://www.reddit.com/r/rust/comments/6flge4/i_need_to_gui_framework/
https://users.rust-lang.org/t/current-state-of-gui-development-in-rust/11643/3

Есть и такое:
http://docs.piston.rs/conrod/conrod/guide/chapter_1/index.html

Но главное преимущество - на Rust именно что занимаешься программированием, а не борьбой с языком.
Пришла идея - закодил и получил результат, вместо того чтобы париться над своей реализацией строк, массивов, думать откуда сегфолты и тд.
Не спорю, опытный сишник тоже с какого-то момента перестает париться. Но я этого момента так и не дождался.

Единственный минус пока что - очень долгое время компиляции.
Хотя в nightly уже есть инкрементальная компиляция, раз в пять ускоряющая процесс, но она всё ещё достаточно забагована.

Правка: 13 окт. 2017 12:00

Страницы: 1 2 3 4 Следующая

/ Форум / Флейм / ПроЭкты

2001—2017 © GameDev.ru — Разработка игр