Verse — это новый язык программирования, поэтому если вы опытный программист и встречаете не совсем понятную концепцию, обратитесь к этому глоссарию.
Если же вы новичок в программировании, глоссарий также будет вам полезен. Мы добавили определения многих ключевых терминов из сферы программирования, и, возможно, вы найдёте здесь ответы на свои вопросы!
Числа и символы
A
абстрактный класс (abstract class)
Если класс или метод класса имеет спецификатор
abstract
, вы не можете создать экземпляр класса. Абстрактный класс предназначен для использования в качестве суперкласса, в котором реализованы или определены некоторые, но не все, составляющие. Он также называется базовым классом.
абстракция (abstraction)
Это принцип в программировании, когда от пользователя скрываются более сложные детали, поскольку для него нет необходимости в их понимании. К примеру, вы можете купить кофе в автомате, не вникая в принципы его работы.
уровень доступа (access level)
Права доступа, необходимые для доступа к составляющей. Они задаются с помощью спецификатора составляющей.
аддитивный эффект (additive effect)
Аддитивный эффект — это эффект, который может быть добавлен к исключительному эффекту. К аддитивным эффектам относятся
suspends
иdecides
.
агент (agent)
Агент может представлять либо игрока, либо ИИ.
алгоритм (algorithm)
Алгоритм — это последовательность инструкций, написанных для решения проблемы или выполнения задачи. Это как рецепт определённого блюда. Когда вы пишете код, который решает проблему или выполняет задачу, этот код является алгоритмом.
альтернативные представления целых чисел (alternate integers)
any
В Verse есть специальный тип
any
который является супертипом для всех типов (при этом все остальные типы являются подтипамиany
). Из-за этого он поддерживает очень мало операций, поскольку все связанные с ним операции должны поддерживаться для всех значений. Несмотря на редкое использование этого типа, его полезно знать, поскольку он может встретиться при написании кода, который выдаёт ошибку. Чаще всего он встречается, когда результатом могут быть несколько различных выражений (например, разные путиif
), аany
является их единственным общим супертипом.
API
Сокращение от Application Programming Interface (интерфейс программирования приложения) представляет собой библиотеки, обычно группируемые в наборы вызываемых функций, типов и структур данных, которые дают пользователям возможность получать доступ и взаимодействовать с системами Unreal и Fortnite.
архетип (archetype)
Архетип — это экземпляр класса, который полностью определяется значениями своих полей в классе.
создание экземпляра архетипа (archetype instantiation)
Процесс создания архетипа. Сравните с конструктором (constructor), который также может запускать логику или другие функции.
аргумент (argument)
Значение, присвоенное параметру в сигнатуре функции и задаваемое при вызове функции.
массив (array)
Массив — это контейнер, в котором можно хранить элементы одного типа. Элементы массива располагаются в том порядке, в котором они в нём сохраняются. К элементам можно получить доступ по их позиции в массиве, называемой индексом.
Для создания массива нужно указать ключевое слово
array
, а затем скобки{}
. Пример:Players : []player = array{Player1, Player2}
См. также Массив.
выражение присваивания (assignment expression)
В Verse выражение присваивания сохраняет значение в изменяемом месте, например, при инициализации переменной или изменении значения переменной.
async
Выражению
async
иногда требуется время для оценки. Это выражение может не завершиться в текущем обновлении симуляции или завершиться в более позднем обновлении. Асинхронные функции, обозначенные спецификаторомsuspends
, также называются сопрограммами. Асинхронные выражения противопоставляются непосредственным выражениям.
асинхронный контекст (async context)
Область видимости, в которой разрешено асинхронное выражение, такое как вызов сопрограммы.
атомарный код (atomic)
Простая законченная единица кода, которая завершает выполнение успешно или неуспешно, без прерывания или контроля со стороны другого кода. Атомарный код не может быть прерван. Все смежные, непосредственные, неасинхронные выражения считаются атомарными: их код гарантированно выполняется без прерывания в одном обновлении, а также без вытеснения или переключения контекста.
атрибут (attribute)
Атрибут — это параметр или другая информация, связанная с идентификаторами, на которую можно ссылаться или анализировать в Verse или в приложении, таком как UEFN.
В синтаксисе атрибута используется
@
, за которым следует ключевое слово этого атрибута.
B
шестнадцатеричная система (base-16)
Шестнадцатеричная система (часто обозначается как hex от hexadecimal, где hexa — это шесть, а decimal — десять) — это система счисления, в которой используются 16 символов, а не 10, как в более привычной для нас десятичной системе.
двунаправленный (bidirectional)
Функционирующий в двух направлениях.
привязать (bind)
В компьютерном программировании привязать означает создать связь между двумя или более объектами программы на определённое время.
блочное выражение (block expression)
Блочное выражение — это способ группировки выражений в одно выражение или создания вложенного блока кода. Блочные выражения работают так же, как блоки кода.
тело (body)
Блок с собственной областью видимости, в котором определены подвыражения языка, например тело функции или тело цикла. Например, тело функции содержит выражения, которые определяют, что делает функция, а любые переменные, объявленные в функции, являются локальными для тела этой функции.
булево значение (Boolean)
См. булева логика.
булева логика (Boolean logic)
Система логики, в которой выражаемое значение является либо истинным, либо ложным, и которая часто используется для контроля исполнения в языках программирования. Она названа в честь Джорджа Буля (1815–1864 гг.), математика, внёсшего ключевой вклад в развитие логики и алгебры.
В Verse это тип
logic
, используемый для представления значенийtrue
(истина) илиfalse
(ложь). Эта булева логика реализуется через выражения с неоднозначным результатом в контекстах, допускающих неоднозначность.
привязанная (bound)
Переменная, для которой выполнено действие привязки. Все переменные в Verse привязываются сразу после их определения — они не могут находиться в непривязанном состоянии.
фигурные скобки (braces)
См. скобки.
скобки (brackets)
Скобки используются в Verse для определения различных видов информации в коде. В Verse используются четыре вида скобок. Область их применения:
- Круглые скобки
()
служат для задания параметров в сигнатуре функции и аргументов в вызове функции, а также для группировки выражений, кортежей и подклассов. - Квадратные скобки
[]
служат для вызова функций с неоднозначным результатом, указания спецификаторов типов для массивов и ассоциативных массивов, а также для индексирования массивов. - Фигурные скобки
{}
используются при создании экземпляров архетипов, форматировании блоков кода и интерполяции строк. - Угловые скобки
<>
используются для добавления спецификаторов к идентификаторам и функциям.
- Круглые скобки
выражение branch (branch expression)
Выражение
branch
начинает блок из одного или более асинхронных подвыражений. Любое следующее за ним выражение выполняется немедленно.Дополнительную информацию см. в разделе Одновременное выполнение.
break
Выражение, которое прерывает текущий цикл
loop
и выполняет после него следующее выражение. См. также Выражения loop и break.
программная ошибка (bug)
Программная ошибка — это ошибка в компьютерной программе, которая приводит к неправильному или неожиданному результату. Программные ошибки возникают в среде выполнения, в отличие от ошибок компилятора, которые возникают на этапе компиляции Verse. Процесс выявления и устранения программных ошибок называется отладкой.
сборка (build)
Компиляция кода на языке Verse в инструкции, которые способен выполнить компьютер.
встроенный элемент (built-in)
В некоторых языках программирования встроенные элементы — это то, что можно использовать непосредственно в языке и его стандартных библиотеках.
встроенный тип (built-in type)
Встроенный тип не может быть разбит на составляющие, в отличие от составного типа.
C
C++
Популярный язык программирования, используемый в разнообразных приложениях, особенно в игровых движках, таких как Unreal Engine.
кэш (cache)
Способ хранения данных для ускоренного доступа к ним.
вызов (call)
Когда компьютерная программа запрашивает инструкцию, это называется вызовом. Вызов инициирует (активирует) определённую функцию. Вызовы могут происходить вследствие взаимодействия игрока с объектами или на основании параметров времени.
граф вызовов (call graph)
Список методов в стеке вызовов с информацией о каждом вызове, такой как время выполнения, временные метки и идентификатор для функции.
стек вызовов (call stack)
Стек вызовов — это «журнал», по которому программа отслеживает вызовы, то есть какие функции выполняются, какие завершили работу, а какие ещё будут выполнены.
отменено (canceled)
Состояние задачи, которая была прервана до завершения.
выражение case (case expression)
С помощью выражения case можно осуществлять контроль исполнения программы с выбором из списка вариантов. Дополнительную информацию см. в разделе Case.
Ceil
Математическая операция, которая округляет рациональное значение до ближайшего целого числа вверх. Сравните с
Floor
.
список изменений (changelist)
Способ отслеживания изменений файлов в Perforce между локальными файлами, хранящимися на компьютере, и файлами, которые передаются на сервер и объединяются с исходными файлами проекта. Список изменений также называется CL.
char
Тип данных для хранения одного символа.
символ (character)
В Verse символ может также обозначать один типографский элемент в строке.
кодирование символов (character encoding)
Кодирование символов — это сопоставление между текстовым символом и данными, которые может понять компьютер, называемыми кодовой точкой.
CI/CD
CI/CD — это непрерывная интеграция и либо непрерывная поставка, либо непрерывное развёртывание. CI/CD объединяет процессы разработки и поставки приложений за счёт автоматизации при их создании, тестировании и развёртывании.
класс (class)
Класс — это шаблон для создания объектов с похожим поведением и свойствами (переменными и методами). Чтобы получить объект с реальными значениями, необходимо создать экземпляр класса. Классы являются иерархическими, то есть класс может наследовать информацию от родительского класса (суперкласса) и передавать эту информацию своим дочерним элементам (подклассам). Классы могут представлять собой настраиваемые типы, определяемые пользователем. Сравните с экземпляром.
код (code)
Код, иногда называемый исходным кодом, — это инструкции, написанные программистом, которые указывают программе, как работать. Исходный код на языке Verse может быть прочитан программистом, но не компьютером. Прежде чем компьютер сможет прочитать или выполнить программу, она должна быть преобразована в исполняемые компьютером инструкции, что называется компиляцией. Когда программист говорит, что он кодирует, он имеет в виду, что пишет эти инструкции.
блок кода (code block)
Блок, или блок кода, — это группа выражений, которая вводит новое тело кода. Также может существовать блок кода, который не содержит выражений. Обычно он заполняется выражениями позже.
Блоки кода указываются после идентификаторов.
В Verse есть три возможных формата блока кода. Все эти форматы семантически идентичны в том смысле, что формат не меняет того, что на самом деле делает код.
Раздельный формат начинается с символа
:
, и каждое выражение занимает отдельную строку с отступом в четыре пробела:if (test-arg-block): expression1 expression2
Обратите внимание, что
if (test-arg-block)
не является частью блока, но блок начинается в конце этой строки с:
. Также можно использовать;
для разделения нескольких выражений в одной строке:if (test-arg-block): expression1; expression2; expression3
В многострочном формате со скобками блок заключён в
{}
(фигурные скобки), а выражения пишутся с новой строки:if (test-arg-block) { expression1 expression2 }
Как и в случае раздельного формата, для разделения нескольких выражений в одной строке также можно использовать
;
:if (test-arg-block) { expression1; expression2 }
Третий формат — это однострочной формат со скобками. Здесь блок снова заключён в
{}
, но каждое выражение отделяется;
, а не начинается с новой строки. Обратите внимание, что символы{}
не обязательно размещать в отдельных строках.if (test-arg-block) {expression1; expression2}
Дополнительную информацию по этому вопросу см. в разделе Блоки кода.
комментарий к коду (code comment)
См. комментарий.
кодовая точка (code point)
Значение в кодовом пространстве Unicode для кодирования символов.
пример кода (code sample)
Отдельная программа, модуль или класс, демонстрирующие одну или несколько концепций, классов, функций или какой-либо другой аспект языка программирования. Сравните с фрагментом кода.
фрагмент кода (code snippet)
Фрагмент — это некоторый код, часто короткий, который обычно предназначен для демонстрации или реализации определённой концепции.
Фрагменты кода не являются полноценными самостоятельными программами. Их можно копировать в блоки кода. Сравните с примером кода.
единица кода (code unit)
Минимальная комбинация битов, представляющая единицу закодированного текста. В UTF-8 используется 8-битная единица кода.
приведение типов (coercion)
Преобразование значения в данные другого типа. Преобразования типов могут производиться неявно или явно. Неявное преобразование, также называемое приведением типа, выполняется автоматически.
комментарий (comment)
Комментарий, написанный программистом, который содержит информацию о коде или причину, по которой программист написал именно такой код. Если сам код показывает, как работает программа, комментарии обычно добавляются, чтобы пояснить, почему она так работает.
Комментарии к коду могут встречаться в любом месте кода и начинаются с символа
#
. Когда программа выполняется, комментарии к коду игнорируются.Можно закомментировать одну строку, поставив # в начале строки. Переход на новую строку в конце строки завершает комментарий.
# Одна строка комментируются следующим образом.
Можно создать многострочный блок комментариев, обозначив
<#
начало блока и<#
его конец:<# Вы можете писать многострочные комментарии в коде, начиная и заканчивая комментарии, как показано здесь. #>
Другие способы добавления комментариев в код см. в разделе Краткий справочник по языку Verse.
комментарий (comment)
См. комментарий к коду.
общий тип (common type)
Общие типы — это встроенные и часто используемые типы. Общие типы включают
any
,comparable
,float
,int
,logic
,rational
иstring
.
comparable
Тип, определяющий операторы для операций «меньше чем», «больше чем» и т. д. Другие типы могут наследовать от
comparable
и выполнять выражения сравнения.
выражение сравнения (comparison expression)
В Verse выражения сравнений — это сравнение двух выражений с использованием одного из операторов неравенства:
<
,>
,<=
,.=
,< >
.
компиляция (compile)
Преобразование программы с языка, удобного для восприятия человеком, в инструкции, исполняемые компьютером.
время компиляции (compile time)
Когда исходный код преобразуется в машинные инструкции. Сравните со средой выполнения.
компилятор (compiler)
Программное обеспечение, которое преобразует понятные для человека программные инструкции в исполняемые компьютером команды; иногда его называют средством синтаксического анализа (парсером). Время исполнения компилятора называется временем компиляции.
ошибка компилятора (compiler error)
Ошибка компилятора обусловлена неправильным использованием кода, обнаруженным компилятором Verse во время компиляции. Сравните с программными ошибками, которые возникают в среде выполнения.
завершено (completed)
Состояние задачи, которая выполнена до конца.
составной тип (composite type)
Составной тип данных, иногда называемый комбинированным или агрегированным, — это любой тип, который может состоять из полей или элементов (обычно именованных) примитивных типов или других составных типов. Обычно имеет фиксированное число полей или элементов в течение всего срока жизни. В настоящее время в Verse используются следующие составные типы: struct, class, enum, interface и module.
computes
Этот эффект показывает, что функция всякий раз возвращает одни и же выходные данные, если в неё сколько угодно раз передавать одинаковые входные данные.
объединять (concatenate)
См. объединение.
объединение (concatenation)
Конкатенация (объединение) — это добавление одной строки к другой строке. Для объединения строк можно использовать оператор +.
класс concrete (concrete class)
Класс со спецификатором
concrete
— это способ создания экземпляра класса с пустым архетипом; это означает, что для всех полей класса должны быть заданы начальные значения.
одновременные (concurrent)
Несколько вычислений, которые выполняются в один и тот же эффективный период времени, являются одновременными. Это могут быть перекрывающиеся обновления логической симуляции, тики и кадры, даже если они потенциально распределены по физическому времени, например, выполняются на одном процессоре, и не обязательно являются параллельными.
условие (condition)
Условие — это то, что программа может проверить на истинность или ложность. Условное выражение может оценивать условие и возвращать результат true (истина) или false (ложь).
условное выражение (conditional)
Выражение, которое оценивает условие и выполняет инструкции на основе результата оценки условия. Примером условного выражения является выражение
if
.
константа (constant)
Константа — это место, где хранится значение, и это значение не может изменяться при работе программы в среде выполнения. Константа так и называется, потому что остаётся постоянной.
Базовый синтаксис для константы:
name : type = value
.name
— это имя, присвоенное константе (известное как идентификатор). Символ:
указывает, что дальше следует тип. После символа=
приводится значение. Пример:PlayerSpeed : float = 2.0
Это выражение говорит о том, что
PlayerSpeed
имеет значение2.0
, представленное в виде десятичного числа, которое не меняется во время выполнения программы.Константы всегда имеют присвоенные значения. Имя и тип — это объявление, а инициализация — это задание конкретного значения.
Сравните с переменной.
Дополнительную информацию см. в разделе Константы и переменные.
ограниченное (constrained)
Когда выражение ограничено, оно имеет заданные пределы.
конструктор (constructor)
Конструктор — это специальная функция, которая создаёт экземпляр связанного с ней класса. Его можно использовать для установки начальных значений нового объекта.
Вы можете задать конструктор для класса, добавив спецификатор
constructor
к имени функции. Вместо того чтобы указывать возвращаемый тип для функции, функции присваивается имя класса, за которым следует произвольная инициализация полей. Класс может иметь больше одного конструктора.
контейнер (container)
Контейнер — это способ организации данных в коде. См. также контейнерный тип.
контейнерный тип (container type)
Вы можете хранить несколько значений вместе, используя контейнерный тип, такой как массив, ассоциативный массив, кортеж и option.
контекст (context)
Область видимости кода, определяющая время жизни различных элементов языка и ограничений. Обычно это диапазон между началом и концом блока кода.
переключение контекста (context switch)
Переключение контекста — это процесс сохранения состояния процесса или потока, чтобы можно было восстановить и возобновить его выполнение позже, а затем восстановить другое состояние, сохранённое ранее.
сделка с джином (contract with the genie)
Написание кода иногда сравнивают с заключением сделки с джинном в том смысле, что программа в точности будет следовать вашим инструкциям, даже если результат будет не совсем таким, как вы ожидаете. См. также программа.
контроль исполнения (control flow)
Порядок, в котором компьютер выполняет инструкции. В Verse есть различные выражения, которые можно использовать для контроля исполнения в программе, например выражения block или loop.
сходящийся код (converges)
«Минимальный» набор эффектов. Это код, который гарантированно выдаёт значение за конечное время без дивергенции.
сопрограмма (coroutine)
Подпрограмма с длительным сроком жизни, которая либо выполняет задачу с течением времени, либо ожидает наступления различных событий и состояний или их комбинации. Сопрограмма является синонимом асинхронной функции.
D
элемент данных (data member)
См. составляющая.
тип данных (data type)
См. тип.
отладчик (debugger)
Инструмент, используемый для отладки, в котором отображается состояние программы на каждом шаге выполнения.
отладка (debugging)
Это процесс выявления и устранения ошибок в коде.
decides
Эффект, который указывает на то, что функция может завершиться неуспешно и что вызов этой функции является выражением с неоднозначным результатом. При определении функции с эффектом
decides
также требуется эффектtransacts
. Он предполагает вомзожность отката действий функции в случае её неуспешного завершения, как если бы они никогда не выполнялись.
выражение принятия решения (decision expression)
В выражениях принятия решений используются операторы
not
,and
иor
, чтобы программист мог контролировать поток решений об успехе и неудаче.
объявление (declaration)
Объявление — это выражение, в котором вводится идентификатор, а также его тип. Он может быть реализован (использован) или нет, и ему может быть присвоено (инициализировано) значение или нет.
Синтаксис объявления переменной выглядит следующим образом:
var name : type = expression
. Пример:var PlayerSpeed : float = 2.0
Эта строка кода объявляет, что переменная с именем PlayerSpeed имеет значение типа float.
В этом примере последняя часть,
= 2.0
, является инициализацией, которая отделена от объявления.
декларативное программирование (declarative programming)
Это парадигма программирования, которая меньше фокусируется на пошаговом выполнении программы, а больше на желаемом конечном результате, указывая на то, что должно быть сделано, а не как это делается.
объявить (declare)
При объявлении переменной или функции, указываются её идентификатор и тип. Сравните с инициализацией.
defer
Выражение
defer
задерживает выполнение кода до выхода из текущей области видимости. Это выражение полезно для задач очистки, таких как сброс переменных.
определять (define)
См. определение.
определение (definition)
Определение — это реализация идентификатора или присвоение ему значения, например определение функции или определение класса. Сравните с объявлением.
зависимость (dependency)
Зависимость — это ситуация, когда модуль зависит от других модулей при выполнении некоторых функций.
детерминированная (deterministic)
Детерминированной называется система, в которой одно и то же начальное состояние или входные данные всегда приводят к одним и тем же результатам.
детерминированное уничтожение (deterministic destruction)
Детерминированное уничтожение, встречающееся в некоторых языках программирования, — это уничтожение объектов, когда программа выходит из их области видимости.
разработчик (developer)
В контексте работы с UEFN и Verse пользователи называются разработчиками. Этот термин включает авторов, художников и архитекторов островов Fortnite.
дайджест (digest)
Автоматически создаваемый список всех общедоступных символов, таких как модули, функции и классы, которые обработал компилятор Verse. Также включает комментарии. Из файла дайджеста можно узнать, какие API и функции находятся в соответствующем модуле.
отправлять (dispatch)
Отправлять — значит посылать что-либо куда-либо. В Verse это может быть, например, отправка вызова функции или отправка события слушателю (обработчику события).
дивергенция (diverge)
Дивергенция при выполнении программы наступает, если программа не завершается (не заканчивается), как ожидалось. Если же она выдаёт значение за конечное время без дивергенции, то имеет место конвергенция.
doc
Общее поле для примечания, встречающееся в классах и функциях (но не в параметрах функций), которое содержит полезную информацию о том, что делает описываемый им элемент или как его использовать, и используется для заполнения страницы этого элемента в справочнике по API Verse.
область определения (domain)
Область определения — это множество входных данных, допустимых для определённого параметра. Одним из способов задания области определения является тип, но область определения является более широким понятием, чем тип.
динамический контроль типов (dynamic typing)
В языке программирования с динамическим контролем типов переменные и выражения не имеют назначенных типов. Это означает, что они не могут быть проверены до запуска в среде выполнения. Сравните со строгим контролем типов.
E
editable
Атрибут, который можно добавить в код, чтобы предоставить доступ к свойству в UEFN. Чтобы создать тег этого атрибута в коде, необходимо поставить
@attribute_name
(в данном случае@editable
) перед полем идентификатора:@editable PropertyName : type = DefaultValue
Например, поле строки
GreetingMessage
является редактируемым свойством со значением по умолчанию"Привет, незнакомец"
:expose_properties := class(creative_device): @editable GreetingMessage : string = "Привет, незнакомец"
Дополнительную информацию по этому вопросу см. в разделе Настройка свойств устройства в редакторе.
эффект (effect)
Эффект — это категория поведения, которое может демонстрировать функция.
В примере кода ниже функция с именем
IsCriticalHealth
принимает целое значение на входе через параметрHealth
. Далее в определении указано, что у функции есть эффектыdecides
иtransacts
. Они означают, что функция создаёт контекст, допускающий неоднозначность и её действия можно откатить, если функция завершится неуспешно. Если значениеHealth
, переданное в функцию, больше0.0
и меньше или равно30.0
, то функция выполняется успешно. В противном случае функция завершается неуспешно и контекст, вызвавший функцию, должен обработать неуспешное завершение.IsCriticalHealth(Health : float)<decides><transacts> : void = ((Health > 0.0) && (Health <= 30.0))
Дополнительную информацию по этому вопросу см. в разделе Спецификаторы и атрибуты.
иерархия эффектов (effect hierarchy)
Эффект — это категория поведения, которое может демонстрировать функция. Применение исключительных эффектов к функции подчиняется иерархии, при этом эффекты выше по иерархии разрешают, как минимум, действие всех эффектов ниже по иерархии. Иерархия выглядит следующим образом:
Эффект
transacts
включает свойства эффектов ниже, эффектvaries
включает эффектыcomputes
иconverges
, но неtransacts
, и т. д.
элемент (element)
Отдельная часть более обширной группы. Например, массив может содержать различные элементы, которые можно хранить и использовать по отдельности.
эмодзи (emoji)
Эмодзи — это пиктограммы (графические символы), которые обычно изображаются в красочной форме и используются в тексте. Например, они изображают выражения лица, погоду, транспортные средства и здания, еду и напитки, животных и растения, а также представляют собой значки, отражающие эмоции, чувства или действия. Стандарт на эмодзи установлен Консорциумом Юникода.
У слова эмодзи формы единственного и множественного числа совпадают 🤦.
пустой блок (empty block)
Блок кода, в котором нет выражений, является пустым блоком. Пустые блоки обычно используются только в качестве заглушек и заполняются кодом позже.
пустая строка (empty string)
Строка без символов
""
является пустой.
перечисление (enum)
Сокращение от enumeration, что означает именование или перечисление элементов. Это тип в Verse, который может использоваться для таких элементов, как дни недели или направления по компасу.
enum
— это ключевое слово.
выражение равенства (equality expression)
В языке Verse выражение равенства — это сравнение двух элементов с помощью оператора =.
управляющий символ (escape character)
Управляющий символ в языке Verse — это обратный слеш (), который создаёт управляющую последовательность внутри строкового литерала. Он используется для изменения значения других управляющих символов, которые в противном случае интерпретировались бы по-другому. Например, если вы хотите включить в свою строку символы, которые имеют предопределённое значение, например скобки {}, нужно поставить управляющий символ "" перед соответствующим символом в строке. В результате "\{\}"` будет отображаться в тексте как {}.
событие (event)
Событие — это действие или происшествие, которое можно идентифицировать. Например, устройство «Кнопка» имеет событие InteractedWithEvent, которое происходит всякий раз, когда игрок взаимодействует с кнопкой. Вы можете определить поведение при наступлении определённого события, подписавшись на него с помощью обработчика события.
исключительный эффект (exclusive effect)
Некоторые эффекты считаются исключительными эффектами, к которым можно добавлять аддитивные эффекты, но которые нельзя использовать с другими исключительными эффектами. К исключительным эффектам относятся
computes
,varies
иtransacts
. К аддитивным эффектам относятсяsuspends
иdecides
.
выполнять (execute)
Выполнять программу.
выполнение (execution)
Процесс интерпретации компьютером программы и исполнения инструкций этой программы.
предоставление доступа (expose)
Доступ к свойству в UEFN предоставляется путём присвоения ему атрибута
editable
в коде Verse. Свойство с предоставленным доступом можно редактировать непосредственно в интерфейсе UEFN. См. также editable.
выражение (expression)
Выражение — это наименьшая единица кода (комбинация значений и функций), которая выдаёт результат при оценке.
Ниже в качестве примера приведено выражение
if … else
, означающее, что если значение соответствует указанному критерию, то выполняется одно действие, а если нет — другое.if (a > 5): "Большой!" else "Маленький!"
В Verse всё является выражениями: от литералов до вызовов функций или контроля исполнения.
Это можно сравнить с оператором, который является отдельной командой, не имеющей результативного значения. В Verse всё является выражениями и нет различия между операторами и выражениями, которые могут оцениваться с получением значения.
Более подробную информацию см. в разделе Выражения.
F
f
См. float.
неуспешное завершение (fail)
В Verse пользовательский код, по умолчанию, не может завершиться неуспешно. По этой причине, функция не возвращает булево или необязательное (тип
option
) значение, а использует эффект<decides>
, чтобы вернуть значение, принять типvoid
или не вернуть результат.
выражение с неоднозначным результатом (failable expression)
Выражение с неоднозначным результатом — это выражение, которое может либо завершиться успешно и вернуть значение, либо завершиться неуспешно и не вернуть никакого значения. Примеры выражений с неоднозначным результатом включают индексирование массива, поскольку неправильный индекс не вернёт результат, а также использование операторов, например сравнение двух значений.
неоднозначность (failure)
В языке Verse неоднозначность — это не просто булево значение. Она обеспечивает контроль исполнения. Выражение с неоднозначным результатом может завершиться успешно и вернуть значение или завершиться неудачно и не вернуть никакого значения. Выражения с неоднозначным результатом возможны только в контексте, допускающем неоднозначность, в отличие от других языков программирования, где контроль исполнения осуществляется через булевы значения.
контекст, допускающий неоднозначность (failure context)
Контекст, допускающий неоднозначность — это контекст, в котором допустимо выполнение выражений, которые могут завершиться неуспешно. Данный контекст определяет, что происходит, если выражение завершится неуспешно.
поле (field)
См. составляющая.
final
Спецификатор, который можно использовать только для классов и составляющих классов:
-
Когда у класса есть спецификатор
final
, невозможно создать подкласс этого класса. -
Когда поле имеет спецификатор
final
, невозможно переопределить это поле в подклассе. -
Когда метод имеет спецификатор
final
, невозможно переопределить этот метод в подклассе.
-
нерегулируемое воспроизведение (fire-and-forget)
Нерегулируемое воспроизведение относится к выражению, в котором не важно, когда оно завершится, или завершится ли оно успешно. Это крайне редкая ситуация.
float
Математический тип, используемый для хранения и обработки чисел с плавающей запятой. Это один из трёх основных числовых типов, поддерживаемых языком Verse, наряду с int и rational.
число с плавающей запятой (floating point number)
Термин, используемый в различных языках программирования для определения переменной с дробным значением или числа, содержащего десятичную запятую, например 0,5 или 1,0. Числа, созданные путём объявления переменной типа float, содержат цифры по обе стороны от десятичной запятой.
Floor
Математическая операция, которая округляет рациональное значение до ближайшего целого числа вниз. Сравните с
Ceil
.
выражение for (for expression)
Выражение
for
, иногда называемое циклом for, аналогично выражению loop, за исключением того, что выраженияfor
являются ограниченными, то есть количество итераций известно до выполнения циклаfor
, и решение о том, когда выйти из цикла, принимается автоматически. См. также цикл for.
кадр (frame)
Кадр — это одно полностью отрисованное изображение (например, на мониторе компьютера или телевизора), представляющее симуляцию в определённый момент времени. Кадр иногда используют как синоним обновления (или тика) симуляции, поскольку кадры обычно следуют друг за другом синхронно, хотя новые кадры могут появляться с другой частотой (более или менее часто), чем обновление симуляции. Частота кадров, или сокращённо fps (frames per second), — это количество кадров, отображаемое в секунду.
функция (function)
Функция (также называемая подпрограммой) — это повторно используемый код, содержащий инструкции для выполнения действия или получения выходных данных на основе входных данных.
Чтобы определить функцию, нужно указать три ключевые части: уникальное имя, тип информации, ожидаемой в качестве результата, и что функция будет делать при вызове.
Базовый синтаксис функции приведён ниже:
name() : type = codeblock
-
Имя() и тип, разделённые двоеточием — это сигнатура функции, то есть то, как функция вызывается и используется, а значение, которое должно быть возвращено функцией, имеет тип, указанный при определении. Этот формат похож на формат определения константы, за исключением () после имени, что имитирует вызов функции в коде.
-
Блок кода функции: вы указываете, что будет делать функция при вызове, определяя
=codeblock
, гдеcodeblock
— это любая последовательность из одного или нескольких выражений. При каждом вызове функции выполняются выражения в блоке кода.
-
вызов функции
Выражение, которое оценивает функцию (также говорят «вызывает» функцию или «обращается» к ней). Вызов функции может иметь две формы в зависимости от того, имеет ли функция эффект
decides
:FunctionName()
иFunctionName[]
. Тип результата выражения вызова функции определяется в сигнатуре функции.
сигнатура функции (function signature)
Сигнатура функции объявляет имя функции (идентификатор), а также входные данные (параметры) и выходные данные (результат) функции. Функции Verse также могут иметь спецификаторы, которые указывают, как использовать или реализовывать функцию.
функционально-логическое программирование (functional logic programming)
Объединение парадигм функционального и логического программирования в одном языке.
функциональное программирование (functional programming)
Тип декларативного программирования, который фокусируется на использовании функций. Функциональное программирование направлено на облегчение тестирования и отладки за счёт уменьшения побочных эффектов. Примером функционального языка программирования является Haskell.
будущая (future)
Задача, которая начала выполняться, но была приостановлена без отмены. Эта задача является будущей, потому что она завершится в какой-то момент в будущем.
G
игровой цикл (game loop)
Игровой цикл — это код, который выполняется многократно (в циклах), чтобы реагировать на ввод (обычно взаимодействие игрока с контроллером или мышью), обновлять состояние игры, а также сообщать игроку, что он повлиял на состояние игры, например, нажав кнопку и включив свет. Цикл обычно заканчивается, когда игра достигает состояния успеха (к примеру, когда игрок достигает цели) или состояния неудачи (к примеру, когда истекает время до достижения игроком цели).
состояние игры (game state)
Состояние игры или другой симуляции. Состояние включает значения всех данных, которые описывают систему. Значения констант и переменных определяют состояние системы.
генератор (generator)
Генератор задаёт последовательность значений, по одному за раз, и присваивает имена таким значениям в последовательности.
группа (group)
Часть выражения, заключённая в скобки
()
. Она явно определяет порядок оценки. Группировка также улучшает читаемость кода.
H
обработчик (handler)
Обработчик — это функция, которая вызывается в ответ на привязанное событие. Например, если привязать функцию к событию InteractedWithEvent кнопки, это будет означать, что каждый раз, когда игрок будет нажимать на эту кнопку, будет вызываться обработчик, связанный с событием.
шестнадцатеричные числа (hexadecimal)
В Verse для представления целых чисел можно использовать шестнадцатеричную систему счисления (base-16) вместо десятичной системы, основанной на 10. Шестнадцатеричные значения представляются цифрами 0–9 и буквами A–F. Например, 0x7F равно 127, а 0xFACE равно 64206.
Это альтернативный способ представления целых чисел.
иерархический (hierarchical)
Имеющий чёткие уровни или иерархии рангов, важности или управления. Распространённые иерархические отношения: «родительский/дочерний объект» или «суперкласс/подкласс».
I
интегрированная среда разработки (ИСР)
Интегрированная среда разработки (ИСР) — это программное обеспечение, предоставляющее пользовательский интерфейс для создания и отладки программ.
идентификатор (identifier)
Идентификатор — это имя, которое присваивается элементам в программе, таким как переменные или функции, для их однозначной идентификации.
выражение if (if expression)
С помощью выражения
if
вы можете принимать решения, которые будут влиять на контроль исполнения программы. Как и в других языках программирования, выражениеif
в языке Verse поддерживает условные операторы, однако в данном случае в условиях для принятия решения учитывается «успех» или «неудача».
непосредственный (immediate)
Непосредственное выражение оценивается без задержки, то есть оценка завершается в течение текущего обновления симуляции.
неизменяемый (immutable)
После создания объекта его состояние не может быть изменено. Сравните с изменяемый.
императивное программирование (imperative programming)
Парадигма, согласно которой программа явно описывает, как она выполняется, шаг за шагом. Язык C является примером императивного языка программирования.
индекс (index)
Индекс указывает на позицию элемента в последовательности с помощью числа. Последовательность может быть списком, строкой с символами или любой произвольной последовательностью значений.
В индексах используется счёт с нуля. Это означает, что индекс первой позиции равен 0, а индекс пятой позиции равен 4.
логический вывод типа (infer)
Бывают случаи, когда нет необходимости явно указывать тип, как, например, при создании константы. Например, в выражении
MyConstant := 0
, типMyConstant
определяется механизмом вывода типов какint
, потому что константе присваивается целочисленное значение. В подобных случаях тип определяется механизмом вывода типов.
бесконечный цикл (infinite loop)
Блок цикла, который повторяется бесконечно. См. также loop и break.
наследование (inheritance)
В Verse вы можете создать класс, который расширяет определение другого класса, добавив или изменив поля и методы другого класса. Это часто называют созданием подкласса или наследованием, потому что один класс наследует определения из другого класса.
инициализация (initialize)
Чтобы создать переменную, нужно указать её идентификатор и тип, что называется объявлением переменной, и присвоить переменной значение, что называется инициализацией.
экземпляр (instance)
Экземпляр класса является объектом. Экземпляр имеет такое же поведение, которое определено типом его класса, но с реальными значениями.
создание экземпляра (instantiate)
Создание экземпляра или значения структуры данных или типа, такого как класс или структура. См. также создание экземпляра архетипа.
int
Тип, используемый в языке Verse для хранения и обработки целых чисел, таких как
1
,-30
и777
. Переменнаяint
может содержать положительное, отрицательное число или ноль без дробной части.
целое число (integer)
Целое число — это число без дробной части, которое может быть положительным, отрицательным числом или нулём.
интерфейс (interface)
Интерфейс — это тип, который представляет соглашение о том, как взаимодействовать с любым классом, в котором реализован этот интерфейс. Для интерфейса нельзя создать экземпляр, но класс может наследоваться от интерфейса и реализовывать его методы.
внутренний класс (internal class)
Класс, помеченный как
epic_internal
, что означает, что вы не можете создать собственный экземпляр класса. Вы можете только использовать API для доступа к внутреннему объекту.
интерполяция (interpolation)
Расчёт значений, которые находятся между известными значениями и обеспечивают плавный переход между ними.
интерпретатор (interpreter)
Программа, которая анализирует и выполняет программу построчно.
время обращения (invocation time)
Время, необходимое для оценки выражения. Непосредственный вызов практически не занимает времени. Асинхронное выражение может выполниться сразу, а может быть отложено.
обращение (invoke)
См. вызов.
отношение is-a (is-a relationship)
Отношение между родительским классом и дочерним классом называется отношением is-a. Дочерний класс в отношении is-a наследует от родительского класса.
итерация (iterate)
Выполнение кода для каждого элемента в последовательности.
J
K
пара «ключ-значение» (key-value pair)
Если ключ связан со значением, то вместе они представляют собой пару «ключ-значение». Значение можно найти с помощью ключа.
ключевое слово (keyword)
Ключевые слова — это зарезервированные слова, которые имеют особое значение для компилятора. Примерами ключевых слов являются
for
иclass
. Ключевые слова нельзя использовать в качестве идентификаторов.
L
срок жизни (lifespan)
См. время жизни.
время жизни (lifetime)
Время между созданием объекта и его уничтожением. Синоним срока жизни.
литерал (literal)
Фиксированное значение в языке программирования Verse, такое как число или символ. Например, 1 — это литерал целого типа.
локальный (local)
Относится к константам или переменным внутри блока кода. Их нельзя использовать за пределами блока кода, в котором они созданы. См. также область видимости.
языковой стандарт (locale)
В программировании языковой стандарт — это набор параметров, определяющих язык пользователя, регион и другие аспекты пользовательского интерфейса. В языке Verse
locale
— это тип, который задаёт контекст, когдаmessage
должно быть локализовано, и влияет на язык текста и чисел в зависимости от языкового стандарта.
logic
В языке Verse тип
logic
используется для хранения значений булевой логикиtrue
иfalse
. Чтобы реализовать контроль исполнения, в языке Verse часто используется комбинация контекстов, допускающих неоднозначность и выражений с неоднозначным результатом вместо проверки состояния переменных типаlogic
.
логическое программирование (logic programming)
Парадигма программирования, в которой используется булева логика для управления тем, как представляются или выражаются факты и правила, касающиеся задач в системе.
loop
Оператор цикла
loop
повторяет выражения в своём блоке кода. Выражениеloop
повторяется бесконечно до выхода из цикла (это часто допустимо в программировании с одновременными процессами). Пример:loop: Sleep(1.0) # Sleep(1.0) ждёт 1 секунду до перехода к следующему выражению. Platform.Hide() Sleep(1.0) # Sleep(1.0) ждёт 1 секунду до перехода к следующему выражению. Platform.Show() # Цикл перезапускается немедленно, повторно вызывая метод Sleep(1.0).
Этот блок кода бесконечно повторяет четыре выражения: подождать одну секунду, скрыть платформу, подождать ещё секунду и снова показать платформу.
Пример использования цикла в разработке игр приведён на странице Платформа, исчезающая при зацикливании.
M
ассоциативный массив (map)
Ассоциативный массив — это контейнер, в котором можно хранить значения, связанные с другими значениями, в виде пар «ключ-значение». Переменные в парах «ключ-значение» могут представлять любую комбинацию типов при условии, что ключ имеет тип comparable. Элементы ассоциативного массива располагаются в том порядке, в котором пары «ключ-значение» записываются в ассоциативный массив, и вы можете получить доступ к элементам по их уникальным ключам. См. также контейнерные типы.
арифметическое выражение (math expression)
В языке Verse арифметическое выражение — это выражение, в котором используется один из следующих операторов:
+
,-
,*
или/
.
составляющая (member)
Именованная переменная или функция, которая является частью составной структуры данных (такой как класс, структура, интерфейс или модуль Verse). Составляющие переменные часто называются полями, а составляющие функции — методами.
message
message
в Verse — это тип, который может содержать текст, не зависящий от регионального стандарта. Когда вы инициализируете переменнуюmessage
значением типаstring
, эта строка определяет текст и язык сообщения по умолчанию.
среда метавселенной (metaverse environment)
Постоянный и глобально согласованный трёхмерный мир в реальном времени со средой выполнения, в которой работает сложный, одновременно выполняемый взаимозависимый код, написанный пользователями, с миллионами одновременно подключённых пользователей.
метод (method)
Метод — это функция, прикреплённая к классу, которая может быть вызвана только для экземпляра этого класса.
модуль (module)
Модуль в Verse — это самостоятельный блок кода, который можно использовать в других местах, в том числе для создания зависимостей. Он также может изменяться без нарушения зависимостей. Модуль можно импортировать в своей файл Verse, чтобы использовать определения из других файлов Verse.
См. также Модули и пути.
изменяемый (mutable)
Состояние объекта, которое может быть изменено после его создания. В Verse возможность изменения доступна только с указателями.
Сравните с неизменяемый.
мьютекс (mutex)
Мьютекс — это примитив синхронизации, который предоставляет исключительный доступ к общему ресурсу с использованием единственного потока. См. также взаимное исключение.
взаимное исключение (mutual exclusion)
Когда несколько процессов обращаются к одному и тому же сегменту кода, этот сегмент называется критическим участком. Взаимное исключение — это способ гарантировать, что никакие два процесса не смогут получить доступ к критическому участку одновременно.
N
NaN
Значение, которое не является числом (Not a Number).
native
native
указывает, что детали определения элемента реализованы на C++. Этот спецификатор способен автоматически генерировать определения C++, которые затем может использовать разработчик. Спецификаторnative
используется для класса, интерфейса, типа enum, метода и данных.
native_callable
Указывает на то, что метод экземпляра относится к категории native (т. е. реализован на C++), а его вызов может быть осуществлён в другом месте на C++. Вы можете увидеть, что этот спецификатор используется для метода экземпляра. Этот спецификатор не распространяется на подклассы, поэтому его не нужно добавлять к определению при переопределении метода, имеющего этот спецификатор.
вложенный (nested)
Когда код вложен, один блок кода содержится в другом блоке кода, выполняющем более широкую функцию.
без отката (no-rollback)
Этот эффект указывает на то, что чтение и запись изменяемых данных функции не могут быть отменены, то есть функция не может быть вызвана в контексте, допускающем неоднозначность (а именно возможность отката в случае неуспешного завершения).
O
объект (object)
Объектом является экземпляр класса. Экземпляр имеет такое же поведение, которое определено типом его класса, но с реальными значениями.
Термины экземпляр и объект являются синонимами.
объектно-ориентированное программирование (object-oriented programming)
Объектно-ориентированное программирование (ООП) — это парадигма программирования, которая опирается на концепцию классов и объектов.
язык открытого мира (open world language)
Язык, в котором взаимозависимые модули, написанные многими пользователями и организациями, могут развиваться с течением времени без нарушения совместимости интерфейсов и постоянных данных, следуя чётко определённым правилам подтипирования.
операнд (operand)
Величина, над которой выполняется операция. Например, в выражении
1 + 2
знак+
является оператором, а1
и2
являются операндами.
операция (operation)
Действие, производимое программой для выполнения определённой задачи. Существуют четыре основные группы компьютерных операций: ввод, обработка, вывод и хранение. Операция — это тип выражения.
оператор (operator)
Символ, представляющий действие или процесс. Например, в выражении
1 + 2
оператором является+
.
приоритет операторов (operator precedence)
Это понятие относится к встроенному порядку оценки при сочетании операторов в Verse. Например, если в одном выражении используется несколько операторов, имеет значение порядок их оценки.
Например,
1 + 2 * 3
не оценивается, или, иначе говоря, не сводится до3 * 3
, так как умножение имеет приоритет перед сложением.Приоритет операторов может быть переопределён выражениями группировки.
опция (option)
В Verse option может содержать одно или ни одного значения некоторого типа.
порядок оценки (order of evaluation)
Соответствует приоритету операторов — порядку, в котором в выражении должны быть выполнены определённые операции.
перегрузка (overload)
Перегрузка функции или оператора означает, что одно и то же имя функции или символ оператора может иметь разные параметры. Например, если мы говорим, что один трёхмерный вектор равен другому трёхмерному вектору, например (1,2,3), то это достаточно чёткое высказывание. Но мы можем использовать оператор равенства, чтобы утверждать, что некоторый трёхмерный вектор равен одному числу, например 1. В этом случае, возможно, трёхмерный вектор будет равен (1,1,1), но перегрузка заключается в том, что существует несколько операторов "3D Vector =" с разными параметрами. Язык должен учитывать контекст, чтобы определить, какой из них использовать.
переопределение (override)
В языке Verse можно переопределить поля суперкласса и присвоить им начальные значения. Пример:
tank := class(player_character): StartingShields<override> : int = 100 MaxShields<override> : int = 200 AllowOvershield<override> : logic = true DamageReduction : int = 50 CreateTankPlayerCharacter() : tank = return tank{}
Класс «танк» будет иметь значения полей
StartingShields
,MaxShields
иAllowOvershield
, отличающиеся от значений класса по умолчанию.Таким же образом можно переопределить значения метода.
Дополнительную информацию по этому вопросу можно найти на странице Подкласс
P
парадигма (paradigm)
Типовая схема или модель чего-либо. В программировании парадигма — это способ организации языка программирования. Существует четыре основные парадигмы языков программирования:
- Императивное программирование
- Логическое программирование
- Функциональное программирование
- Объектно-ориентированное программирование
Также существуют языки с несколькими парадигмами, такие как Verse.
параллельные процессы (parallel)
Несколько вычислений, которые выполняются в один и тот же физический период времени, например на отдельных процессорах, являются параллельными.
параметр (parameter)
Входная переменная, которая включает область определения, такую как тип, и необязательное значение по умолчанию, определённое в сигнатуре функции, которое затем используется в теле функции. Сравните с аргументом.
синтаксический анализ (parse)
Синтаксический анализ в информатике — это когда строка команд, обычно программа, разделяется на легко обрабатываемые компоненты, которые на предмет корректности синтаксиса, а затем присоединяются к тегам, определяющим каждый такой компонент.
средство синтаксического анализа (parser)
Программа для синтаксического анализа кода.
путь (path)
Пути в Verse предоставляют глобальное пространство имён для идентификации объектов, а их принцип работы схож с принципом веб-доменов. Пути являются постоянными и уникальными. Доступ к ним может получить любой программист на Verse.
Perforce
Perforce (P4) — это программный инструмент, обеспечивающий контроль версий (также «контроль исходного кода»), который служит для отслеживания и управления изменениями в программном коде. Этот инструмент полезен для команд программистов, работающих над одним проектом. Если кто-то допускает ошибку, система контроля версий позволяет сравнить код с более ранними версиями, чтобы найти и исправить эту ошибку, не прерывая работу остальных участников.
игровое пространство (playspace)
Модуль API языка Verse, который можно использовать для получения массива игроков или команд, либо команды для конкретного игрока. Этот модуль также позволяет подписаться на события, добавленные и удалённые игроком.
указатель (pointer)
Указатель — это способ обращения к изменяемому "контейнеру", который может содержать некоторое значение определённого типа. С помощью указателя можно изменить заданное значение в этом контейнере. Сравните со значением.
переменная-указатель (pointer variable)
Переменная типа «указатель» указывает на место в памяти, где хранится значение. После создания переменной-указателя уже не получится изменить место переменной-указателя в памяти, но можно будет изменить значение, хранящееся в этом месте в памяти.
опрос (polling)
Опрос — это активная проверка состояния внешнего устройства клиентской программой в синхронном режиме. Опрос чаще всего используется с операциями ввода/вывода; в этом случае говорят о вводе/выводе по опросу или программно-управляемом вводе/выводе.
полиморфный (polymorphic)
Слово полиморфный образовано от поли-, что означает «много», и -морф, что означает «форма». Полиморфное поведение возникает, когда переменная может иметь разные значения в разных условиях.
постфикс (postfix)
Формат оператора, когда есть только один операнд и оператор ставится после операнда.
предикат (predicate)
В языке Verse предикат — это то, что завершается успешно или неуспешно.
вытеснение (preemption)
Временное прерывание выполняющейся задачи с намерением возобновить её позже. Обычно это делает внешний планировщик без содействия или участия со стороны задачи.
префикс (prefix)
Формат оператора, когда есть только один операнд и оператор ставится перед операндом.
примитивный тип (primitive type)
Примитивным называется любой тип, который не создаётся из других типов. Это означает, что примитив не является составным и не может быть подвергнут дальнейшей декомпозиции. Примерами встроенных примитивных типов являются
void
,logic
,int
,float
,rational
иchar
. Примитивы встроены в язык Verse.Сравните с контейнерным типом.
программа (program)
Программа — это набор инструкций, которые сообщают компьютеру, как выполнить какое-либо действие. Назначение любой программы — показать, как компьютер будет получать входные данные и возвращать выходные.
Программа решает задачи. Но компьютер понимает программы предельно буквально. Это очень похоже на сделку с джином. Джинн (программа) даст вам именно то, о чём вы просите. В точности. Ошибки возникают, когда программист делает предположения о том, что должно произойти, вместо того, чтобы точно описать, какие входные данные должны быть предоставлены и какие выходные данные будут результатом.
программирование (programming)
Написание инструкций (программы), которые могут быть скомпилированы и выполнены компьютером.
язык программирования (programming language)
Формальный язык, используемый для написания компьютерных программ. Существует множество языков программирования, и у каждого есть свои чёткие правила. В качестве примера можно привести Scratch, визуальный язык программирования, используемый для разработки интерактивных историй, игр и анимации, и C++, текстовый язык, который часто применяется при разработке игр. Verse — это язык программирования, разработанный Epic Games для авторов, которые хотят узнать больше об использовании инструментов разработки.
перемещение обработки (propagate)
Перемещение обработки в функции возникает, когда вызывающему коду не требуется обрабатывать ситуацию в случае неуспешного завершения. Например, в случаях, когда функцию с эффектом
decides
вызывают из другой функции с эффектомdecides
. В итоге, неуспешное завершение будет обрабатываться в том выражении, которое содержит вызывающий код.
свойство (property)
Свойство — это составляющая (поле), которая позволяет возвращать значения и предоставлять к ним доступ из редактора.
псевдокод (pseudocode)
Псевдокод — это подробное описание на простом языке (не на языке программирования) того, что должен делать алгоритм. «Псевдо» означает «ненастоящий» или «нереальный», поэтому можно сказать, что псевдокод — это имитация кода, который, однако, полезен для определения того, что должен делать алгоритм.
Псевдокод также можно рассматривать как высокоуровневое описание. Псевдокод обычно используется для планирования большой или сложной части программы перед написанием реального кода.
общедоступная составляющая (public member)
Составляющая, которую видят другие модули.
pure
Объявляет, что функция всегда будет выдавать идентичный результат при одинаковых входных данных и что она не имеет побочных эффектов (запись в изменяемые переменные, эффекты ввода/вывода и т. д.).
Q
уточнение имени (qualify)
Позволяет определить идентификатор в области видимости так, чтобы использовать его "повторно". Например, у вас может быть константа с именем
"cat"
. Вы можете использовать то же имя для поля класса с именем"sarah.cat"
. Оба имени включают"cat"
, но имя"sarah.cat"
является уточнённым.
запрос (query)
В выражениях запроса используется оператор
?
для проверки того, содержит ли переменная типаlogic
илиoption
значениеtrue
.
R
race
В выражении
race
все выражения в блоке race выполняются одновременно, но как только одно выражение завершается, другие выражения отменяются, и выражение race возвращает себе управление.race
— это выражение со структурированным одновременным выполнением.
условие race (race condition)
Условие race — это когда программа пытается одновременно выполнить две или более операции, которые должны выполняться последовательно, чтобы завершиться корректно.
RAII
RAII — это сокращение от resource acquision is initialization (получение ресурса — это инициализация). Оно описывает ситуацию, когда объект получает ресурсы только на период между инициализацией и уничтожением. По сути, это способ более эффективного управления ресурсами.
порождать (raise)
Когда функция посылает сигнал, она порождает событие. Заинтересованные стороны уведомляются о том, что произошло событие, к примеру взаимодействие с кнопкой, и вызываются все обработчики события.
выражение диапазона (range expression)
Выражения диапазона содержат все числа между двумя указанными значениями (в том числе эти значения) с
..
между значениями: например,1..5
. Выражения диапазона можно использовать только в определённых конструкциях, например в выраженияхfor
.
rational
Один из трёх основных числовых типов, поддерживаемых языком Verse, наряду с
int
иfloat
. Типы rational встречаются только в результатах целочисленного деления, при этом необходимо преобразовать значение обратно в целое число, округлив его вверх с помощьюCeil()
или вниз с помощьюFloor()
.
рациональное число (rational number)
Число, которое можно представить в виде простой дроби с помощью двух целых чисел. Например, 1.75 также можно представить как 7/4, но квадратный корень из 2 (√2) невозможно представить в виде дроби, и поэтому он считается иррациональным числом. Другим примером иррационального числа является число Пи, которое начинается как 3.14159… и продолжается бесконечно.
рекурсия (recursion)
Рекурсия — это когда функция вызывает саму себя.
REPL (цикл типа прочитать-вычислить-записать)
Цикл типа прочитать-вычислить-вывести (REPL) представляет собой компьютерную среду, в которой можно вводить код, считывать и оценивать его, а затем просматривать результаты. REPL позволяет изучить язык и посмотреть, что и как работает (или не работает), ничего не испортив.
результат (result)
Когда выражение выполняется, а затем выдаёт значение, это значение является результатом.
return
Выражение, которое предписывает программе выйти из подпрограммы и вернуться к адресу возврата. Адрес возврата — это место, откуда была вызвана подпрограмма.
Вместо того чтобы полагаться на то, что последнее выражение в блоке кода функции выдаст нужное значение, можно также явно указать результат с помощью выражения
return
. При выполнении выражения return происходит немедленный выход из блока кода функции. Это означает, что если выражение return находится перед другим кодом, то следующий за ним код не будет выполнен.
откат (rollback)
Возврат программы в заранее определённое состояние, обычно для восстановления после неуспешного завершения выражения.
подпрограмма (routine)
См. функция.
среда выполнения (runtime)
Означает время, затраченное на работу игры, симуляции или приложения. Сравните с временем компиляции, которое означает время, затраченное на компиляцию, или временем разработки, которое означает время, затраченное на разработку, компиляцию и отладку.
Существуют различия между событиями в среде выполнения и событиями во время компиляции.
rush
В выражении
rush
все выражения в блоке rush выполняются одновременно, но как только одно выражение завершается, выражение rush передаёт управление, а остальные выражения продолжают выполняться независимо.rush
— это выражение со структурированным одновременным выполнением.
S
область видимости (scope)
Область видимости относится к той части программы, где действительна связь имени со значением и где это имя может использоваться для ссылки на значение. Например, любые константы или переменные, созданные в функции, существуют только в контексте этой функции. Это означает, что время жизни объектов ограничено областью видимости, в которой они созданы, и их нельзя использовать вне этого блока кода.
сценарий (script)
Независимая часть исполняемого кода на языке Verse, которая связана с объектом.
переменная self (self variable)
Self
— это специальный идентификатор в Verse, который можно использовать в методе класса для ссылки на экземпляр класса, из которого этот метод был вызван. Можно ссылаться на другие поля экземпляра, из которого был вызван метод, без использованияSelf
, но если нужно сослаться на экземпляр в целом, то следует использоватьSelf
.
семантическая ошибка (semantic error)
См. ошибка компилятора.
семантика (semantics)
Значение выражения. Сравните с синтаксисом.
семафор (semaphore)
Семафор похож на мьютекс, за исключением того, что мьютекс блокирует доступ других потоков к имеющимся ресурсам, а семафор лишь сигнализирует о том, что ресурс используется.
последовательное выполнение (sequential execution)
Код обычно выполняется построчно, в порядке появления выражений. Это называется последовательным выполнением.
set
Ключевое слово, которое можно использовать для изменения значения переменной во время выполнения программы.
Для этого используется следующий синтаксис:
set name = value
.set
— это ключевое слово,name
— имя изменяемой переменной, аvalue
— значение, которое должно быть присвоено переменной.Эта операция называется присваиванием.
сокрытие (shadowing)
Сокрытие — это ситуация, когда идентификатор скрывает другой идентификатор. Сокрытие является ошибкой в Verse и препятствует компиляции кода.
побочный эффект (side effect)
Побочный эффект возникает, когда какой-либо код, например функция или выражение, изменяет некоторое состояние за пределами своей области видимости.
целочисленное значение со знаком (signed integer)
Целочисленное значение со знаком — это значение, которое может быть отрицательным, положительным или нулевым. Оно называется числом со знаком, потому что может иметь знак + или – слева, указывающий, является ли число положительным или отрицательным. Беззнаковое целое число может быть только положительным числом или нулём.
симуляция (simulation)
Симуляция — это представление поведения или характеристик одной системы с помощью другой системы. В Verse это может быть компьютерная программа, которая выполняется в течение определённого времени. Этот термин шире, чем понятие игра, которая является одним из видов симуляции. Помимо игр, симуляции охватывают такие сферы, как интерактивный контент, искусство, медицинскую визуализацию, архитектурную визуализацию, искусственный интеллект, симуляторы вождения/полёта/военные симуляторы и т. д. Симуляции могут реализовываться в различных средах, таких как виртуальная реальность (VR) и дополненная реальность (AR).
обновление симуляции (simulation update)
Повторяющийся раунд, шаг или элементарное изменение логики, поведения и других вычислений в рамках симуляции. Этот термин часто сокращают до обновления или используют синонимы тик и кадр. Обновление симуляции обычно занимает время, которое может быть постоянным или переменным. Этот интервал часто называют дельтой времени, и он может совпадать/не совпадать с интервалом реального времени. Например, обновление симуляции может происходить быстрее реального времени/с такой же скоростью/медленнее реального времени.
Обновление симуляции часто происходит с шагом 1:1 по отношению к рендерингу кадров — это значение по умолчанию для языка Verse. Однако обновление симуляции может происходить реже или чаще, чем раз за кадр, например, когда клиент онлайн-игры выходит из синхронизации с сервером или системами физики, выполняя несколько итераций изменений симулируемого объекта. Также симуляция может вообще не отрисовываться визуально.
фрагмент (snippet)
См. фрагмент кода.
выражение spawn (spawn expression)
Выражение
spawn
запускает асинхронную функцию. Любое выражение, следующее за spawn, выполняется мгновенно, не дожидаясь завершения выраженияspawn
.spawn
продолжает выполняться самостоятельно до тех пор, пока не завершится.
спецификатор (specifier)
Спецификатор применяет дополнительную информацию к определению. Например, спецификатор эффекта
decides
в определении функции помечает функцию как выражение с неоднозначным результатом.Спецификаторы относятся к одной из двух подкатегорий: спецификаторы видимости и спецификаторы эффектов.
спекулятивное выполнение (speculative execution)
В Verse реализован контекст, допускающий неоднозначность, позволяющий проверить действия без их выполнения. Это называется спекулятивным выполнением. При успешном завершении выражения результат выражения фиксируется, например изменяется значение переменной. Если же выражение выдаёт завершается неуспешно, результат выражения откатывается, как если бы выражение никогда не выполнялось.
распаковка кортежа (splat)
Когда кортеж используется в качестве единственного элемента функции, это выглядит так, как если бы функция вызывалась с каждым из элементов кортежа по отдельности. Это называется развёртыванием или распаковкой кортежа.
стандартная библиотека (standard library)
Ряд функций, констант и других определений языка, доступных в Verse. Эта библиотека содержит реализации для решения распространённых задач программирования. Это ресурс, содержащий часто используемые программистами фрагменты кода, такие как математические функции.
состояние (state)
Состояние — это комбинация исходных значений в объекте, а также любые внесённые изменения.
инструкция (statement)
Отдельная команда, не имеющая результирующего значения. В языке Verse инструкции не используются. Вместо них применяются выражения.
статическая проверка (static checking)
Автоматическая проверка во время компиляции, которая способна выявить ошибку на основе семантики кода.
программная транзакционная память (STM)
Программная транзакционная память (software transactional memory — STM) — это механизм управления одновременным выполнением, аналогичный транзакциям баз данных для управления доступом к общей памяти в программировании с одновременными процессами. В конечном счёте, язык Verse будет использовать STM, поскольку это также обеспечивает повышение производительности при больших распределённых симуляциях.
строка (string)
Строка — это литеральный тип в Verse, где любые символы между двумя кавычками являются строковым литералом. Например,
"Hello world"
— это обычная строка. В Verse строка может содержать буквы, цифры, знаки препинания, пробелы и даже эмотиконы.
строгий контроль типов (strongly-typed)
Язык программирования является языком со строгим контролем типов, в котором каждому идентификатору назначается тип. Если тип не указан явно, он определяется механизмом вывода типов. Это означает, что язык не будет выдавать непредсказуемых результатов в среде выполнения, поскольку тип этих идентификаторов и то, как операции влияют на данные типы, известны. См. также статическая проверка.
структура (struct)
Структура (
struct
— сокращение от structure) — это способ сгруппировать несколько связанных переменных любого типа.struct
является ключевым словом в Verse.
структурированный параллелизм (structured concurrency)
Структурированный параллелизм описывает одновременные операции в пределах срока жизни, которые ограничены определённой одновременной командой и асинхронной областью видимости контекста. Это структурированное средство контроля исполнения, как
if
,for
илиreturn
, которое ограничивается соответствующей областью видимости.Выражения со структурированным параллелизмом в Verse:
sync
,race
,rush
иbranch
.
подкласс (subclass)
Класс, который наследует составляющие (методы и данные) своего суперкласса (родительского класса). В Verse можно расширить класс, добавив новые или изменив унаследованные составляющие.
подмодуль (submodule)
Модуль Verse внутри другого модуля Verse. Организация модулей и подмодулей напоминает папки и подпапки в компьютере — каждый подмодуль добавляет свою часть /NameOfModule в общий путь.
подпрограмма (subroutine)
Набор инструкций в компьютерной программе для выполнения часто используемого набора операций. Подпрограммы похожи на функции, за исключением того, что функция выполняет некоторые вычисления и возвращает результат вызывающему коду. Подпрограммы же выполняют свою работу, не сообщая результат вызывающей программе.
подписка (subscribe)
Подписка — это способ указать функцию, которая будет вызываться при порождении события. Её также можно назвать привязкой к событию. Привязанная функция называется обработчиком.
подтип (subtype)
См. подтип.
успешно (succeed)
Если выражение выдаёт результат, считается, что оно завершилось успешно. Сравните с контекстом, допускающим неоднозначность.
суперкласс (superclass)
Классы могут наследоваться из суперкласса, который включает все поля суперкласса в наследующий класс. Такие классы называются подклассами суперкласса.
супертип (supertype)
Супертип — это специальный тип, который находится над всеми другими типами. Любые операции, поддерживаемые супертипом, должны поддерживаться и любыми подтипами. В языке Verse единственным супертипом является
any
, а все остальные типы являются его подтипами.
suspends
Эффект, который временно останавливает (приостанавливает) функцию, не отменяя её. Выражение
suspends
позволяет приостановить асинхронные функции и совместно передать управление другим одновременно выполняющимся выражениям до его завершения.Дополнительную информацию см. в разделе Одновременное выполнение.
sync
В выражении
sync
все выражения в блоке sync выполняются одновременно и должны завершиться до того, как выражение sync вернёт управление.sync
— это выражение со структурированным одновременным выполнением.
синтаксис (syntax)
Правила или грамматика языка программирования.
Сравните с семантикой.
синтаксическая ошибка (syntax error)
См. ошибка компилятора.
T
задача (task)
Задача — это объект, используемый для представления состояния выполняющейся на данный момент асинхронной функции. Объекты задач используются для определения места приостановки асинхронной функции и значений локальных переменных в этой точке приостановки.
поток (thread)
Наименьшая единица обработки, которая может быть выполнена в операционной системе.
тик (tick)
См. термин обновление симуляции, который используется как синоним тика, и иногда кадра.
плитка (tile)
Участок решётки на поверхности, например пола или стена.
контроль времени (time flow)
Контроль времени лежит в основе языка программирования Verse и осуществляется с помощью одновременных выражений.
Контроль времени — это тип контроля исполнения, но если контроль исполнения — это порядок, в котором компьютер выполняет инструкции на основе порядка выражений в программе, то контроль времени определяет выполнение на основе времени, а не на основе последовательности, с учётом того, как используются одновременные выражения.
Контроль времени — это ещё один способ описать одновременное выполнение.
выражение верхнего уровня (top-level expression)
Выражение верхнего уровня — это выражение, которое не вложено в блок кода. Выражения верхнего уровня также могут быть составными выражениями, например это могут быть вложенные блоки кода.
transacts
Когда функция имеет эффект
transacts
, это значит, что она может читать и записывать данные. Эти действия могут быть откачены, если функция также имеет эффект decides. Этот эффект является исключительным эффектом.Функция, в которой не указан исключительный эффект, может читать и записывать данные, но не может быть откачена.
кортеж (tuple)
Кортеж — это группа из двух или более выражений, которые считаются одним выражением.
Элементы кортежа располагаются в том порядке, в котором они в нём сохраняются. К этим элементам можно получить доступ по их позиции в кортеже, называемой индексом. Поскольку выражения в кортеже сгруппированы, их можно рассматривать как одно выражение.
Примечание: Слово tuple получено обратным словообразованием от quadruple (четвёрка), quintuple (пятёрка), sextuple (шестёрка) и т. д. Сравните с массивом.
тип (type)
Тип определяет, какие операции могут выполняться над данными и как эти данные или значения хранятся для данного типа. Существуют общие типы, такие как integer и string, составные типы и пользовательские типы. См. также примитивный тип и контейнерный тип.
псевдоним типа (type alias)
Псевдоним типа — это способ создать новое имя для существующего типа. После объявления псевдонима типа можно использовать псевдоним вместо существующего типа. Псевдоним типа не создаёт новый тип, а лишь позволяет использовать новое имя для существующего типа.
приведение типов (type casting)
Вы можете конвертировать класс в один из его подклассов (т. н. приведение типов), используя синтаксис
NewReference := type_to_cast_to[Reference]
, гдеtype_to_cast_to
— желаемый тип. Это выражение с неоднозначным результатом, потому что приведение типов не выполнится, если невозможно конвертировать объект в данный тип — например, если класс имеет тип, отличный от подкласса.В следующем примере показано, как преобразовать устройство
TaggedDevice
, которое имеет типcreative_device_base
, в типcustomizable_light_device
, чтобы можно было использовать его отдельные функции. Если устройствоTaggedDevice
не является устройством «Настраиваемое освещение», оно не будет вызыватьTurnOn()
.if (LightDevice := customizable_light_device[TaggedDevice]): LightDevice.TurnOn()
type checker (модуль контроля типов)
Контроль типов используется для проверки программы перед выполнением. При этом проверяются значения и синтаксис типа данных. Основная цель системы типов в языке программирования — снизить вероятность появления программных ошибок из-за ошибок типов.
U
Unicode
Стандарт кодирования символов, разработанный Консорциумом Юникода для обеспечения сопоставимой поддержки символов на разных языках, платформах и устройствах.
unique
Спецификатор unique может быть применён к классу, чтобы сделать его уникальным. Чтобы создать экземпляр уникального класса, Verse выделяет уникальный идентификатор для полученного экземпляра. Это позволяет определить, одинаковы экземпляры уникальных классов или нет, сравнивая их идентификаторы. Классы без спецификатора unique не имеют таких идентификаторов, поэтому их можно оценивать на эквивалентность только на основе значений их полей. Это означает, что уникальные классы можно сравнивать с помощью операторов = и <> и они являются подтипами типа comparable.
неструктурированный параллелизм (unstructured concurrency)
Одновременные выражения с временем жизни, которое логически не ограничено конкретной командой параллелизма или областью видимости с асинхронным контекстом. Такой срок жизни может выходить за пределы области видимости, в котором выполнялось выражение. Это похоже на неструктурированный контроль исполнения, например с помощью команд
goto
илиassembly jump
.
UTF-8
Схема кодирования символов Unicode — стандарт, разработанный Unicode Consortium для обеспечения сопоставимой поддержки символов на разных языках, платформах и устройствах.
Эмотиконы выглядят как изображения или значки, но таковыми не являются. Это буквы (символы) из набора символов UTF-8 (Unicode).
UTF-8 включает почти все существующие в мире символы и значки.
V
значение (value)
Значение — это информация, которую программа использует для работы. Примерами значений являются числа или текст.
переменная (variable)
Значение, которое может быть изменено во время работы программы. Оно называется переменной, потому что может изменяться.
Иногда термином «переменные» описывают и собственно переменные, и константы. Хотя переменные и константы схожи, у них есть одно важное различие — значение константы нельзя изменить во время выполнения программы.
Базовый синтаксис для переменной:
var name : type = value
.var
— это ключевое слово переменной, аname
— имя, присваиваемое переменной (также называемое идентификатором). Символ:
указывает, что дальше следует тип. После символа=
приводится значение. Пример:PlayerSpeed : float = 2.0
Это выражение говорит о том, что
PlayerSpeed
имеет значение2.0
, представленное в виде десятичного числа, которое не меняется во время выполнения программы.Имя и тип — это объявление, а инициализация — это задание конкретного значения. Переменная не обязательно должна иметь присвоенное значение при инициализации, но его рекомендуется присваивать.
Переменные отличаются от констант тем, что их значения можно изменить в любой момент. Это делается с помощью выражения присваивания.
Сравните с константой. См. также set.
varies
Этот эффект указывает на то, что функция при одних и тех же входных данных не всегда возвращает один и тот же результат. Эффект
varies
также указывает на то, что поведение функции не гарантированно останется неизменным в новых версиях содержащего её пакета.
уровень детальности (verbosity)
Настройка, ограничивающая объем дополнительной информации, которая отображается при создании журнала.
Verse
Verse — это статически проверяемый язык программирования с акцентом на программирование игрового процесса.
проводник Verse (Verse Explorer)
Инструмент в Unreal Editor для Fortnite (UEFN), который создаёт новые файлы Verse из шаблонов, организует файлы с помощью подмодулей, а также поддерживает переименование и удаление файлов.
путь Verse (Verse path)
См. путь.
спецификатор видимости (visibility specifier)
Спецификаторы видимости определяют уровень доступа. Ниже перечислены все спецификаторы видимости, которые можно использовать с классами:
public
: неограниченный доступ.internal
: доступ ограничен текущим модулем. Это видимость по умолчанию.protected
: доступ ограничен текущим классом и любыми подклассами.private
: доступ ограничен текущим классом.
визуальный язык программирования (visual programming language)
Тип языка программирования, в котором программист использует визуальные элементы, перетаскивая их и соединяя с другими элементами для получения определённой последовательности программных инструкций.
Visual Studio Code
Visual Studio Code, также называемый VS Code, — это редактор исходного кода, разработанный компанией Microsoft для Windows, Linux и macOS.
void
Тип
void
принимает любое значение и возвращает значениеfalse
. Это позволяет телу функции, возвращающейvoid
, неявно выдавать любое значение, не думая о преобразовании результата любого последнего выражения в блоке.
VPL
W
X
Y
Z
нумерация с нуля (zero-based numbering)
Способ нумерации, при котором первому элементу последовательности присваивается значение 0, а не 1. Это означает, что нулевая позиция индекса — это 1, первая позиция — 2 и т. д. Нумерация последовательностей с нуля широко распространена в математике. В программировании первая позиция в массиве иногда называется нулевой позицией.