Кроссплатформенный, быстрый, Kotlin-подобный ЯП!

Всё, что касается программирования на старых языках или для старых систем

Re: Кроссплатформенный, быстрый, Kotlin-подобный ЯП!

Сообщение StoYazykov » 05 июл 2026, 14:13

clihlt писал(а):
StoYazykov писал(а):Задавайте!
Задаю: где можно почитать полное на данный момент времени описание вашего языка программирования?

 Развернуть:
Для примера, возмём простейшую программку:
Код: Выделить всё
@println(2)

А теперь разберём её по кусочкам.
@ - это вызов, нативной функции. Функция должна быть записана в imports-table.txt. Если компилятор говорит "Error: Unimported function!", то её надо добавить. Но про это ниже.
Далее, идёт собственно имя функции. println входит в стандартный import-table.txt. Так что беспокоится нам не о чём.
Далее идёт, как и во всех ЯП, открывающая скобка, после чего следует аргумент функции. Заметим, что вместо 2 можно написать и 1+1, и даже (5+3)-6 - компилятор это превратит в соответствующий байт-код.
Потом идёт закрывающая скобка.
И всё!
Сохраняем программу, в файл например demo.txt. Выполняем: ./chkc demo.txt demo.cvm. (в системе, должна быть установлена переменная среды CHKALOV, указывающая на каталог, где лежат chkc, chkvm и прочие. На Линухе это делается так: export CHKALOV=/root/c/ (у меня так)).
Посмотрим, что нагенерировал компилятор. Например, hexdump'ом.
hexdump -C...
Код: Выделить всё
root@admin:~/c# hexdump demo.cvm -C
00000000  00 01 02 05 01 00 00 00  00 00 00 00 07 0e 00 00  |................|
00000010  00 00 00 00 00 73 74 64  63 6f 6e 2e 70 72 69 6e  |.....stdcon.prin|
00000020  74 6c 6e 0d 00 00 00 00  00 00 00 09 04 02 00 00  |tln.............|
00000030  00 00 00 00 00 11 0e 00                           |........|
00000038
root@admin:~/c#

Ой, сколько всяких непонятных буковок и символов... (C) Винни-Пух. Но не так уж они и страшны и вполне понятны.
00 01 02 05 - это magic'еское число, сигнатура.
Далее идёт 01 и 7 байт нулей. Размер пула.
Потом идёт 07 0e - размер строки "stdcon.println", после чего идут нули, собственно строка, а потом опять 8 байт размера байт-кода и начинается, собственно сам байт-код...
09 - это PUSH. Потом идёт 04 - тип LONG. И наше число 02 00 00 00 00 00 00 00. (да, по, сути, тип должен быть XSHORT, так как оно умещается в диапазон -128...127, но переезд на чистый Цы заставил меня захардкодить некоторые места (например, всем числам выставить тип LONG). К тому же, скоро вся эта костыльная система типов будет снесена куда подальше, и заменена более совершенной и экономичной. Так что нет смысла, её лечить перед смертью).
Впрочем, я отвлёкся. Пойдём дальше.
11 - это CALL, потом идёт тип 0e (STR1, строка, точнее её индекс в пуле, который умещается в 0...255 - тут я не захардкодил), один байт 00 (индекс пула 0, самая первая строка), и... усё!
А теперь запустим нашу программулину:
./chkvm demo.cvm
И... Тадааам!
Код: Выделить всё
root@admin:~/c# ./chkvm demo.cvm
Readed: pool [0] as value stdcon.println !
t: 13 !
push!
2
root@admin:~/c#

 Развернуть: P. S. Про import-table
imports-table.txt - это файлик, содержащий в себе, данные об нативных функциях. В стандартной поставке он выглядит так:
Код: Выделить всё
$DOCTYPE CHKALOV IMPORTS <1.00>
%stdcon
+println

$DOCTYPE CHKALOV IMPORTS <1.00> - это сигнатура.
% - это начало секции, то бишь файла $CHKALOV/ИМЯ_СЕКЦИИ/libИМЯ_СЕКЦИИ.so. В нашем случае это будет - libstdcon.so.
А вот плюсик - это определение функции. В нашем случае, функция носит название println.И при выполнении программы, ВМ загрузит в память, библиотеку $CHKALOV/stdcon/libstdcon.so, и вызовет из неё нативную функцию println.
Вы спросите, а почему же, нативка без аргументов? Отвечу. ЛЮБАЯ нативная функция, принимает, два аргумента: size_t argc и Slot *argp. argc - это кол-во аргументов, а argp - указатель, на первый аргумент.
Что такое Slot? - Да ничего особенного. Это, просто структура, хранящая в себе: 1 байт типа, и 8 байт значения.
В общем-то, вот и всё.
Последний раз редактировалось StoYazykov 05 июл 2026, 15:28, всего редактировалось 2 раз(а).
Самое тёмное дело - это строки в C


