Подтвердить что ты не робот

Почему нет хорошей схемы /lisp на llvm?

Существует схема Gambit, схема MIT, схема PLT, схема курицы, Bigloo, Larceny,...; то есть все листки.

Тем не менее, нет (насколько мне известно) одной популярной схемы / lisp на LLVM, хотя LLVM предоставляет множество приятных вещей, таких как:

  • проще сгенерировать код, чем x86
  • легко сделать C FFI звонки ...

Так почему же не существует хорошей схемы / lisp на LLVM?

4b9b3361

Ответ 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.

Ответ 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, облегчая тем самым пересылку хвостов. Это может быть полезно для реализации некоторых схем.