Как стать автором
Обновить

Разбор JIT-Компилятора AsmX и краткая биография его создателя

Время на прочтение7 мин
Количество просмотров2.6K

Введение

На выходных я наткнулся на статью от комментатора, в которой был представлен  Обзор языка программирования AsmX. После прочтения этой статьи я решил поискать в Telegram диалоги создателя языка, к которым мы вернемся позже. Цитирую список пунктов от обзорщика Василия, с которыми я полностью согласен:

  1. Низкоуровневость: AsmX не предоставляет прямого доступа к памяти и не может обращаться к регистрам процессора, однако предлагает ряд абстракций, характерных для высокоуровневых языков, таких как классы, функции и типы.

  2. Императивность: AsmX является объектно-ориентированным языком.

  3. Отсутствие типов: В AsmX типизация переменных статическая, а типизация регистров — динамическая.

  4. Сборка: AsmX — интерпретируемый язык.

Мини ревью кода, код-сёрфинг

Важно отметить, что AsmX является JIT-компилятором. Синтаксис языка напоминает гибрид C++ и ассемблера, но выполняется "на лету". Например, в коде присутствуют строки, которые вызывают псевдо-тайпчекер:

Я не уверен, что типы для самого языка реализованы каким-либо образом, но можно сказать, что AsmX использует те же типы, что и JavaScript. Однако стоит отметить, что в AsmX G2 тайпчекер реализован лучше: он также выводит ошибки за несуществующий регистр или тип. (https://github.com/AsmXFoundation/AsmX-G2/blob/main/src/execution/hardware/hardware.js#L304)

Кроме того, в AsmX реализован L1 кэш регистров:

Этот L1 кэш активируется, когда класс вызывает сам себя. Например, в таблице вызовов справа можно увидеть, что он вызывается 10 раз:

Сравнение кода AsmX и AsmX G2

При сравнении кода AsmX и AsmX G2 я заметил значительные различия. Для наглядности представим это в виде таблицы:

JIT-Compiler

AsmX

AsmX G2

Типы языка

Не свои, имитация JS типов

Есть свои типы

Type Checker

Имитация

Проверяет и, по возможности, бросает ошибку

Структура кода

Беспорядок

Модульная, имена файлов и директорий понятны

Документация по обновлениям (Releases)

Нет

Есть, все обновления задокументированы, включая архивы для отдельных ОС

Стиль кода

Верблюжий, разный

C-стиль + lower_snake_case

Самое интересное, что создатель выпустил 13 версий AsmX G2 за 19 дней (с 17 июня по 7 июля). Неужели он работал без сна? Это рекорд по количеству версий среди большинства языков программирования, причем за дни, а не за годы. По версиям видно значительное улучшение, и я от всей души респектую автору за такой прогресс.

Кстати, если кому интересно, в AsmX G2 проще посчитать размер кода, который считается основой выполнения, включая само ядро (2.04 KB). Вот расчеты:

Source code

Size

https://github.com/AsmXFoundation/AsmX-G2/blob/main/src/core.js

2.04 KB = 2.04 * 1024 = 2088.96 Bytes

https://github.com/AsmXFoundation/AsmX-G2/blob/main/src/kernel.js

1.96 KB

https://github.com/AsmXFoundation/AsmX-G2/blob/main/src/execution/exception/runtime.exception.js

1.28 KB

https://github.com/AsmXFoundation/AsmX-G2/blob/main/src/execution/members/*

1.65 KB + 1.96 KB + 2.82 KB + 866 Bytes + 2.32 KB + 798 Bytes + 2.78 KB + 3.64 KB + 2.4 KB + 1.47 KB + 995 Bytes +  3.47 KB

https://github.com/AsmXFoundation/AsmX-G2/tree/main/src/execution/hardware/*

 3.76 KB +  3.44 KB + 852 Bytes +  1.47 KB + 360 Bytes + 4.29 KB + 915 Bytes +  44.4 KB

https://github.com/AsmXFoundation/AsmX-G2/tree/main/src/execution/drivers/*

3.95 KB + 1.55 KB

2088.96 + 2005.76 + 1310.72 + 1689.6 + 2005.76 + 2887.68 + 866 + 2375.68 + 798 + 2847.36 + 3727.36 + 2457.6 + 1504.32 + 995 + 3551.68 + 3850.24 + 3521.92 + 852 + 1504.32 + 360 + 4391.04 + 915 + 45427.2 + 4044.8 + 1584 = 93665.92 Bytes
93665.92 Bytes / 1024 = 91.47 KB

Таким образом, сумма всех размеров кода составляет приблизительно 91.47 KB. Полный архив языка AsmX G2 весит всего 28 KB, а AsmX — 208 KB. Разница составляет 174.5 KB (208 - 33.5 = 174.5). Кроме того, по моим данным о бенчмарках, AsmX G2 опережает AsmX на 0.2 секунды, а AsmX — от NASM на 0.19 секунды. Все это однозначно оправдано.

AsmX G2 в деталях

Я хотел бы обратить внимание на код и развитие AsmX G2, особенно на то, как он строит аппаратные компоненты. Например, создатель уделил внимание микрооперациям, что видно в следующем коде:

#memory_super_operation_write_data_by_pointer(pointer, value) {
    const value_bytes = new Uint16Array(value.buffer);
  
    for (let index = 0; index < value_bytes.length; index++) {
      this.#memory_micro_operation_write_byte_by_pointer(pointer + index, value_bytes.at(index));
    }
}

 stack_pop() {
    const ptr_ = this.#stack_micro_operation_pull_address();
    this.#stack_micro_operation_dec_address();
    this.#set_register_$sp();
    return ptr_;
}