Сайт прогр-я: http://revival.narod.ws

Изображение


Штирлиц сидел за компом возле открытого окна. Неожиданно на экране появилось новое мыло. Штирлиц выбросил его обратно и пошёл за мокрой тряпкой - оттирать мыло с клавиатуры.
Аватара пользователя
StoYazykov
Мастер Даунгрейда
 
Сообщения: 230
Зарегистрирован: 25 дек 2023, 11:25
Откуда: Казань
Железо: Intel Pentium MMX 166 MHz, 8 и 2 ГБ HDD, 80 MB RAM; AMD A8-6410 APU with Radeon R5 Graphics, 16 ГБ

Re: Кроссплатформенный, быстрый, Kotlin-подобный ЯП!

Сообщение StoYazykov » 06 июл 2026, 21:38

В общем, я переписал систему типов. Теперь вместо STR1...STR8, задаётся в компиляторе: STR | 1...8.

Теперь, например, строка занимающая 1 байт, кодируется как 61h. 6 - это тип STR, 1 - собственно, количество байт.
Собирается, типоразмерный байт так: ТИП | РАЗМЕР.
И кода, стало меньше (лишнего).
Кроме того, теперь ЯП работает под виндой - надо только, ввести make win для виндовой сборки. Соберутся и EXE'шники, и DLL'ки.
Самое тёмное дело - это строки в C


Сайт прогр-я: http://revival.narod.ws

Изображение


Штирлиц сидел за компом возле открытого окна. Неожиданно на экране появилось новое мыло. Штирлиц выбросил его обратно и пошёл за мокрой тряпкой - оттирать мыло с клавиатуры.
Аватара пользователя
StoYazykov
Мастер Даунгрейда
 
Сообщения: 230
Зарегистрирован: 25 дек 2023, 11:25
Откуда: Казань
Железо: Intel Pentium MMX 166 MHz, 8 и 2 ГБ HDD, 80 MB RAM; AMD A8-6410 APU with Radeon R5 Graphics, 16 ГБ

Re: Кроссплатформенный, быстрый, Kotlin-подобный ЯП!

Сообщение IBMForever » 07 июл 2026, 04:33

StoYazykov писал(а):
clihlt писал(а):
StoYazykov писал(а):Задавайте!
Задаю: где можно почитать полное на данный момент времени описание вашего языка программирования?

 Развернуть:
Для примера, возмём простейшую программку:
Код: Выделить всё
@println(2)

А теперь разберём её по кусочкам.
@ - это вызов, нативной функции. Функция должна быть записана в imports-table.txt. Если компилятор говорит "Error: Unimported function!", то её надо добавить. Но про это ниже.
Далее, идёт собственно имя функции. println входит в стандартный import-table.txt. Так что беспокоится нам не о чём.
Далее идёт, как и во всех ЯП, открывающая скобка, после чего следует аргумент функции. Заметим, что вместо 2 можно написать и 1+1, и даже (5+3)-6 - компилятор это превратит в соответствующий байт-код.
Потом идёт закрывающая скобка.
И всё!
Сохраняем программу, в файл например demo.txt. Выполняем: ./chkc demo.txt demo.cvm. (в системе, должна быть установлена переменная среды CHKALOV, указывающая на каталог, где лежат chkc, chkvm и прочие. На Линухе это делается так: export CHKALOV=/root/c/ (у меня так)).
Посмотрим, что нагенерировал компилятор. Например, hexdump'ом.
hexdump -C...
Код: Выделить всё
root@admin:~/c# hexdump demo.cvm -C
00000000  00 01 02 05 01 00 00 00  00 00 00 00 07 0e 00 00  |................|
00000010  00 00 00 00 00 73 74 64  63 6f 6e 2e 70 72 69 6e  |.....stdcon.prin|
00000020  74 6c 6e 0d 00 00 00 00  00 00 00 09 04 02 00 00  |tln.............|
00000030  00 00 00 00 00 11 0e 00                           |........|
00000038
root@admin:~/c#

