Почему нет хорошей схемы /lisp на llvm?
Существует схема Gambit, схема MIT, схема PLT, схема курицы, Bigloo, Larceny,...; то есть все листки.
Тем не менее, нет (насколько мне известно) одной популярной схемы / lisp на LLVM, хотя LLVM предоставляет множество приятных вещей, таких как:
- проще сгенерировать код, чем x86
- легко сделать C FFI звонки
...
Так почему же не существует хорошей схемы / lisp на LLVM?
Ответы
Ответ 1
LLVM предоставляет много, но это все еще лишь малая часть времени выполнения, требуемого функциональным языком. И вызовы C FFI несложны, поскольку LLVM оставляет управление памятью другим человеком. Взаимодействие с сборщиком мусора - это то, что затрудняет работу FFI на таких языках, как Scheme.
Вам может быть интересно HLVM, но на данный момент он еще более экспериментальный.
Ответ 2
Здесь очень маленький и, по-видимому, неоптимизированный компилятор Scheme:
http://www.ida.liu.se/~tobnu/scheme2llvm/
Взяв ваш вопрос буквально,
- Написание компиляторов трудно.
- Плохая реализация, такая как связанная выше, может блокировать новые реализации. Люди, идущие на страницу LLVM, видят, что есть схема уже, и не докучайте ее.
- Там ограниченное число людей, которые пишут и используют Scheme (я один, а не ненавистник, кстати).
- Существует множество существующих инициаторов и компиляторов Scheme, и нет необходимости кричать о необходимости нового.
- Нельзя сразу получить явное преимущество в написании нового интерпретатора с использованием LLVM. Будет ли это быстрее, проще, более гибким, лучше каким-то образом, чем другие десятки реализаций Схемы?
- Проект LLVM отправился с другим языком (C), чтобы продемонстрировать свою технологию, и не видел необходимости реализовывать множество других.
Я думаю, что для кого-то может быть очень интересно создать компилятор Scheme на основе LLVM. Компиляторы схемы в SICP и PAIP являются хорошими примерами.
Ответ 3
Следует иметь в виду, что многие из этих реализаций имеют C FFI и компиляторы с собственным кодом, которые значительно предшествуют LLVM.
Ответ 4
Для CL: Clasp является общей реализацией Lisp на LLVM, а mocl реализует подмножество Common Lisp на LLVM.
Для схемы: там самообслуживание Scheme- > LLVM demo и прототип LLVM-сервера для Bigloo Scheme.
Для Clojure: там Rhine, который является Clojure -inspired lisp.
Ответ 5
Возможно, я полностью не понимаю вопрос или контекст, но я считаю, что вы можете использовать ECL, который является общим Lisp, который скомпилируется до C и использует компилятор Clang для задания LLVM (вместо GCC).
Я не уверен, что (если есть), это даст вам, но это даст вам Lisp, запущенном на LLVM =].
Ответ 6
CL-LLVM предоставляет общие привязки Lisp для LLVM. Он использует подход FFI, а не пытается напрямую выводить сборку LLVM или битовый код.
Эта библиотека доступна через Quicklisp.
Ответ 7
нет (насколько мне известно) одного популярная схема / lisp на LLVM
В настоящее время llvm-gcc
- ближайшая вещь для популярной реализации любого языка на LLVM. В частности, в настоящее время не существует зрелых языковых реализаций на основе LLVM с сборкой мусора. Я уверен, что LLVM будет использоваться в качестве основы для множества захватывающих языковых реализаций следующего поколения, но для этого потребуется много времени и усилий, и в этом контексте для LLVM это первые дни.
Мой собственный HLVM project - одна из единственных реализаций на основе LLVM с сборкой мусора, и ее GC имеет многоядерность, но свободно bound: я использовал теневой стек для "неработоспособной среды" вместо того, чтобы взломать код С++ в LLVM, чтобы интегрировать настоящую стековую ходьбу.
Ответ 8
mocl является компилятором относительно статического подмножества Common Lisp. Он компилируется через LLVM/Clang.
Ответ 9
GHC экспериментирует со схемой бэкэнда и получает действительно захватывающие предварительные результаты над своим собственным компилятором кода. Конечно, это haskell. Но недавно они внесли новые изменения в LLVM, облегчая тем самым пересылку хвостов. Это может быть полезно для реализации некоторых схем.