Почему на llvm нет хорошей схемы / шуток? - PullRequest
38 голосов
/ 27 января 2010

Существует Схема Гамбита, Схема MIT, Схема PLT, Схема Цыпленка, Bigloo, Larceny, ...; тогда все липы.

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

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

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

Ответы [ 9 ]

23 голосов
/ 27 января 2010

LLVM предоставляет много, но это все еще лишь небольшая часть времени выполнения, необходимая функциональному языку. И вызовы C FFI несложны, потому что LLVM оставляет управление памятью для обработки кем-то другим. Взаимодействие с сборщиком мусора - вот что затрудняет вызовы FFI на таких языках, как Scheme.

Возможно, вас заинтересует HLVM , но на данный момент он все еще более экспериментален.

12 голосов
/ 04 февраля 2011

Здесь есть очень маленький и явно неоптимизированный компилятор Scheme:

http://www.ida.liu.se/~tobnu/scheme2llvm/

буквально воспринимая ваш вопрос,

  • Трудно писать компиляторы.
  • Плохая реализация, подобная приведенной выше, может заблокировать новые реализации. Люди, заходящие на страницу LLVM, видят, что Схема уже есть, и не пишут ее.
  • Есть ограниченное количество людей, которые пишут и используют Схемы (кстати, я один, а не ненавистник).
  • Существует множество существующих интерпретаторов и компиляторов Scheme, и нет нужды кричать о необходимости нового.
  • Нет непосредственной и явной выгоды от написания нового переводчика с использованием LLVM. Будет ли это быстрее, проще, гибче, лучше, чем другие десятки реализаций Scheme?
  • Проект LLVM пошел с другим языком (C), чтобы продемонстрировать свою технологию, и не видел необходимости внедрять множество других.

Я думаю, что кому-то может быть весело создавать компилятор Scheme на основе LLVM. Компиляторы Scheme в SICP и PAIP являются хорошими примерами.

9 голосов
/ 12 января 2015

Для CL: Clasp - это реализация Common Lisp на LLVM, а mocl реализует подмножество Common Lisp на LLVM.

Для Схемы: есть Самостоятельная Схема-> Демоверсия LLVM и прототип LLVM для Биглоо Схема .

Для Clojure: есть Рейн , который является вдохновленным Clojure языком.

7 голосов
/ 20 августа 2012

Возможно, я полностью неправильно понимаю вопрос или контекст, но я считаю, что вы можете использовать ECL , который является Common Lisp, который компилируется до C, и использовать Clang компилятор для цели LLVM (вместо GCC).

Я не уверен, какую (если есть) выгоду это даст вам, но это даст вам Lisp, работающий на LLVM =].

7 голосов
/ 28 января 2010

Следует иметь в виду, что многие из этих реализаций имеют C FFI и компиляторы собственного кода, которые значительно предшествуют LLVM.

3 голосов
/ 06 ноября 2013

mocl - это компилятор для относительно статического подмножества Common Lisp. Компилируется через LLVM / Clang.

3 голосов
/ 25 июля 2013

CL-LLVM обеспечивает привязки Common Lisp для LLVM. Он использует подход FFI, а не пытается выводить сборку LLVM или битовый код напрямую.

Эта библиотека доступна через Quicklisp.

3 голосов
/ 26 апреля 2010

нет (насколько мне известно) ни одного популярная схема / лисп на LLVM

В настоящее время llvm-gcc является ближайшей к популярной реализации любого языка в LLVM. В частности, есть нет зрелых реализаций языка на основе LLVM с сборкой мусора. Я уверен, что LLVM будет использоваться в качестве основы для множества захватывающих реализаций языка следующего поколения, но это потребует много времени и усилий, и в этом контексте LLVM пока рано.

Мой собственный HLVM проект является одной из единственных реализаций на основе LLVM с сборкой мусора, и его GC поддерживает многоядерные процессы, но имеет слабую привязку: я использовал стек теней для «нежелательной среды», а не для взлома код C ++ в LLVM для интеграции реального обхода стека.

0 голосов
/ 17 марта 2010

GHC экспериментирует с бэкэндом схемы и получает действительно интересные предварительные результаты по сравнению со своим собственным компилятором кода. Конечно, это Haskell. Но недавно они внесли новые изменения в LLVM, упрощая хвостовые вызовы IIRC. Это может быть полезно для реализации некоторых схем.

...