Ой, сколько всяких непонятных буковок и символов... (C) Винни-Пух. Но не так уж они и страшны и вполне понятны.
00 01 02 05 - это magic'еское число, сигнатура.
Далее идёт 01 и 7 байт нулей. Размер пула.
Потом идёт 07 0e - размер строки "stdcon.println", после чего идут нули, собственно строка, а потом опять 8 байт размера байт-кода и начинается, собственно сам байт-код...
09 - это PUSH. Потом идёт 04 - тип LONG. И наше число 02 00 00 00 00 00 00 00. (да, по, сути, тип должен быть XSHORT, так как оно умещается в диапазон -128...127, но переезд на чистый Цы заставил меня захардкодить некоторые места (например, всем числам выставить тип LONG). К тому же, скоро вся эта костыльная система типов будет снесена куда подальше, и заменена более совершенной и экономичной. Так что нет смысла, её лечить перед смертью).
Впрочем, я отвлёкся. Пойдём дальше.
11 - это CALL, потом идёт тип 0e (STR1, строка, точнее её индекс в пуле, который умещается в 0...255 - тут я не захардкодил), один байт 00 (индекс пула 0, самая первая строка), и... усё!
А теперь запустим нашу программулину:
./chkvm demo.cvm
И... Тадааам!
Код: Выделить всё
root@admin:~/c# ./chkvm demo.cvm
Readed: pool [0] as value stdcon.println !
t: 13 !
push!
2
root@admin:~/c#

 Развернуть: P. S. Про import-table
imports-table.txt - это файлик, содержащий в себе, данные об нативных функциях. В стандартной поставке он выглядит так:
Код: Выделить всё
$DOCTYPE CHKALOV IMPORTS <1.00>
%stdcon
+println

$DOCTYPE CHKALOV IMPORTS <1.00> - это сигнатура.
% - это начало секции, то бишь файла $CHKALOV/ИМЯ_СЕКЦИИ/libИМЯ_СЕКЦИИ.so. В нашем случае это будет - libstdcon.so.
А вот плюсик - это определение функции. В нашем случае, функция носит название println.И при выполнении программы, ВМ загрузит в память, библиотеку $CHKALOV/stdcon/libstdcon.so, и вызовет из неё нативную функцию println.
Вы спросите, а почему же, нативка без аргументов? Отвечу. ЛЮБАЯ нативная функция, принимает, два аргумента: size_t argc и Slot *argp. argc - это кол-во аргументов, а argp - указатель, на первый аргумент.
Что такое Slot? - Да ничего особенного. Это, просто структура, хранящая в себе: 1 байт типа, и 8 байт значения.
В общем-то, вот и всё.

Спасибо за практические пояснения, мне как новичку они особо полезны.
/с# что обозначает?
Аватара пользователя
IBMForever
Мастер Даунгрейда
 
Сообщения: 217
Зарегистрирован: 24 авг 2022, 00:23
Железо: IBM PC 286 AT

Re: Кроссплатформенный, быстрый, Kotlin-подобный ЯП!

Сообщение clihlt » 07 июл 2026, 08:43

IBMForever писал(а):Спасибо за практические пояснения, мне как новичку они особо полезны.
Пояснять там нечего, т.к. описание языка отсутствует. Очень похоже, что я зык сам по себе отсутствует не только в виде его описания, но и в вашей голове.
С уважением,
Владислав Васильев (aka clihlt).
Аватара пользователя
clihlt
Мастер Даунгрейда
 
Сообщения: 590
Зарегистрирован: 20 мар 2023, 21:17
Откуда: Брянск, СССР

Re: Кроссплатформенный, быстрый, Kotlin-подобный ЯП!

Сообщение IBMForever » 07 июл 2026, 08:51

clihlt писал(а):
IBMForever писал(а):Спасибо за практические пояснения, мне как новичку они особо полезны.
Пояснять там нечего, т.к. описание языка отсутствует. Очень похоже, что я зык сам по себе отсутствует не только в виде его описания, но и в вашей голове.

Для меня полезные пояснения, а ещё полезно наблюдать за созданием языка.
А описывать язык пока ещё рано, тем более публично.
Аватара пользователя
IBMForever
Мастер Даунгрейда
 
Сообщения: 217
Зарегистрирован: 24 авг 2022, 00:23
Железо: IBM PC 286 AT

Re: Кроссплатформенный, быстрый, Kotlin-подобный ЯП!

Сообщение clihlt » 07 июл 2026, 09:14

IBMForever писал(а):А описывать язык пока ещё рано, тем более публично.
Вообще-то создание языка начинается с его описания (я уж не говорю об изучении предметной области, для которой он создаётся и ниши, которую он в ней должен занять), а не с его реализации, хотя в современном зазеркалье возможно всё.
С уважением,
Владислав Васильев (aka clihlt).
Аватара пользователя
clihlt
Мастер Даунгрейда
 
