Давно уже в моей голове поселилась эта идея. Но я всё откладывал на потом — были более важные или интересные дела. А теперь я жалею, надо было всё бросить и сосредоточиться только на ней!
Все замерли в ожидании, что за идея? Идея — написать свой язык программирования!
Вздох разочарования, 99% выкинули свои компьютеры в окно, ну а для тех кто остался, я продолжу.
Меня всегда интересовали различные направления и веб я хочу сбацать и мобайл и десктоп и что-нибудь серверное готов написать, ещё мне интересены ИИ, игры, роботы, криптовалюты… И при этом, хотелось бы всё это писать на одном языке).
Смотрел я в сторону С++, C#, Java, Javascript и даже Python, но везде мне что-нибудь не нравилось…
Итак, всё решено, пишу свой язык программирования. Скрестим мощный C++ с лёгким Javascript и назовём Cj!

При описании переменных я предлагаю дать возможность как в С++ сразу указывать тип переменной. Для описания автоматической переменной используем, как и в C++, слово auto, либо не указываем, как в Javascript, тип данных совсем.
Теже правила применяем и для описания функций:
Смотрите как удобно и лаконично! Если у имени есть скобочки (), то это функция, не надо никаких function, как в Javascript, но и возвращаемый тип указывать не обязательно!
Пока достаточно, полную спецификацию на язык можно посмотреть здесь: sitev.ru/post/163
Конечно, я сразу же побежал читать статьи про LLVM. Но прочитав пару статеек, мне стало скучно и грусно. Мозг устал, благо пора уже было спать. Проснувшись утром, я уже знал решение этой задачи: никаких 4-х букв, пишу строго на С++! Напишу свой лексер, парсер и т.д… Мне так интереснее, и в добавок, на выходе получим свой простенький аналог LLVM!
Писать сразу код по спецификации я пробывал, но постоянно путался, переписывал. Да и зачем? Если есть синтаксические диаграммы Вирта. Надо описать синтаксис визуально, а потом перевести его в код. Давайте быстренько набросаем эти диаграммы.
Программа — это блок кода, который состоит из statement (инструкций).

Основной код main_block_code отличается от вложенного {}. Для них буду разные диаграммы.

Обработка функций — это вызов и описание функции. Вызов попроще:

описание чуть посложнее:

И да, мы забыли про переменные и про то как они с функциями будут участвовать в выражении:

Злые языки начнут язвить: ну-ну, пиши давай теперь свой компилятор. А я вот написал уже (генерирует исходник на JavaScript).
Пример на языке Cj:
А вот что получается на Javascript:
Конечно, в языке пока только внедрены самые базовые возможности. Что тут говорить, в нём даже не описан оператор if! Да и компилятор скорее всего будет падать. Но всё ещё впереди, как говорится: лиха беда начало!
Исходники выложил на ГитХаб, а вот бинарник.
Смотрим, тестируем, присоединяемся к написанию нового языка программирования Cj!
Все замерли в ожидании, что за идея? Идея — написать свой язык программирования!
Вздох разочарования, 99% выкинули свои компьютеры в окно, ну а для тех кто остался, я продолжу.
Меня всегда интересовали различные направления и веб я хочу сбацать и мобайл и десктоп и что-нибудь серверное готов написать, ещё мне интересены ИИ, игры, роботы, криптовалюты… И при этом, хотелось бы всё это писать на одном языке).
Смотрел я в сторону С++, C#, Java, Javascript и даже Python, но везде мне что-нибудь не нравилось…
Итак, всё решено, пишу свой язык программирования. Скрестим мощный C++ с лёгким Javascript и назовём Cj!

Начинаем придумывать синтаксис языка
При описании переменных я предлагаю дать возможность как в С++ сразу указывать тип переменной. Для описания автоматической переменной используем, как и в C++, слово auto, либо не указываем, как в Javascript, тип данных совсем.
int a;
auto b;
c = 5;
Теже правила применяем и для описания функций:
int sum() {}
auto sub() {}
mul() {}
Смотрите как удобно и лаконично! Если у имени есть скобочки (), то это функция, не надо никаких function, как в Javascript, но и возвращаемый тип указывать не обязательно!
Пока достаточно, полную спецификацию на язык можно посмотреть здесь: sitev.ru/post/163
Выбираем инструмент для написания компилятора
Конечно, я сразу же побежал читать статьи про LLVM. Но прочитав пару статеек, мне стало скучно и грусно. Мозг устал, благо пора уже было спать. Проснувшись утром, я уже знал решение этой задачи: никаких 4-х букв, пишу строго на С++! Напишу свой лексер, парсер и т.д… Мне так интереснее, и в добавок, на выходе получим свой простенький аналог LLVM!
Синтаксические диаграммы для языка Cj
Писать сразу код по спецификации я пробывал, но постоянно путался, переписывал. Да и зачем? Если есть синтаксические диаграммы Вирта. Надо описать синтаксис визуально, а потом перевести его в код. Давайте быстренько набросаем эти диаграммы.
Программа — это блок кода, который состоит из statement (инструкций).

Основной код main_block_code отличается от вложенного {}. Для них буду разные диаграммы.

Обработка функций — это вызов и описание функции. Вызов попроще:

описание чуть посложнее:

И да, мы забыли про переменные и про то как они с функциями будут участвовать в выражении:

Осталось написать компилятор
Злые языки начнут язвить: ну-ну, пиши давай теперь свой компилятор. А я вот написал уже (генерирует исходник на JavaScript).
Пример на языке Cj:
int my_func1(int p) {
int a;
a = 5;
}
my_func1();
А вот что получается на Javascript:
function my_func1(p) {
var a;
a = 5;
}
my_func1();
Конечно, в языке пока только внедрены самые базовые возможности. Что тут говорить, в нём даже не описан оператор if! Да и компилятор скорее всего будет падать. Но всё ещё впереди, как говорится: лиха беда начало!
Исходники выложил на ГитХаб, а вот бинарник.
Смотрим, тестируем, присоединяемся к написанию нового языка программирования Cj!