Перейти к содержимому

Языки и взаимодействие

Какие языки выполняет Elide, как запустить каждый из них и как Python, JavaScript и WebAssembly вызывают друг друга с --interop и в REPL.

На этой странице

Elide выполняет эти языки из одного исполняемого файла:

ЯзыкСтатусКак выполняетсяКак запуститьВзаимодействие
JavaScriptПоддерживаетсяСкриптelide app.js, elide -s CODEPython: --interop; WASM: без флага
TypeScriptПоддерживаетсяСкрипт, типы удаляютсяelide app.ts, elide -l ts -s CODEКак JavaScript
PythonЭкспериментальноPython 3.13elide app.py, elide python -m MODJavaScript: --interop
WebAssemblyЭкспериментальноКоманда WASI Preview 1elide app.wasm (_start или _main)Из JS/TS, без флага
Java, KotlinПоддерживаетсяКомпилируется, выполняется на встроенном JDKelide run Main.kt, проекты elide.pklНет
PklПоддерживаетсяКонфигурацияМанифесты elide.pklНет

elide info выводит языки в вашем исполняемом файле; elide setup python добавляет Python. Страницы по языкам: JavaScript & TypeScript, Python, Java & Kotlin, WebAssembly.

0:22 / 0:22

Вызов JavaScript из Python

# sum.py
from elide import js

print(js("[1,2,3].reduce((a,b)=>a+b,0)"))
elide --interop python sum.py
6

Импорт Python из JavaScript

# mod.py
def greet(name):
    return f"hello {name}"
// main.mjs
import mod from "./mod.py";
console.log(mod.greet("elide"));
elide --interop main.mjs
hello elide

Экспорт default — это модуль Python. Используйте точку входа .mjs.

Без --interop

Каждая программа выполняет только язык своей точки входа, а для JS/TS ещё и WebAssembly. Вызовы между языками завершаются ошибкой:

ПрограммаОшибка
sum.pyValueError: polyglot language 'js' not found
main.mjsCannot import 'mod.py': JavaScript entries run without Python. Re-run with --interop to use it.

Передавайте --interop только программам, которые вызывают код на других языках. Под --interop потоки Python завершаются ошибкой Creating threads is not allowed.

JavaScript и WebAssembly

import { add } from "./math.wasm";
console.log(add(1, 2));

Импорт .wasm и API WebAssembly работают в любой программе на JavaScript и TypeScript. Если установлен Python, модули с инструкциями SIMD завершаются ошибкой Vector instructions are not enabled.

В REPL

REPL передаёт значения между языками без --interop; см. Интерактивный REPL.

Примеры

Была ли эта страница полезной?