Яр (язык программирования) — различия между версиями

Материал из ТХАБ.РФ
Перейти к: навигация, поиск
м
м
Строка 85: Строка 85:
 
[[Категория:Язык программирования]]
 
[[Категория:Язык программирования]]
 
[[Категория:Язык программирования с русским синтаксисом]]
 
[[Категория:Язык программирования с русским синтаксисом]]
[[Категория:Яр (Язык программирования)]]
+
[[Категория:Яр]]
 
[[Категория:Лисп]]
 
[[Категория:Лисп]]
 
[[Категория:LISP]]
 
[[Категория:LISP]]

Версия 20:57, 8 февраля 2018

Язык программирования Яр

  • Яр - это русскоязычный универсальный язык программирования
  • Яр строится на платформе языка "искусственного интеллекта" Common Lisp, подобно тому, как Kotlin - на платформе JVM или F# - на платформе .Net
  • Программы на Яре быстры и быстро запускаются (прекомпиляция в двоичный код) и надёжны (сборка мусора, статическая типизация)
  • "Горячая замена кода" позволяет менять программу без её перезапуска. Например, можно будет добавлять в классы новые поля, а в функции - новые параметры. Это ключевое преимущество Яра перед другими языками, которое присуще используемой платформе Common Lisp
  • Возможная область применения такая же, как у C# или Java
  • язык и кроссплатформенная среда разработки выпущены под лиценией MIT - можно без ограничений встраивать в коммерческие приложения

Пример кода

/// классы больше похожи на структуры, чем на классы С++
опр класс Па () тело
  Поле1 // поле может содержать произвольный объект
кно // кно - сокращение от 'конец опр'
/// Есть наследование
опр класс Сы (Па) тело
  /// У поля есть тип и значение по умолчанию
  Поле2 -- л-строка = "Значение по умолчанию"
кно
/// 'ПаₒИмя' - это просто идентификатор 
 опр функ ПаₒИмя(Я -- Па)
тело
  л-печать("Я - Па")
  л-печать(Я.Поле1)
кно
опр функ СыₒИмя(Я -- Сы)
тело
   л-печать("Я - Сы")
   л-печать(Я.Поле1)
 пусть П2 = Я.Поле2
 если не П2 == "Значение по умолчанию" то
   л-печать(П2)
 кне // сокращение от 'конец если'
кно
/// Яр выполняет определения по одному, 
/// а идущие подряд несколько функций определяет за одно действие. 
/// Если нужно разбить группу функций, то применяется эта конструкция.
Сохрани-результат-компиляции()
опр функ Тест ()
тело
  /// родись - это аналог new или create
  пусть П = родисьₒПа(Поле1 = "1")
  // есть вывод типов, но есть и явное указание типа
  пусть С -- Сы = родисьₒСы(Поле1 = "2")
  П.Имя()
  С.Имя()
кно
/// Функция Тест вызывается во время выполнения скрипта
Тест()

Реализовано

  • неопубликованное описание языка на ~90 страницах
  • работающий прототип транслятора
  • реализованы функции, классы, некоторые управляющие конструкции, возможость вызова функций платформы
  • работающая среда разработки - разработка Яра ведётся в этой среде
  • раскраска исходных текстов, подсветка грамматических ошибок, переход к определению, автодополнение имён
  • пошаговый отладчик с отображением стека и локальных переменных
  • интерактивный вычислитель (REPL)

Что будет сделано

  • методы
  • декораторы
  • исключения
  • модули
  • параметрические типы, вариантность
  • стандартные контейнеры
  • лямбды

На данный момент исправляются ошибки вывода типов в платформе.

См. также

Ссылки