CodeLibraty
36 subscribers
102 photos
25 videos
2 files
31 links
Официальный TG канал Code Libraty team,
с новостями об обновлениях
в нашем сообществе.

Наши проекты:
RytonStudio, Ryton,
BlockCode, Termian,
Download Telegram
приветствую!

хотел сегодня выпустить релиз языка и ide, угадайте что случилось. на ровном месте сдох компонент языка .
я буквально ничего с менеджером окружения не делал, но он решил что работать по выходным не будет.
за весь день, мыслей про само устранение было больше чем желание продолжать.
всё таки я пережил эту отладку, и вероятно если всё перестанет идти через жопу, релиз ide и языка будут завтра.
😱1
чтош. всё прошло хорошо. deb пакет собран для линукс. под винду я пытался собрать, но либо оно работало ПИЗДЕЦ как медленно ,либо вообще не работало. Но не партесь, у вас всё ещё есть WSL, просто установите его и запустите скрипт который быстро всё установит :). релиз языка языка и ide уже точно завтра на гитхабе >:D.
ссылка: https://github.com/CodeLibraty/RytonLang
РЕЛИЗ!

На гитхабе уже доступны для скачивания deb-пакеты для - Языка, IDE и пакетного менеджера! :D

ссылка на гитхаб - https://github.com/orgs/CodeLibraty/repositories

Пожалуй не недельку отдохну от Ryton и IDE. Доделаю бэк на DevRhythm. Как-то язык пиарить начну, те же туториалы на ютубе выкладывать
🔥3
Приветствую!

Экосистема Райтон пока-что на базовом уровне, но к альфе 0.1.1 хочу добавить несколько больших фреймвороков - MetaEngine(игровой движок)
PowerAPI(мощьный веб фреймворк)
QuantUI(для создания десктоп программ на базе PyQt6)

кто уже опробовал первую версию языка? какие предложения по улучшению?
райтона теперь есть сборщик мусора который может в разных режимах. режим которого можно менять через конфигрурацию языка прямо из кода
👍1
Приветствую!

как насчёт маскота Ryton?
Мангуст - Ryti!

ещё не до конца прорисованный, но я только на это целый день потратил
Приветствую!

Я наконец доделал систему сборки RyX файлов!
RyX(Ryton eXecute) это - формат и файла, который позволяет упаковать весь проект в один файл.
Всё что нужно для запуска это установленный Ryton.
Его можно как запускать без установки так и установить в систему или локально в папку пользователя.
Нужен для удобного и безпасного распростронения программ на Ryton!

Для таких программ будет отдельный репозиторий из которых можно будет установить их.

если я всё-таки смогу закомпилить RunTime Райтона под Шинду то и на неё можно будет ставить программы на райтон
Приветствую!

Я доделал остальной toolchain для сборки и публикации райтон приложений. сделал метаданные для RyX и систему подписей и проверку, сделал GUI установщик пакетов, модуль для взаимодействия с утилитами линукс. на данный момент занимаюсь статическим анализатором кода. планирую полностью перенести райтон с регулярок на Lark с AST и реализовать JIT на llvm, потому что чистый Python всё ещё очень медленный и хочется сделать Ryton хотя бы не медленее lua и java.
🔥2
доделал наконец анализатор синтаксиса, и добавил удобный вывод для всех типов ошибок
🔥2
я не смог реализовать компиляцию райтона в LLVM. вернее, это не целесообразно - ибо переход на LLVM означает что: никаких python библиотек, и всю кодовую базу надо будет переписывать. И я НЕ знаю пожалею ли я об этом, но я решил, что буду писать ещё один язык - Maz. чистый компилируемый язык, по задумке он должен быть быстрым, простым и встраиваемым - он должен работать с Cpython api, чтобы была возможность из питон кода вызывать фунции на Maz. такой Lua от мира системщины.
вот так приблизительно должен выглядеть синтаксис
; черновик синактсиса языка Maz
use std ; импорт станадртных функций - log, input

