The post has been translated automatically. Original language: Russian Russian
This is the second part of our series about the creation of a new Kazakh programming language. In the first article, we talked about the philosophical idea behind it.
So, we stopped at the fact that our language is based not on commands, but on images extracted from the depths of the proto-language. But how do you turn these images into something that a computer can understand? We needed the alphabet.
The first and most obvious way is to use the existing Latin alphabet. It's practical, convenient, and all the tools are ready for it. But this path contradicted our entire philosophy. The Latin alphabet is a legacy of the Roman Empire, which our concept considers as an antagonist of the world of freedom and the proto—language. To use it would be to build a new house on someone else's foundation.
Therefore, we made a bold, difficult, but conceptually clean decision: to create a new runic alphabet from scratch.
It should be not just a set of symbols, but a system where each rune is both a letter, an image, and a concept.
We have already said that we have found a bridge between sacred meaning and binary logic in the Moon/Sun pair. We have put this dualism at the core of our alphabet.:
- I (Ay) is the moon. The symbol of the passive state, data, information, false. This is the "0" of our system.
- Q (Kun) — The Sun. The symbol of the active state, action, energy, true. This is the "1" of our system.
This duality permeates everything. Variables (data) and functions (actions), the "off" and "on" states, data and metadata.
The second key was suggested to us by the phonetics of the Kazakh language itself — the law of synharmonism, the harmony of vowels. We have transferred this principle to the type system.:
- Solid sounds (juan: ah, oh, uh) began to denote specific, significant data types (value types): an integer, a string. Something that has "weight".
- Soft sounds (zhinishke: a, o, u) began to denote abstract, reference data types: pointers, interfaces. Something that is a "reflection" or "path" to the data.
To visually reflect this, we have created paired runes, where one is a mirror image or a modified reflection of the other.
- Solid type [a] (Askar — Peak of the mountain) -> Rune A. Symbol of stability.
- Soft type [æ] (Alem — Universe) -> Rune ∀. The same rune, but reversed. The symbol of "reflection", abstraction.
Based on these principles, we began to crystallize our alphabet, which received the working name "?". Each rune in it is the result of a long search for the perfect image for the fundamental concept of programming.
Here are a few key "words" of our new language:
The Rune | Keyword (Meaning) | The principle in YAP | Explanation |
Λ | Tau (Mountain) | Constant (immutability) | The symbol of the mountain, inviolability. Something that is established once and for all. |
— | Dala (Steppe) | Variable (mutability) | A symbol of vastness, a plain where everything can change. |
Π | Bass (The Beginning, the Gate) | Function/File header | The symbol of the gate or arch through which we enter the new code block. |
Y | Seshim (Solution) | Conditional operator (if) | The perfect graphics for a fork in the road, choosing one of two paths: the path of the Sun (Q) or the path of the Moon (I). |
↻ | Ainalym (Cycle, Rotation) | The loop operator | An intuitive symbol for repetition and renewal. |
→ | Nothing (Result, Consequence) | Returning a value from a function | An arrow indicating what "follows" from the operation of the function. |
⁞ | Iz (Trace) | Data output, logging | The symbol of a trace, dotted line, or record. Leave a "trace" of the program execution. |
As you can see, we are striving for a system where philosophy, phonetics, graphics and logic are a single, inseparable whole. Code in our language is not just text. It is a formula, a pattern, a sacred record where each symbol is in its place and has a deep meaning.
In the next article, we will show how these runic meanings add up to the first "sentences". We will demonstrate the basic syntax of the language and explain how its "brain" works — three "masters" (Lexer, Parser and Executor) who teach the machine to understand our code.
Thank you for staying with us on this journey.
Это вторая часть нашего цикла о создании нового казахстанского языка программирования. В первой статье мы рассказали о философской идее, лежащей в его основе.
Привет, Hub!
Итак, мы остановились на том, что в основе нашего языка лежат не команды, а образы, извлеченные из глубин праязыка. Но как превратить эти образы в то, что поймет компьютер? Нам нужен был алфавит.
Первый и самый очевидный путь — использовать существующую латиницу. Это практично, удобно, и все инструменты к этому готовы. Но этот путь противоречил всей нашей философии. Латиница — это наследие Римской империи, которую наша концепция рассматривает как антагониста мира свободы и праязыка. Использовать ее — значило бы строить новый дом на чужом фундаменте.
Поэтому мы приняли смелое, сложное, но концептуально чистое решение: создать с нуля новый рунический алфавит.
Это должен быть не просто набор символов, а система, где каждая руна является одновременно и буквой, и образом, и концепцией.
Принцип №1: Двоичность (Ай/Күн)
Мы уже говорили, что нашли мост между сакральным смыслом и двоичной логикой в паре Луна/Солнце. Мы заложили этот дуализм в ядро нашего алфавита:
- I (Ай) — Луна. Символ пассивного состояния, данных, информации, false. Это «0» нашей системы.
- Q (Күн) — Солнце. Символ активного состояния, действия, энергии, true. Это «1» нашей системы.
Эта двоичность пронизывает всё. Переменные (данные) и функции (действия), состояние "выключено" и "включено", данные и метаданные.
Принцип №2: Гармония (Твердость/Мягкость)
Второй ключ нам подсказала фонетика самого казахского языка — закон сингармонизма, гармония гласных. Мы перенесли этот принцип на систему типов:
- Твердые звуки (жуан: а, о, ұ) стали обозначать конкретные, значимые типы данных (value types): целое число, строка. То, что имеет «вес».
- Мягкие звуки (жіңішке: ә, ө, ү) стали обозначать абстрактные, ссылочные типы данных (reference types): указатели, интерфейсы. То, что является «отражением» или «путем» к данным.
Чтобы визуально отразить это, мы создали парные руны, где одна является зеркальным или измененным отражением другой.
- Твердый тип [a] (Асқар — Пик горы) -> Руна A. Символ устойчивости.
- Мягкий тип [æ] (Әлем — Вселенная) -> Руна ∀. Та же руна, но перевернутая. Символ «отражения», абстракции.
Складывая алфавит: Образ и Функция
Основываясь на этих принципах, мы начали кристаллизовать наш алфавит, который получил рабочее название «?». Каждая руна в нем — это результат долгого поиска идеального образа для фундаментального понятия программирования.
Вот несколько ключевых «слов» нашего нового языка:
Руна | Ключевое слово (Смысл) | Принцип в ЯП | Объяснение |
Λ | Тау (Гора) | Константа (неизменяемость) | Символ горы, незыблемости. То, что установлено раз и навсегда. |
— | Дала (Степь) | Переменная (изменяемость) | Символ простора, равнины, где все может измениться. |
Π | Бас (Начало, Врата) | Заголовок функции/файла | Символ врат или арки, через которые мы входим в новый блок кода. |
Y | Шешім (Решение) | Условный оператор (if) | Идеальная графика для развилки, выбора одного из двух путей: пути Солнца (Q) или пути Луны (I). |
↻ | Айналым (Цикл, Вращение) | Оператор цикла | Интуитивно понятный символ повторения и обновления. |
→ | Нәтиже (Результат, Следствие) | Возврат значения из функции | Стрелка, указывающая на то, что «вытекает» из работы функции. |
⁞ | Із (След) | Вывод данных, логирование | Символ следа, пунктирной линии, записи. Оставить «след» исполнения программы. |
Что дальше?
Как вы видите, мы стремимся к системе, где философия, фонетика, графика и логика являются единым, неразрывным целым. Код на нашем языке — это не просто текст. Это формула, узор, священная запись, где каждый символ находится на своем месте и имеет глубокий смысл.
В следующей статье мы покажем, как эти руны-смыслы складываются в первые «предложения». Мы продемонстрируем базовый синтаксис языка и объясним, как работает его «мозг» — три «мастера» (Лексер, Парсер и Исполнитель), которые учат машину понимать наш код.
Спасибо, что остаетесь с нами в этом путешествии.