1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/LrikaM-rika-script

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
CHANGELOG.md 16 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 14:41 ce44354

Обновление журнала

v0.8

  • Функции обновлены. Теперь RikaScript поддерживает функции, передающие параметры и возвращающие значения. Также поддерживается рекурсия, но не замыкания.

    • Что было исправлено:

      • Исправлена проблема с использованием if xxx true.
    • Что обновлено:

      • В стандартной библиотеке появился метод ввода для получения данных с консоли.
      • Доработаны функции преобразования типов данных в стандартной библиотеке. Теперь можно преобразовывать целые и дробные числа из строк.
      • Функции могут определять другие функции внутри себя, но они не отличаются от функций, определённых снаружи. Внешние функции могут использовать внутренние функции после того, как внешняя функция была выполнена один раз.
      func outer(){
          func inner(){}
      }
      inner() // ошибка, потому что нет внутренней функции
      outer()
      inner() // ошибки нет, потому что теперь есть внутренняя функция
      • Теперь, когда RikaScript генерирует исключение, он останавливает не только текущую строку кода, но и текущий блок кода. Например, текущий цикл if или while или функцию, которая была вызвана.
      • Асинхронный движок был переписан с наследования на композицию. После простого тестирования проблем не обнаружено.

Другие исправления были забыты.

v0.8a210630

  • Изменена часть анализа литералов. Теперь поддерживаются литералы следующих типов: float, int, long, double. По умолчанию все числа имеют тип double, если не используются суффиксы f, i, l или F, I, L.

v0.8a210624

  • Исправлены проблемы с приоритетом вычислений в выражениях.
  • Исправлена ошибка, из-за которой нельзя было использовать отрицательные числовые литералы. Однако переменные по-прежнему нельзя объявлять отрицательными.
  • Определены параметры функций. Передача параметров реализована.
  • При вызове функций больше не нужно использовать ключевое слово call. Можно вызывать функции в одну строку, например, xxx(1, 2, 3). Однако есть проблема: в одной строке можно вызвать функцию только один раз, и она должна быть вызвана на самом внешнем уровне.
func add(a, b){
    a + b
}
add(1, 2) // нормально
add(1 + 1, 2) // нормально
add(add(1, 2), 2) // взрыв на месте
log(add(1, 2)) // спираль в небо
  • Нельзя получить возвращаемое значение процесса напрямую через set или var. Вместо этого используйте переменную result после вызова процесса.
add(1, 2)
log(result) // 3
  • Добавлена библиотека времени, позволяющая получить текущее время в виде временной метки.

v0.8a210619

  • Исправлено поведение операции остатка от деления в версии 0.7, при котором результат всегда был равен нулю.
  • Реализован контекст выполнения. Можно использовать методы :ENTER:() и :EXIT(): для управления контекстом вручную. Engine автоматически управляет контекстом при использовании синтаксиса call в операторах if и while.
  • Поскольку появился контекст, был добавлен синтаксис var для объявления переменных. Синтаксис такой же, как у set, а смысл следующий:
    1. set может присваивать значения только существующим переменным. Если переменная не существует в текущем контексте, она будет искать её в родительском контексте.
    2. var создаёт переменную в текущем контексте. Если переменная уже существует в текущем контексте, то она будет присвоена ей.
  • Планируется разработка передачи параметров и возврата значений в процессах. В Engine.cs значительно переработана часть, связанная с процессами.

v0.7

Обновление библиотек и операций со строками

  • Символ + может использоваться для объединения строк, аналогично большинству языков программирования. Левая часть должна иметь тип String, чтобы правая часть рассматривалась как строка.
  • Синтаксический сахар для set стал более продвинутым. Помимо =, +=, -=, /=, *=, можно также использовать любые бинарные функции перед знаком равенства. Например: set a and= false автоматически присвоит результат a and false переменной a. Этот синтаксический сахар эквивалентен 'a' = and(a, false). Используя эту функцию, можно расширить набор операторов присваивания при разработке библиотек!

На самом деле, целью обновления синтаксического сахара для set было позволить + = выполнять конкатенацию строк.

Переменные и операции с ними

Используйте set для установки переменных:

set message = 'Hello World'
log(message) // Hello World
set num = 10
set num += 5
log(num) // 15

Обратите внимание, что теперь для доступа к переменным не требуется добавлять префикс @. Просто напишите имя переменной. Конечно, за это приходится платить тем, что строки должны быть заключены в кавычки.

Выражения и операторы

Теперь RikaScript может обрабатывать вложенные вызовы функций и даже вычисления в инфиксной записи:

log(1 + int(10 ** 0.5)) // INFO 4, сначала вычисляется 10 ^ 0,5, затем берётся целая часть результата, потом прибавляется 1

