Для кого написана эта книга?
Цель этой книги - как можно быстрее ввести читателя в курс дела, чтобы он начал писать на AsmX работоспособные программы (игры, визуализации данных и вычислительные программы), и одновременно заложить основу в области программирования, которая пригодится ему на протяжении всей жизни. Книга написана для людей любого возраста, которые прежде никогда не программировали на AsmX или вообще никогда не программировали. Если вы хотите быстро изучить азы программирования, чтобы сосредоточиться на интересных проектах, а также проверить свое понимание новых концепций на содержательных задачах, - эта книга для вас.
Онлайн ресурсы
Обновления. AsmX, как и все языки постоянно развивается. Сам язык программирования AsmX можно посмотреть тут
Расширение для подсветки AsmX кода тут (VS Code)
Часть I Основы
Глава 1. Первые шаги
В этой главе вы запустите свою первую программу на языке AsmX, hello_world.asmX. Сначала вы проверите, установлен AsmX на вашем компьютере, и если нет - установите его.
В части I этой книги представлены базовые концепции, необходимые для написания программ на языке AsmX. Многие из этих концепций встречаются во всех языках программирования, поэтому они пригодятся вам на протяжении всей карьеры в программировании.
В главе I вы установите AsmX на свой компьютер и запустите свою первую программу, которая выводит на экран сообщение Hello World!
Установка AsmX
В первую очередь нам нужно установить необходимые ресурсы конечно же))
У вас должен быть NodeJS 16.15.1 версии, npm версии 8.11.0. НУ и git. (У меня стоит 2.36.1 версия git).
git clone https://github.com/langprogramming-AsmX/AsmX.git
npm i progress readline-sync
После этого уже запускаем ядро:
node kernel.js
После чего у нас попросят путь к файлу, если вести файл другого расширения, у нас выдаст ошибку. После указания пути к самому ядру мы можем сразу указать путь к .asmX файлу. В противном случае появится CLI (Command Line Interface) путь к файлу.
Установка VS Code
Программу установки VS Code можно загрузить по адресу https://code.visualstudio.com/. Щелкните на ссылке загрузки и найдите программу установки для Windows. После того как программа установки будет загружена, запустите её и подтвердите все настройки по умолчанию.
Запуск программы Hello World
После того как в вашей системе будут установлены последние версии AsmX и VS Code, всё почти готово к запуску вашей первой программы на AsmX, написанной в текстовом редакторе. После этого вы сможете написать программу Hello World! и запустить её.
Запуск hello_world.asmX
Прежде чем писать программу, создайте где-нибудь в своей системе папку с именем AsmX_workspace для своих проектов.
Откройте VS Code и сохраните пустой файл AsmX (File -> Save As) с именем hello_world.asmX в папке AsmX_workspace.
После того как файл будет сохранен, введите следующую строку в текстовом редакторе:
@call print("Hello AsmX world!");
Запуск AsmX в терминале
Большинство программ, написанных вами в текстовом редакторе, будут запускаться прямо из редактора. Тем не менее иногда бывает полезно запускать программы из терминала - например, если вы хотите просто выполнить готовую программу, не открывая её для редактирования.
Это можно сделать в любой системе с установленной поддержкой AsmX; необходимо лишь знать путь к каталогу, в котором хранится файл программы. Приведенные ниже примеры предполагают, что вы сохранили файл hello_world.asmX в папке AsmX_workspace на рабочем столе.
В Windows
Команда cd (Change Directory) используется для перемещения по файловой системе в окне командной строки. Команда dir (DIRectory) выводит список всех файлов в текущем каталоге.
Откройте новое терминальное окно и введите следующие команды для запуска программы hello_world.asmX:
C:\ > cd Desktop/AsmX_workspace
C:\Desktop\AsmX_workspace> dir
hello_world.asmX
C:\Desktop\AsmX_workspace> node asmx/kernel.js hello_world.asmX
Hello AsmX world!
Команда cd используется для перехода к папке asmX_workspace, находящейся в папке Desktop. Затем команда dir проверяет, что файл hello_world.asmX действительно находится в этой папке. Далее файл запускается командой node asmx/kernel.js hello_world.asmX. Где asmx это папка скачанного AsmX с GitHub.
Большинство программ будет нормально запускаться из редактора. Но со временем ваша работа станет более сложной, и возможно, вы предпочтете запускать некоторые из своих программ из терминала.
В macOS и Linux
Запуск программы Python в терминальном сеансе в системах Linux и macOS осуществляется одинаково. Команда cd (Change Directory) используется для перемещения по файловой системе в терминальном сеансе. Команда Is (LiSt) выводит список всех нескрытых файлов в текущем каталоге.
Откройте новое терминальное окно и введите следующие команды для запуска программы hello_world.asmX:
~$ cd Desktop/AsmX_worspace/
~Desktop/AsmX_worspace/$ ls
hello_world.asmX
~Desktop/AsmX_worspace/$ node asmx/kernel.js hello_world.asmX
Hello AsmX world!
Команда cd используется для перехода к папке asmX_workspace, находящейся в папке Desktop. Затем команда ls проверяет, что файл hello_world.asmX действительно находится в этой папке. Далее файл запускается командой node asmx/kernel.js hello_world.asmX. Где asmx это папка скачанного AsmX с GitHub.
Решение проблем с установкой
Если вам так и не удалось запустить программу hello_world.asmX, возможно, вам помогут следующие полезные советы (кстати, они могут пригодиться для решения любых проблем в программах).
Если программа содержит серьезную ошибку, AsmX выводит данные трассировки. AsmX анализирует содержимое файла и пытается составить отчет о проблеме. Возможно, трассировка подскажет, что именно мешает выполнению программы.
Отойдите от компьютера, отдохните и попробуйте снова. Помните, что синтаксис в программировании очень важен; даже пропущенное двоеточие, неверно расположенная кавычка или непарная скобка могут помешать нормальной работе программы. Перечитайте соответствующие части главы, еще раз проанализируйте, что было сделано, и попробуйте найти ошибку.
Начните заново. Вероятно, ничего переустанавливать не придется, но попробуйте удалить файл hello_world.asmX и создать его с нуля.
Попросите кого-нибудь повторить действия, описанные в этой главе, на вашем (или на другом) компьютере. Внимательно понаблюдайте за происходящим. Возможно, вы упустили какую-нибудь мелочь, которую заметят другие.
Найдите специалиста, хорошо знающего AsmX, и попросите его помочь вам.Вполне может оказаться, что такой специалист есть среди ваших знакомых.
Обратитесь за помощью в интернет. В приложении В перечислены некоторые ресурсы (форумы, чаты и т. д.), на которых вы сможете проконсультироваться у людей, уже сталкивавшихся с вашей проблемой.
Не стесняйтесь обращаться к опытным программистам. Любой программист в какой-то момент своей жизни заходил в тупик; многие программисты охотно помогут вам правильно настроить вашу систему. Если вы сможете четко объяснить, что вы хотите сделать, что уже пытались и какие результаты получили, скорее всего, кто-нибудь вам поможет. Как упоминалось во введении, сообщество AsmX доброжелательно относится к новичкам.
AsmX должен нормально работать на любом современном компьютере, и если у вас все же возникли проблемы - обращайтесь за помощью. На первых порах проблемы могут быть весьма неприятными, но с ними стоит разобраться. Когда программа hello_world.asmX заработает, вы сможете приступить к изучению AsmX, а ваша работа станет намного более интересной и принесет больше удовольствия.
Упражнения
Опечатки в Hello World: откройте только что созданный файл hello_world.asmX. Сделайте где-нибудь намеренную опечатку и снова запустите программу. Удастся ли вам сделать опечатку, которая приводит к ошибке? Поймете ли вы смысл сообщения об ошибке? Удастся ли вам сделать опечатку, которая не приводит к ошибке? Как вы думаете, почему на этот раз выполнение обходится без ошибки?
Бесконечное мастерство: если бы вы были программистом с неограниченными возможностями, за какой проект вы бы взялись? Вы сейчас учитесь программировать. Если у вас имеется ясное представление о конечной цели, вы сможете немедленно применить свои новые навыки на практике; Попробуйте набросать общие описания тех программ, над которыми вам хотелось бы поработать. Заведите «блокнот идей», к которому вы сможете обращаться каждый раз, когда собираетесь начать новый проект. Выделите пару минут и составьте описания трех программ, которые вам хотелось бы создать.
Итоги
В этой главе вы познакомились с языком AsmX и установили поддержку AsmX в своей системе, если она не была установлена ранее. Также вы установили текстовый редактор, упрощающий работу над кодом AsmX. Вы научились выполнять фрагменты кода AsmX в терминальном сеансе и запустили свою первую настоящую программу hello_world.asmX. Скорее всего, попутно вы кое-что узнали о поиске и исправлении ошибок.
В следующей главе рассматриваются структуры данных, с которыми вы будете работать в программах AsmX. Кроме того, вы научитесь пользоваться переменными AsmX.
Комментарии (45)
eugene_brad
17.05.2023 17:41+9Ничего не понял - для чего этот язык? Компилятор, транслятор? для какого hardware? Только "установите, запустите"...
ROCKFALL
17.05.2023 17:41+3Цель этой книги - как можно быстрее ввести читателя в курс дела, чтобы он начал писать на AsmX работоспособные программы (игры, визуализации данных и вычислительные программы)
А такие уже есть?
Edward_Full-Stack Автор
17.05.2023 17:41-1Есть, например игры "Угадай число", "Кубики удачи".
ROCKFALL
17.05.2023 17:41+13Убедительно
Edward_Full-Stack Автор
17.05.2023 17:41Вот примеры программ:
DB: https://github.com/langprogramming-AsmX/AsmX/blob/main/examples/software/dbs.asmX
Работа с GPU:
https://github.com/langprogramming-AsmX/AsmX/blob/main/examples/cli.asmX
Игра "Угадай число" :
https://github.com/langprogramming-AsmX/AsmX/blob/main/examples/software/number.asmX
hello_my_name_is_dany
17.05.2023 17:41+1Работа с GPU:
А по-моему это обычный stdout
https://github.com/langprogramming-AsmX/AsmX/blob/main/libs/gpu.asmX
AllexIn
17.05.2023 17:41+1Если вы троллите - ок.
Если нет... подумайте о походе к психиатру. Без шуток.Edward_Full-Stack Автор
17.05.2023 17:41-3Ни один из ваших вариантов не подходит. Это серьёзный проект.
AllexIn
17.05.2023 17:41+8Когда я был начинающим программистом, я был настолько начинающим что испугался разбираться в скриптовых движках и для игры которую делал на работе написал свой язык.
Вот такой:Да, я был настолько отбитый, что написал свой язык программирования потому что испугался сложности подключения lua или аналога...
Так вот... Мне теперь тоже статьи писать и продвигать его как.... Как что? Как еще один ущербный недоделанный язык с сомнительной перспективой?Серьезно, расскажите для начала, почему ваш язык вообще должен кого-то заинтересовать. Сейчас этот раздел похож на шаблон, который можно поставить перед ЛЮБЫМ языком программирования.
ROCKFALL
17.05.2023 17:41+10Главное не забудьте попросить переписать KolibriOs на свой язык: https://github.com/KolibriOS/kolibrios/discussions/1
ColdPhoenix
17.05.2023 17:41+2На самом деле даже помимо мифического нуля во времени выполнения(скорее всего точности не хватило).
Для чего этот язык?
Какая ниша?
Какой тип применения(standalone, embed, вроде первый)?
Какие проблемы решает?
Умеет интегрировать с какими-то библиотеками(хотя бы той же ноды)
Сейчас получился язык напоминающий ассемблер, но выглядит так что чистый IL-код приятнее(да и кстати может многое, в силу того что .NET)
В общем, для чего людям его изучать?
PS: посмотрел код, по сути, странный транслятор в JS, то есть в силу асма подобия нельзя даже сделать a = a+5*b, то есть те же вещи приходится писать больше чем в обычном JS.
Вы молодец что сделали что-то, но, к сожалению, не стоит это преподносить как что-то уберкрутое. Продолжайте развиваться :)
Edward_Full-Stack Автор
17.05.2023 17:41-31) Язык для всего. Тут тогда надо больше конкретики вводить.
2) GPU ниша например.
3) тут нет комментариев.
4) например, с изучением, в отличии от ассемблера. Удобночитаемый, современный вывол ошибок, моэет даже ваожить способы решения той иноц проблемы.
Разработчикам которые пишут на ассемблере, неплохо бы им посмотреть на слвременный ассемблер.
vilgeforce
17.05.2023 17:41Драйвер для винды на нем можно написать? А загрузчик для Infineon C167?
Edward_Full-Stack Автор
17.05.2023 17:41-5Пробуйте
AllexIn
17.05.2023 17:41+2Что значит "пробуйте"?
Вы не осознаете ограничений собственного инструмента?
В текущей реализации ничего из перечисленного сделать нельзя.
Почему я, потративший 30 секунд времени на рисеч это знаю, а вы(автор шедевра) - нет?
Edward_Full-Stack Автор
17.05.2023 17:41a = a+5*b
Можно сделать, нужно всего лишь подумать и сделать.
@set a Int 0; @set b Int 5; @unit expression(a, b): @Imul 0x05, [b] @Add [a], $ret @Ret $ret; @call expression(set::a, set::b); @set a Int $urt;
ColdPhoenix
17.05.2023 17:41Спасибо, я знаю как это в асме писать.
Смысл был в том что мы получаем сложнее код, со скоростью не выше чем сам JS(в силу рантайма), смысл туда идти человеку?
Может у вас есть хороший отладчик? Тоже нет
cat_chi
17.05.2023 17:41+3Вы просто хейтер и завидуете, что идея создать такой изящный механизм принадлежит автору, а не вам. А копировать поздно, всё защищено лицензией. Автор уже продемонстрировал невероятную скорость исполнения, какие ещё аргументы нужны? /s
cat_chi
17.05.2023 17:41+1Я тоже когда-то свой язык писал. Просто ради интереса. lexer, parser, всё что нужно. Даже оптимизация была. И всё это на Лиспе. Я тогда ещё даже не джуном был, а эникеем, только задумывающимся о переходе в разработку. Впрочем, иллюзий насчёт того, что этот язык будет нужен кому-то кроме меня, у меня конечно же не было. Но было интересно.
Надеюсь, вам тоже интересно. Чем бы вы ни занимались, разработкой ли языка или всё же банальным троллингом.
AllexIn
17.05.2023 17:41Для троллинга вложено слишком много сил.
cat_chi
17.05.2023 17:41Знаю, что тут на Хабре обитает немало таких чудиков. Взять хотя бы создателя языка "ДРАКОН", который периодически просыпается по весне.
Но всё-таки верю в лучшее. Вон, текст "лицензии": https://github.com/langprogramming-AsmX/AsmX/blob/main/LICENSE
намекает на то, что это либо очень тщательно подготовленный троллинг. Либо всё крайне печально.
vabka
17.05.2023 17:41Если все вложенные силы - это промпты в ChatGPT, то что не так уж и много нужно вложить
eugenk
17.05.2023 17:41+1Ну что я могу на это сказать... Стремление программировать, а особенно создавать свои собственные языки, это безусловно весьма похвально. Однако на месте автора я во-первых определился бы с целью. Для каких целей создан этот язык ??? Позиционируется он как язык ассемблерного уровня, причем для всего. В то же время я вижу несложный интерпретатор на node.js и ничего более. И у меня например сразу возникает вопрос. А для stm32 прошивку написать можно ??? Положим node.js на ноутбуке у меня есть. Но на плате с stm32 её нет ! Запустится ли на ней программа ??? Во-вторых безусловно то что работает программа "угадай число" это очень хорошо. Но я бы посоветовал для оценки практичности языка взять какую-то более интересную задачу. Почему бы автору не написать на своём языке ну к примеру небольшой интерпретатор Бейсика ??? Сразу многое стало бы понятно. Вот примерно так... Оценки извините, не ставлю. Не хочу огорчать.
mapron
17.05.2023 17:41Вы сперва попробуйте большой проект переписать на этом новом языке, а потом и задавайте вопросы!
"Почему бы автору не написать" ну вот вы и пишите, автор же предоставил "документацию"!
/s
p.s. лучше бы огорчать хотя автор слушать похоже не хочет. (судя по тону дискуссии тут https://github.com/KolibriOS/kolibrios/discussions/1 )
venanen
17.05.2023 17:41Можно ли написать на stm32? Разумеется можно, нет никаких проблем. Осталось притащить на stm32 движок v8 от chrome, пару сотен гигов модулей из node_modules, транслятор и саму ноду, заставить работать npm, и вуаля. Одним словом стм32 + пару HDD и будет работать, зато удобно как! /s
playermet
17.05.2023 17:41(игры, визуализации данных и вычислительные программы)
Зачем писать хоть что-то из перечисленного на ассемблере? Если ради фана - то есть фентези платформы, а если ради ностальгии - то есть существующие ассемблеры и эмуляторы, с намного большим числом готовых инструментов, книг, гайдов, документации, библиотек, и сообществом. И они скорее всего AsmX еще и переживут на десятилетия.
Сначала вы проверите, установлен AsmX на вашем компьютере
Само собой установлен, вместе с виндой шел.
Найдите специалиста, хорошо знающего AsmX, и попросите его помочь вам.Вполне может оказаться, что такой специалист есть среди ваших знакомых.
Всмысле "может"? Разве бывают люди, которые не знают AsmX?
RealBeria
"В этой главе вы познакомились с языком AsmX " ... извините, но это знакомство я не нашел в этом тексте, или под знакомством имелась ввиду ссылка Документация?
hello_my_name_is_dany
И то в документации написано только как создавать переменные
ROCKFALL
Нам с вами не понять. https://github.com/langprogramming-AsmX/AsmX/blob/main/compiler.js#L215
venanen
Блестяще! Автор языка действительно молодец, он создал уникальную вещь Ведь есть языки медленные, но удобные - питон, например. Есть не очень удобные, зато очень быстрые - ассемблер. Автор языка пошел дальше, и объединил две концепции - его язык неудобный как ассемблер и медленный, как JS (а вообще даже медленнее, с учетом трансляции). Браво, я аплодирую!
Edward_Full-Stack Автор
Ты бы видел его молниеносную скорость выполнения. 0 секунд.
vabka
Если я в глаза не долблюсь, то там написано 0.14мс.
Что именно там замеряется и как - я хз.
Edward_Full-Stack Автор
0.14 мс это там анализ программы, из каких инструкций содержит программа и сколько процентов.
ColdPhoenix
Если там написано 0 секунд, значит проблемы с изменением.
Edward_Full-Stack Автор
Вв ошибаетесь сильно, нет проблем
WNeZRoS
Надпись 0s от библиотеки progress. При создании прогресс бара вы указали в конце формат
:eta
, а в документации написано что это "estimated completion time in seconds" т.е. кол-во секунд что осталось прогресс бару до 100%. Логично что когда он уже 100% осталось 0 секунд.Кстати, если убрать прогресс бар "компиляция" будет на секунду быстрее проходить .
Ogra
Tic-Tac-Toe, он же крестики-нолики, играется на поле 3х3, а не 3х2. И игры то в коде нет, только вывод игрового поля - без крестиков, без ноликов, да еще и не того размера. Какой смысл тут время измерять?
venanen
А объясните, тогда, пожалуйста, без минусов в карму - какая магия произошла, что транслированный в JS код работает быстрее медленного JS? Это физически невозможно.