Вероятно ли когда-нибудь будет возможно скомпилировать из D 2.0 в Javascript? - PullRequest
7 голосов
/ 27 марта 2011

Долгосрочный программист C ++ (это я) изучает другие языки и задается вопросом, стоит ли много изучать о D 2.0 . (Это переписать с чистого листа D.) Пока мне нравится то, что я вижу - много прагматичного, мудрого выбора. Теперь я хочу узнать немного больше и узнать, возможно ли когда-либо сделать следующее:

  1. Напишите некоторый код в D 2.0. (Может быть, это четко определенное подмножество D 2.0.)
  2. Скомпилируйте код из 1.
  3. Получите исходный код Javascript от компилятора.

Итак, я хотел бы иметь компилятор D 2.0 с бэкэндом, способным генерировать Javascript.

Итак, мой вопрос состоит из двух частей:

  1. Такой компилятор уже существует?
  2. Если такой компилятор существует , а не , и , если Я выбрал его реализацию, с чего лучше начинать?

Для контекста, причина, по которой я хотел бы вышеизложенного, заключается в том, чтобы я мог реализовать связку бизнес-логики в D 2.0, а затем использовать эту бизнес-логику в чистом веб-интерфейсе Javascript (который не является Flash / Silverlight / Java). Применение.

Обновление

У меня было три ответа, два из которых относятся к теме, а другой нет и поэтому игнорируется.

@ FeepingCreature считает, что этого никогда не произойдет, потому что «оно слишком несовместимо с целевой средой D». Мне интересно узнать, что это значит, и спросить.

@ Nekuromento, напротив, указывает, что теоретически это возможно с использованием LDC, за которым следует бэкэнд Javascript LLVM. Я проверил обе ссылки. Поддержка LDC для D 2.0 выглядит как работа в процессе. Но я бы предположил, что в какой-то момент он туда доберется. Яваскрипт LLVM также не оптимизирован и не минимизирован, но из демонстраций видно, что они работают. Поэтому я думаю, что этого достаточно, чтобы быть полезным как минимум.

Обновление 2

ОК - похоже, это лучшее решение на сегодняшний день.

  1. Вызвать НРС. (@Nekuromento) LDC объединяет внешний интерфейс Digital Mars с внутренним LLVM.
  2. Передать вывод из 1. через бэкэнд JLsM LLVM. (@Nekuromento)
  3. Передать вывод из 2. хотя Закрытие (@BCS)

Довольно скоро я выберу лучший ответ, но мне бы очень хотелось получить более информированное мнение.

Обновление 3

Еще немного информации о том, почему я хочу это сделать.

Вот конкретный пример одного проекта, который я хочу реализовать. Это будет библиотека геометрического моделирования, вероятно, написанная только мной, на ее создание уйдет несколько лет, и в итоге она будет содержать около 100 000 строк кода. Я хотел бы, чтобы он содержал как можно более близкие к нулю ошибки, и, следовательно, я не хочу реализовывать это в Javascript. Я хотел бы, чтобы он работал на сервере, на рабочем столе и в браузере тоже. (Под «в браузере» я имею в виду без помощи какого-либо плагина, такого как Flash, Silverlight или Java.) Правда в том, что код в браузере, работающем на Javascript, останется здесь на некоторое время. Проекты будут все больше нуждаться в стратегии, чтобы справиться с этим.

Обновление 4

Я надеялся получить еще несколько ответов, но не получил их. Ах, хорошо, неважно. Спасибо за все отзывы, включая стимулирующие комментарии @dsimicha. (Я надеюсь, что это нормально, что иногда технически не согласен, и в то же время сохраняю гражданские отношения.) Я принял ответ @Nekuromento.

Обновление 5 2018-07-18

Семь лет спустя LDC v1.11 поддерживает компиляцию и соединение с WebAssembly. 3

Ответы [ 3 ]

4 голосов
/ 27 марта 2011

Такого компилятора в настоящее время не существует, но есть некоторые работы с javascript LLVM-backend .

Так как существует LDC Он использует внешний интерфейс DMD и LLVM, поэтому теоретически можно добавить к нему вывод javascript.

2 голосов
/ 29 июня 2011

Следите за группами новостей D в течение следующих нескольких дней, я работаю над тем, что вас может заинтересовать (или, скорее, именно то, что вы хотите). В настоящее время он может скомпилировать:

int foo()
{
    if (true)
    {
        return 3;
    }
}

Я надеюсь получить альфа / бета-версию в течение следующей недели.

1 голос
/ 27 марта 2011

Краткий ответ: Нет.

Длинный ответ: Действительно. Нет.

Меньше Snarky Ответ: это слишком несовместимо с целевой средой D.

Если вы решили реализовать одну чертову власть, вам больше, но у вас есть работа для вас. Вероятно, лучше всего начать с чтения внешнего интерфейса DMD, который является FOSS (и, на самом деле, распространяется в стандартном zip-формате DMD).

...