# Nyash Configuration File v2 # マルチBox型プラグイン対応 [libraries] # ライブラリ定義(1つのプラグインで複数のBox型を提供可能) [libraries."libnyash_filebox_plugin"] boxes = ["FileBox"] path = "./plugins/nyash-filebox-plugin/target/release/libnyash_filebox_plugin" [libraries."libnyash_counter_plugin"] boxes = ["CounterBox"] path = "./plugins/nyash-counter-plugin/target/release/libnyash_counter_plugin" [libraries."libnyash_net_plugin"] boxes = ["HttpServerBox", "HttpClientBox", "HttpResponseBox", "HttpRequestBox", "SocketServerBox", "SocketClientBox", "SocketConnBox"] path = "./plugins/nyash-net-plugin/target/release/libnyash_net_plugin" # FileBoxの型情報定義 [libraries."libnyash_filebox_plugin".FileBox] type_id = 6 [libraries."libnyash_filebox_plugin".FileBox.methods] birth = { method_id = 0 } open = { method_id = 1, args = ["path", "mode"] } read = { method_id = 2, args = ["path?"] } write = { method_id = 3, args = ["path?", "data"] } close = { method_id = 4 } exists = { method_id = 5, args = ["path"] } fini = { method_id = 4294967295 } copyFrom = { method_id = 7, args = [ { kind = "box", category = "plugin" } ] } cloneSelf = { method_id = 8 } [libraries."libnyash_counter_plugin".CounterBox] type_id = 7 singleton = true [libraries."libnyash_counter_plugin".CounterBox.methods] birth = { method_id = 0 } inc = { method_id = 1 } get = { method_id = 2 } fini = { method_id = 4294967295 } # HttpServerBox [libraries."libnyash_net_plugin".HttpServerBox] type_id = 20 [libraries."libnyash_net_plugin".HttpServerBox.methods] birth = { method_id = 0 } start = { method_id = 1, args = ["port"], returns_result = true } stop = { method_id = 2, returns_result = true } accept = { method_id = 3, returns_result = true } fini = { method_id = 4294967295 } # HttpClientBox [libraries."libnyash_net_plugin".HttpClientBox] type_id = 23 [libraries."libnyash_net_plugin".HttpClientBox.methods] birth = { method_id = 0 } get = { method_id = 1, args = ["url"], returns_result = true } post = { method_id = 2, args = ["url", "body"], returns_result = true } fini = { method_id = 4294967295 } # HttpResponseBox [libraries."libnyash_net_plugin".HttpResponseBox] type_id = 22 [libraries."libnyash_net_plugin".HttpResponseBox.methods] birth = { method_id = 0 } setStatus = { method_id = 1, args = ["status"] } setHeader = { method_id = 2, args = ["key", "value"] } write = { method_id = 3, args = ["body"] } readBody = { method_id = 4 } getStatus = { method_id = 5 } getHeader = { method_id = 6, args = ["key"] } fini = { method_id = 4294967295 } # HttpRequestBox [libraries."libnyash_net_plugin".HttpRequestBox] type_id = 21 [libraries."libnyash_net_plugin".HttpRequestBox.methods] birth = { method_id = 0 } path = { method_id = 1 } readBody = { method_id = 2 } respond = { method_id = 3, args = [{ kind = "box", category = "plugin" }] } fini = { method_id = 4294967295 } # SocketServerBox [libraries."libnyash_net_plugin".SocketServerBox] type_id = 30 [libraries."libnyash_net_plugin".SocketServerBox.methods] birth = { method_id = 0 } bind = { method_id = 1, args = ["port"] } accept = { method_id = 2 } fini = { method_id = 4294967295 } # SocketClientBox [libraries."libnyash_net_plugin".SocketClientBox] type_id = 32 [libraries."libnyash_net_plugin".SocketClientBox.methods] birth = { method_id = 0 } connect = { method_id = 1, args = ["host", "port"] } send = { method_id = 2, args = ["data"] } receive = { method_id = 3 } close = { method_id = 4 } fini = { method_id = 4294967295 } # SocketConnBox [libraries."libnyash_net_plugin".SocketConnBox] type_id = 31 [libraries."libnyash_net_plugin".SocketConnBox.methods] birth = { method_id = 0 } send = { method_id = 1, args = ["data"] } recv = { method_id = 2 } close = { method_id = 3 } fini = { method_id = 4294967295 } [plugin_paths] # プラグインの検索パス(デフォルト) search_paths = [ "./target/release", "./target/debug", "./plugins/*/target/release", "./plugins/*/target/debug", "/usr/local/lib/nyash/plugins", "~/.nyash/plugins" ] # 中央タイプIDレジストリ(新): 各プラグインの nyash_box.toml と一致させる [box_types] FileBox = 6 ConsoleBox = 5 ArrayBox = 10 MapBox = 11 IntegerBox = 12 StringBox = 13 CounterBox = 7 HttpServerBox = 20 HttpRequestBox = 21 HttpResponseBox = 22 HttpClientBox = 23 SocketServerBox = 30 SocketConnBox = 31 SocketClientBox = 32 MathBox = 50 TimeBox = 51 RegexBox = 52 EncodingBox = 53 TOMLBox = 54 PathBox = 55 EguiBox = 70 PyRuntimeBox= 40 PyObjectBox = 41 PythonParserBox = 60 PythonCompilerBox = 61 # 新スタイルのプラグインルート(併用可・[libraries]は後方互換) [plugins] "libnyash_filebox_plugin" = "./plugins/nyash-filebox-plugin" "libnyash_console_plugin" = "./plugins/nyash-console-plugin" "libnyash_string_plugin" = "./plugins/nyash-string-plugin" "libnyash_map_plugin" = "./plugins/nyash-map-plugin" "libnyash_array_plugin" = "./plugins/nyash-array-plugin" "libnyash_python_plugin" = "./plugins/nyash-python-plugin" "libnyash_integer_plugin" = "./plugins/nyash-integer-plugin" "libnyash_counter_plugin" = "./plugins/nyash-counter-plugin" "libnyash_net_plugin" = "./plugins/nyash-net-plugin" "libnyash_math_plugin" = "./plugins/nyash-math-plugin" "libnyash_python_parser_plugin" = "./plugins/nyash-python-parser-plugin" "libnyash_python_compiler_plugin" = "./plugins/nyash-python-compiler-plugin" "libnyash_regex_plugin" = "./plugins/nyash-regex-plugin" "libnyash_encoding_plugin" = "./plugins/nyash-encoding-plugin" "libnyash_toml_plugin" = "./plugins/nyash-toml-plugin" "libnyash_path_plugin" = "./plugins/nyash-path-plugin" "libnyash_egui_plugin" = "./plugins/nyash-egui-plugin" [libraries."libnyash_array_plugin"] boxes = ["ArrayBox"] path = "./plugins/nyash-array-plugin/target/release/libnyash_array_plugin" [libraries."libnyash_array_plugin".ArrayBox] type_id = 10 [libraries."libnyash_array_plugin".ArrayBox.methods] birth = { method_id = 0 } length = { method_id = 1 } get = { method_id = 2, args = ["index"] } push = { method_id = 3, args = ["value"] } set = { method_id = 4, args = ["index", "value"] } fini = { method_id = 4294967295 } [libraries."libnyash_map_plugin"] boxes = ["MapBox"] path = "./plugins/nyash-map-plugin/target/release/libnyash_map_plugin" [libraries."libnyash_map_plugin".MapBox] type_id = 11 [libraries."libnyash_map_plugin".MapBox.methods] birth = { method_id = 0 } size = { method_id = 1 } get = { method_id = 2, args = ["key"] } has = { method_id = 3, args = ["key"] } set = { method_id = 4, args = ["key", "value"] } remove= { method_id = 6, args = ["key"] } clear = { method_id = 7 } keysStr = { method_id = 8 } keys = { method_id = 8 } # runtime shim: returns newline-separated StringBox getOr = { method_id = 9, args = ["key", "default"] } valuesStr = { method_id = 13 } values = { method_id = 13 } # runtime shim: returns newline-separated StringBox toJson = { method_id = 14 } fini = { method_id = 4294967295 } # Extended string-key helpers setS = { method_id = 10, args = [ { kind = "string" }, { kind = "integer" } ] } getS = { method_id = 11, args = [ { kind = "string" } ] } hasS = { method_id = 12, args = [ { kind = "string" } ] } # IntegerBox plugin (basic numeric box) [libraries."libnyash_integer_plugin"] boxes = ["IntegerBox"] path = "./plugins/nyash-integer-plugin/target/release/libnyash_integer_plugin" [libraries."libnyash_integer_plugin".IntegerBox] type_id = 12 [libraries."libnyash_integer_plugin".IntegerBox.methods] birth = { method_id = 0 } get = { method_id = 1 } set = { method_id = 2, args = ["value"] } fini = { method_id = 4294967295 } # StringBox plugin (read-only methods first) [libraries."libnyash_string_plugin"] boxes = ["StringBox"] path = "./plugins/nyash-string-plugin/target/release/libnyash_string_plugin" [libraries."libnyash_string_plugin".StringBox] type_id = 13 [libraries."libnyash_string_plugin".StringBox.methods] birth = { method_id = 0 } length = { method_id = 1 } is_empty = { method_id = 2 } charCodeAt = { method_id = 3, args = ["index"] } concat = { method_id = 4, args = ["other"] } fromUtf8 = { method_id = 5, args = ["data"] } fini = { method_id = 4294967295 } # Python plugin (Phase 10.5 – Embedding & FFI, initial scaffold) [libraries."libnyash_python_plugin"] boxes = ["PyRuntimeBox", "PyObjectBox"] path = "./plugins/nyash-python-plugin/target/release/libnyash_python_plugin" [libraries."libnyash_python_plugin".PyRuntimeBox] type_id = 40 [libraries."libnyash_python_plugin".PyRuntimeBox.methods] birth = { method_id = 0 } eval = { method_id = 1, args = ["code"] } import = { method_id = 2, args = ["name"] } fini = { method_id = 4294967295 } evalR = { method_id = 11, args = ["code"], returns_result = true } importR= { method_id = 12, args = ["name"], returns_result = true } [libraries."libnyash_python_plugin".PyObjectBox] type_id = 41 [libraries."libnyash_python_plugin".PyObjectBox.methods] birth = { method_id = 0 } getattr = { method_id = 1, args = ["name"] } call = { method_id = 2, args = ["args"] } callKw = { method_id = 5 } str = { method_id = 3 } fini = { method_id = 4294967295 } getattrR= { method_id = 11, args = ["name"], returns_result = true } callR = { method_id = 12, args = ["args"], returns_result = true } callKwR = { method_id = 15, returns_result = true } [libraries."libnyash_console_plugin"] boxes = ["ConsoleBox"] path = "./plugins/nyash-console-plugin/target/release/libnyash_console_plugin" [libraries."libnyash_console_plugin".ConsoleBox] type_id = 5 [libraries."libnyash_console_plugin".ConsoleBox.methods] birth = { method_id = 0 } log = { method_id = 1, args = ["text"] } println = { method_id = 2, args = ["text"] } fini = { method_id = 4294967295 } [libraries."libnyash_math_plugin"] boxes = ["MathBox", "TimeBox"] path = "./plugins/nyash-math-plugin/target/release/libnyash_math_plugin" [libraries."libnyash_math_plugin".MathBox] type_id = 50 [libraries."libnyash_math_plugin".MathBox.methods] birth = { method_id = 0 } sqrt = { method_id = 1, args = ["x"] } sin = { method_id = 2, args = ["x"] } cos = { method_id = 3, args = ["x"] } round = { method_id = 4, args = ["x"] } fini = { method_id = 4294967295 } [libraries."libnyash_math_plugin".TimeBox] type_id = 51 [libraries."libnyash_math_plugin".TimeBox.methods] birth = { method_id = 0 } now = { method_id = 1 } fini = { method_id = 4294967295 } [libraries."libnyash_regex_plugin"] boxes = ["RegexBox"] path = "./plugins/nyash-regex-plugin/target/release/libnyash_regex_plugin" [libraries."libnyash_regex_plugin".RegexBox] type_id = 52 [libraries."libnyash_regex_plugin".RegexBox.methods] birth = { method_id = 0, args = ["pattern?"] } compile = { method_id = 1, args = ["pattern"] } isMatch = { method_id = 2, args = ["text"], returns_result = true } find = { method_id = 3, args = ["text"], returns_result = true } replaceAll = { method_id = 4, args = ["text", "repl"], returns_result = true } split = { method_id = 5, args = ["text", "limit"], returns_result = true } fini = { method_id = 4294967295 } [libraries."libnyash_encoding_plugin"] boxes = ["EncodingBox"] path = "./plugins/nyash-encoding-plugin/target/release/libnyash_encoding_plugin" [libraries."libnyash_encoding_plugin".EncodingBox] type_id = 53 [libraries."libnyash_encoding_plugin".EncodingBox.methods] birth = { method_id = 0 } toUtf8Bytes = { method_id = 1, args = ["s"], returns_result = true } fromUtf8Bytes = { method_id = 2, args = ["bytes"], returns_result = true } base64Encode = { method_id = 3, args = ["data"], returns_result = true } base64Decode = { method_id = 4, args = ["text"], returns_result = true } hexEncode = { method_id = 5, args = ["data"], returns_result = true } hexDecode = { method_id = 6, args = ["text"], returns_result = true } fini = { method_id = 4294967295 } [libraries."libnyash_toml_plugin"] boxes = ["TOMLBox"] path = "./plugins/nyash-toml-plugin/target/release/libnyash_toml_plugin" [libraries."libnyash_toml_plugin".TOMLBox] type_id = 54 [libraries."libnyash_toml_plugin".TOMLBox.methods] birth = { method_id = 0 } parse = { method_id = 1, args = ["text"], returns_result = true } get = { method_id = 2, args = ["path"], returns_result = true } toJson = { method_id = 3, returns_result = true } fini = { method_id = 4294967295 } [libraries."libnyash_path_plugin"] boxes = ["PathBox"] path = "./plugins/nyash-path-plugin/target/release/libnyash_path_plugin" [libraries."libnyash_path_plugin".PathBox] type_id = 55 [libraries."libnyash_path_plugin".PathBox.methods] birth = { method_id = 0 } join = { method_id = 1, args = ["base", "rest"], returns_result = true } dirname = { method_id = 2, args = ["path"], returns_result = true } basename = { method_id = 3, args = ["path"], returns_result = true } extname = { method_id = 4, args = ["path"], returns_result = true } isAbs = { method_id = 5, args = ["path"], returns_result = true } normalize = { method_id = 6, args = ["path"], returns_result = true } fini = { method_id = 4294967295 } [libraries."libnyash_egui_plugin"] boxes = ["EguiBox"] path = "./plugins/nyash-egui-plugin/target/release/libnyash_egui_plugin" [libraries."libnyash_egui_plugin".EguiBox] type_id = 70 [libraries."libnyash_egui_plugin".EguiBox.methods] birth = { method_id = 0 } open = { method_id = 1, args = ["width", "height", "title"] } uiLabel = { method_id = 2, args = ["text"] } uiButton = { method_id = 3, args = ["text"], returns_result = false } pollEvent = { method_id = 4, returns_result = true } run = { method_id = 5 } close = { method_id = 6 } fini = { method_id = 4294967295 } [env] RUST_BACKTRACE = "1" # 任意。verboseログ NYASH_CLI_VERBOSE = "1" ## Core‑13 MIR を既定ON(論文化基準と整合) NYASH_MIR_CORE13 = "1" NYASH_OPT_DIAG_FORBID_LEGACY = "1" # --- Ny script plugins (optional, JIT-only path) --- # Enable to load Nyash std scripts implemented in apps/std/*.nyash ny_plugins = [ "apps/std/string_std.nyash", "apps/std/array_std.nyash", "apps/std/map_std.nyash", "apps/std/string.nyash", "apps/std/array.nyash" ] [tasks] # self-host: dependency tree (Ny-only) dep_tree = "NYASH_USE_PLUGIN_BUILTINS=1 NYASH_DISABLE_PLUGINS=0 {root}/target/release/nyash --backend vm {root}/apps/selfhost/tools/dep_tree_min_string.nyash | sed -n '/^{/,$p' > {root}/tmp/deps.json" # LLVMビルド(nyash本体) build_llvm = "LLVM_SYS_180_PREFIX=$(llvm-config-18 --prefix) cargo build --release --features llvm" # ny-llvm-smoke を .o に出力(NYASH_LLVM_OBJ_OUTを使う) smoke_obj_array = "NYASH_LLVM_OBJ_OUT={root}/nyash_llvm_temp.o ./target/release/nyash --backend llvm apps/tests/ny-llvm-smoke/main.nyash && ls -l {root}/nyash_llvm_temp.o" # ny-echo-lite を .o に出力(標準入力1行→そのまま出力) smoke_obj_echo = "NYASH_LLVM_OBJ_OUT={root}/nyash_llvm_temp.o ./target/release/nyash --backend llvm apps/tests/ny-echo-lite/main.nyash" # ny-llvm-smoke をEXEまで(NyRTリンク) build_exe_array = "tools/build_llvm.sh apps/tests/ny-llvm-smoke/main.nyash -o app_llvm" # EXE実行 run_exe_array = "./app_llvm" # 掃除 clean = "cargo clean && rm -f {root}/nyash_llvm_temp.o app_llvm || true"