Writing your own BEAM
Автор исследует, сколько усилий требуется для реализации собственных примитивов BEAM, создавая упрощенную версию виртуальной машины на Elm. Используя стиль передачи продолжений (CPS), он избегает необходимости писать парсер, CLI и другие компоненты полноценного компилятора, сосредоточившись на ядре системы. Этот подход позволяет сосредоточиться на основных концепциях, таких как планировщик, процессы и их взаимодействие.
Начав с базовых инструкций End (завершение программы) и Work (имитация выполнения работы), автор добавляет примитив Spawn для создания процессов, что требует изменения структуры планировщика для отслеживания нескольких процессов. В планах реализация обмена сообщениями, выборочного приема и связывания процессов для создания деревьев надзора. Ключевой особенностью подхода является использование CPS для упрощения реализации, где продолжения обрабатывают управление потоком выполнения.
Комментарии (79)
- Обсуждение в основном вращается вокруг BEAM: его происхождение, ограничения и будущее.
- Участники обсуждают, что BEAM не переносим между дистрибутивами Linux, в отличие от JVM, и требует компиляции из исходников.
- Поднимается вопрос о том, что написание статьи не объясняет читателям, что такое BEAM, и что это значит для них.
- Некоторые участники предлагают использовать Nix или статически слинкованный BEAM для решения проблемы портируемости.
- Также обсуждается, что исходный код BEAM доступен, и что ранние версии BEAM, возможно, были бы полезны для изучения.
Advanced Scheme Techniques (2004) [pdf]
- PDF-файл повреждён: вместо текста — поток сжатых байтов.
- Содержимое невозможно прочитать без распаковки и декодирования.
- Перевод и сокращение не применимы: исходных данных нет.
Комментарии (15)
- Scheme обманчиво прост, но сложен для компиляции: гигиеничные макросы и продолжения первого класса требуют особых подходов.
- CPS-преобразование — популярный, но не единственный способ реализовать continuations; подходят и байт-код/виртуальные машины, и другие схемы.
- Реализация closures и правильная работа с пустым списком (не «ложь» в Scheme) добавляют сложности.
- Полезны материалы: диссертация Dybviga, доклад Олега Киселёва, статья о секвентном исчислении как IR.