@moskva/runtime 0.1.0 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/changes.md +7 -0
- package/mockba-500.jpg +0 -0
- package/package.json +42 -1
- package/readme.md +84 -21
package/changes.md
CHANGED
package/mockba-500.jpg
ADDED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,4 +1,45 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@moskva/runtime",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
|
+
"description": "JavaScript-рантайм «Москва» с Java-подобной моделью выполнения: вызываемые Runnable-экземпляры, изоляция памяти и предсказуемая инициализация.",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"t": "git tag @javish/base-v$(node -p \"require('./package.json').version\") && git push --tags"
|
|
7
|
+
},
|
|
8
|
+
"homepage": "рантайм.москва",
|
|
9
|
+
"keywords": [
|
|
10
|
+
"runtime",
|
|
11
|
+
"execution-environment",
|
|
12
|
+
"functional-interfaces",
|
|
13
|
+
"runnable",
|
|
14
|
+
"callable-instances",
|
|
15
|
+
"proxy",
|
|
16
|
+
"vm",
|
|
17
|
+
"virtual-machine",
|
|
18
|
+
"isolation",
|
|
19
|
+
"high-performance",
|
|
20
|
+
"javascript",
|
|
21
|
+
"java-interop",
|
|
22
|
+
"java-style",
|
|
23
|
+
"moskva",
|
|
24
|
+
"memory-management",
|
|
25
|
+
"low-level",
|
|
26
|
+
"advanced",
|
|
27
|
+
"рантайм",
|
|
28
|
+
"среда-исполнения",
|
|
29
|
+
"функциональные-интерфейсы",
|
|
30
|
+
"runnable",
|
|
31
|
+
"вызываемые-экземпляры",
|
|
32
|
+
"прокси",
|
|
33
|
+
"вм",
|
|
34
|
+
"виртуальная-машина",
|
|
35
|
+
"изоляция",
|
|
36
|
+
"высокая-производительность",
|
|
37
|
+
"javascript",
|
|
38
|
+
"интероп-java",
|
|
39
|
+
"java-стиль",
|
|
40
|
+
"москва",
|
|
41
|
+
"управление-памятью",
|
|
42
|
+
"низкоуровневый",
|
|
43
|
+
"продвинутый"
|
|
44
|
+
]
|
|
4
45
|
}
|
package/readme.md
CHANGED
|
@@ -1,7 +1,12 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Рантайм Москва
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
<p>
|
|
4
|
+
<img src="https://media-743523.gitlab.io/img/img/mockba3-500.jpg" alt="РАНТАЙМ МОСКВА СПЛЕШ СКРИН">
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
Этот рантайм предоставляет вызываемые экземпляры функциональных интерфейсов
|
|
8
|
+
`Runnable`. `Runnable` — это экземпляр класса, который можно вызывать как
|
|
9
|
+
функцию.
|
|
5
10
|
|
|
6
11
|
```js
|
|
7
12
|
interface IRunnable {
|
|
@@ -9,12 +14,9 @@ interface IRunnable {
|
|
|
9
14
|
}
|
|
10
15
|
```
|
|
11
16
|
|
|
12
|
-
|
|
17
|
+
## Использование
|
|
13
18
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
An example below shows that even though `runner` is an instance, it can still be
|
|
17
|
-
invoked as a function:
|
|
19
|
+
Пример ниже показывает, что несмотря на то, что `runner` является экземпляром класса, его всё равно можно вызывать как функцию:
|
|
18
20
|
|
|
19
21
|
```js
|
|
20
22
|
var{Runnable}=require('@moskva/runtime')
|
|
@@ -23,6 +25,7 @@ var runner=new class extends Runnable {
|
|
|
23
25
|
const(){
|
|
24
26
|
this.test=[]
|
|
25
27
|
this.test.push(new Date)
|
|
28
|
+
// или this.test=['test']
|
|
26
29
|
}
|
|
27
30
|
test2(){
|
|
28
31
|
return this.test
|
|
@@ -42,30 +45,87 @@ calling runner:
|
|
|
42
45
|
< Hello runner; test = [ 2026-01-27T23:19:34.106Z ]
|
|
43
46
|
```
|
|
44
47
|
|
|
48
|
+
### Назначение
|
|
49
|
+
|
|
50
|
+
Экземпляры стандартных, не-runnable классов нельзя вызывать. Такое поведение
|
|
51
|
+
доступно только при наследовании от `Runnable` и предназначено для эмуляции
|
|
52
|
+
функциональных интерфейсов Java, которые предполагают реализацию одного метода.
|
|
53
|
+
|
|
54
|
+
## Требования к реализации
|
|
55
|
+
|
|
56
|
+
* Метод `run` **обязан** быть реализован. Он является точкой входа, которая
|
|
57
|
+
вызывается при обращении к экземпляру как к функции.
|
|
58
|
+
* Реализация может получать доступ к дополнительным внутренним API через `this`.
|
|
59
|
+
|
|
60
|
+
## Правила инициализации
|
|
61
|
+
|
|
62
|
+
Поля экземпляра должны инициализироваться внутри метода `const`.
|
|
63
|
+
|
|
64
|
+
Синтаксис полей класса не поддерживается. Реализация основана на proxy, и
|
|
65
|
+
создание `Runnable` с инициализаторами полей приведёт к бесконечной рекурсии. В
|
|
66
|
+
настоящее время не существует безопасного способа перехватить или извлечь
|
|
67
|
+
инициализаторы полей.
|
|
68
|
+
|
|
69
|
+
Пока не будет найдено жизнеспособное решение, это ограничение сохранится.
|
|
70
|
+
|
|
45
71
|
---
|
|
46
72
|
|
|
73
|
+
<details>
|
|
74
|
+
|
|
75
|
+
<summary>
|
|
76
|
+
|
|
77
|
+
# Runtime Moskva
|
|
78
|
+
|
|
79
|
+
This runtime provides callable instances of `Runnable` functional interfaces. A
|
|
80
|
+
`Runnable` is a class instance that can be invoked like a function.
|
|
81
|
+
|
|
82
|
+
```js
|
|
83
|
+
interface IRunnable {
|
|
84
|
+
run() {}
|
|
85
|
+
}
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
</summary>
|
|
89
|
+
|
|
90
|
+
<!-- Instances are allocated memory and can request compute via the event loop. -->
|
|
91
|
+
|
|
92
|
+
## Usage
|
|
93
|
+
|
|
94
|
+
An example below shows that even though `runner` is an instance, it can still be
|
|
95
|
+
invoked as a function:
|
|
96
|
+
|
|
47
97
|
```js
|
|
48
|
-
var
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
const()
|
|
52
|
-
this.test=[
|
|
98
|
+
var{Runnable}=require('@moskva/runtime')
|
|
99
|
+
|
|
100
|
+
var runner=new class extends Runnable {
|
|
101
|
+
const(){
|
|
102
|
+
this.test=[]
|
|
103
|
+
this.test.push(new Date)
|
|
104
|
+
// or this.test=['test']
|
|
53
105
|
}
|
|
54
|
-
|
|
55
|
-
|
|
106
|
+
test2(){
|
|
107
|
+
return this.test
|
|
108
|
+
}
|
|
109
|
+
run(){
|
|
110
|
+
console.log(' < Hello runner; test =',this.test2())
|
|
56
111
|
}
|
|
57
112
|
}
|
|
58
113
|
|
|
59
|
-
console.log('calling
|
|
60
|
-
|
|
114
|
+
console.log('calling runner:')
|
|
115
|
+
runner()
|
|
61
116
|
```
|
|
117
|
+
|
|
62
118
|
```sh
|
|
63
|
-
|
|
64
|
-
|
|
119
|
+
created new functional [class Runnable]
|
|
120
|
+
calling runner:
|
|
121
|
+
< Hello runner; test = [ 2026-01-27T23:19:34.106Z ]
|
|
65
122
|
```
|
|
66
123
|
|
|
67
|
-
|
|
68
|
-
|
|
124
|
+
### Purpose
|
|
125
|
+
|
|
126
|
+
Since instances of standard, non-runnable classes cannot be invoked. This
|
|
127
|
+
behaviour is only available when extending `Runnable`, to enable emulation of
|
|
128
|
+
Java's functional interfaces that are supposed to implement 1 method.
|
|
69
129
|
|
|
70
130
|
## Implementation requirements
|
|
71
131
|
|
|
@@ -84,6 +144,9 @@ initialisers.
|
|
|
84
144
|
|
|
85
145
|
Unless a viable solution is found, this limitation will remain.
|
|
86
146
|
|
|
147
|
+
</details>
|
|
148
|
+
|
|
149
|
+
|
|
87
150
|
---
|
|
88
151
|
|
|
89
152
|
(c) 2026
|