Разбор фитч языка AsmX

Разбор фитч языка AsmX

славянский зажим яйцами

Эта статья посвещенна разбору сообщения пользователя @UsesAsmX в беседе комментариев канала @FullStack_Dev_2.

Оригинальный текст сообщения

Все тесты выполнены на новейшей версии от 16 августа 2023 года, 20.00

1) NeuralAI:

Честно, так и не понял, велась ли речь о файле https://github.com/langprogramming-AsmX/AsmX/blob/main/libs/ml.asmX или же о "Нейросети", лежащей в https://github.com/langprogramming-AsmX/AsmX/blob/main/tools/neural.js.

Первый файл содержит одну функцию, смысл которой в вычислении формулы k*x+b.

Вторый файл содержит код, предлагающий замены инструкциям и регистрам, написанным с ошибкой. Однако сама нейросеть не работаспособна:

@st исправлено не на @set, а на набор случайных инструкций.
Результат почти случаен и неправилен.
С @call чуть лучше, но очень далеко до идеала. Причём тут Label, например.
С регистрами ещё больше вариантов.


Внутри исходного кода neural.js никакой нейронной сети, кстати, не наблюдается, только два странных метода, связанных с фильтрацией массива. Ни вызова скрипта на питоне для отработки нейросети, ни, тем более, собственной нейро-библиотеки для javascript.

Оффтоп по нейросети:

Автор языка настаивает, что нейросеть там есть, однако на базовые вопросы в духе:

Какой токенайзер? Какие слои? Какая метрика была использована при обучении? Какие результаты на тренировочной и тестовой выборке?

Он не отвечает и удаляет мои сообщения без причины. Готов переписать данную секцию, если автор чётко укажет архитектуру нейросети и подтвердит её комментариями в коде.

Автор языка демонстрирует полное непонимание концепта нейросети
Ответ автора на аргументы

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

2)OS

Имеется ввиду MiniOS, она же, AsmXOS, на момент написания статьи. Заглянем в исходный код, папка https://github.com/langprogramming-AsmX/AsmX/tree/main/etc/os/AsmXOS. В папке на данный момент 1 подпапка и два файла исходного кода на языке, внимание, Javascript! Мало того, что это не операционная система, а всего лишь консольное приложение, так ещё и не на великом низкоуровневом языке AsmX, а на обычном высокоуровневом Javascript. Дальнейшее разбирательство в функционале и работоспособности считаю бесполезным, так как сама суть этого кода, как операционной системы на языке AsmX не соблюдена.

3)Builder

Так как автор отказывается пояснять этот пункт:

"Ответы" атвора на некоторые вопросы

Будем считать, что имелась ввиду система "сборки" micro. Первая проблема, с которой я столкнулся при тесте - пути, которые нужно указывать в команде сборки micro - абсолютные от корневой директории AsmX. В остальном ситема работает, только есть вопросы к её смыслу. Как таковой сборки AsmX в бинарный код я не увидел. Сборка под ARM - выдаёт ассемблер, который не возможно перевести в бинарный код:

"Скомпилированный" под какое-то неизвестное ядро код

Самому скомпилить ничего под ARM так и не удалось, "Бинарник" взят из примера самого автора. Как он скомпилирует что-то сложнее арифметики не зная, под какое ядро он компилирует - вопрос открытый. Настройки PLL - нет, настройки периферии - нет, регистры не существуют, отсутствуют запятые между аргументами.

Содержание .app примера автора отличается только пустыми символами.

Судя по всему AsmX - язык либо jit-компилируемый, либо интерпретируемый. Как это вяжется с низким уровнем и ассемблером - непонятно.

4)ООП

Как ООП связано с низким уровнем - вопрос хороший, но сейчас мы его отбросим и разберёмся с функционалом и работоспособностью ООП в AsmX. Начнём с основных принципов ООП:

4.1)Абстракция: какая абстракция? мы же в низкоуровневом языке. Но если серьёзно, это единственное, что правда работает. С объектами можо работать в отрыве от их реализации.

4.2)Полиморфизм:

4.2.1) Ad-Hoc полиморфизм - реализован только для функций(@tion), для методов классов - отсутствует.

Код теста
Вывод теста

Как видно по выводу, всегда используется первая реализация метода. Количество аргументов не проверяется в большую сторону, поэтому можно пистаь сколько угодно лишних - ошибки не будет.

