Минимальное ядро на Swift запустилось в QEMU
A minimal kernel in Swift, running in QEMU
Автор написал простейшее ядро на Embedded Swift и запустил его в QEMU на виртуальной машине virt с архитектурой AArch64. Ядро выводит приветствие через UART PL011, а затем переходит в бесконечный цикл. Для сборки потребовался ассемблерный загрузчик, собственный линкер-скрипт и реализация putchar и memmove. В дальнейшем автор добавил опрос UART и простой эхо-цикл, но до полноценной ОС ещё далеко.
Это первый момент, когда проект перестаёт быть обычным прикладным программированием. Здесь я больше не вызываю API операционной системы для печати строки, а реализую низкоуровневые функции, необходимые языковой среде для существования.
- mannyv
Просто забивай значения в регистры! Обожаю, такая старая школа!
На самом деле, именно так работал ввод-вывод до DMA во многих системах. Хорошие были времена!
- aseipp
Embedded Swift, честно говоря, очень крутая штука. Я сам раньше особо не использовал Swift, но думаю, это хорошая ниша, потому что embedded-разработке не помешал бы ещё один инструмент, а язык довольно приятный. К тому же он не страдает от большинства проблем, которые люди исторически связывали со Swift (кроссплатформенность, медленная компиляция и т. д.), поскольку он настолько маленький, по крайней мере, для меня. :)
Если начинать с нуля, я обнаружил, что на Swift можно довольно легко написать буквально всё (векторы сброса, встроенные функции, генерируемые компилятором, и т. д.). Но помимо этого, на мой взгляд, лучшая фича — это то, что интероп с C/C++ работает очень хорошо и доступен из коробки. Это упрощает двустороннее внедрение. Я написал небольшую загрузочную прошивку для симулятора и ради интереса решил добавить подписи в процесс загрузки (mldsa44+jq255). Можно просто скопировать файлы .c и .h, импортировать их в файл modulemap — и ты в дамках. Можно просто получить простые .o-файлы и передать их линковщику. Нужно реализовать всего 4–5 «freestanding» функций. Можно отключить выделение памяти в куче. И т. д.
Было бы, наверное, довольно круто и совсем несложно, например, написать драйверы для Zephyr или U-Boot и т. п. на Swift, используя эти приёмы.
- Narishma
Скорее hello world, чем ядро.