В последней версии surfboard, интерфейса командной строки для работы с языком программирования Ride теперь доступна новая команда: surfboard repl. - полнофункциональная программа Read-Print-Eval-Loop for Ride. Он позволяет намного быстрее проводить тестирование и обучение, а также предоставляет полную стандартную библиотеку встроенных функций и определений констант. С сегодняшнего дня эта функция также доступна в Waves IDE.

Ride REPL для IDE и доски для серфинга

Новая функция уже доступна как в Waves IDE, так и в CLI для досок для серфинга.
Если вы предпочитаете surfboard, установите / обновите инструмент:

npm i -g @waves/surfboard

При запуске повторная доска для серфинга будет выглядеть так:

{ ~ }  » surfboard repl
Welcome to RIDE repl
Compiler version 1.1.3-x-xxxxxx
You can use ?{term} to look up a specific definition, ?? to get the full context
:clear to clear console, :reset to restart repl, .editor to enter multiline
RIDE >

Особенности REPL

Ride REPL в значительной степени следует стандартам других REPL, полностью поддерживая синтаксис и семантику языка.

Определение и использование переменных и функций:

RIDE > 2 + 2
res1: Int = 4
RIDE > let x = 42
defined let x: Int
RIDE > func inc(i:Int) = i + 1
defined func inc(i: Int): Int
RIDE > inc(inc(res1)) + inc(x)
res4: Int = 49

Также доступны все криптографические функции:

RIDE > sha256(base58'')
res3: ByteVector = GKot5hBsd81kMupNCXHaqbhv3huEbxAFMLnpcX2hniwn

Работа с живым блокчейном

Если вам нужно опробовать API на основе блокчейна, например height, getInteger(account,key) в surfboard, убедитесь, что ваш surfboard.config.json правильно настроен. Для начала просто выполните surfboard init в пустом каталоге. Используемая конечная точка - это та, которая настроена в разделеAPI_BASE, this является производным от разделов SEED и CHAIN_ID. Общее руководство пользователя можно найти на гитхабе.

IDE использует конечную точку, настроенную в настройках, и выбранную учетную запись для this.

RIDE > height
res3: Int = 41806
RIDE > getInteger(this, "dataKey")
res2: Int|Unit = 42

Изучение стандартной библиотеки

Вы можете запросить сигнатуру функции, определение типа или объявление значения с помощью команды ?:

RIDE > ? getInteger
func getInteger(data: List[DataEntry], key: String): Int|Unit
func getInteger(data: List[DataEntry], index: Int): Int|Unit
func getInteger(addressOrAlias: Address|Alias, key: String)
   : Int|Unit

?? выводит все существующие определения.

Поскольку определения значений Ride неизменяемы, вы не можете переопределить их в REPL. Команда :reset очищает состояние REPL, удаляя все существующие определения.

.editor переходит в многострочный режим, поэтому вы можете ввести или вставить более крупный блок, выражение или несколько определений.

Поддерживается макрос FOLD ‹N›

Подробное объяснение этой функции можно найти здесь.

RIDE > func sum(a:Int, b:Int) = a + b
defined func sum(a: Int, b: Int): Int
RIDE > let arr = [1,2,3,4,5]
defined let arr: List[Int]
RIDE > FOLD<5>(arr, 0, sum)
res1: Int = 15

TL; DR: surfboard repl - это самый простой способ опробовать язык Ride и его семантику выполнения. Нет необходимости писать, развертывать и использовать полный контракт, чтобы проверить, sha256(base58'') или "x|x||".split("|") работает должным образом, однострочный REPL может ответить на большинство вопросов.