memory_for{'name':object_fn | 10} ; 10 килобайт веделяется функции 'name' на всё про всё, это также касается и второй части которой передастся вся память если первая завершится быстрее
; паияьб между двумя паралельными частями фунции делится равномерно

memory_for{'name':object_var | 10}
; object это объект

; типы переменных не изменяемы

fn name{arg1=str|arg2=int} : NULL = [
; первая часть фунции
output : dict = std::math.call_func_from_math{NULL} ; местный return
] : NULL = [
; вторая часть функции
NULL ; если функция пустая
(
тут тоже любой код
это просто деление функции на зоны
между которыми память равная а выполняются они паралельно
)
; ( и ) это много-строчный коментарий и многострочный текст
]

; блоки кода на [ и ] а = и ещё [ ] - означает паральное выполнение
mystruct = struct = [
'это массив' : str | 'по дефолту' : str | 10 : int |
{
'ассациотивный массив' = 'ключ слева а это значение' | ; резделение всего через сивол |
} : str |
]

std::log{text=(
многострочный текст в консоли
)}

const var_name : dict = ['переменная':str|'как массив':str]


std::log{text=var_name}

; обязательно указывать тот аругмент к которому ты даёшь значение

; если нет аргуентов то передаем NULL типо - ничего
memory_clear{NULL}
👍1
Из интрересного, я решил всё таки перенести Ryton целиком на его Virtual Machine и байткод.
байткод получился асемблер подобным, и по факту самостоятельный язык по верх которого будет компилятор райтон синтаксиса.
Вот пример RVM байткода, Rasmble:
# Пример программы для сложения двух типизированных чисел в цикле
.function typedAddLoop
.locals 2 # sum, i

# Инициализация переменных
push 0 typed # Типизированный ноль
store 0 # sum = 0

push 0 typed # Типизированный ноль
store 1 # i = 0

.label loop # Метка должна быть на отдельной строке
load 1 # Загружаем i на стек
push 99 typed # Загружаем 99 на стек
lt # Сравниваем i < 99
jz end # Если i >= 99, выходим из цикла

# Тело цикла: sum = sum + 2
load 0 # Загружаем sum на стек
push 2 typed # Загружаем 2 на стек
typed_add # Складываем
store 0 # Сохраняем результат в sum

# i = i + 1
load 1 # Загружаем i на стек
push 1 typed # Загружаем 1 на стек
typed_add # Складываем
store 1 # Сохраняем результат в i

jmp loop # Возвращаемся к началу цикла

.label end # Метка должна быть на отдельной строке

# Загружаем результат на стек перед завершением
load 0
halt

- выполняется моментально, минимальные накладные расходы, типизация на уровне байткода.

А главное, он написан на Nim и сможет работать даже на Windows.
Хотя некоторые библиотеки работать не будут потому что нацелены на линукс(всё же райтон это аналог C# для линукс систем),
но всё же поддержка Окон лишним не будет ¯\_(ツ)_/¯

если есть вопросы или предложения по VM и Rasmble то пишите, я обязательно отвечу ;)
👍1
приветствую!

Мне показалось что писать на Rasmble не удобно и компилятор под такой байткод писать будет не удобно, и я добавил нового синтаксиса
  .include "stdlib/macros/math.macro" # импортируем макрос из стандартной библиотеки

.proc test # создаём процедуру (местная функция)
.locals 2 # выделяем две ячейки стека для хранения значений
push 10 # добовляем в 0 ячейку стека значение 10
push 20 # добовляем в 1 ячейку стека значение 20
@addprint(0, 1) # вызываем макрос из модуля и передаём ячейки со значениями
.end proc # завершаем код процедуры

.macro start func # создаём макрос с аргументами
call $func # используем аргмент
halt # завершаем выполнение
.end macro # завершаем блок макроса

@start(test) # передаём процедуру в макрос


на RVM можно будет писать свои языки программирования гораздо проще.
по бенчмаркам:
- RVM быстрее CPython в 3-6 раз в вычислениях, и быстрее в 2-3 раза при работе со строками.
- быстрее Lua в 1.5 - 2 раза.
- одинаково с jvm в математике, но со строками уступает jvm на 10-20%.

в будущем в RVM будет JIT компиляция кода для ещё большей скорости работы.
остаётся доделать парсер и API и можно переписывать Ryton на RVM основу, и за одно переносить стандартную библиотеку с питона на nim.
👍1
Приветствую!

Я переписал полностью Ryton компилятор. Теперь Ryton может компилироватся в бинарники и exe-шники - минуя медленный Python.
По скорости сравним с C/C++, при этом совместимость с Python модулями и JVM остаётся, и добовляется экосистема языка Nim.
Теперь райтон сможет работать на Windows БЕЗ КОМПРОМИСНО!
Остаётся переписать станадртную библиотеку под новый синтаксис и сделать анализатор синатксиса как в прошлой реализации.

новый видо-изменённый синтаксис:
func Main(number:Int = 1):String !(inline) {
if number == 1 {
return "1!"
} else {
return "Hello world"
}
}

- Модификаторы теперь групируются с помощью () и ,
- Возвращаемое занчение проверяется автоматически без дополнительных Модификаторов
- Весь язык стал более типизированным
👍2
фуух... сегодня сделал нормальный сайт для Ryton и его доки. осталось только домен нормальный найти.
уже доступен по временному домену - https://ryton.vercel.app/
Аж React изучал для этого, но результат того стоил)
Обновление синтаксиса Ryton!

// Импорт модулей
module import {
std.Core.stdTypes // Базовые типы языка
std.Core.stdModifiers // Модификаторы функций
}

// Объявление класса с множественным наследованием
pack MainPack :: ParentPack1 | ParentPack2 {

</**********************************************************
* Функция с модификаторами типов и поведения: *
* !Int - non-null целое число *
* ?Float32 - опциональное число с плавающей точкой *
* !Float - возвращает non-null float *
* !(trace, metrics) - включает трейсинг и сбор метрик *
************************************************************/>
func calcs(n: !Int, a: ?Float32):!Float !(trace, metrics) {
// Однострочный условный блок
if n <= 1 { print(n) }

// Блок проверки типа с обработкой ошибки
<Float:
error("type error in lambda myfunc")
> val myFunc = lambda(a: Int, b: Int):Int {
output a + b
}

// Простая лямбда без параметров и возвращаемого значения
def result = lambda {
echo("this is a function")
}

// Лямбда с non-null параметром и возвращаемым значением
def notmyfunc = lambda (arg: !Int):!Float {
print("this is a lambda function")
output "my string"
}

// Блок проверки типа с преобразованием
<Float:
echo("this is a float")
q = toFloat(q)
> def q = n / 2.8

// Краткий блок проверки типа
<Float> def pq = q / 1.9

output s
}
}


*Система модулей*:
- module import позволяет импортировать модули в блочном стиле
- Поддерживает вложенные пути (std.Core.stdTypes)
- Можно импортировать несколько модулей в одном блоке

*Система классов*:
- pack определяет класс/пакет
- Поддерживает множественное наследование через ::
- Родительские классы разделяются |
- Тело класса содержит методы и свойства

*Система типов*:
- ! означает non-null тип
- ? означает опциональный тип
- Поддержка базовых типов (Int, Float, Float32)
- Блоки проверки типов через <Type: code >
- Краткая форма проверки типа <Type>

*Функции и лямбды*:
- func для объявления именованных функций
- lambda для анонимных функций
- Поддержка модификаторов функций !(trace, metrics)
- Типизированные параметры и возвращаемые значения
- output для возврата значений

*Переменные*:
- def для изменяемых переменных
- val для неизменяемых переменных
- Поддержка вывода типов
- Блочная область видимости

компилятор в будущем будет работать в линукс, Шиндовс и Мак Дональдс ОС, и даже в браузере через webasmbley. будут писать систему сборки для компиляции программы на Ryton под любую микроволновку. библитеки для создания игр и приложений . будет и ПОЛНОЦЕННЫЙ web фреймворк на подобии React, ведь Ryton теперь может и в JavaScripts, и даже в C и в C++ компилироваться. ну и когда доделаю всё это перепишу RytonStudio на самом Ryton и сделаю аналогичную программу под Android телефоны. вообще без понятия сколько это займёт времени, можно только сказать что много, тем более что всё это мне в одно ебло реализовывать...

👍2
нейросети отличные помощники 👍
👍1😁1
в VSCode уже доступно расширение для поддержки подсветки Ryton синтаксиса
👍3
В Ryton теперь есть switch и одно-строчные блоки!

switch value {
| 1 => print("1")
| 2 {
print("2")
}
| 3 and 4 => print("3 and 4")
| 5 or 6 => print("5 or 6")
| 7..10 => print("7..10")
| 11...15 => print("11...15")
| else => print("else")
}

func test(a: Int, b: Int) =>
a + b


смешание двух стилей блоков может улучшить читаемость кода за счёт уменьшенной вложенности в блоках где она не нужна:
func sayHello(name: String) => 
if name == "" => noop
else => print("hello ", name)

или классический, C подобный:
func sayHello(name: String) {
if name == "" {
noop
}
else {
print("hello ", name)
}
}

или смешанный:
func sayHello(name: String) {
if name == "" => noop
else =>
print("hello ", name)
}

первый явно более кратко, но при этом не теряет читаемости, а третий как компромисс между первым и вторым
Приветствую!

Теперь в Райтон есть структуры и перечесления!
struct myStruct {
x: Int,
y: Int,
z: Int = 10,
}

enum Status {
Success,
Error,

// это встроенные методы которые будут работать с данными этого перечисления или структуры
func isOk: Bool => output this == Success
func message: String {
switch this {
case Success => output "Operation completed"
case Error => output "Operation failed"
}
}
}

func Main {
def stat: Status = Success // создаём переменную с нашим эдаким "типом данных" и присваиваем ему значение
print(stat.message()) // используем его встроенную функцию
// получаем Bool подобный тип данных

def myStruct = newmyStruct(x = 10, y = 20) // при создании структуры, райтон компилятор автоматически генерирует функцию с именем new[название структуры] - это функция для инициализации структуры
// мы создали наш новый экземпляр структуры и записали в переменную,
// теперь можем обращается к ней через переменную:
print(myStruct.x) // выведет - 10
print(myStruct.y) // выведет - 20
print(myStruct.z) // выведет - 10 т.к. у этого поля есть значение по умолчанию
}

При всём этом у райтон будут и обычные классы как и в любом другом языке.
---
Также у райтон теперь есть формат интерфейсов благодаря которым он может параллельно компилировать несколько файлов и проверять их семантику.

Код на райтон уже сейчас работает почти со скоростью C++!
---
в стандартной библиотеке уже 8 модулей для:
- работы с запросами и ответами
- работы с файловой системой для Шindows и posix
- логирования
- для выполнения комманд в оболочке (пока что только на posix, на винде другая коммандная оболочка и на нормальную реализацию нужно время)
- работы с путями в системе
---
Сейчас работаю на системой сборки проектов - ProjForge, с помощью которого можно будет собирать приложения на райтон под винду, линух и андроид.


---

и да, райтон будет под винду, ибо терять такой огромный рынок не хочется, но у этого есть нюанс - райтон оптимизируется под линукс ядро, и не все оптимизации будут работать на винде. скажите спасибо мелкомягким(microsoft) за класный(НЕТ) API к их системе.
👍1
Media is too big
VIEW IN TELEGRAM
Для Ryton будет UI библиотека на базе sdl и вектороной графики - Ryton ToolKit(RTK). Запускается на Windows, Linux и Android. Cтиль полностью адаптирован из Android 13 - Google Material You. Для написания интерфейсов будет отдельный язык разметки интерфейсов - .rui(rytonUI) - который будет работать на RBT - Ryton Bytecode Tech.