Если бы этот код был написан на C++, он выглядел бы так:

void memory_super_operation_write_data_by_pointer(uint16_t pointer, const std::vector<uint16_t>& value) {
    for (size_t index = 0; index < value.size(); ++index) {
        this->memory_micro_operation_write_byte_by_pointer(pointer + index, value[index]);
    }
}

uint16_t stack_pop(void) {
    uint16_t ptr_ = this->stack_micro_operation_pull_address();
    this->stack_micro_operation_dec_address();
    this->set_register_sp();
    return ptr_;
}

Как видно, новые инструкции в AsmX G2 строятся довольно просто, и подход к их реализации интересен. Почему же используются микрооперации? В видео на YouTube, обсуждающем, почему x86 не должен существовать, упоминалось, что инструкции содержат неявное выполнение, то есть они включают в себя другие микрооперации, которые приводят к выполнению целой инструкции.

Это похоже на то, что создатель AsmX G2 фактически создал свой собственный процессор, который, по сути, более явный, чем x86. 😁 В коде также присутствует реализация видеокарты в разделе drivers, хотя, судя по всему, она еще не реализована полностью.

Таким образом, AsmX G2 демонстрирует интересный подход к построению аппаратных компонентов и микроопераций, что делает его уникальным среди других языков программирования.

Биография создателя

Пришло время разобраться с вопросами, которые волнуют многих людей. Кто-то хвалит создателя AsmX, кто-то критикует, но большинство предпочитает не хвалить. Давайте разберемся, почему автор стал популярным. Возможно, проект удачно "стрельнул" в нужный момент? Или он сделал что-то конкурентоспособное? Оценка конкурентоспособности — это уже ваше дело.

Название

Название AsmX, судя по всему, состоит из двух частей: "Asm" — сокращение от "ассемблер", и "X" — от социальной сети Илона Маска. Однако есть один нюанс: ASMX.NET принадлежит компании Microsoft, и в Visual Studio Marketplace есть расширения для VS Code, связанные с AsmX. Вспоминаем слова комментаторов:

KReal
У кого как, а у меня ASMX ассоциируется с этим :)

VasiliiKirienko
Ну ничего, автор обещает выкупить у них название))

voidinvader
Выкупить? Он будет пытаться его отсудить вместе с компенсацией в пару лямов долларов 
за использование без разрешения. На просьбы юристов и судьи обосновать свою позицию,
он будет называть их всех завистниками и отправлять программировать на других языках.

