Gosu

Материал из Википедии — свободной энциклопедии
Перейти к навигации Перейти к поиску
Gosu
Изображение логотипа
Класс языка язык программирования и объектно-ориентированный язык программирования
Появился в 2002
Автор Guidewire Software
Разработчик Guidewire and open source contributors
Выпуск 1.14.28 (13 октября 2022; 18 месяцев назад (2022-10-13))
Система типов Статическая
Испытал влияние C# и Java
Повлиял на Kotlin
Лицензия Apache License
Сайт gosu-lang.github.io
Платформа Выполняется на Java Virtual Machine, статически и динамически компилируется в Java байткод.
ОС поддержка JVM

Gosu — cтатически-типизированный язык программирования, который запускается на виртуальной машине Java. Этот язык используется в нескольких проектах с открытым исходным кодом SparkGS и Ragnar DB, и широко используется в страховой отрасли в коммерческих продуктах Guidewire Software. Язык вобрал в себя возможности языков Java, C# и ECMAScript. Уникальной особенностью языка, является открытая система типов, которая позволяет легко обеспечить проверку во время компиляции или в IDE. Также язык позволяет создавать как программы общего назначения (файлы .gst), так и скрипты (.gsp-файлы) и выполнять их непосредственно из источника без предварительной компиляции.

Синтаксис[править | править код]

Gosu имеет C-style синтаксис.

Простейшая программа Hello World на Gosu.

class Main {
  static function main(args: String[]) {
    print("Hello, World!")
    // или проще
    "Hello, World!".print()
  }
}

// второй вариант работает, только если добавлен
enhancement MyStringEnhancement : String {
  function print() { print(this) }
}

Пользуясь методами и лямбдами очень легко работать с контейнерными объектами.

var list = {1, 2, 3}
var result = list.where(\elem -> elem >= 2)
print(result)

Классы Gosu могут иметь функции, поля, свойства и внутренние классы в качестве членов. Номинальное наследование и композиция с помощью делегирования встроены в систему типов, а также структурную типизацию. В дополнение к стандартным типам классов Gosu поддерживает перечисления, интерфейсы, структуры и аннотации.