package.json - не только для запуска JS-скриптов

Всем привет!

Сегодня у меня великая радость из-за пущего пустяка - Hello world! :) То есть я написал мелку программку, окторая при выполнении пишет "Hello world". Но великая радость из-за того, что я шел к этому больше 10 лет :) Серьезно. Все потому что она на ассемблере. То есть первые попытки были еще более 10 лет назад, но к своему стыду я не мог даже компилятор установить (хотя в той же убунте есть свой компилятор ассемблера из коробки).

И вот сегодня я опять взялся за эксперименты (видимо весеннее психическое обострение, хоть и не весна сейчас (хоть и за окном плюсовая температура и дождь)), и таки получилось что-то сделать :)

Отдельное спасибо за это Андрею Викторовичу Столярову, который написал учебник по NASM и активно отвечает на вопросы на своем сайте. http://www.stolyarov.info/books/asm_unix

Благодаря этому материалу я таки сделал первые шаги и очень рад :)

А пишу не только потому что рад, но и потому что хотел раскрыть малоочевидную, но сильную сторону package.json - он годится не только для запуска JS-скриптов, но и в принципе является инструментов для запуска любых скриптов, в том числе и bash.

Казалось бы, при чем тут package.json и ассемблер?

Поясню: для компиляции кода и запуска конечной программы надо выполнить в терминале пару команд. При этом из-за того, что попутная библиотека написана для 32битной архитектуры, а у меня 64, приходится еще флаг передавать. Пока экспериментируешь, еще ничего, но через день уже забудешь и опять надо гуглить решение. В данной ситуации логично иметь возможность куда-то записать нужные команды и легко их потом вызывать. Часто для этого используют make + Makefile, но у меня мало стимула изучать еще и эту технологию, поэтому я взял то, что итак знаю. И вот что получилось:

{
  "name": "NASM-examples.Hello-world",
  "scripts": {
    "start": "./build/main",
    "build": "yarn compile && yarn ld",
    "compile": "nasm -f elf main.asm -o build/main.o",
    "ld": "ld -m elf_i386 build/main.o -o build/main"
  }
}

Теперь можно выполнять в терминале вот так:

Удобно :)

Если кому это направление тоже интересно, исходники закинул сюда: https://github.com/Fi1osof/NASM-examples