4.2.2) Параметрический полиморфизм - присутствует, связан с динамической типизацией языка(Javascript, конечно, а не AsmX).

Код теста
Вывод теста

Float проходит через Int аргумент без изменений. Прямой вывод численного аргумента выводит Void:

Код теста


Вывод теста

4.2.3) Полиморфизм подтипов - подтипы не работают, смотреть пнукт Наследование.

4.3)Наследование:

Код теста - простое наследование
Вывод теста - простое наследование

Пока всё работает так, как и должно.

Код теста - абстрактный метод
Вывод теста - абстрактный метод

И даже так работает! Неужели тут не кроется какой-то страшной ошибки? Добавим третий класс-наследник Abstract, но забудем добавить ему реализацию метода setName:

Код теста - третий класс
Вывод теста - третий класс

Реализация перешла от класса B к классу C? Странно. Давайте добавим реализацию классу C.

Код теста - вторая реализация
Вывод теста - вторая реализация

Стоп. Так точно не должно быть. Может это проблема общего абстрактного класса? Разделим два класса полностью.

Код теста - отдельные классы
Вывод теста - отдельные классы

Как видно, вне зависимости от резмещения методов используется первое определение в коде. Абстрактные методы - не работают, тип возвращаемого значения из метода игнорируется, типы аргументов часто игнорируются,количество аргументов - игнорируется, конструктор может быть внешний функцией и использоваться хоть всеми классамиодновременно. Проблемы в духе diamond inheritance игнорируются, проверить наличие механизма их обхода(виртуальное наследование, например) не представляется возможным из-за проблем одиночного наследования.

4.4) Инкапсуляция - отсутствует. Все переменные приватны, все методы публичны.

5)Формат expr - существует в любом языке внутри препроцессора кода, работает лучше авторского(смотерть пункт Другое). За примером далеко ходить не надо, C/C++ может производить любые математические операции с известными во время компиляции значениями(константами, результатами consteval функций, числами, константами препроцессора), авторский - принимает только числа, такой функционал заменяется калькулятором.

6)Server Log - логгер, обычный логгер.

Основная функция - ServerLog.log

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

7)Engine - даёт добавлять функции, написанный на Javascript в ассемблер. Думаю тут объяснять, в чём состоит проблема, не нужно

8 и 9)Детальный вывод ошибок

Ошибки

Иногда детальный, иногда трейсбек ядра(чаще).

10)удачного исправления по трейсбеку кернела

11)Низкоуровневость

Управления памятью нет, указателей нет, микрооптимизации нет, многопоточности нет, доступа к физическим регистрам нет, доступа к кэше нет, работы вне среды js нет. Зато есть: ООП, типизация, динамическая типизация, возможность вставлять javascript в код, относительные адреса в условных переходах, свои регистры, свои прерывания.

Исчерпывающий комментарий @MrMiscipitlick, по поводу возможностей, необходимых языку низкого уровня:

"1. Прямая работа с памятью, включая память, отведенную под саму программу.

2. Арифметика указателей

3. Прямая и свободная работа со стеком.

4. Прямой доступ к регистрам процессора.

5. Прямой доступ к инструкциям процессора.

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

Ничего из этого не представлено в AsmX.

Другое:

В expr не работает унарный минус.

При делении на ноль внутри expr выдаётся ошибка о невозможности записать значение Infinity в тип Int/Float, а не ошибка Division by zero. С типом Auto ошибка не возникает, как и при @div 1, 0.

@Issue true - deprecated. До сих пор предлагают включить в сообщениях компилятора.

В Int можно записать дробные числа. В Float нельзя записать целое число.

Вывод - большинство озвученных фитч не работоспособны/не низкоуровневые/не уникальные, а автор языка не понимает,что такое язык низкого уровня.

Post Scriptum:

C++:

1) На нём сделаны мейнстрим нейролибы tensorflow и pytorch

2) Его предшественник, C - основной язык ядра линукса

3) Cmake

4) Одно Template Metaprogramming чего стоить

5) Всё - expr

6) spdlog - отличный логгер

7) Библиотеки на его бэкенд языке(C/Asm) поддерживаются, благодаря ABI можно писать проект на нескольких языках одновременно.

8-10) Идеальный дебаггер gdb

11) Намного ниже AsmX

Report Page