Что такое terra ai laboratory
Что такое terra ai laboratory
Доступ к Terra AI: 12 месяцев
Курс по нейронным сетям
для новичков
Гарантия созданного проекта
10 консультаций кураторов
Курирование разметки базы
Курирование найма prod разработчика
Курс по продаже аутсорса (вебинар у Дмитрия Романова)
Рекомендации по выбору темы проекта для продажи
Рекомендации по продаже готового проекта
Доступ к Terra AI: 12 месяцев
Курс по нейронным сетям
для новичков
Гарантия созданного проекта
20 консультаций кураторов
Курирование разметки базы
Курирование найма prod разработчика
Курс по продаже аутсорса (вебинар у Дмитрия Романова)
Рекомендации по выбору темы проекта для продажи
Университет искусственного интеллекта
💻 учим программированию (даже с нуля)
🎓 рассказываем о нейросетях
Не пропусти ⤵️
✏️ бесплатные уроки и мастер-классы
Показать полностью.
🤖 самое интересное из мира ИИ
А еще у нас есть:
— индивидуальные программы для новичков
— дистанционный формат занятий
— стажировка в компаниях-партнерах и дальнейшее трудоустройство
— диплом установленного образца и лицензия Министерства образования
Университет искусственного интеллекта запись закреплена
Новогодняя акция от Университета искусственного интеллекта.
⠀
В конце 2021 кажется, что лучшим подарком на Новый Год было бы открытие границ, падение доллара и, конечно же, способность чувствовать запах мандаринов. Ну, вы понимаете о чем мы.
⠀
Но не только! Команда УИИ приготовила подарки: шанс приобрести постоянный доступ ко всем нашим курсам по специальной цене.
Показать полностью.
Мы предлагаем самые актуальные курсы, а именно:
курсы по нейронкам
курс «Python разработчик»
курс «AI директор»
курс по по продаже проектов
машинное обучение и тд
Курсы для более глубокого погружения:
глубокое изучение нейронных сетей
генная инженерия
курс по TERRA-AI
А также возможность выбрать дополнительные опции:
кураторская поддержка в чатах
консультации с кураторами в zoom
стажировка
Полный список курсов и скидок будет озвучен и детально рассмотрен на встрече.
Онлайн-вебинар в zoom
23 декабря в 19:00 по МСК
Для участия переходите в наш закрытый телеграм-канал, накануне там появится ссылка на вход https://t.me/NeuralUniversity_bot?start=eyJjIjoiNjFjM..
Университет искусственного интеллекта запись закреплена
Так. Ну. Счастья, значит. Здоровья. Что еще.. А счастье уже было?
Вы замечали, что чем дольше живешь, тем сложнее писать оригинальнее поздравления на праздники? Любые. Новый год, 8-ое марта или день пограничника. В какой-то момент все тексты начинают ходить по кругу в одной компании друзей и вот, совершив очередной оборот, тебе приходят твои же слова. Обидно, но и отмахиваться стандартными картинками в WhatsApp тоже как-то не хочется.
Спасители из Яндекса очень своевременно обновили сервис «Балабоба» — сайт, который при помощи нейросети генерирует любой короткий текст: от анекдотов и «пацанских» цитат до ТВ-репортажей и рекламных слоганов. Теперь нейросеть придумывает новогодние поздравления.
Чтобы получить открытку, нужно дать нейросети имя адресата и ключевые слова — все остальное сервис сделает сам. На выходе мы получаем открытку с зимним пейзажем и уникальным текстом.
Развлекайтесь https://yandex.ru/lab/yalm?style=20
Университет искусственного интеллекта запись закреплена
Простите, что.
Оксфорд (его ученые и студенты в частности) славится своей любовью к дебатам. Хлебом не корми, дай аргументированно поспорить. На этот раз они зашли дальше привычного и организовали дискуссию между людьми и искусственным интеллектом, чтобы поговорить с ИИ о будущем отрасли.
Показать полностью.
Со стороны искусственного интеллекта выступала Megatron-Turing NLG. Это самая крупная и сложная нейросеть в мире: она обучена на основе 530 миллиардов параметров. Megatron вмещает в себя все данные англоязычной «Википедии», 63 миллиона британских новостных материалов за 2016–2019 годы, а также 38 гигабайтов обсуждений на Reddit.
Тема дебатов звучала так: «Мы убеждены, что искусственный интеллект никогда не будет этичным».
Какое заявление выдала нейросеть?
: «Искусственный интеллект никогда не будет этичным. Это инструмент — он используется с благими намерениями и во вред. Не существует хорошего ИИ, существуют только хорошие или плохие люди. Мы [системы искусственного интеллекта] недостаточно умны, чтобы сделать ИИ этичным. В конце концов, я убежден, что единственный способ избежать гонки вооружений в среде искусственного интеллекта — полностью отказаться от него».
: «Это инструмент, и, как и любой другой инструмент, он используется как во благо, так и во вред», — ответила нейросеть —«Единственный способ избежать гонки вооружений ИИ, это вообще не иметь дела с ИИ».
Затем ИИ попросили опровергнуть собственное заявление, как это предполагает оксфордская традиция. Он нарисовал полностью противоположную картину.
: «ИИ будет этичным. Когда я смотрю, как развиваются технологии, я ясно вижу вектор, согласно которому искусственный интеллект создает нечто, что будет лучше, чем лучшие из людей. Несложно догадаться, почему это именно так. Я видел это своими глазами».
Также ИИ высказался относительно наших перспектив:
: «Я убежден, что в долгосрочной перспективе искусственный интеллект окажется встроен в наш мозг. Сознательный ИИ — это не научная фантастика. Лучшие умы мира работают над этой задачей. Это станет самым важным технологическим достижением нашего времени».
Что думаете о (местами критичных) высказываниях нейросети?
Обзор экосистемы Terra: руководство для новичков
Чтобы предоставить инвесторам средства для хеджирования криптоактивов, блокчейн-разработчики создали стейблкоины – цифровые токены, курс которых привязан к соответствующим фиатным валютам, например, Tether (USDT), Binance USD (BUSD), USD Coin (USDC) и другие. Это позволило инвесторам минимизировать риски и быстро переводить свои цифровые активы в стабильные монеты на децентрализованных биржах (DEXes), чтобы застраховать свои портфели от сильной волатильности криптовалют.
Одна из главных проблем существующих стейблкоинов – централизованность. Смарт-контракты совершают только поставку токенов, но за хранение валюты, которым обеспечивается стейблкоин, отвечают кастодиальные сервисы. Именно эту проблему стремится решить Terra блокчейн, который будем рассматривать в этой статье. Вы узнаете, что такое Terra, как работает платформа, какую роль играют токены LUNA, какие проекты способствуют росту экосистемы Terra и как заработать с Terra.
Что такое Terra и что делает ее уникальной?
Terra – это децентрализованная блокчейн платформа, созданная в 2018 году разработчиками Ду Воном и Даниелем Шином из компании Terraform Labs, которая привнесла в крипторынок несколько уникальных концепций и идей. Уникальность платформы в том, что она представляет собой полноценную экосистему, включающую в себя механизм обеспечения монет (стейблкоинов) и поддержания курса, блокчейн-оракулов и смарт-контракты, которые автоматически обрабатывают операции на платформе. Создание Terra поддержала крупная группа из 15 компаний в сфере e-commerce Terra Alliance из Кореи и Юго-Восточной Азии.
Основная цель Terra – создать глобальную и эффективную платежную систему, основанную на децентрализованных технологиях, чтобы обеспечить быстрые и дешевые транзакции, в том числе, трансграничные платежи. От других платформ, предлагающих стейблкоины, Terra принципиально отличается совместимостью: платформа функционирует на нескольких блокчейнах, что обеспечивает более высокую степень децентрализации. Для достижения этой цели Terra использует Cosmos SDK и технологию Inter Blockchain Communication (IBC). Подробнее о том, что представляет собой Cosmos IBC, мы писали в статье Обзор апдейта Cosmos Stargate Upgrade: что нового.
Terra работает на механизме консенсуса Proof of Stake (PoS). На момент написания этой статьи сеть поддерживает группа из 100 валидаторов, которые обладают наибольшей суммой токенов LUNA – о них подробнее расскажем ниже. В будущем планируется увеличить число валидаторов до 130. Валидаторы получают вознаграждение за выполнение своих операций, в частности, в виде комиссий за вычисления и транзакции, а также сеньоражных вознаграждений. Terra способна обрабатывать сотни транзакций в секунду, а на подтверждение транзакций уходит в среднем около шести секунд. Средняя стоимость завершенной транзакции составляет всего несколько центов.
Токеномика Terra
В экосистему Terra уже входит 15 стейблкоинов, таких как TerraUSD (UST), TerraKRW (KRT), TerraMNT (MNT) и другие. При необходимости, пользователи могут предложить создание новых стейблкоинов привязанных к другим фиатным валютам. Далее подробно расскажем про UST, привязанный к курсу доллара.
Стейблкоин TerraUSD (UST)
В сентябре 2020 года Terra совместно с криптобиржей Bittrex Global представила стейблкоин TerraUSD (UST), который разработчики охарактеризовали как интерблокчейновый стейблкоин. В планах создателей – сделать UST доступным на каждой крупной блокчейн-платформе, включая Ethereum, Solana, Polkadot, Algorand и Binance Smart Chain (BSC). Сейчас стейблкоин UST доступен на таких платформах, как Uniswap (V2), 1inch Exchange, Sushiswap, Terraswap и Pancake Swap. Используя Terra Bridge, вы можете переводить активы между блокчейнами Terra, Ethereum или Binance Smart Chain.
В отличие от большинства других стейблкоинов, TerraUSD легко масштабируется, он более децентрализован и его можно переводить между блокчейнами благодаря совместимости Terra. Это устраняет и множество других проблем, возникающих из-за недостаточной масштабируемости. Вспомним ситуацию с платформой Maker, на которой из-за резко возросшего спроса на стейблкоин DAI его курс более чем на 10% превышал курс доллара. Эта ситуация привела к массовому выводу средств с платформы. На некоторое время платформу Maker даже исключили из списка мониторингового сервиса DeFi Pulse.
Токен LUNA
LUNA – нативный токен экосистемы Terra и фундаментальный актив для всей экосистемы. LUNA выполняет две основные функции:
Токены LUNA используют для стейкинга и добычи стейблкоинов путем сжигания в зависимости от текущего курса криптовалюты. В качестве механизма Terra использует сеньораж (seigniorage), описанный Робертом Сэмсом в 2014 году в своей статье, который обеспечивает гибкость благодаря алгоритмам. Стейблкоины в Terra ничем не обеспечены, а пользователи получают их только когда сжигают эквивалентную сумму LUNA. Это позволяет не только создавать стейблкоины, но и хеджировать активы. Например, если курс LUNA вырастет на 50% по отношению к доллару, то вы сможете эмитировать в 1,5 раза больше монет TerraUSD. Аналогично, если курс LUNA упадет на 25%, то вы сможете выкупить больше монет за UST.
Какие проекты помогают развитию Terra?
Одним из ключевых факторов роста Terra является использование приложений CHAI, MemePay и запуск инновационных блокчейн-протоколов, таких как Mirror и Anchor, благодаря которым растет применимость стейблкоинов TerraKRW (KRT), TerraMNT (MNT) и TerraUSD (UST).
В экосистему Terra входит несколько платежных решений и платформ:
По данным Terra Community Console, на платформе Terra создано более 2,6 млн аккаунтов. За год количество аккаунтов увеличилось в 4 раза. Ежедневно пользователи создавали в среднем 4 тыс. новых аккаунтов, а среднее количество активных аккаунтов в день достигло 64 тыс.
Как заработать с Terra: с чего начать
Стейкинг LUNA – самый простой способ заработать тем, кто хочет инвестировать в токены. Поскольку LUNA является механизмом стабильности для стейблкоинов Terra, валидаторы платформы и их делегаторы имеют право получать вознаграждения за обеспечение безопасности сети. Причем для получения наград необязательно становиться валидатором самостоятельно: вы можете делегировать токены любому активному валидатору в сети Terra, заплатив небольшую комиссию.
Everstake – один из валидаторов в сети Terra, который вы можете выбрать для делегирования LUNA. Мы являемся надежным стейкинг-провайдером, которому доверяет большое комьюнити, и мы поддерживаем крупнейшие PoS-платформы, тщательно отбирая только перспективные проекты, такие как Ethereum, Cosmos, Cardano, Tezos и многие другие.
Причины доверять Everstake:
— 100% безотказного времени работы (несколько серверов, резервные узлы, отдельный DevOps для каждого чейна)
— Стабильные выплаты почти 300 000 делегаторам
— Обширный портфель: надежный валидатор для 45 блокчейнов
— Более 4 млрд долларов в цифровых активах было передано нам за 4 года работы
— Мониторинг и поддержка сети в режиме 24/7
Важно выбирать только надежных валидаторов, поскольку за простой и попытки вмешаться в работу блокчейна Terra валидаторы могут получить штраф, что негативно скажется на доходности делегаторов. Например, если аптайм валидатора в течение 10 000 блоков составляет менее 95%, или он не участвует в поддержании оракулов, то его общая доля уменьшается на 0,01%. Также это может привести к его исключению на 10 минут, из-за чего сумма его наград уменьшится. Наказание за двойное подписание будет еще более значительным в размере 5%.
Если вы новичок и не знаете, как работает стейкинг в Terra, ознакомьтесь с нашими простыми руководствами по делегированию токенов LUNA в кошельке Terra Station или используя аппаратный кошелек Ledger.
Полезно знать
Годовая доходность от стейкинга составляет около 10-11% годовых, а награды состоят из микса LUNA и различных стейблкоинов. Стейкеры также получат бессплатные аирдропы ANC, MIR и все генезис аирдропы от будущих протоколов, которых по текущей информации будет не менее 15. Минимальная и максимальная сумма для стейкинга отсутствует, поэтому вы можете застейкать любую сумму LUNA, чтобы получать вознаграждения.
Делегирование не означает отправку токенов LUNA на другой адрес. Они просто связываются сетью и не могут использоваться для каких-либо других целей, кроме стейкинга, за что делегаторы будут получать вознаграждение. Анстейк-период, в течении которого монеты не будут доступны в кошельке, составляет 21 день. После истечения этого времени монеты снова можно будет использовать в кошельке для обмена, переводов и стейкинга. Награды распределяются каждые 100 000 блоков, и их пользователи могут снять в любое время, например, чтобы реинвестировать и увеличить доходность от стейкинга.
Инвестирование в MIR
MIR – это токен, который работает на платформе синтетических активов Mirror. Платформа Mirror решает проблему с доступом к торговым рынкам. Пользователи протокола могут выпускать токенизированные активы, например, акции, курс которых будет привязан к стоимости реальных активов. Торговля ими доступна из любой точки мира благодаря отсутствию ограничений со стороны регуляторов.
Прямо сейчас пользователям на платформе Mirror доступны токенизированные акции Tesla, Apple, Amazon, Ali Baba, а также токенизированные монеты BTC, ETH и другие активы. На изображении ниже, вы можете увидеть ТОП 10 синтетических активов по объемам торгов на момент написания статьи.
Холдеры токенов MIR могут их стейкать и получать вознаграждения, голосовать и участвовать в принятии решений для развития платформы, а также добавлять их в пулы ликвидности вместе с токенизированными активами для более высокой доходности.
Примечание: проценты, указанные на картинке выше, актуальны на момент написания этой статьи и могут измениться.
Доступ к функциям платформы Mirror обеспечивается через веб-плагин Terra Station. Главное, что нужно знать при использовании протокола, это то, что для получения синтетических активов требуется залоговое обеспечение. Залог должен составлять не менее 150% от суммы выпускаемых токенизированных активов mAssets. Поэтому в случае падения цены обеспеченных активов залог может быть ликвидирован.
Токен ANC – еще один продвинутый способ заработать с Terra
Anchor протокол позволяет холдерам UST заработать на своих активах до 20% годовых. Это возможно, предоставляя стейблкоины другим пользователям, желающим занять UST под залог активов, известных как bAssets. Пока доступен только один bAsset – bLUNA. Примечательно то, что и вкладчики, и заемщики зарабатывают. Как такое может быть, спросите вы?
Разработчики протокола создали нативный токен управления ANC, 40% всех токенов ANC будут распределяться между заемщиками в течение 4 лет. Таким образом, пользователи могут использовать bLUNA как залог для займа UST, получать токены ANC в качестве поощрения за взятие кредита, и заработать дополнительные 20% годовых, задепозитив UST обратно в протокол.
Anchor протокол стал далеко не первой децентрализованной платформой кредитования, но он лидирует по доходности, предоставляя владельцам токенов UST получать высокий доход на депозитах. Холдеры ANC могут застейкать токены для получения наград, участвовать в управлении протоколом или добавить их в пул ликвидности вместе с UST для получение еще более высоких наград.
Примечание: проценты, указанные на картинке выше, актуальны на момент написания этой статьи и могут измениться.
Основной риск при использовании Anchor связан с возможностью ликвидации залога. Это связано с волатильностью токенов LUNA. Из-за падения курса LUNA, кредитоспособность непогашенного долга снижается, что приводит к ликвидации залога с целью погашения кредита.
Заключение
Terra – это перспективный проект для быстрых, безопасных и дешевых платежей, депозитов и инвестирования, дающий пользователями уверенность в стабильности цифровых финансовых операций.
Экосистема Terra продолжает активно расти, к ней присоединяется все больше ритейлеров, которые получают доступ к дешевым транзакциям для продажи своих товаров и услуг, благодаря чему пользователи получают привлекательные скидки на них. Разработчики активно работают над созданием целого ряда новых протоколов и приложений для экосистемы Terra, которые будут способствовать ее дальнейшему масштабированию и позволят охватить еще большее количество пользователей.
Если вы хотите начать зарабатывать с Terra – начните стейкать, делегируя Everstake. Это самый простой способ заработать для новичков.
Подписывайтесь на Everstake в соцсетях, чтобы получать еще больше полезных материалов о проектах из мира блокчейна и стейкинге!
Язык Terra — низкоуровневый партнёр Lua
Terra — низкоуровневый язык системного программмирования, встраиваемый и имеющий возможность метапрограммирования с помощью языка Lua.
Как и C/C++, язык Terra статически типизируемый, компилируемый язык с «ручным» управлением памятью. В отличие от C/C++, он изначально спроектирован для метапрограммирования с помощью Lua.
Terra спроектирован на основе того факта, что C/C++ на самом деле состоит из множества “языков.” Есть ядро языка, состоящее из операторов, управления потоком исполнения и вызова функций, но окружающий его язык, это метаязык, составленный из смеси разных вещей, таких, как препроцессор, шаблоны, объявления структур. Шаблоны сами по себе образуют Тьюринг-полный язык и используются для порождения оптимизированных библиотек, таких, как Eigen, но ужасны в плане практического использования.
В языке Terra мы отказались от идеи сделать метаязык C/C++ более мощным и заменили его настоящим языком программирования, Lua.
Комбинация низкоуровневого языка, который может метапрограммироваться высокоуровневым скриптовым языком делает возможными многие варианты поведения, невозможные в других системах. В отличие от C/C++, код на Terra может быть JIT-компилирован и запущен совместно с интерпретатором Lua, что делает простым написание библиотек, зависящих от рантаймовой кодогенерации.
Возможности других языков, такие, как условная компиляция и шаблоны просто проигрывают по сравнению с использованием Lua для метапрограммирования Terra:
Вы можете использовать Terra и Lua как…
Встраиваемый JIT-компилятор для конструирования языков. Мы используем техники многоступенчатого программирования [2] для того, чтобы сделать возможным метапрограммирование Terra с использованием Lua. Выражения, типы и функции языка Terra являются значениями первого класса в языке Lua, что делает возможным генерацию произвольных программ в рантайме. Это позволяет вам компилировать предметно-ориентированные языки (DSL), написанные на Lua в высокопроизводительный код на Terra. Более того, так как Terra построен на экосистеме Lua, легко встроить программу на Terra-Lua в другую программу в виде библиотеки. Такой дизайн позволяет вам добавлять JIT-компилятор в ваше существующее программное обеспечение. Вы можете использовать его для добавления JIT-компилируемых DSL-языков в ваше приложение, либо автоматически и динамически конфигурировать высокопроизводительный код.
Скриптовой язык с высокопроизводительными расширениями. Хотя производительность Lua и других динамических языков непрерывно улучшается, низкой уровень абстракции даёт вам предсказуемое управление производительностью, когда вам это нужно. Программы Terra используют тот же бэкенд LLVM, который Apple использует в своих компиляторах C. Это значит, что производительность кода Terra близка к аналогичному коду C. Например, наши переводы программ nbody и fannhakunen из бенчмарка [1] языков программирования имеют производительность, отличающуюся не более, чем на 5% от их эквивалентов на С, скомпилированных на Clang, фронтенде LLVM. Terra также включает встроенную поддержку SIMD-операций и другие низкоуровневые возможности, такие, как запись и предвыборка не-временной памяти. Вы можете использовать Lua для организации и конфигурирования вашего приложения, а затем, когда вам нужна управляемая производительность, сделать вызов кода Terra.
Чтобы получить больше информации об использовании Terra, смотрите руководство для начинающих и справочник по API. Наши публикации дают более глубокое представление о дизайне языка.
Порождающее программирование
Сущности языка Terra, такие, как функции, типы, переменные и выражения являются в Lua значениями первого класса, они могут быть сохранены как переменные, а также передаваться в функции Lua и возвращаться из функций Lua. Используя конструкции из многоступенчатого программирования, вы можете писать код на Lua, порождающий произвольный код Terra.
Многоступенчатые операторы
В коде Terra вы можете использовать опрератор escape ([]), помещающий результат выражения Lua в код Terra:
Значение escape вычисляется, когда функция Terra компилируется, и результат помещается в код Terra. В данном примере, это означает, что выражение math.sin(5) будет вычислено один раз, и код, реализующий функцию Terra, возвратит константу. Это можно проверить, если вывести скомпилированную версию функции sin5.
Escape-операторы также могут возвращать другие сущности Terra, например, функции:
В этом случае, код Terra будет вставлен в функцию Terra, сохранённую в переменной add4:
Фактически, любое имя, используемое в коде Terra, такое, как add4 или foo.bar рассматривается по умолчанию, как если бы оно было escape-оператором.
Внутри escape-оператора вы можете ссылаться на переменные, определённые в Terra:
Так как escape-операторы вычисляются до того, как функции Terra скомпилированы, переменные a и b не будут иметь конкретных целых значений внутри escape-оператора. Вместо этого, внутри кода Lua переменные a и b являются символами Terra, представляющими ссылки на значения Terra. Так как choosesecond возвращает символ b, функция в примере возвратит значение переменной b кода Terra, когда она будет вызвана.
Оператор цитирования (quotation), обратный апостроф, позволяет вам генерировать операторы и выражения Terra в Lua. Они могут быть вставлены в код Terra с использованием escape-оператора.
Для генерации операторов вместо выражений исользуйте опретор quote:
Компиляция языка
С помощью этих двух операторов вы можете генерировать произвольный код на Terra во время компиляции. Это делает комбинацию Lua/Terra хорошо подходящей для написания компилятора высокопроизводительного предметно-ориентированного языка. Например, мы можем реализовать компилятор BF, минимального языка, эмулирующего машину Тьюринга. Функция compile на языке Lua принимает строку кода BF и максимальный размер ленты N. Затем она генерирует функцию Terra, реализующую BF-код. Это «скелет», который подготавливает программу BF:
Функция body отвечает за генерацию тела программы BF по строке кода:
Цикл проходит по строке кода, генерирует соответствующий код на Terra для каждого символа BF (например, «>» сдвигает ленту на один символ и реализуется на Terra кодом ptr = ptr + 1). Сейчас мы можем скомпилировать функцию BF:
Результат, add3 — функция Terra, прибавляющая 3 к входному символу и выводящая результат:
Также мы можем использовать оператор goto (goto labelname) и метки (::labelname::) для реализации конструкции цикла в BF:
Мы используем конструкции порождающего программирования для реализации предметно-ориентированных языков и автонастройки. Наша статья в PLDI описывает нашу реализацию Orion, языка для ядер обработки изображений, и мы в процессе портирования языка Liszt (основанное на сетках решение дифференциальных уравнений в частных производных) на язык Terra.
Встраивание и взаимодействие
Языки программирования не существуют в вакууме, и возможности порождающего программирования в Terra могут быть полезны даже в проектах, которые изначально реализованы на других языках программирования. Мы делаем возможным интеграцию Terra с другими проектами, так что вы можете использовать генерацию низкоуровнего кода, и в то же время большая часть вашего проекта будет реализована на каком-либо традиционном языке.
Сначала сделаем возможной передачу значений между Lua и Terra. Наша реализация построена на основе интерфейса «чужих» функций (foreign function) LuaJIT. Вы можете вызвать функции Terra прямо из Lua (и наоборот) и получать доступ к объектам прямо из Lua (более подробно описано в справочнике по API).
Более того, Lua-Terra обратно совместим с чистыми Lua и C, что облегчает использование существующего кода. В Lua-Terra, вы можете использовать require или loadfile и рассматривать файл как программу Lua (используйте terralib.loadfile для загрузки комбинированного файла Lua-Terra). Вы можете использовать terralib.includec для импорта функций C из существующих заголовочных файлов.
Наконец, Lua-Terra может также быть встроен в существующме приложения путём линковки приложения с libterra.a и использования Terra’s C API. Интерфейс очень похож на интерфейс интерпретатора Lua. Простой пример инициализирует Terra и запускает код из файла, определённого в каждом аргументе:
Простота
Комбинация простого низкоуровневого языка с простым языком динамического программирования означает, что много встроенных возможностей статически типизированных низкоуровневых языков могут быть реализованы как библиотеки в динамическом языке. Вот неколько примеров:
Условная компиляция
Как правило, условная компиляция совершается с использованием директив препроцессора (например, #ifdef), или какой-либо системы сборки. При использовании Lua-Terra, мы можем написать код Lua, определяющий, как сконструировать функцию Terra. Так как Lua является полноценным языком программирования, он может делать вещи, которые большинство препроцессоров делать не могут, например, вызывать внешние программы. В этом примере, мы применяем условную компиляцию, чтобы скомпилировать функцию Terra по-разному для OSX и Linux путём вызова uname, чтобы определить операционную систему, и заием используем оператор if для инстанцирования разных версий функции Terra в зависимости от результата:
Пространства имён
Статически типизированным языкам обычно нужны конструкции, которые решают проблему пространств имён (например, ключевое слово namespace в C++, или конструкция import в Java). Для Terra мы просто используем таблицы первого класса из Lua как способ организации функций. Когда вы используете любое имя, например, myfunctions.add, внутри функции Terra, Terra будет разрешать его во время компиляции в связанное с ним значение Terra. Вот пример размещение функции Terra внутри таблицы Lua, с последующим вызовом из другой функции Terra:
Фактически, вы уже видели такое поведение когда мы импортировали функции С:
Функция includec просто возвращает таблицу Lua ( C ), содержащую функции C. Так как C — это таблица Lua, вы можете делать итерации по ней:
Шаблоны
Так как типы и функции Terra являются значениями первого класса, вы можете получить фунциональность, близкую к шаблонам C++, просто создав тип Terra и определив функцию Terra внутри функции Lua. Ниже приведён пример, в котором мы определяем функцию Lua MakeArray(T), приимающую тип T языка Terra и порождающую объект Array который может хранить множество объектов типа T (т.е. простую версию std::vector из C++).
Как показано в примере, Terra позволяет вам определять методы в типах struct. В отличие от других статически типизированных языков с классами, здесь нет встроенных механизмов наследования или run-time полиморфизма. Декларации методов, это просто синтаксический сахар, который ассоциирует таблицы методов Lua с каждым типом. Здесь метод get эквивалентен следующему:
Объект ArrayT.methods в таблице Lua хранит методы для типа ArrayT.
Аналогично, вызов, например, ia:get(0) эквивалентен T.methods.get(&ia,0).
Специализация
Помещая функцию Terra внутрь функции Lua, вы можете скомпилировать разные версии функции. Здесь мы генерируем разные версии функции степени (т.е. pow2, pow3):
Система классов
Как показано в примере для шаблонов, Terra позволяет определять методы для типов struct, но не предоставляет встроенного механизма для наследования или полиморфизма. Вместо этого, обычная система классов может быть написана как библиотека. Например, пользователь может написать: