@moskva/runtime
v0.1.9
Published
JavaScript-рантайм «Москва» с Java-подобной моделью выполнения: вызываемые Runnable-экземпляры, изоляция памяти и предсказуемая инициализация.
Downloads
34
Maintainers
Keywords
Readme
Рантайм Москва
Этот рантайм предоставляет вызываемые экземпляры функциональных интерфейсов
Выполнимый. Выполнимый — это экземпляр класса, который можно вызывать как
функцию, аналогично лямбда-выражениям в Java.
// java:
interface Выполнимый {
void вып() {}
}Использование
Пример ниже показывает, что несмотря на то, что выполнимый является
экземпляром класса, его всё равно можно вызывать как функцию:
var{Выполнимый}=require('@moskva/runtime')
var выполнимый=new class extends Выполнимый {
конструктор(){
this.тест=[new Date]
}
тест2(){
return this.тест
}
вып(){
console.log(' < Привет, выполнимый; тест =',this.тест2())
}
}
console.log('вызов выполняемого:')
выполнимый()создан новый функциональный [class Выполнимый]
вызов выполнимого:
< Привет выполнимый; тест = [ 2026-01-28T02:20:37.339Z ]Назначение
Экземпляры стандартных, не-выполнимых классов нельзя вызывать. Такое поведение
доступно только при наследовании от Выполнимый и предназначено для эмуляции
функциональных интерфейсов Java, которые предполагают реализацию одного метода.
Требования к реализации
- Метод
выпобязан быть реализован. Он является точкой входа, которая вызывается при обращении к экземпляру как к функции. - Реализация может получать доступ к дополнительным внутренним API через
this.
Правила инициализации
Поля экземпляра должны инициализироваться внутри конструктор-а.
Синтаксис полей класса не поддерживается. Реализация основана на Прокси, и
создание Выполнимых с инициализаторами полей приведёт к бесконечной рекурсии
при попытке вызвать конструктор для инициализации полей. В настоящее время не
существует безопасного способа перехватить или извлечь инициализаторы полей.
Runtime Moskva
This runtime provides callable instances of Runnable functional interfaces. A
Runnable is a class instance that can be invoked like a function. Read more >
interface IRunnable {
run() {}
}Usage
An example below shows that even though runner is an instance, it can still be
invoked as a function:
var{Runnable}=require('@moskva/runtime')
var runner=new class extends Runnable {
const(){
this.test=[]
this.test.push(new Date)
// or this.test=['test']
}
test2(){
return this.test
}
run(){
console.log(' < Hello runner; test =',this.test2())
}
}
console.log('calling runner:')
runner()created new functional [class Runnable]
calling runner:
< Hello runner; test = [ 2026-01-27T23:19:34.106Z ]Purpose
Since instances of standard, non-runnable classes cannot be invoked. This
behaviour is only available when extending Runnable, to enable emulation of
Java's functional interfaces that are supposed to implement 1 method.
Implementation requirements
- The
runmethod must be implemented. It is the entry point invoked when the instance is called. - The implementation can access additional internal APIs via
this.
Initialisation rules
Instance fields must be initialised inside the const method.
Class field syntax is not supported. The implementation relies on a proxy, and
constructing a Runnable with field initialisers would cause infinite
recursion. There is currently no safe way to intercept or extract field
initialisers.
Unless a viable solution is found, this limitation will remain.
(c) 2026
