Terra — Язык Для Lua


Новый низкоуровневый язык программирования Terra был разработан для работы с Lua для создания кода для высокопроизводительных вычислений.

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

Terra-это простой, статически типизированный, скомпилированный язык с ручным управлением памятью, и как таковой он похож на C, но был разработан для взаимодействия с Lua. Функции Terra-это первоклассные значения Lua, созданные с использованием ключевого слова terra. При необходимости они JIT-компилируются в машинный код.

Подробности о Терре были опубликованы Заком Девито и командой из Стэнфорда и Университета Пердью. Команда говорит, что, используя Lua в качестве лингвистического хоста для нового языка низкого уровня, они разработали систему, которая означает, что вы можете писать код высокого уровня на Lua и высокопроизводительный код на Terra.

Команда предполагает, что его можно использовать в качестве языка сценариев с высокопроизводительными расширениями, в качестве встроенного JIT-компилятора для создания языков или в качестве автономного языка низкого уровня.

При использовании в качестве языка сценариев преимуществом низкого уровня абстракции является предсказуемый контроль производительности, когда вам это нужно. В описании говорится

“Программы Terra используют тот же бэкэнд LLVM, который Apple использует для своих компиляторов C. Это означает, что код Terra работает аналогично эквивалентному коду C. Например, наши переводы программ nbody и fannhakunen с языка программирования shootout1 работают в пределах 5% от скорости их эквивалентов на языке Си при компиляции с помощью Clang, интерфейса LLVM на языке Си. Terra также включает встроенную поддержку операций SIMD и другие низкоуровневые функции, такие как вневременная запись и предварительная выборка. Вы можете использовать Lua для организации и настройки приложения, а затем вызывать код Terra, когда вам нужна контролируемая производительность.”

В случае использования в качестве встроенного JIT-компилятора для построения языков команда использует методы многоступенчатого программирования, чтобы сделать возможным метапрограммирование с использованием Lua. Выражения Terra, типы, функции и выражения являются первоклассными значениями Lua, поэтому вы можете создавать произвольные программы во время выполнения.

Это означает, что вы можете компилировать доменные языки (DSL), написанные на Lua, в высокопроизводительный код Terra, а поскольку Terra построена на экосистеме Lua, легко встраивать программы Terra-Lua в другое программное обеспечение в качестве библиотеки, поэтому вы можете добавить JIT-компилятор в существующее программное обеспечение. Вы можете использовать его для добавления JIT-скомпилированного DSL в ваше приложение или для динамической автоматической настройки высокопроизводительного кода.

Поскольку Terra была разработана таким образом, чтобы она могла работать независимо от Lua, ее можно использовать в качестве автономного языка низкого уровня в тех случаях, когда ваша конечная программа не нуждается в Lua. Вы просто сохраняете код Terra в файл .o или исполняемый файл. Команда говорит, что вы можете думать об этом как о замене метапрограммирования шаблонов C++ или X-макросов препроцессора C с лучшим синтаксисом.

Команда из Стэнфорда выпустила статью Terra: Многоступенчатый язык для высокопроизводительных вычислений, в которой они описывают, как Terra и Lua могут использоваться для создания высокопроизводительного кода. В статье команда говорит, что они полностью внедрили существующие многоязычные системы в Terra. Их автоматический тюнер на базе Terra для процедур BLAS работает в пределах 20% от ATLAS, а DSL для вычислений трафаретов работает в 2,3 раза быстрее, чем рукописный C.

Вы можете прочитать больше о том, как Terra можно использовать для генеративного программирования и компиляции языков на сайте Terra, а также загрузить его с GitHub.


Добавить комментарий