Самое забавное, что Microsoft не дала никаких комментариев за 1-1.5 года. Возможно, они знают о ситуации и скрывают свои NDA-контракты? Оставив расширения создателя, они явно замешаны в этом и приняли его. Боюсь представить, что будет, если в эту ситуацию вмешаются Интерпол и ЦРУ (сарказм).

В итоге, можно сказать, что автор взял название ассемблера и название социальной сети Илона Маска.

SEO & AI

В последнее время браузеры начали выдавать его проект на первых позициях. За месяц наблюдений я заметил, что первые пять ссылок ведут на его проект и даже на его расширения для VS Code. Неплохое SEO, бесплатная реклама и продвижение — всё просто и гениально.

AI также путает ASMX.NET с AsmX или считает их одним и тем же.

Фанат или он сам?

По Telegram я нашёл чаты, в которых он присутствовал. Не буду рекламировать эти чаты, так как это не основная тема. Пользователи сети пишут, что он:

  • Не отвечает на вопросы и уходит от темы.

  • Присылает стикеры и гифки с Илоном Маском.

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

  • Если он в чем-то неправ, всегда просит аргументы у участников и "разрушает" их.

Давайте сравним создателя AsmX и Илона Маска по нескольким качествам:

Качества

Илон Маск

Создатель AsmX

Креативность

+

Сделал JIT-компилятор на Node.js, подход к созданию своего CPU в AsmX G2

Умение общаться

+

Уходит от темы

Уверенность

+

+ (комментарий)

Поведение

Эксцентричность

Эксцентричность

Принятие критики

Обсуждает, принимает/не принимает

Обсуждает, но требует аргументы, уходит от темы

Саморазвитие

+

+

Образование

Вроде бы бросил учёбу на курсе

Пользователи считают, что он школьник, будем считать, что он в школе учится

Работа

CEO

CEO

Сравнение показывает, что создатель AsmX отличается от Илона Маска.

Хотелось бы немного подчеркнуть насчёт работы. Возможно, он получил работу в какой-то крупной компании, например, NASA, о чем он упоминал в своём Telegram-канале. Или он находится в комитете по стандартам языка C++. Никаких доказательств его работы в таких местах я не нашёл, но, возможно, его подход к созданию своего CPU в AsmX G2 мог бы быть реализован, если бы он работал в NASA или SpaceX, где пишут на C или C++. На его GitHub-аккаунте также есть проекты на C++.

Создатель пропал

Создатель AsmX исчез из сети с 17 сентября, и вот что пишут в его Telegram-канале:

The owner of this channel has been inactive for the last 1 month. 
If they remain inactive for the next 10 days, they may lose their account 
and admin rights in this channel. The contents of the channel will remain 
accessible for all users.

Его аккаунт был удалён. Однако, если отмотать посты на канале назад на три поста, можно увидеть ссылку на новый канал, посвящённый C++. Но есть один нюанс: в своём канале он упомянул, что собирается сделать страшное, и по дате публикации можно предположить, что произошло какое-то страшное событие. Если бы не это, возможно, он успел бы создать свой GPU в AsmX G2. 😁

Существует несколько возможных причин его исчезновения:

  1. Работа в известной компании: Возможно, он активно работает в какой-то крупной компании, и у него просто нет времени на общение в сети.

  2. Учёба: Возможно, он сосредоточился на учёбе и не может уделять время проекту и общению.

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

Заключение

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

Создатель AsmX, несмотря на свою относительную молодость и неопытность, продемонстрировал креативность и интересный подход, создав JIT-компилятор и разрабатывая собственные микрооперации. Однако его стиль общения и взаимодействия с сообществом вызывает смешанные чувства: от восхищения до критики.

Исчезновение создателя из сети оставляет множество вопросов. Возможно, он столкнулся с личными или профессиональными вызовами, которые отвлекли его от проекта. Тем не менее, его работа и достижения в области AsmX и AsmX G2 уже оставили заметный след в мире программирования.

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

В конечном итоге, AsmX и его создатель — это пример того, как страсть и упорство могут привести к инновациям.

Теги:
Хабы:
0
Комментарии7

Публикации

Истории

Ближайшие события

7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
28 ноября
Конференция «TechRec: ITHR CAMPUS»
МоскваОнлайн
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань