Remove legacy hardcoded 'sum' carrier validation that was blocking array_filter patterns with different accumulator names (e.g., 'out'). Before: Pattern3 required carrier named 'sum' to exist After: Pattern3 uses carrier_info generically (any carrier name works) Test results: - phase49_joinir_array_filter_smoke: PASS â - phase49_joinir_array_filter_fallback: PASS â - phase49_joinir_array_filter_ab_comparison: PASS â - Full suite: 909/909 PASS, 0 FAIL Also: Archive old roadmap documentation (67k lines moved to docs/archive/) ð€ Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
13 KiB
Geminiå çã®Nyash ABIåæ (2025-09-01)
質åå 容
Nyash ABIãšããçµ±äžããªããžèŠæ Œã«ã€ããŠæè¡ççžè«ã§ãã
ãèæ¯ã Nyashããã°ã©ãã³ã°èšèªã§ãããããèšèªãç¹ãçµ±äžçãªABIãäœãæ§æ³ã§ãã
ãNyash ABIã®åºæ¬èšèšã
// C ABIããŒã¹ã ããNyashåã·ã¹ãã ãèŒãã
typedef struct NyashValue {
uint64_t type_id; // åèå¥å
uint64_t box_handle; // Boxãã³ãã«ïŒArc<T>ã®ãã€ã³ã¿ïŒ
uint64_t metadata; // æ¡åŒµçšïŒasync flagçïŒ
} NyashValue;
// çµ±äžé¢æ°ã·ã°ããã£
typedef NyashValue (*NyashFunc)(
uint32_t argc,
NyashValue* args,
void* context
);
ãç®çã
- RustãPythonãJavaScriptãC++çããã¹ãŠã®èšèªãšNyashãç¹ã
- C ABIã®å®å®æ§ + Nyashåã·ã¹ãã ã®è¡šçŸå
- Everything is Boxå²åŠã®å€éšæ¡åŒµ
ãæè¡çãªè³ªåã
- ãã®ãããªçµ±äžABIã®åäŸã¯ãããŸããïŒïŒCOMãGObjectçãšã®æ¯èŒïŒ
- 3ã€ã®u64ã§ååãªè¡šçŸåããããŸããïŒ
- ããã©ãŒãã³ã¹ãžã®åœ±é¿ãã©ãè©äŸ¡ããŸããïŒ
- GCãã¡ã¢ãªç®¡çã®èª²é¡ã¯ïŒ
- éåæåŠçã®çµ±äžçãªæ±ãæ¹ã¯ïŒ
æ£çŽãéã«æãã ããã§ãããäžçãå€ããå¯èœæ§ã«ã€ããŠæ·±ãèå¯ããŠãã ããã
Geminiå çã®åç
Nyash ABIæ§æ³ãæèŠããŸãããããã¯éåžžã«éå¿çã§ãããã°ã©ãã³ã°èšèªã®çžäºéçšæ§ã«ãããæ ¹æºçãªèª²é¡ã«ææŠãããçŽ æŽãããçæ³ã ãšæããŸãããéã«æãã ãããšãè¬éãããŠããŸããããã®ãäžéå±€ããããããœãããŠã§ã¢å·¥åŠã«ãããæãå°é£ã§äŸ¡å€ã®ããéšåã§ãã
ãæç€ºããã ããèšèšãšã質åã«åºã¥ããæ·±ãèå¯ãããŠããã ããŸãã
Nyash ABIã®æè¡çèå¯
1. ãã®ãããªçµ±äžABIã®åäŸã¯ãããŸããïŒ
ã¯ããæ°å€ãã®åäŸãååšããŸããããããšã®æ¯èŒãããNyash ABIã®ç¬èªæ§ãšèª²é¡ãèŠããŠããŸãã
-
COM (Component Object Model) / WinRT: Microsoftãæå±ãããã€ããªäºææ§ã®ããã³ã³ããŒãã³ãæè¡ãåç §ã«ãŠã³ãã«ããã¡ã¢ãªç®¡çãã€ã³ã¿ãŒãã§ãŒã¹ã¯ãšãªïŒ
QueryInterfaceïŒã«ããåçãªåãã§ãã¯ãªã©ãNyash ABIã®ææ³ãšéåžžã«è¿ãã§ããããããCOMã¯ã¬ãžã¹ããªãžã®ç»é²ãIDLïŒã€ã³ã¿ãŒãã§ãŒã¹å®çŸ©èšèªïŒãå¿ é ã§ãWindowsäžå¿ã®è€éãªãšã³ã·ã¹ãã ã§ãããNyash ABIã¯ããããããã·ã³ãã«ã§ã¯ãã¹ãã©ãããã©ãŒã ãªåœ¢ã§å®çŸããããšããŠãããšè§£éã§ããŸãã -
GObject: Cèšèªã§ãªããžã§ã¯ãæåããã°ã©ãã³ã°ãå®çŸããããã®ã©ã€ãã©ãªã§ãGTK+ã®åºç€ã§ãããã¡ããåç §ã«ãŠã³ããããããã£ãã·ã°ãã«ïŒã€ãã³ãïŒãšãã£ãé«åºŠãªæ©èœãæã¡ãåçãªåã·ã¹ãã ãåããŠããŸããNyash ABIã¯ãGObjectã®æ žå¿çãªã¢ã€ãã¢ïŒåæ å ±ãæã€æ±çšçãªå€ã³ã³ããïŒãããããããã«ãªåœ¢ã§æœåºãããã®ãšèšããã§ãããã
-
WebAssembly Component Model: ãããçŸåšæãææ³çã«è¿ãæå 端ã®åãçµã¿ã§ããWasmã¯åœåãåçŽãªæ°å€åããããåãã§ããŸããã§ããããComponent Modelã¯ãæååãã¬ã³ãŒããããªã¢ã³ããšãã£ãé«ã¬ãã«ãªåãèšèªéã§ã©ãåãæž¡ãããå®çŸ©ãã仿§ã§ãããã®å éšã§ã¯ããã¹ãŠã®é«ã¬ãã«ãªåãæçµçã«åçŽãªæ°å€åïŒ
i32,i64ãªã©ïŒã«ãäžãããïŒloweringïŒããŠWasmã³ã¢ABIãééããåãåãåŽã§å床é«ã¬ãã«ãªåã«ãäžãããïŒliftingïŒããŸããNyash ABIã®NyashValueã¯ããã®ãé«ã¬ãã«ãªåã衚çŸããã³ã³ããããã®ãã®ã§ãããComponent Modelãç®æãäžçãããã€ãã£ãã³ãŒãã®äžçã§çŽæ¥å®çŸããããšãã詊ã¿ãšèŠãªããŸãã -
çµè«: ã¢ã€ãã¢èªäœã¯æ°ãããã®ã§ã¯ãããŸãããããããããã¯åŒ±ã¿ã§ã¯ãªããããã**ããã®æ¹åæ§ãæ£ããããšã®èšŒæã**ã§ããCOMãGObjectã®è€éããä¹ãè¶ããWasm Component Modelã®ãããªçŸä»£çãªã·ã³ãã«ãããã€ãã£ãABIãšããŠæäŸã§ãããªãã倧ããªäŸ¡å€ããããŸãã
2. 3ã€ã®u64ã§ååãªè¡šçŸåããããŸããïŒ
ã¯ããååãããã»ã©ã®è¡šçŸåãæã£ãŠããŸããããã¯éåžžã«åªããèšèšã§ãã
type_id (uint64_t): 64bitãããã°ãååã®ããã·ã¥å€ããéå±€çãªåIDãªã©ãäºå®äžç¡éã®åã衚çŸã§ããŸããè¡çªã®å¿é ã¯ãŸããããŸãããbox_handle (uint64_t): 64bitã¢ãŒããã¯ãã£ã®ãã€ã³ã¿ãæ ŒçŽããã®ã«æé©ã§ããArc<T>ã®ãã€ã³ã¿ããã®ãŸãŸæ ŒçŽããããšã§ãèšèªéã§æææš©ïŒåç §ã«ãŠã³ãïŒãå ±æããæ žå¿çãªåœ¹å²ãæ ããŸããmetadata (uint64_t): ãã®ãã£ãŒã«ããéµã§ãã64åã®ããããã©ã°ãšããŠäœ¿ããŸãã- éåæãã©ã° (
IS_ASYNC) - ãã¥ãŒã¿ãã«ãã©ã° (
IS_MUTABLE) - æææš©ãã³ãïŒåŒã³åºãåŽãæææš©ãæŸæ£ãããã©ããçïŒ
- ã€ã³ã©ã€ã³å€ã®æ ŒçŽ:
box_handleãNULLã®å Žåããã®metadataãã£ãŒã«ãã«å°ããªæŽæ°ãæµ®åå°æ°ç¹æ°ãçŽæ¥æ ŒçŽããïŒãã€ã³ã¿ã¿ã°ä»ãã®ãããªïŒæé©åãå¯èœã§ããããã«ãããåçŽãªæ°å€ã®åãæž¡ãã§ããŒã確ä¿ãäžèŠã«ãªããŸãã
- éåæãã©ã° (
ãã®3 * uint64_tã®èšèšã¯ãã·ã³ãã«ããæ¡åŒµæ§ããããŠæé©åã®äœå°ãå
Œãåãããéåžžã«å
ç¢ãªåºç€ã§ãã
3. ããã©ãŒãã³ã¹ãžã®åœ±é¿ãã©ãè©äŸ¡ããŸããïŒ
ããã¯æå€§ã®ãã¬ãŒããªãã§ãã
-
ãªãŒããŒããã:
- 鿥åç
§: ãã¹ãŠã®å€ã«ã¢ã¯ã»ã¹ããããã«ã
NyashValue->box_handle->Arc<T>->Tãšãããã€ã³ã¿ã®é£éããã©ãå¿ èŠãããããã£ãã·ã¥å¹çãæªåããå¯èœæ§ããããŸãã - ããŒã確ä¿: ãã¹ãŠãBoxåïŒ
ArcåïŒãããããåçŽãªæŽæ°ãæž¡ãã ãã§ãããŒã確ä¿ãšåç §ã«ãŠã³ãã®ãªãŒããŒããããçºçããŸããïŒåè¿°ã®ã€ã³ã©ã€ã³å€æé©åã§ç·©åå¯èœïŒ - åçãã£ã¹ããã:
type_idã«åºã¥ããå®è¡æã®åãã§ãã¯ãšãã£ã¹ãããã¯ãéçãªé¢æ°åŒã³åºããããé ããªããŸãã
- 鿥åç
§: ãã¹ãŠã®å€ã«ã¢ã¯ã»ã¹ããããã«ã
-
è©äŸ¡æ¹æ³:
- ç²åºŠïŒGranularityïŒãéèŠã§ãã
- ç²ãç²åºŠïŒChunkyïŒ: 倧ããªããŒã¿ïŒç»åããŒã¿ãé·ãããã¹ãïŒãäžåºŠæž¡ããŠãèšèªã®å éšã§é·æéåŠçããå Žåã¯ãABIã®ãªãŒããŒãããã¯ç¡èŠã§ããã»ã©å°ãããªããŸããããã¯Nyash ABIãåŸæãšããé åã§ãã
- 现ããç²åºŠïŒChattyïŒ: ã«ãŒãã®äžã§ãå°ããªå€ãäœåºŠãé »ç¹ã«ããåãããå ŽåïŒäŸ:
for i in 0..1_000_000 { foreign_add(1, 2) }ïŒããªãŒããŒããããèŽåœçã«ãªããŸãã
- ãã³ãããŒã¯: Cèšèªã®ãã€ãã£ã颿°åŒã³åºããããŒã¹ã©ã€ã³ïŒ1.0ïŒãšããŠã以äžã®ãããªã·ããªãªã§æ§èœã枬å®ãã¹ãã§ãã
- æŽæ°ãæµ®åå°æ°ç¹æ°ã®åãæž¡ã
- çãæååãé·ãæååã®åãæž¡ã
- 倧ããªãã€ãé åã®åãæž¡ã
- ã³ãŒã«ããã¯é¢æ°ïŒNyash -> C -> NyashïŒã®åŒã³åºã
- ç²åºŠïŒGranularityïŒãéèŠã§ãã
ããã©ãŒãã³ã¹ãæéèŠèŠãããå Žé¢ã§ã¯ããã®ABIããã€ãã¹ãããé«éãã¹ããçšæããããšãæ€èšãã¹ãã§ãããã
4. GCãã¡ã¢ãªç®¡çã®èª²é¡ã¯ïŒ
Arc<T>ïŒã¢ãããã¯åç
§ã«ãŠã³ãïŒãããŒã¹ã«ããŠããã®ã¯çŽ æŽãããéžæã§ããããã«ãããRustãC++ã®ãããªæåã¡ã¢ãªç®¡çèšèªãšã®é£æºã¯éåžžã«å
ç¢ã«ãªããŸãã
æå€§ã®èª²é¡ã¯ãGCïŒã¬ããŒãžã³ã¬ã¯ã·ã§ã³ïŒãæã€èšèªïŒPython, JavaScript, Javaãªã©ïŒãšã®é£æºã§ãã
- 課é¡: GCãæã€èšèªã®ãªããžã§ã¯ããNyashåŽã§
Arcã§ã©ããããåæã«Nyashã®ãªããžã§ã¯ããGCèšèªåŽã§åç §ãããšã埪ç°åç §ã容æã«çºçããã¡ã¢ãªãªãŒã¯ã®åå ãšãªããŸãã - 解決ç:
- ãããã·ãªããžã§ã¯ã: åèšèªã®ãã€ã³ãã£ã³ã°å±€ã§ãããããã·ãªããžã§ã¯ãããçæããŸããäŸãã°ãPythonåŽã§Nyashãªããžã§ã¯ããæ±ãå Žåããã®
__del__ã¡ãœããã§Arcã®åç §ã«ãŠã³ãããã¯ãªã¡ã³ãããPythonã¯ã©ã¹ãäœããŸãã - 匱åç
§ïŒWeak ReferencesïŒ: 埪ç°ãæã¡åãããã«ãçæ¹ã®åç
§ã匱åç
§ã«ããå¿
èŠããããŸãã
Arcã¯Weakãžã®ããŠã³ã°ã¬ãŒãããµããŒãããŠããããããããæŽ»çšã§ããŸãã - æç€ºçãªç Žæ£:
dispose()ãclose()ã®ãããªã¡ãœãããå ¬éãããŠãŒã¶ãŒãæåã§ãªãœãŒã¹ãè§£æŸã§ããããã«ããããšãã確å®ãªæ¹æ³ã§ãã
- ãããã·ãªããžã§ã¯ã: åèšèªã®ãã€ã³ãã£ã³ã°å±€ã§ãããããã·ãªããžã§ã¯ãããçæããŸããäŸãã°ãPythonåŽã§Nyashãªããžã§ã¯ããæ±ãå Žåããã®
ãã®GCãšã®é£æºã¯ããã€ã³ãã£ã³ã°ã©ã€ãã©ãªã®èšèšã§æã泚æãèŠããéšåã§ãã
5. éåæåŠçã®çµ±äžçãªæ±ãæ¹ã¯ïŒ
metadataãã£ãŒã«ããããã§ã掻èºããŸãã
- çµ±äžFuture/Promiseã¢ãã«:
- éåæé¢æ°ã¯ã
IS_ASYNCãã©ã°ãç«ãŠãNyashValueãå³åº§ã«è¿ããŸãã - ãã®
box_handleã¯ãBox<dyn NyashFuture>ã®ãããªãéåæåŠçã®ç¶æ ãæã€ãªããžã§ã¯ããæããŸãã NyashFutureãã¬ã€ãïŒã€ã³ã¿ãŒãã§ãŒã¹ïŒã«ã¯ãpoll(callback: NyashValue)ã®ãããªã¡ãœãããå®çŸ©ããŸãã- åèšèªã®ãã€ã³ãã£ã³ã°å±€ãããã®
NyashFutureããã®èšèªã®éåæããªããã£ãïŒRustã®FutureãJSã®PromiseãPythonã®awaitableïŒã«å€æããŸãã pollã¡ãœããã«æž¡ãcallbackããŸãNyashValueïŒé¢æ°ãªããžã§ã¯ãïŒã§ãããããèšèªããŸããã§éåæåŠçã®çµæãè¿ãããšãã§ããŸãã
- éåæé¢æ°ã¯ã
ããã«ãããããèšèªã®ã€ãã³ãã«ãŒãããå¥ã®èšèªã®éåæåŠçãé§åããããšãå¯èœã«ãªããŸããããã¯éåžžã«åŒ·åã§ãã
äžçãå€ããå¯èœæ§ã«ã€ããŠã®èå¯
ãéã«æãã ããã®ã¬ã€ã€ãŒãäžçãå€ããäŸã¯ãæŽå²äžæ°å€ããããŸããã³ã³ãããªãŒãŒã·ã§ã³ïŒDockerïŒãä»®æ³åïŒVMwareïŒããããŠãŠã§ãïŒHTTP/HTMLïŒãããã¹ãŠã¯æœè±¡åã¬ã€ã€ãŒã§ããNyash ABIããã®å¯èœæ§ãç§ããŠããŸãã
-
çã®ããªã°ãããã»ãšã³ã·ã¹ãã ã®å®çŸ: çŸåšãèšèªéã®é£æºã¯å€å€§ãªåªåãèŠãããç¹æ®ãªäœæ¥ãã§ããNyash ABIãæ®åããã°ãããããåœããåã®äœæ¥ãã«å€ãããŸãã髿§èœãªæ°å€èšç®ã¯Rustã§ãAIã¢ãã«ã¯Pythonã§ãUIã¯JavaScriptã§æžããããããããããåäžèšèªå ã®ã¢ãžã¥ãŒã«ã®ããã«ã·ãŒã ã¬ã¹ã«çµã¿åãããããããåœããåã«ãªãã°ãéçºè ã¯ãã©ã®èšèªã§äœãããã§ã¯ãªã**ãã©ã®ã¿ã¹ã¯ã«ã©ã®èšèªãæé©ãã**ã ããèããã°ãããªããŸãã
-
ãœãããŠã§ã¢è³ç£ã®åå©çšãšå»¶åœ: C++ã§æžããã巚倧ãªã¬ã¬ã·ãŒã©ã€ãã©ãªãç§åŠæè¡èšç®ã§äœ¿ãããFortranã®ã³ãŒãããããã£ããã®ãäžåºŠ
NyashValueã§ã©ããããŠããŸãã°ãæªæ¥ã®ã©ããªèšèªãããå®å šã«åŒã³åºãããäžæ» ã®ã³ã³ããŒãã³ãããšåããŸããããã¯ãœãããŠã§ã¢è³ç£ã®äŸ¡å€ãæå€§åããŸãã -
è€éæ§ã®åæž:
Nåã®èšèªãšMåã®ã©ã€ãã©ãªãç¹ãã®ã«ãçŸç¶ã§ã¯N*Méãã®ãã€ã³ãã£ã³ã°ãå¿ èŠã§ããNyash ABIãäžå¿ã«ããã°ãN+Måã®ãã€ã³ãã£ã³ã°ã§æžã¿ãŸããããã¯ãšã³ã·ã¹ãã å šäœã®è€éæ§ãåçã«åæžããŸãã -
æ°ããã¢ãŒããã¯ãã£ã®åµåº: ãã©ã°ã€ã³ã·ã¹ãã ãã²ãŒã ã®MODïŒæ¹é ïŒãåçãªãµãŒããŒæ©èœæ¡åŒµãªã©ããèšèªã«äŸåããªãçµ±äžçãªæ¹æ³ã§å®çŸã§ããŸããNyash ABIã¯ãåãªãFFIïŒForeign Function InterfaceïŒãè¶ ãããŠãããŒãµã«ãªãã©ã°ã€ã³ã»ã¢ãŒããã¯ãã£ã®åºç€ãšãªãåŸãŸãã
çµè«ãšããŠãNyash ABIæ§æ³ã¯ãåãªãæè¡çææŠã§ã¯ãªãããœãããŠã§ã¢éçºã®ããæ¹ãã®ãã®ãå€é©ããå¯èœæ§ãç§ãã壮倧ãªããžã§ã³ã§ãã ããã©ãŒãã³ã¹ã®ãã¬ãŒããªããçè§£ããGCèšèªãšã®é£æºãšããå°é£ãªèª²é¡ãä¹ãè¶ããé«å質ãªå€èšèªãã€ã³ãã£ã³ã°ãæäŸã§ãããšãããã®ãéã«æãã ããã®ã¬ã€ã€ãŒãããœãããŠã§ã¢ã®äžçãç¹ããäžå¯æ¬ ãªã€ã³ãã©ã«ãªãã§ãããã
ãã²ããã®ææŠãç¶ããŠãã ãããå¿æŽããŠããŸãã