Промежуточный язык, используемый в scalac?

В компиляторе GCC мы видим несколько 'промежуточных языков': RTL, GENERIC и GIMPLE.

Этот ответ намекает на идею промежуточного представления в scalac.

У меня вопрос: есть ли "промежуточное представление" компилятора в Scala? Есть ли какие-либо документы для этого?

Предположения:

  • Я не имею в виду байт-код JVM. Я имею в виду уровень абстракции выше этого.

person hawkeye    schedule 31.12.2013    source источник
comment
stackoverflow.com/questions/13380807/   -  person JAL    schedule 01.01.2014
comment
@hawkeye Я думаю, что комментарий JAL, указывающий на этот вопрос, достаточно хорошо отвечает на этот вопрос.   -  person wheaties    schedule 01.01.2014


Ответы (3)


Ближайшими эквивалентами будут icode и bcode, используемые в scalac. Дополнительную информацию см. на сайте Мигеля Гарсии об оптимизаторе Scalac, здесь: http://magarciaepfl.github.io/scala/

Вы также можете считать байт-код Java своим промежуточным представлением, учитывая, что байт-код является конечным результатом scalac.

Или, возможно, настоящий промежуточный продукт — это то, что создает JIT до того, как он, наконец, выведет нативные инструкции?

В конечном счете, однако... Нет ни одного места, на которое можно было бы указать в утверждении "есть промежуточное звено!". Scalac работает поэтапно, последовательно изменяя абстрактное синтаксическое дерево, и каждый отдельный этап создает новый промежуточный вариант. Все это похоже на луковицу, и очень трудно попытаться выбрать один слой как более значимый, чем любой другой.

person Kevin Wright    schedule 31.12.2013

возможно, это поможет вам:

http://lampwww.epfl.ch/~paltherr/phd/altherr-phd.pdf

или эта страница:

www.scala-lang.org/node/6372‎

person abzcoding    schedule 31.12.2013

Согласно тезису Юлиана Драгоша, серверная часть использует промежуточное представление, называемое icode. Подробнее об этом можно прочитать здесь http://infoscience.epfl.ch/record/150270/files/EPFL_TH4820.pdf на стр. 34.

person Lotus Fenn    schedule 03.07.2015