Сообщения: 590
Зарегистрирован: 20 мар 2023, 21:17
Откуда: Брянск, СССР

Re: Кроссплатформенный, быстрый, Kotlin-подобный ЯП!

Сообщение StoYazykov » 07 июл 2026, 12:26

clihlt,
описание у меня уже есть. И оно совершенно опережает текущую версию языка. Там уже, описан весь синтаксис, классы, переменные, функции и т. д. и т. п.
Делал его, чтобы самому знать, что и как реализовывать.

IBMForever писал(а):/с# что обозначает?

IBMFOrever, вы никогда, Linux'ом, не пользовались?
У Линукса, такая командная строка.
~/c# - это значит, что сейчас, я нахожусь в директории /root/c/. Просто, тильда обозначает, домашнюю директорию текущего юзера (я под рутом, так что у меня, как раз /root/).
А # в конце - это значит, что я, под рутом.
Если я, например, переключусь на пользователя oem, то будет приглашение такое:
Код: Выделить всё
oem@admin:~$

То есть, доллар в конце, обозначает "рутовость" текущего пользователя.
Вообще, советую Линукс. Там, всё скачивается, не с подозрительных сайтов, где ещё может не подойти на текущую версию ОС (как в Win'де), а просто:
sudo apt install имя_проги
Например, sudo apt install firefox-esr
И всё! Программа, сама качается и ставится.
sudo - это сокращение, от SuperUser DO. То есть, как в винде, выполнить от имени администратора.
И мало того, что скачивать программы удобно - это, не суть важно. Линукс, ещё и очень удобный. Все драйвера, в комплекте. И он никогда не будет тебе, сувать окошко с предложением его активировать, или запрещать что-то. В Линуксе, ты сам хозяин компа. Можешь хоть, весь диск затереть жёсткий. Ни слова не скажет Линукс.
И ещё он, можно сказать, никогда не висит.
ЗЫ: Самый лучший Линукс, как мне кажется - это Debian 12-ый.
Последний раз редактировалось StoYazykov 07 июл 2026, 12:27, всего редактировалось 1 раз.
Самое тёмное дело - это строки в C


Сайт прогр-я: http://revival.narod.ws

Изображение


Штирлиц сидел за компом возле открытого окна. Неожиданно на экране появилось новое мыло. Штирлиц выбросил его обратно и пошёл за мокрой тряпкой - оттирать мыло с клавиатуры.
Аватара пользователя
StoYazykov
Мастер Даунгрейда
 
Сообщения: 230
Зарегистрирован: 25 дек 2023, 11:25
Откуда: Казань
Железо: Intel Pentium MMX 166 MHz, 8 и 2 ГБ HDD, 80 MB RAM; AMD A8-6410 APU with Radeon R5 Graphics, 16 ГБ

Re: Кроссплатформенный, быстрый, Kotlin-подобный ЯП!

Сообщение KPG » 07 июл 2026, 18:38

Так, совсем непонятно, почему или за счёт чего он будет быстрым (в каких условиях и для каких задач)
и почему пользователи захотят его использовать?

P.S. Некоторый не показательный рейтинг языков программирования по количеству решённых задач на rosettacode.org
https://rosettacode.org/wiki/Rank_languages/Popularity
Последний раз редактировалось KPG 07 июл 2026, 18:50, всего редактировалось 1 раз.
KPG
Мастер Даунгрейда
 
Сообщения: 446
Зарегистрирован: 21 окт 2015, 20:53

Re: Кроссплатформенный, быстрый, Kotlin-подобный ЯП!

Сообщение StoYazykov » Вчера, 16:34

За прошедшие дни, я сделал довольно много работы.
1. Я добавил ALLOC, SETFIELD/GETFIELD в ВМ.
2. Теперь в строке можно написать \n и это будет переносом строки.
3. Частично добавлен флаг -d - если выполнять программу без него, то весь отладочный вывод скрывается. Если с ним - в консоль вываливается куча всякой гадости (это только в ВМ, в компиляторе гадость вываливается всегда).
4. Раскомментированы участки кода, отвечающие за переменные. Также пофикшен баг в sco_gv(), состоящий в том, что при нахождении переменной, давалось только её имя, а id и тип оставались "мусорными".
Самое тёмное дело - это строки в C


Сайт прогр-я: http://revival.narod.ws

Изображение


Штирлиц сидел за компом возле открытого окна. Неожиданно на экране появилось новое мыло. Штирлиц выбросил его обратно и пошёл за мокрой тряпкой - оттирать мыло с клавиатуры.
Аватара пользователя
StoYazykov
Мастер Даунгрейда
 
Сообщения: 230
Зарегистрирован: 25 дек 2023, 11:25
Откуда: Казань
Железо: Intel Pentium MMX 166 MHz, 8 и 2 ГБ HDD, 80 MB RAM; AMD A8-6410 APU with Radeon R5 Graphics, 16 ГБ

Re: Кроссплатформенный, быстрый, Kotlin-подобный ЯП!

Сообщение KPG » Вчера, 17:27

StoYazykov писал(а):За прошедшие дни, я сделал довольно много работы.

Это всё хорошо,
за исключением не ответов на неудобные вопросы выше в топике.

P.S. Похоже на цитату привеедённую ниже из статьи с хабр: "Мне было лень учиться, и я навайбкодил себе платформу для обучения" https://habr.com/ru/articles/1057840/ (в Вашем случае учить и применять "чужие" языки программирования - создай свой)
@"Дальше сработала классика прокрастинации: не хочется решать задачу, строй инструмент для неё."
(какую задачу в Вашем случае?)

P.P.S. Своей "крутостью" можно восхищаться долго, пока нет вопроса от обычных Юзеров - А,нам что с того?
Последний раз редактировалось KPG 10 июл 2026, 17:42, всего редактировалось 3 раз(а).
KPG
Мастер Даунгрейда
 
Сообщения: 446
Зарегистрирован: 21 окт 2015, 20:53

Re: Кроссплатформенный, быстрый, Kotlin-подобный ЯП!

Сообщение StoYazykov » Вчера, 17:40

Отвечу на ваши вопросы.
Q: За счёт чего он будет быстрым?
A: За счёт того, что он написан на чистом C и весьма экономичен. Для скорости я и перешёл с C++ на C.

Q: Почему пользователи захотят использовать именно его?
A: Пока - нипочему. Вы знаете, что он ещё пишется. А вообще, он планируется как Kotlin, который будет работать на Win95.

Q: Для каких он ниш будет предназначен?
A: Универсальный.
Последний раз редактировалось StoYazykov 10 июл 2026, 17:41, всего редактировалось 2 раз(а).
Самое тёмное дело - это строки в C


Сайт прогр-я: http://revival.narod.ws

Изображение


Штирлиц сидел за компом возле открытого окна. Неожиданно на экране появилось новое мыло. Штирлиц выбросил его обратно и пошёл за мокрой тряпкой - оттирать мыло с клавиатуры.
Аватара пользователя
StoYazykov
Мастер Даунгрейда
 
Сообщения: 230
Зарегистрирован: 25 дек 2023, 11:25
Откуда: Казань
Железо: Intel Pentium MMX 166 MHz, 8 и 2 ГБ HDD, 80 MB RAM; AMD A8-6410 APU with Radeon R5 Graphics, 16 ГБ

Re: Кроссплатформенный, быстрый, Kotlin-подобный ЯП!

Сообщение KPG » Вчера, 17:56

StoYazykov писал(а):A: За счёт того, что он написан на чистом C и весьма экономичен. Для скорости я и перешёл с C++ на C.

К, примеру, в аналогии, gForth ,( как и другие Форт-системы написанные на Си весьма не быстры) при затраченных усилиях на его ускорение, а в основе её далеко не байт кодд, поэтому и озвучил вопрос Выше и Ваш ответ не может являтся аргументом в быстроте кода порождённым создаваемым языком.
А, Форт, к тому же, не не обременяет себя в выстраивании синтаксиса языка для перевода его наполнения в семантику.
Последний раз редактировалось KPG 10 июл 2026, 18:03, всего редактировалось 4 раз(а).
KPG
Мастер Даунгрейда
 
Сообщения: 446
Зарегистрирован: 21 окт 2015, 20:53

Re: Кроссплатформенный, быстрый, Kotlin-подобный ЯП!

Сообщение oldpcfan82 » Вчера, 19:46

StoYazykov, вот тут написано кратко как писать интерпретатор/компилятор см. http://www.codenet.ru/cat/Applications/ ... mpilators/ в книге по Си или Си++ автор Шилдт учит писать интерпретатор бейсик на языке си, и в МФТИ учат писать язык программирования, см. так-же https://habr.com/ru/articles/133780/
Аватара пользователя
oldpcfan82
Мастер Даунгрейда
 
Сообщения: 617
Зарегистрирован: 01 окт 2023, 22:57

Пред.

Вернуться в Программирование

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 9