Управляющие конструкции

Существующие определения функций с помощью func не изменились, но синтаксический сахар позволяет упростить использование if и while:

set i = 0
while i <= 10{
    if i % 2 == 0{
        log(i,'is an even number') // вывод чётных чисел!
    }
    set i += 1
}

Определение переменных с использованием строк

Фактически, set — это синтаксический сахар. set a = 1 преобразуется в 'a' = 1. Поэтому, если вы не против, вы можете заменить левую часть присваивания на строку. Когда библиотеки строк будут полностью реализованы, вы сможете получать доступ к различным переменным через них.

Причина такого странного поведения заключается в том, что RikaScript использует словарь Dictionary<string, object> для хранения данных.

Комментарии

Комментарии в RikaScript обозначаются символами //. Однако из-за проблем с производительностью комментарии пока не работают должным образом. На данный момент комментарии можно использовать только в конце строки с выражением. Их нельзя использовать в начале строк if, while или func. Это связано с тем, что обработка комментариев происходит на уровне Runtime, а Engine не может их обработать.

Синтаксические правила

RikaScript — это язык сценариев, который не использует лексический анализ или компиляцию. Поэтому синтаксические требования могут показаться вам жёсткими:

  1. Операторы if, while и func требуют определения блока кода. Фигурная скобка {должна стоять в конце этой строки. Её нельзя размещать отдельно.
  2. Завершающая фигурная скобка } должна находиться на отдельной строке. Перед ней и после неё не должно быть ничего, кроме пробелов.
  3. Поскольку в RikaScript нет понятия «оператор», все бинарные операторы в инфиксной записи преобразуются в вызовы методов. Поэтому вокруг каждого оператора должно быть пустое пространство, например: 1 + 1 является правильным, а 1+1 — нет.
  4. RikaScript полон сюрпризов и ошибок, которые ждут вас.

Другие обновления

Их слишком много, чтобы перечислять здесь.

v0.5 не была выпущена, её содержимое включено в версию 0.6

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

Обновления

  1. С этого момента, для использования класса в качестве библиотеки, достаточно наследовать от ScriptLibBase. Затем добавьте атрибут Library с указанием имени библиотеки и версии:
[Library("test","v2.33","Здесь можно указать информацию о библиотеке")]
public class Test : ScriptLibBase{
}
  1. Аналогично, функции также следуют этому подходу. Только функции с атрибутом Method могут быть вызваны RikaScript:
[Method(Name = "hello",Help = "Поздороваться")]
public void Hello(object name){
    Runtime.Logger.Info("Hello " + name);
}
// RS вызывает: hello("rika")
  1. Благодаря реализации Help в атрибутах Method и Library, необходимость в добавлении помощи вручную отпала. ScriptLibBase предоставляет метод help для отображения всей информации или поиска справки.

  2. Методы, предварительно кэшированные в каждом классе библиотеки, больше не хранятся непосредственно в каждой библиотеке. Вместо этого они хранятся в Runtime и дублируются дважды. Ключом является чистое имя метода плюс количество параметров, например, hello^1 или libraryname.hello^1.

  3. Если в атрибуте Method указано Keep = true, то после импорта библиотеки методы без префикса библиотеки не могут быть переопределены последующим импортом.

  4. Все методы в стандартных библиотеках имеют атрибут Keep = true и не могут быть переопределены. В конструкторе класса библиотеки можно получить экземпляр LibInfo, вызвав атрибут Info. Вызов AddInfo у Info позволяет добавить справочную информацию.

  5. В библиотеке std используется синтаксис типа std.help(«тип») для поиска информации, связанной с «типом».

  6. Для экспериментальной программы RikaScript добавлено приглашение ввода RS >.

  7. Добавлена команда help для отображения всей справочной информации текущей библиотеки по умолчанию.

  8. Синтаксис if @var return позволяет не только выйти из текущего выполняемого метода, но и выйти из файла, выполняемого через exec.

  9. Изменён конструктор базового класса библиотеки: теперь он принудительно устанавливает псевдоним по умолчанию для библиотеки и требует добавления информации о версии.

  10. Добавлено больше комментариев.

Совместимость

  1. Поскольку добавлен класс LibInfo, пользовательским библиотекам больше не нужно переопределять метод help, хотя это и возможно без последствий, просто LibInfo перестанет работать.
  2. Поскольку базовый класс библиотеки был изменён, необходимо немного изменить конструктор класса.
  3. Поскольку синтаксис if @var return был немного расширен, это может немного повлиять на старые программы.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/LrikaM-rika-script.git
git@api.gitlife.ru:oschina-mirror/LrikaM-rika-script.git
oschina-mirror
LrikaM-rika-script
LrikaM-rika-script
master