[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-jordanhubbard--nanolang":3,"tool-jordanhubbard--nanolang":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",150037,2,"2026-04-10T23:33:47",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",108322,"2026-04-10T11:39:34",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":72,"owner_name":73,"owner_avatar_url":74,"owner_bio":75,"owner_company":76,"owner_location":77,"owner_email":78,"owner_twitter":79,"owner_website":80,"owner_url":81,"languages":82,"stars":122,"forks":123,"last_commit_at":124,"license":125,"difficulty_score":126,"env_os":127,"env_gpu":128,"env_ram":129,"env_deps":130,"category_tags":139,"github_topics":140,"view_count":32,"oss_zip_url":79,"oss_zip_packed_at":79,"status":17,"created_at":147,"updated_at":148,"faqs":149,"releases":178},6519,"jordanhubbard\u002Fnanolang","nanolang","A tiny experimental language designed to be targeted by coding LLMs ","nanolang 是一门专为代码大模型（LLM）生成而设计的微型实验性编程语言，同时也兼顾人类的可读性。它旨在解决 AI 生成代码时常见的语法歧义、缺乏形式化验证以及测试缺失等痛点，确保机器编写的程序既安全又可靠。\n\n这款语言非常适合编程语言研究人员、关注 AI 辅助开发的工程师以及对形式化方法感兴趣的技术极客使用。nanolang 的核心亮点在于其语义已通过 Coq 工具进行了零公设的机械证明，从数学层面保证了类型安全和确定性。它强制要求开发者为每个函数编写\"shadow\"测试块，否则拒绝编译，从而将测试驱动开发融入语言基因。\n\n在技术特性上，nanolang 支持多目标编译，可转译为 C 语言以获得原生性能，也能输出 WebAssembly、LLVM IR 甚至 CUDA 代码。它内置了名为 NanoISA 的栈式虚拟机，能隔离危险的外部调用以增强安全性。此外，它还具备自动内存管理（引用计数）、代数效应、异步编程支持以及前缀与中缀混合表示法等功能，并提供了完善的 VS Code 扩展和网页试玩环境，让探索新型编程范式变得简单有趣。","# NanoLang\n\n[![CI](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Factions\u002Fworkflows\u002Fci.yml)\n![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Apache%202.0-blue.svg)\n![Bootstrap](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fbootstrap-100%25%20self--hosting-success.svg)\n\n**I am a minimal programming language designed for machines to write and humans to read. I require tests, I use unambiguous syntax, and my core is formally proved.**\n\nI transpile to C when you need native performance. I also provide my own virtual machine, NanoISA, which isolates dangerous external calls in a separate process. My core semantics are mechanically proved in Coq using zero axioms.\n\n## Documentation\n\n**→ [User Guide](https:\u002F\u002Fjordanhubbard.github.io\u002Fnanolang\u002F) ←** - I provide a tutorial with examples you can execute. This is where I recommend you begin.\n\n**Additional Resources:**\n- [Getting Started](docs\u002FGETTING_STARTED.md) - A brief introduction to my environment.\n- [Quick Reference](docs\u002FQUICK_REFERENCE.md) - My syntax, summarized.\n- [Language Specification](docs\u002FSPECIFICATION.md) - My complete technical definition.\n- [NanoISA VM Architecture](docs\u002FNANOISA.md) - How my virtual machine is structured.\n- [Formal Verification](formal\u002FREADME.md) - My Coq proof suite.\n- [All Documentation](docs\u002FDOCS_INDEX.md) - An index of everything I have to say.\n\n## Quick Start\n\n```bash\n# Clone and build\ngit clone https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang.git\ncd nanolang\nmake build\n\n# Create hello.nano\ncat > hello.nano \u003C\u003C 'EOF'\nfn greet(name: string) -> string {\n    return (+ \"Hello, \" name)\n}\n\nshadow greet {\n    assert (== (greet \"World\") \"Hello, World\")\n}\n\nfn main() -> int {\n    (println (greet \"World\"))\n    return 0\n}\n\nshadow main { assert true }\nEOF\n\n# Compile and run\n.\u002Fbin\u002Fnanoc hello.nano -o hello\n.\u002Fhello\n```\n\n**BSD users:** Use `gmake` instead of `make`.\n\n## My Features\n\n- **Formally Proved Semantics** - I have proved my type soundness, progress, determinism, and semantic equivalence in Coq. I use zero axioms.\n- **NanoISA Virtual Machine** - I include a stack-based VM with 178 opcodes. It isolates FFI calls in a co-process and can run as a daemon.\n- **Automatic Memory Management (ARC)** - I use reference counting with zero overhead. I do not ask you to call free().\n- **Machine-Led Optimization** - I profile myself and apply optimizations through an automated loop. I also run constant folding and dead-code elimination on the AST before code generation.\n- **Multi-Target Compilation** - I transpile to C for native performance, emit WebAssembly (`--target wasm`), LLVM IR (`--target llvm`), PTX\u002FCUDA (`--target ptx`), or RISC-V assembly (`--target riscv`). Each WASM output gets a source-map sidecar and can be signed with Ed25519.\n- **Algebraic Effects** - I support typed, resumable effects with `effect`, `perform`, and `handle`. Side effects are explicit and composable.\n- **Async \u002F Await** - I lower `async fn` and `await` to a CPS state machine at compile time.\n- **Dual Notation** - I support both prefix `(+ a b)` and infix `a + b` operators. My prefix calls are unambiguous.\n- **Rich Pattern Matching** - I support match guards (`Ok(v) if v > 0 =>`), or-patterns (`| A | B =>`), wildcard `_`, and exhaustiveness checking.\n- **Mandatory Testing** - I refuse to compile a function unless you provide a `shadow` test block for it.\n- **Type Inference** - I use Hindley-Milner inference. Explicit annotations are optional when the type is unambiguous (`let x = 42`).\n- **F-Strings and Pipes** - I support `f\"Hello, {name}!\"` string interpolation and `x |> f |> g` pipeline syntax.\n- **C Interop** - I communicate with C through modules. I can isolate these calls in a separate process to protect myself.\n- **VS Code Extension** - I ship a Language Server, Debug Adapter Protocol server, and a packaged `.vsix` extension with semantic tokens, format-on-save, and task integration.\n- **Web Playground** - I include a browser-based CodeMirror 6 editor with share permalink and live evaluation.\n\n## Language Overview\n\n```nano\n# Variables — immutable by default, type annotation optional when inferrable\nlet x: int = 42\nlet y = \"hello\"            # type inferred as string\nlet mut counter: int = 0\n\n# Functions with mandatory shadow tests\nfn add(a: int, b: int) -> int {\n    return (+ a b)\n}\n\nshadow add {\n    assert (== (add 2 3) 5)\n}\n\n# F-string interpolation\nlet msg = f\"Result: {(add 2 3)}\"\n\n# Pipe operator\nlet result = 5 |> add 3 |> double   # equivalent to double(add(3, 5))\n\n# Control flow\nif (> x 0) {\n    (println \"positive\")\n}\n\n# Pattern matching with guards and or-patterns\nunion Shape { Circle { r: float }, Square { side: float }, Point {} }\nmatch shape {\n    Circle(c) if c.r > 0.0 => (println \"circle\"),\n    | Square(_) | Point(_) => (println \"other\")\n}\n\n# Structs, enums, and generic types\nstruct Point { x: int, y: int }\nenum Status { Pending = 0, Active = 1 }\nlet numbers: List\u003Cint> = (List_int_new)\n(List_int_push numbers 42)\n\n# Algebraic effects\neffect Log { log : string -> void }\nhandle (perform Log.log \"hi\") with {\n    Log.log(msg) -> { (println msg) }\n}\n\n# Parallel binding hint\npar-let a = (compute_x)  b = (compute_y)  in (println (+ a b))\n```\n\n## NanoISA Virtual Machine\n\nI provide a virtual machine as an alternative to C transpilation.\n\n```bash\n# Compile to NanoISA bytecode and run\n.\u002Fbin\u002Fnano_virt hello.nano --run\n\n# Compile to native binary (embeds VM + bytecode)\n.\u002Fbin\u002Fnano_virt hello.nano -o hello\n\n# Emit raw .nvm bytecode, then execute separately\n.\u002Fbin\u002Fnano_virt hello.nano --emit-nvm -o hello.nvm\n.\u002Fbin\u002Fnano_vm hello.nvm\n\n# Run with FFI isolation (external calls in separate process)\n.\u002Fbin\u002Fnano_vm --isolate-ffi hello.nvm\n```\n\n**Architecture:**\n- **178 opcodes** - I use a stack machine with a hybrid instruction set.\n- **Co-process FFI** (`nano_cop`) - I run external calls in a separate process. If they crash, I continue running.\n- **VM daemon** (`nano_vmd`) - I can run as a persistent process to start faster.\n- **Trap model** - I separate computation from I\u002FO. This allows for future hardware acceleration.\n- **Reference-counted GC** - I manage memory deterministically. I release resources when they leave scope.\n\nI have documented my complete architecture in [docs\u002FNANOISA.md](docs\u002FNANOISA.md).\n\n## Formal Verification\n\nMy core semantics, which I call NanoCore, are mechanically proved in Coq. I use zero axioms.\n\n- **Type Soundness** - I have proved that well-typed programs do not get stuck.\n- **Determinism** - I have proved that evaluation produces exactly one result.\n- **Semantic Equivalence** - I have proved that my big-step and small-step semantics agree.\n\nMy proved subset includes integers, booleans, strings, arrays, records, variants, pattern matching, closures, recursion, and mutable variables. I explain this further in [formal\u002FREADME.md](formal\u002FREADME.md).\n\n```bash\ncd formal\u002F && make    # Build all proofs (requires Rocq Prover >= 9.0)\n```\n\n## IDE & Debugger Support\n\nI ship a Language Server (`bin\u002Fnanolang-lsp`) and a Debug Adapter (`bin\u002Fnanolang-dap`) for IDE integration.\n\n```bash\nmake lsp   # Build bin\u002Fnanolang-lsp  (hover, go-to-definition, completion, diagnostics)\nmake dap   # Build bin\u002Fnanolang-dap  (breakpoints, step-through, variable inspection)\n```\n\nA VS Code extension is provided in `editors\u002Fvscode\u002F`. It wires the LSP and DAP servers automatically.\n\n```bash\n# Compile to native C (default)\n.\u002Fbin\u002Fnanoc program.nano -o program\n\n# Compile to WebAssembly (emits program.wasm + program.wasm.map source map)\n.\u002Fbin\u002Fnanoc program.nano --target wasm -o program.wasm\n\n# Other backends\n.\u002Fbin\u002Fnanoc program.nano --target llvm  -o program.ll   # LLVM IR\n.\u002Fbin\u002Fnanoc program.nano --target ptx   -o program.ptx  # CUDA PTX\n.\u002Fbin\u002Fnanoc program.nano --target riscv -o program.s    # RISC-V assembly\n\n# Sign and verify WASM modules\n.\u002Fbin\u002Fnanoc sign   program.wasm   # Signs with ~\u002F.nanoc\u002Fsigning.key\n.\u002Fbin\u002Fnanoc verify program.wasm   # Verifies embedded Ed25519 signature\n\n# Export documentation from triple-slash comments\n.\u002Fbin\u002Fnanoc program.nano --doc-md -o program.md\n```\n\n## Building & Testing\n\n```bash\nmake build          # Build my compiler (bin\u002Fnanoc)\nmake lsp            # Build my language server (bin\u002Fnanolang-lsp)\nmake dap            # Build my debugger (bin\u002Fnanolang-dap)\nmake vm             # Build my VM backend (bin\u002Fnano_virt, bin\u002Fnano_vm, bin\u002Fnano_cop, bin\u002Fnano_vmd)\nmake test           # Run my full test suite\nmake test-vm        # Run my tests through the NanoVM backend\nmake test-quick     # Run my quick language tests\nmake examples       # Build my examples\n```\n\n## Examples & Interactive Tools\n\n**Web Playground** (I recommend this for learning my syntax):\n```bash\n.\u002Fbin\u002Fnanoc examples\u002Fplayground\u002Fplayground_server.nano -o bin\u002Fplayground\n.\u002Fbin\u002Fplayground  # Open http:\u002F\u002Flocalhost:8080\n```\n\n**Examples Browser** (This requires SDL2):\n```bash\ncd examples && make launcher\n```\n\n**Individual examples:**\n```bash\n.\u002Fbin\u002Fnanoc examples\u002Flanguage\u002Fnl_fibonacci.nano -o fib && .\u002Ffib\n```\n\nI have categorized my games and demos in **[examples\u002FREADME.md](examples\u002FREADME.md)**.\n\n## Platform Support\n\n**I am fully supported on:**\n- Ubuntu 22.04+ (x86_64, ARM64)\n- macOS 14+ (Apple Silicon)\n- FreeBSD\n\n**Windows:** You may use me via WSL2 with Ubuntu.\n\n## For LLM Training\n\nI was designed to be written by machines.\n- **[MEMORY.md](MEMORY.md)** - My training reference for patterns and idioms.\n- **[spec.json](spec.json)** - My formal specification in machine-readable form.\n\n## Contributing\n\nI have guidelines for those who wish to contribute in **[CONTRIBUTING.md](CONTRIBUTING.md)**.\n\n## License\n\nI am released under the Apache License 2.0. See [LICENSE](LICENSE) for details.\n\n## The Totally True and Not At All Embellished History of NanoLang\n\n### The continuing adventures of Jordan Hubbard and Sir Reginald von Fluffington III\n\n> *Part 3 of an ongoing chronicle.  [← Part 2: sheme](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fsheme#the-totally-true-and-not-at-all-embellished-history-of-sheme) | [Part 4: Aviation →](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002FAviation#the-totally-true-and-not-at-all-embellished-history-of-aviation)*\n> *Sir Reginald von Fluffington III appears throughout.  He does not endorse any of it.*\n\nThe programmer had, by this point, written a text editor in bash and a Scheme interpreter in bash, and had grown accustomed to things that arguably should not exist.  He was sitting at his desk — Sir Reginald von Fluffington III occupying his preferred position on the keyboard, which was all of it — when the programmer had what he described as \"a thought\" and Sir Reginald later categorized, by aggressively ignoring it, as \"a cry for help.\"\n\n\"The problem,\" the programmer announced, to the room, to Sir Reginald, to the seventeen browser tabs he had open about formal verification, \"is ambiguity.  Every language I use is ambiguous.  You write `f(x)` and nobody knows if it's a function call or a multiplication.  You write `1 + 2 * 3` and apparently this is a source of *controversy*.  And don't get me started on implicit type coercion, which should be a war crime.\"\n\nSir Reginald blinked once.  He had heard variations of this speech before.  They usually ended with something in the repository.\n\n\"I need a language,\" the programmer said, \"that machines can write.  That has no ambiguity.  That requires tests.  That can be formally proved correct.\"  He paused, with the expression of a man who has just located a loophole in reality.  \"And since no such language exists, I will build one.\"\n\nSir Reginald pushed a pen off the desk.  Slowly.  Deliberately.  With full awareness of the implications.\n\nWhat followed was a period the programmer later called \"necessary\" and Sir Reginald filed under \"this again.\"  A grammar was designed that distinguished prefix from infix without argument.  A type system was specified with the kind of precision usually reserved for bridge construction.  A virtual machine materialized, with 178 opcodes, which the programmer described as \"minimal\" and which the number 178 suggests was anything but.\n\n\"It needs formal proofs,\" the programmer said, sometime around the fourth week.  \"In Coq.  Zero axioms.\"\n\nSir Reginald, who had been sleeping on the formal specification documents, shifted his weight slightly to cover the section on semantic equivalence.  He had learned that if he stayed on the important papers, progress was slowed.  He had also learned that this did not stop progress.  It merely made it slightly damp.\n\nThe mandatory test blocks — `shadow` functions that must accompany every function definition, without exception, or the compiler refuses to proceed — were added because the programmer was, as he put it, \"tired of code that was never tested before it was written and therefore was never tested at all.\"  When asked whether `shadow` was a strange name for a test block, the programmer replied that it was \"evocative.\"  Sir Reginald expressed no opinion.  His opinion on keywords was that they were all equally irrelevant to the procurement of tuna.\n\nThe language was named NanoLang.  It was minimal in the way that a Swiss watch is minimal: every component was necessary, the whole was smaller than it had any right to be, and explaining how it worked required considerably more time than most people had.\n\nThe language was also given a voice.  \"It speaks in first person,\" the programmer noted, reviewing the README in which the language described its own features, \"because it was designed to be written by machines, and machines should be able to parse its documentation without encountering ambiguity.\"  This was a reasonable position.  It did not make it less unsettling.\n\nSir Reginald walked across the keyboard.  Fourteen characters were appended to the type specification.  They were later identified as `jjjjjjjjjkkkk` and removed.\n\nThe formal proofs passed.  The VM ran.  The compiler compiled itself.  The programmer stared at this for a long moment in the way one stares at something one made that works, and experienced the specific species of pride that comes not from elegance but from completion.\n\n\"It's done,\" he said.\n\nSir Reginald knocked the coffee off the desk.  Not out of malice.  Out of a principled refusal to allow the programmer an uncontested moment.\n\nAs of this writing, NanoLang has been used in production by exactly one person, who also wrote it.  Sir Reginald continues to withhold his endorsement across all four projects, citing \"procedural concerns,\" \"insufficient tuna,\" \"a general atmosphere of hubris,\" and, most recently, \"aviation.\"\n\n","# NanoLang\n\n[![CI](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg)](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Factions\u002Fworkflows\u002Fci.yml)\n![License](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-Apache%202.0-blue.svg)\n![Bootstrap](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fbootstrap-100%25%20self--hosting-success.svg)\n\n**我是一种极简的编程语言，专为机器编写、人类阅读而设计。我要求必须编写测试，采用无歧义的语法，并且核心语义经过形式化证明。**\n\n当你需要原生性能时，我可以编译成 C 语言；同时，我也提供自己的虚拟机 NanoISA，它将危险的外部调用隔离在独立进程中。我的核心语义使用 Coq 工具，在零公理的基础上进行了机械化证明。\n\n## 文档\n\n**→ [用户指南](https:\u002F\u002Fjordanhubbard.github.io\u002Fnanolang\u002F) ←** - 我提供了一个包含可运行示例的教程，建议你从这里开始。\n\n**其他资源：**\n- [快速入门](docs\u002FGETTING_STARTED.md) - 关于我开发环境的简要介绍。\n- [快速参考](docs\u002FQUICK_REFERENCE.md) - 我的语法概览。\n- [语言规范](docs\u002FSPECIFICATION.md) - 我完整的技术定义。\n- [NanoISA 虚拟机架构](docs\u002FNANOISA.md) - 我的虚拟机结构说明。\n- [形式化验证](formal\u002FREADME.md) - 我的 Coq 证明集。\n- [全部文档](docs\u002FDOCS_INDEX.md) - 我所有文档的索引。\n\n## 快速开始\n\n```bash\n# 克隆并构建\ngit clone https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang.git\ncd nanolang\nmake build\n\n# 创建 hello.nano\ncat > hello.nano \u003C\u003C 'EOF'\nfn greet(name: string) -> string {\n    return (+ \"Hello, \" name)\n}\n\nshadow greet {\n    assert (== (greet \"World\") \"Hello, World\")\n}\n\nfn main() -> int {\n    (println (greet \"World\"))\n    return 0\n}\n\nshadow main { assert true }\nEOF\n\n# 编译并运行\n.\u002Fbin\u002Fnanoc hello.nano -o hello\n.\u002Fhello\n```\n\n**BSD 用户：** 请使用 `gmake` 代替 `make`。\n\n## 我的特点\n\n- **形式化证明的语义** - 我已在 Coq 中证明了类型安全性、进展性、确定性和语义等价性，且未使用任何公理。\n- **NanoISA 虚拟机** - 我内置一个基于栈的虚拟机，拥有 178 条指令。它可以将 FFI 调用隔离到子进程中，并能以守护进程方式运行。\n- **自动引用计数内存管理（ARC）** - 我使用零开销的引用计数机制，无需手动调用 `free()`。\n- **机器主导的优化** - 我会自我剖析并在自动化循环中应用优化策略。此外，在代码生成之前，我还会对抽象语法树进行常量折叠和死代码消除。\n- **多目标编译** - 我可以编译成 C 语言以获得原生性能，也可以输出 WebAssembly (`--target wasm`)、LLVM IR (`--target llvm`)、PTX\u002FCUDA (`--target ptx`) 或 RISC-V 汇编 (`--target riscv`)。每个 WASM 输出都会附带 source map 文件，并可用 Ed25519 签名。\n- **代数效应** - 我支持带有类型、可恢复的效应，通过 `effect`、`perform` 和 `handle` 实现。副作用是显式的，并且可以组合使用。\n- **异步\u002F等待** - 我会在编译时将 `async fn` 和 `await` 降级为 CPS 状态机。\n- **双重记法** - 我既支持前缀表示法 `(+ a b)`，也支持中缀表示法 `a + b`。我的前缀调用是无歧义的。\n- **丰富的模式匹配** - 我支持匹配守卫（`Ok(v) if v > 0 =>`）、或模式（`| A | B =>`）、通配符 `_`，以及穷尽性检查。\n- **强制测试** - 如果没有为函数提供 `shadow` 测试块，我将拒绝编译该函数。\n- **类型推断** - 我使用 Hindley-Milner 类型推断算法。当类型明确时，显式注解是可选的（例如 `let x = 42`）。\n- **F 字符串和管道操作符** - 我支持 `f\"Hello, {name}!\"` 字符串插值，以及 `x |> f |> g` 管道语法。\n- **C 互操作性** - 我通过模块与 C 语言通信。为了保护自身，我可以将这些调用隔离到独立进程中。\n- **VS Code 扩展** - 我提供语言服务器、调试适配器协议服务器，以及打包好的 `.vsix` 扩展，支持语义高亮、保存时格式化和任务集成。\n- **Web 演示平台** - 我内置了一个基于浏览器的 CodeMirror 6 编辑器，支持分享永久链接和实时评估。\n\n## 语言概览\n\n```nano\n# 变量 — 默认不可变，类型注解在可推断时可省略\nlet x: int = 42\nlet y = \"hello\"            # 类型被推断为 string\nlet mut counter: int = 0\n\n# 函数必须附带 shadow 测试\nfn add(a: int, b: int) -> int {\n    return (+ a b)\n}\n\nshadow add {\n    assert (== (add 2 3) 5)\n}\n\n# F 字符串插值\nlet msg = f\"Result: {(add 2 3)}\"\n\n# 管道运算符\nlet result = 5 |> add 3 |> double   # 等价于 double(add(3, 5))\n\n# 控制流\nif (> x 0) {\n    (println \"positive\")\n}\n\n# 带有守卫和或模式的模式匹配\nunion Shape { Circle { r: float }, Square { side: float }, Point {} }\nmatch shape {\n    Circle(c) if c.r > 0.0 => (println \"circle\"),\n    | Square(_) | Point(_) => (println \"other\")\n}\n\n# 结构体、枚举和泛型类型\nstruct Point { x: int, y: int }\nenum Status { Pending = 0, Active = 1 }\nlet numbers: List\u003Cint> = (List_int_new)\n(List_int_push numbers 42)\n\n# 代数效应\neffect Log { log : string -> void }\nhandle (perform Log.log \"hi\") with {\n    Log.log(msg) -> { (println msg) }\n}\n\n# 并行绑定提示\npar-let a = (compute_x)  b = (compute_y)  in (println (+ a b))\n```\n\n## NanoISA 虚拟机\n\n我提供了一种替代 C 语言编译的虚拟机方案。\n\n```bash\n# 编译为 NanoISA 字节码并运行\n.\u002Fbin\u002Fnano_virt hello.nano --run\n\n# 编译为原生二进制文件（嵌入 VM 和字节码）\n.\u002Fbin\u002Fnano_virt hello.nano -o hello\n\n# 输出原始 .nvm 字节码，然后单独执行\n.\u002Fbin\u002Fnano_virt hello.nano --emit-nvm -o hello.nvm\n.\u002Fbin\u002Fnano_vm hello.nvm\n\n# 使用 FFI 隔离运行（外部调用在独立进程中）\n.\u002Fbin\u002Fnano_vm --isolate-ffi hello.nvm\n```\n\n**架构：**\n- **178 条指令** - 我采用混合指令集的栈式架构。\n- **子进程 FFI** (`nano_cop`) - 我将外部调用运行在独立进程中。即使它们崩溃，我的主程序仍能继续运行。\n- **VM 守护进程** (`nano_vmd`) - 我可以作为持久化进程运行，以便更快启动。\n- **陷阱模型** - 我将计算与 I\u002FO 分离，这为未来的硬件加速提供了可能。\n- **引用计数垃圾回收** - 我以确定性的方式管理内存。当资源超出作用域时，我会释放它们。\n\n我在 [docs\u002FNANOISA.md](docs\u002FNANOISA.md) 中详细记录了我的完整架构。\n\n## 形式化验证\n\n我称之为 NanoCore 的核心语义已在 Coq 中得到机械化证明，且未使用任何公理。\n\n- **类型安全性** - 我已证明类型正确的程序不会陷入僵局。\n- **确定性** - 我已证明求值过程只会产生一个结果。\n- **语义等价性** - 我已证明我的大步骤语义和小步骤语义是一致的。\n\n我证明的部分涵盖了整数、布尔值、字符串、数组、记录、变体、模式匹配、闭包、递归和可变变量。更多细节请参阅 [formal\u002FREADME.md](formal\u002FREADME.md)。\n\n```bash\ncd formal\u002F && make    # 构建所有证明（需 Rocq Prover >= 9.0）\n```\n\n## IDE与调试器支持\n\n我提供了一个语言服务器（`bin\u002Fnanolang-lsp`）和一个调试适配器（`bin\u002Fnanolang-dap`），用于IDE集成。\n\n```bash\nmake lsp   # 构建 bin\u002Fnanolang-lsp  （悬停提示、跳转到定义、补全、诊断）\nmake dap   # 构建 bin\u002Fnanolang-dap  （断点、单步执行、变量检查）\n```\n\n在 `editors\u002Fvscode\u002F` 目录下提供了一个VS Code扩展，它可以自动连接LSP和DAP服务器。\n\n```bash\n# 编译为原生C代码（默认）\n.\u002Fbin\u002Fnanoc program.nano -o program\n\n# 编译为WebAssembly（生成 program.wasm 和 program.wasm.map 源映射文件）\n.\u002Fbin\u002Fnanoc program.nano --target wasm -o program.wasm\n\n# 其他后端\n.\u002Fbin\u002Fnanoc program.nano --target llvm  -o program.ll   # LLVM IR\n.\u002Fbin\u002Fnanoc program.nano --target ptx   -o program.ptx  # CUDA PTX\n.\u002Fbin\u002Fnanoc program.nano --target riscv -o program.s    # RISC-V汇编\n\n# 对WASM模块进行签名和验证\n.\u002Fbin\u002Fnanoc sign   program.wasm   # 使用 ~\u002F.nanoc\u002Fsigning.key 进行签名\n.\u002Fbin\u002Fnanoc verify program.wasm   # 验证嵌入的Ed25519签名\n\n# 从三斜杠注释中导出文档\n.\u002Fbin\u002Fnanoc program.nano --doc-md -o program.md\n```\n\n## 构建与测试\n\n```bash\nmake build          # 构建我的编译器（bin\u002Fnanoc）\nmake lsp            # 构建我的语言服务器（bin\u002Fnanolang-lsp）\nmake dap            # 构建我的调试器（bin\u002Fnanolang-dap）\nmake vm             # 构建我的虚拟机后端（bin\u002Fnano_virt、bin\u002Fnano_vm、bin\u002Fnano_cop、bin\u002Fnano_vmd）\nmake test           # 运行我的完整测试套件\nmake test-vm        # 通过NanoVM后端运行我的测试\nmake test-quick     # 运行我的快速语言测试\nmake examples       # 构建我的示例程序\n```\n\n## 示例与交互式工具\n\n**Web Playground**（推荐用于学习我的语法）：\n```bash\n.\u002Fbin\u002Fnanoc examples\u002Fplayground\u002Fplayground_server.nano -o bin\u002Fplayground\n.\u002Fbin\u002Fplayground  # 打开 http:\u002F\u002Flocalhost:8080\n```\n\n**示例浏览器**（需要SDL2）：\n```bash\ncd examples && make launcher\n```\n\n**单个示例：**\n```bash\n.\u002Fbin\u002Fnanoc examples\u002Flanguage\u002Fnl_fibonacci.nano -o fib && .\u002Ffib\n```\n\n我的游戏和演示程序已分类整理在 **[examples\u002FREADME.md](examples\u002FREADME.md)** 中。\n\n## 平台支持\n\n**我完全支持以下平台：**\n- Ubuntu 22.04及以上版本（x86_64、ARM64）\n- macOS 14及以上版本（Apple Silicon）\n- FreeBSD\n\n**Windows：** 您可以通过WSL2配合Ubuntu来使用我。\n\n## 用于LLM训练\n\n我被设计为由机器编写。\n- **[MEMORY.md](MEMORY.md)** - 我的模式和惯用法训练参考。\n- **[spec.json](spec.json)** - 我的正式规范，以机器可读格式呈现。\n\n## 贡献说明\n\n对于希望参与贡献的开发者，我在 **[CONTRIBUTING.md](CONTRIBUTING.md)** 中提供了相关指南。\n\n## 许可证\n\n我采用Apache License 2.0许可协议发布。详情请参阅 [LICENSE](LICENSE)。\n\n## NanoLang的真实且毫不夸张的历史\n\n### 乔丹·哈巴德与雷金纳德·冯·弗拉芬顿三世爵士的持续冒险\n\n> *连载中的第3部分。[← 第2部分：sheme](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fsheme#the-totally-true-and-not-at-all-embellished-history-of-sheme) | [第4部分：Aviation →](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002FAviation#the-totally-true-and-not-at-all-embellished-history-of-aviation)*\n> *雷金纳德·冯·弗拉芬顿三世爵士贯穿始终。他并不认可其中任何内容。*\n\n此时，这位程序员已经用Bash编写了一个文本编辑器和一个Scheme解释器，并逐渐习惯了那些按理说根本不应该存在的东西。他正坐在书桌前——雷金纳德·冯·弗拉芬顿三世爵士则占据着他最爱的位置：整个键盘——这时，程序员突然冒出一个他自称是“念头”的想法，而雷金纳德爵士则通过强硬地无视它，将其归类为“求救信号”。\n\n“问题在于，”程序员对着房间、对着雷金纳德爵士、也对着他打开的关于形式验证的十七个浏览器标签页说道，“所有我使用的语言都存在歧义。你写`f(x)`，没人知道这是函数调用还是乘法；你写`1 + 2 * 3`，居然还会引发*争议*！更别提那些该被定性为战争罪行的隐式类型转换了。”\n\n雷金纳德眨了眨眼。他以前也听过类似的话。通常，这些话最后都会以某个项目提交到代码库告终。\n\n“我需要一种能由机器编写的语言，”程序员继续说道，“一种没有任何歧义、必须通过测试、并且能够被形式化证明其正确性的语言。”他停顿了一下，脸上浮现出一种仿佛刚刚在现实中找到漏洞的表情。“既然这样的语言并不存在，那我就自己造一个。”\n\n雷金纳德缓缓地、刻意地把一支笔推下了桌面，完全清楚这一举动意味着什么。\n\n接下来发生的一切，后来被程序员称为“必要的”，而雷金纳德则把它归入了“又来了”一类。他们设计了一套语法，无需任何参数就能区分前缀和中缀运算；还制定了一套类型系统，其精确度之高，简直堪比桥梁建造的标准。随后，一台拥有178条指令的操作虚拟机诞生了——程序员称其为“极简”，但数字178却暗示着事实恰恰相反。\n\n“它还需要形式化证明，”程序员在大约第四周时说道，“用Coq来完成，而且不能有任何公理。”\n\n一直趴在形式化规范文档上打盹的雷金纳德，稍微挪动了一下身子，把有关语义等价性的那一节盖了个严实。他早就明白，只要自己赖在那些关键文件上不动，进度就会被拖慢；不过他也清楚，这并不能真正阻止进展，只会让它变得有点湿漉漉罢了。\n\n强制性的测试模块——每定义一个函数就必须配套的“shadow”函数，否则编译器绝不允许继续——之所以加入，是因为程序员如他自己所言：“受够了那些写完就从未测试过、结果也就永远没机会被测试的代码。”当有人问起为何要给测试模块取这样一个奇怪的名字时，程序员回答说：“这个名字很有意境。”至于雷金纳德爵士，则对此不置一词。在他看来，关键字什么的，对买到金枪鱼来说根本无关紧要。\n\n最终，这种语言被命名为NanoLang。它的“极简”程度，就像瑞士手表一样：每个部件都不可或缺，整体尺寸小得超乎想象，而要解释它到底是怎么工作的，所需的时间却远远超过了大多数人的承受范围。\n\n此外，NanoLang还拥有了自己的“声音”。程序员在审阅README文件时注意到，语言在描述自身特性时竟然使用第一人称：“这是因为它本来就是为机器而设计的，机器理应能在不产生歧义的情况下读懂它的文档。”这个说法倒也合情合理，只是听起来仍让人有些毛骨悚然。\n\n雷金纳德从键盘上踱步而过，十四位字符被追加到了类型规范中。后来人们才发现，那串字符原来是`jjjjjjjjjkkkk`，于是便将其移除了。\n\n形式化证明顺利通过，虚拟机运行正常，编译器甚至成功完成了自编译。程序员久久凝视着这一切，就像凝视着自己亲手做出却真的能运转的东西一样，心中涌起一种特殊的自豪感——这种自豪并非源于优雅，而是源自任务的圆满完成。\n\n“搞定了，”他说。\n\n雷金纳德把桌上的咖啡杯碰翻了——当然不是出于恶意，而是出于一种原则性的拒绝，不愿让程序员独享这份毫无争议的成功时刻。\n\n截至本文撰写之时，NanoLang仅被一个人用于生产环境，而这个人也正是它的作者。雷金纳德爵士依旧对这四个项目一概不予背书，理由包括“程序上的顾虑”、“金枪鱼供应不足”、“弥漫着的狂妄气氛”，以及最近提出的“航空事业”。","# NanoLang 快速上手指南\n\nNanoLang 是一门专为“机器编写、人类阅读”设计的极简编程语言。它拥有无歧义的语法、强制的测试机制，并且核心语义已通过 Coq 形式化验证（零公理）。支持编译为 C、WebAssembly、LLVM IR 等多种后端，并提供独立的虚拟机（NanoISA）。\n\n## 环境准备\n\n### 系统要求\nNanoLang 在以下平台上获得完全支持：\n- **Linux**: Ubuntu 22.04+ (x86_64, ARM64)\n- **macOS**: macOS 14+ (Apple Silicon)\n- **BSD**: FreeBSD\n- **Windows**: 建议通过 WSL2 (Ubuntu) 使用\n\n### 前置依赖\n确保系统已安装以下基础工具：\n- `git`\n- `make` (BSD 用户请使用 `gmake`)\n- C 编译器 (如 `gcc` 或 `clang`)，用于构建编译器本身及生成原生代码\n- (可选) `Rocq Prover` (>= 9.0)，仅当你需要构建或验证形式化证明时需要\n\n## 安装步骤\n\n通过源码克隆并构建项目：\n\n```bash\n# 克隆仓库\ngit clone https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang.git\ncd nanolang\n\n# 构建编译器及相关工具\nmake build\n```\n\n*注：若需构建语言服务器 (LSP) 或调试器 (DAP)，可分别运行 `make lsp` 和 `make dap`。*\n\n## 基本使用\n\n### 1. 创建第一个程序\n创建一个名为 `hello.nano` 的文件。NanoLang 强制要求为每个函数提供 `shadow` 测试块。\n\n```bash\ncat > hello.nano \u003C\u003C 'EOF'\nfn greet(name: string) -> string {\n    return (+ \"Hello, \" name)\n}\n\n\u002F\u002F 强制测试块：验证函数行为\nshadow greet {\n    assert (== (greet \"World\") \"Hello, World\")\n}\n\nfn main() -> int {\n    (println (greet \"World\"))\n    return 0\n}\n\n\u002F\u002F main 函数也需要测试占位\nshadow main { assert true }\nEOF\n```\n\n### 2. 编译与运行\n使用 `nanoc` 将代码编译为原生二进制文件并执行：\n\n```bash\n# 编译\n.\u002Fbin\u002Fnanoc hello.nano -o hello\n\n# 运行\n.\u002Fhello\n```\n\n**预期输出：**\n```text\nHello, World\n```\n\n### 3. 使用虚拟机模式 (可选)\n如果不希望编译为原生代码，也可以直接在 NanoISA 虚拟机上运行：\n\n```bash\n# 直接运行源码\n.\u002Fbin\u002Fnano_virt hello.nano --run\n\n# 或编译为包含 VM 的独立二进制文件\n.\u002Fbin\u002Fnano_virt hello.nano -o hello_vm\n.\u002Fhello_vm\n```\n\n### 4. 其他编译目标\nNanoLang 支持多目标编译，例如生成 WebAssembly：\n\n```bash\n# 编译为 WebAssembly (同时生成 source map)\n.\u002Fbin\u002Fnanoc hello.nano --target wasm -o hello.wasm\n```","某嵌入式安全团队正在为物联网网关开发高可靠性的固件逻辑，需同时满足机器自动生成代码与人工审计的双重标准。\n\n### 没有 nanolang 时\n- **测试遗漏风险高**：开发人员常因赶进度忘记编写单元测试，导致边界条件错误流入生产环境。\n- **内存管理易出错**：在 C 语言中手动管理内存极易引发泄漏或越界访问，调试耗时且难以复现。\n- **形式化验证缺失**：核心逻辑缺乏数学层面的正确性证明，面对安全审计时只能依赖经验而非确凿证据。\n- **LLM 生成代码不可控**：大模型生成的代码语法模糊、风格不一，人工清洗和修正成本极高。\n\n### 使用 nanolang 后\n- **强制测试机制**：nanolang 拒绝编译未附带 `shadow` 测试块的函数，从源头杜绝了无测试代码上线。\n- **零开销自动内存管理**：利用 ARC 机制自动处理资源释放，彻底消除了手动 `free()` 带来的安全隐患。\n- **内核语义形式化证明**：基于 Coq 的零公理证明体系为类型安全和确定性提供了数学级背书，轻松通过严苛审计。\n- **专为 LLM 设计的语法**：无歧义的前缀\u002F中缀双记法让大模型能精准生成可执行代码，大幅降低人工修正工作量。\n\nnanolang 通过强制测试、形式化验证及机器友好的语法设计，将固件开发从“依赖人工细心”升级为“数学保证可靠”。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fjordanhubbard_nanolang_3ce3245a.png","jordanhubbard","Jordan Hubbard","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fjordanhubbard_58d8770e.jpg","I wrote some code once","NVIDIA","Santa Cruz","jordanhubbard@gmail.com",null,"https:\u002F\u002Fen.wikipedia.org\u002Fwiki\u002FJordan_Hubbard","https:\u002F\u002Fgithub.com\u002Fjordanhubbard",[83,87,91,95,99,103,107,111,114,118],{"name":84,"color":85,"percentage":86},"C","#555555",83.1,{"name":88,"color":89,"percentage":90},"Shell","#89e051",5.6,{"name":92,"color":93,"percentage":94},"Rocq Prover","#d0b68c",3.9,{"name":96,"color":97,"percentage":98},"Python","#3572A5",2.7,{"name":100,"color":101,"percentage":102},"Gnuplot","#f0a9f0",1.4,{"name":104,"color":105,"percentage":106},"JavaScript","#f1e05a",1,{"name":108,"color":109,"percentage":110},"OCaml","#ef7a08",0.8,{"name":112,"color":113,"percentage":110},"C++","#f34b7d",{"name":115,"color":116,"percentage":117},"HTML","#e34c26",0.3,{"name":119,"color":120,"percentage":121},"CSS","#663399",0.2,586,21,"2026-04-06T21:32:19","Apache-2.0",4,"Linux (Ubuntu 22.04+), macOS 14+ (Apple Silicon), FreeBSD, Windows (仅限 WSL2)","非必需。支持通过 --target ptx 编译为 CUDA PTX 代码，但未指定具体的显卡型号、显存或 CUDA 版本要求。","未说明",{"notes":131,"python":132,"dependencies":133},"该工具主要使用 C\u002FC++ 构建，不依赖 Python。核心功能包括转译为 C 语言、自定义虚拟机 (NanoISA) 以及形式化验证（需单独安装 Rocq Prover）。Windows 用户需通过 WSL2 运行。若需运行图形界面示例，需安装 SDL2 库。","不需要",[134,135,136,137,138],"C 编译器 (用于构建和 C 后端)","Make \u002F GMake (BSD 用户)","Rocq Prover (Coq) >= 9.0 (仅用于形式化验证)","SDL2 (仅用于运行示例启动器)","Git",[14,35],[141,142,143,144,145,146],"llm","new-language-design","thought-exercise","vibe-coding","domain-ai","domain-lang","2026-03-27T02:49:30.150509","2026-04-11T15:15:14.354232",[150,155,160,165,170,174],{"id":151,"question_zh":152,"answer_zh":153,"source_url":154},29477,"NanoLang 解决了 LLM 在使用其他编程语言时遇到的哪些具体问题？","NanoLang 主要解决以下四个核心问题：\n1. **歧义性**：现有语言（如 Python、JavaScript）通常有 3-5 种方式实现同一功能（例如字符串格式化或函数定义），导致 LLM 浪费上下文去选择，且生成的代码风格不一致。\n2. **运算符优先级复杂**：人类和 LLM 都容易在复杂的优先级表（如 `a + b * c`）中出错，NanoLang 简化了这一点。\n3. **测试不足或不透明**：LLM 生成的代码常包含隐蔽错误，而现有语言的测试往往是可选的或位于单独文件中，导致上下文丢失。NanoLang 将测试紧密集成。\n4. **类型推断不透明**：现有语言的类型推断过程对 LLM 来说是个黑盒，NanoLang 提供了更清晰的类型系统。\n简而言之，NanoLang 旨在成为一种“无歧义”的语言，让 LLM 能生成一致、易验证的代码。","https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fissues\u002F6",{"id":156,"question_zh":157,"answer_zh":158,"source_url":159},29478,"为什么 NanoLang 虚拟机中 `print` 函数的行为像 `println`（自动换行）？","这是一个已修复的 Bug。根本原因是虚拟机字节码编译器 (`src\u002Fnanovirt\u002Fcodegen.c`) 对 `print` 和 `println` 都发射了相同的 `OP_PRINT` 操作码，而该操作码的处理程序总是追加换行符。\n**解决方案**：\n该问题已在提交 `85ad3dab3ae4cf056798276c1d029ab86d0aa0a8` 中修复。修复内容包括：\n1. 新增了 `OP_PRINTLN` 操作码 (0xA4)。\n2. 编译器现在区分发射：`(println ...)` 发射 `OP_PRINTLN`，`(print ...)` 发射 `OP_PRINT`。\n3. 虚拟机处理程序更新：`OP_PRINT` 不换行，`OP_PRINTLN` 换行。\n请确保使用包含此修复的最新版本。","https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fissues\u002F9",{"id":161,"question_zh":162,"answer_zh":163,"source_url":164},29479,"NanoLang 是否支持隐式返回（即表达式作为函数返回值，无需 `return` 关键字）？","是的，该功能已实现。现在函数可以使用最后一个表达式作为隐式返回值，无需显式的 `return` 关键字。\n**示例用法**：\n```nano\n# 表达式直接返回\nfn double(x: int) -> int { (* x 2) }\n\n# 条件表达式返回\nfn example(x: int) -> string {\n    if (> x 10) {\n        \"big\"\n    } else {\n        \"small\"\n    }\n}\n```\n**注意**：\n- 显式的 `return` 关键字仍然有效（向后兼容）。\n- 该特性在 Stage 1 (C 编译器) 和 Stage 3 (自托管编译器) 中均有效。\n- `match` 表达式作为最后语句时被故意排除，因为 match 分支需要使用显式 `return` 以确保正确的类型检查。","https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fissues\u002F8",{"id":166,"question_zh":167,"answer_zh":168,"source_url":169},29480,"为什么 NanoLang 使用 `shadow` 关键字来进行编译时测试，而不是 `test`？","`shadow` 关键字的选择是因为测试块会“遮蔽”（shadow）其目标函数。在 NanoLang 的设计中，测试块与它们测试的函数同名，从而在编译时替换或遮蔽原始定义，用于验证逻辑。这种设计强调了测试与被测代码之间的紧密绑定关系，而不仅仅是标记为“测试”。","https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fissues\u002F7",{"id":171,"question_zh":172,"answer_zh":173,"source_url":169},29481,"NanoLang 中函数调用时使用括号 `(f x)` 和不使用括号 `f x` 有什么区别？","虽然语法上两者都允许，但官方规范 (`docs\u002FCANONICAL_STYLE.md`) 强烈推荐使用带括号的形式 `(f x y)`。\n**原因**：\n1. **LLM 友好性**：统一使用括号可以减少歧义，帮助语言模型更准确地生成代码，符合 NanoLang“只做一件事”的哲学。\n2. **历史 Bug 差异**：在旧版本中，不带括号的裸语句形式（如 `println \"Hello\"`）曾存在行为不一致的 Bug（例如 `println` 不换行），而带括号的形式 `(println \"Hello\")` 行为始终正确。虽然相关 Bug 已修复，但为了保持风格一致性和避免潜在解析歧义，建议始终使用括号。",{"id":175,"question_zh":176,"answer_zh":177,"source_url":154},29482,"NanoLang 作为一种转译语言（Transpiled Language），其核心设计理念是什么？","NanoLang 的核心设计理念是构建一个“语言栈”，其中上层语言完全了解下层语言的优缺点。它类似于一个非常高级的 C 预处理器。\n**优势**：\n- **利用强项，隐藏弱点**：上层语言可以利用底层语言的性能优势，同时通过语法限制隐藏其复杂性和易错点。\n- **稳定性**：允许底层语言保持不变并长期兼容，而上层语言可以演进。\n- **LLM 优化**：通过消除现有语言中的多种写法（歧义性），使 LLM 生成的代码更加标准化和易于验证。",[179,184,189,194,199,204,209,214,219,224,229,234,239,244,249,254,259,264,269,274],{"id":180,"version":181,"summary_zh":182,"released_at":183},198330,"v3.3.5","## NanoLang v3.3.5\n\n### 统计\n- **v3.3.4 以来的提交数**: 17\n- **测试状态**: 🎉 所有测试均已通过！\n\n### 变更\n\n- 功能：Forth REPL + 修复发布同步问题\n- 文档：更新 v3.3.4 发布的 CHANGELOG\n- 重构：使发布脚本默认为非交互式\n- 杂项：在 Claude Code MCP 工具权限中允许 list_workflows\n- 修复：effects 测试 — mut 变量及缺失的 shadow 存根\n- 功能：添加 FIG-Forth 解释器示例（标记线程型，约 2500 行）\n- 功能：泛型函数单态化（函数签名中的类型变量 T）\n- 功能：--doc-md 标志 — 从三斜杠注释导出 GFM Markdown 文档\n- CI：多后端矩阵 — 并行编译所有 5 种后端的测试\n- 功能（游乐场）：CodeMirror 6 编辑器、分享永久链接、AgentFS 托管\n- 功能：nanolang 交互式游乐场（浏览器编辑器 + 求值服务器，端口 8792）\n- 功能（VS Code）：完整的可安装 .vsix — 语义标记、保存时格式化、任务、打包\n- 功能：nanolang 的 VS Code 扩展（LSP、语法高亮、保存时格式化）\n- 功能（REPL）：热重载 — :load、:save、:reload 命令\n- 功能：REPL 热重载 (:reload \u003C模块>) — 无需重启即可实时重新加载模块\n\n### 链接\n- [完整变更日志](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.3.4...v3.3.5)\n- [文档](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)\n\n---\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.3.4...v3.3.5","2026-04-02T23:35:19",{"id":185,"version":186,"summary_zh":187,"released_at":188},198331,"v3.3.4","- docs: 更新 v3.3.4 版本的 CHANGELOG\n- refactor: 将发布脚本默认设置为非交互式\n- chore: 在 Claude Code MCP 工具权限中允许 list_workflows 操作\n- fix: 效应测试 — mut 变量问题及缺失的 shadow 存根\n- feat: 添加 FIG-Forth 解释器示例（标记线程型，约 2500 行）\n- feat: 泛型函数单态化（函数签名中的类型变量 T）\n- test: 添加 DWARF 调试信息测试（feat\u002Fdwarf-debug-info）\n- test: 添加标准库基准测试套件\n- feat: match 中的或模式、标准库文档站点、match 完整性测试\n- feat: DWARF 调试信息生成（LLVM IR 和 RISC-V 后端的 --debug\u002F-g 标志）\n- fix: 移除重复的 AST_EFFECT_OP 情况，并保护未完成的 SIMD 块\n- fix: 解决夜间分支合并导致的 CI 编译错误\n- feat: nanolang 基准测试套件 — 优化器比较 + 回归跟踪\n- fix: 从基准测试作业中移除过时的 validate-topology 依赖\n- feat: REPL 持久化历史记录及会话保存\u002F加载\n- chore: 将 async\u002Fcoroutine\u002Fpretty_printer 测试标记为预期失败，直至分支合并\n- fix: merge-branches.sh 使用 git branch -r 进行存在性检查\n- chore: 添加 merge-branches.sh 演练脚本\n- fix: 解决主构建失败问题 — 源文件缺失、riscv bug、tidy\u002Fformat 冲突\n- feat: WASM SIMD128 自动向量化 — 为数值模式发出 v128 指令\n- feat: WASM SIMD128 自动向量化用于数值数组循环\n- feat: 基于属性的测试预言机（@property、--proptest、QuickCheck 风格的缩减）\n- feat: 基于属性的测试预言机（@property、--proptest、QuickCheck 风格的缩减）\n- feat: REPL 脚本功能 — nano --script \u003Cfile> 和 nano -e '\u003Cexpr>' 模式\n- feat: RISC-V 汇编后端（riscv_backend.c）\n- feat: nano-docs 静态站点生成器 — 从 userguide\u002F**\u002F*.md 生成文档 HTML\n- feat: nano-bench 微基准测试框架（--bench 模式）\n- feat: nano-docs — nanolang 的文档搜索命令行工具\n- feat: 类型检查器泛型 — 每次调用时进行类型变量统一并检查一致性\n- feat: nano-fmt — 符合规范的代码格式化工具，支持 LSP textDocument\u002Fformatting 接口\n- ci: nano-fmt 样式检查 + 异步通道（channel.h\u002Fc、stdlib\u002Fasync.nano）\n- feat: agentOS 类型安全共享内存环形缓冲区库（ringbuf.h）\n- feat: nano 到 C 的转译器后端（--target c）\n- feat: nano 到 C 的转译器 — nanoc --target c 生成干净的 C99 代码，适用于 seL4 PD 嵌入\n- feat: nano 到 C 的转译器后端（c_backend.c）\n- feat: 标准库 — Option、Result、List、Map、Set、Iterator、String\n- feat: LLVM IR 后端 — nanoc --llvm 生成 .ll 文件，用于 ARM64\u002Fx86-64 原生代码\n- feat: LSP 语义标记（textDocument\u002FsemanticTokens\u002Ffull）\n- feat: LSP hover 提示显示行多态记录和类型方案泛化\n- feat(lsp): hover 显示行多态 HM 类型\n- feat(pkg-registry): nano 包注册中心 — HTTP 服务器、nanoc 包管理 CLI、semver 解析、lockfile\n- feat: nano 包注册中心 + nanoc install\u002Fpublish 子命令\n- feat: 分代 GC — 三色标记清除周期回收（Ba","2026-04-02T21:31:57",{"id":190,"version":191,"summary_zh":192,"released_at":193},198332,"v3.3.3","## 变更内容\n\n### 新增\n- **完整用户指南**：此前空置的第3部分所有27个模块页面现已填充分文档——包括API参考、代码示例以及文本处理（正则表达式、日志、StringBuilder）、数据格式（JSON、SQLite）、网络通信（curl、http_server、libuv）、图形渲染（SDL、SDL_image、SDL_mixer、SDL_ttf）、OpenGL（GLFW、GLEW、GLUT）、游戏开发（event、vector2d、bullet、简单游戏教程）、终端UI（ncurses）、测试（proptest、coverage、最佳实践）和配置（preferences）等方面的最佳实践。\n- **API参考完善**：StringBuilder、coverage和vector2d的API参考页面现已完整记录所有公共函数（此前显示“无公共函数”）。\n\n### 修复\n- 与v3.3.2标准库重构保持一致：`stringbuilder.md`针对新的`sb_*` API进行了重写；`regex.md`更新了导入路径；`generate_all_api_docs.sh`修正了模块路径。\n- `userguide_build_html`：将HashMap（其模块级pub fn无法从常规函数中调用）替换为内联的`get_theme_color()`查找。\n- 修复了已存在的`StringBuilder_to_string`阴影测试缺陷：在不可变语义下会丢弃`append`的返回值。","2026-03-28T22:57:02",{"id":195,"version":196,"summary_zh":197,"released_at":198},198333,"v3.3.2","## NanoLang v3.3.2\n\n### 统计\n- **v3.3.1 以来的提交数**: 16\n- **测试状态**: 🎉 所有测试均已通过！\n\n### 变更\n\n- 重构：移除冗余的 stdlib\u002Fstd、std\u002Fjson，以及未使用的 stdlib 文件\n- 重构：废弃 stdlib\u002Fregex.nano，改用 std\u002Fregex\u002Fregex.nano\n- 修复：将公共 API 标记为 pub fn，以便 API 文档生成器能够正确识别\n- 修复：解决因 modernize-tests 提交引入的三个 CI 失败问题\n- 文档：补充了 27 个用户指南占位页和 3 个空白的 API 文档\n- 修复：在 test_dynamic_arrays.nano 中恢复 array_pop 调用的显式类型注解\n- 重构：将所有测试文件更新为当前的 NanoLang 语法\n- 修复：解决 stage3 引导编译中的阻塞问题\n- 修复：使 Concurrency CI 作业中 libdispatch-dev 的安装变为可选\n- 修复：在 ffi_loader_find_library 中添加 out_path 的空值检查\n- 修复：在 nl_walkdir_rec 中使用 memcpy 替代 snprintf，以避免格式化截断\n- 修复：抑制 eval_io.c 中 GCC 的格式化截断误报\n- 修复：对类型检查器进行空值检查，并修复正则表达式测试中私有 API 的使用问题\n- 修复：更新 .nano 文件，使其使用公共的 fs.nano API\n- 修复：修正 CI 失败——类型检查器退出码及 module.c 截断问题\n- 修复：当当前工作目录不是仓库根目录时，正确解析模块路径\n\n### 链接\n- [完整变更日志](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.3.1...v3.3.2)\n- [文档](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)\n\n---\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.3.1...v3.3.2","2026-03-28T20:08:02",{"id":200,"version":201,"summary_zh":202,"released_at":203},198334,"v3.3.1","## NanoLang v3.3.1\n\n### 统计信息\n- **v3.3.0 以来的提交数**: 11\n- **测试状态**: 🎉 所有测试均已通过！\n\n### 变更\n\n- 修复：内置函数注册表中，`array_remove_at` 的返回类型由 `void` 改为 `array`\n- 新特性：添加 `@pure`\u002F`@associative` 注解、`frozen let` 和 `par` 块 — 配合 C 编译器及 `.nano` 源文件使用\n- 修复：解决 `-Werror` 构建失败问题（`fread`\u002F`system`\u002F`fgets` 未使用返回值、`strncpy` 截断）\n- 性能优化：自动向量化 — 使用 `restrict` 指针、对齐分配，并在 `map`\u002F`fold` 中为纯 Lambda 表达式提供快速路径\n- 文档更新：被动并行性设计 — 提供 8 种语言扩展以实现自动并发\n- 文档更新：自动向量化分析 — 在 `eval.c`、转译器和 `DynArray` 中识别 SIMD 机会\n- 新特性：支持带自动类型转换的 f-string 插值\n- 新特性：为模块作用域的可变原语添加 Option A 分派封装\n- 修复：解决所有 CI 失败问题\n- 修复：为 `nl_forth_interpreter_vm` 添加显式 Makefile 规则\n- 文档更新：移除 37 篇过时的规划与产物相关文档\n\n### 链接\n- [完整变更日志](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.3.0...v3.3.1)\n- [文档](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)\n\n---\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.3.0...v3.3.1","2026-03-27T20:44:31",{"id":205,"version":206,"summary_zh":207,"released_at":208},198335,"v3.3.0","## NanoLang v3.3.0\n\n### 统计信息\n- **自 v3.2.0 以来的提交数**: 7\n- **测试状态**: 🎉 所有测试均已通过！\n\n### 变更\n\n- 修复：使测试使用 nanoc_c；移除调试用的测试文件\n- 新特性：完成路线图中的功能 1–11，并实现自托管流水线\n- 修复：预先用 0.0 填充模块级别的浮点数组，以设置 ELEM_FLOAT 类型\n- 新特性：在 sdl_boids 和 sdl_falling_sand 中添加模块分派及并行物理计算\n- 修复：解决 peg2 的崩溃问题、联合匹配绑定问题以及示例构建失败的问题\n- 新特性：通过 libdispatch 添加自动化的零样板并发支持\n- 新特性：添加原生 PEG 文法支持（std\u002Fpeg2）\n\n### 链接\n- [完整变更日志](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.2.0...v3.3.0)\n- [文档](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)\n\n---\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.2.0...v3.3.0","2026-03-22T16:46:27",{"id":210,"version":211,"summary_zh":212,"released_at":213},198336,"v3.1.12","## NanoLang v3.1.12\n\n### 统计信息\n- **自 v3.1.11 以来的提交数**: 9\n- **测试状态**: 🎉 所有测试均已通过！\n\n### 变更记录\n\n- 修复：加强跨平台模块依赖的自动安装机制\n- 修复：替换 `fs.c` 中路径函数的静态缓冲区；修复 `ELEM_STRUCT` 数组的垃圾回收标记问题\n- 初始计划\n- 修复：使示例代码能够正确构建 SDL\u002FNCurses\u002F网络相关的示例\n- 杂项：更新 `.gitignore` 文件，以忽略合并产生的临时文件\n- 杂项：配置 Beads 的 Dolt 服务器模式\n- 修复：修正数组广播逻辑中将浮点字面量误识别为标识符的问题\n- 更新 Claude 设置\n\n### 链接\n- [完整变更日志](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.11...v3.1.12)\n- [文档](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)\n\n---\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.11...v3.1.12","2026-03-07T23:45:54",{"id":215,"version":216,"summary_zh":217,"released_at":218},198337,"v3.1.11","## NanoLang v3.1.11\n\n### 统计信息\n- **v3.1.10 以来的提交数**: 6\n- **测试状态**: 🎉 所有测试均已通过！\n\n### 变更\n\n- 修复：解决示例构建卡死以及文档中黑底白字的样式问题\n- 修复：绕过示例和启动器中的两个 stage1 编译器 bug\n- 修复：恢复示例启动器的原始 PNG 图标\n- 新增功能：为 stage1 编译器添加模块元数据支持\n- 修复：解决 3 个已存在的 stage1 编译器失败问题\n- 修复：消除自托管编译器中的 152+ 条 `-Wparentheses-equality` 警告\n\n### 链接\n- [完整变更日志](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.10...v3.1.11)\n- [文档](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)\n\n---\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.10...v3.1.11","2026-03-05T08:07:44",{"id":220,"version":221,"summary_zh":222,"released_at":223},198338,"v3.1.10","## NanoLang v3.1.10\n\n### 统计信息\n- **v3.1.9 以来的提交数**: 1\n- **测试状态**: 🎉 所有测试均已通过！\n\n### 变更\n- 修复：解决示例项目构建失败的问题\n\n### 链接\n- [完整变更日志](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.9...v3.1.10)\n- [文档](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)\n\n---\n\n**完整变更日志**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.9...v3.1.10","2026-03-02T07:48:40",{"id":225,"version":226,"summary_zh":227,"released_at":228},198339,"v3.1.9","## NanoLang v3.1.9\n\n### Statistics\n- **Commits since v3.1.8**: 1\n- **Test Status**: NSType checking failed\n\n### Changes\n\n- docs: update origin story closing to reference all four projects\n\n### Links\n- [Full Changelog](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.8...v3.1.9)\n- [Documentation](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)\n\n---\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.8...v3.1.9\n","2026-03-02T05:47:11",{"id":230,"version":231,"summary_zh":232,"released_at":233},198340,"v3.1.8","## NanoLang v3.1.8\n\n### Statistics\n- **Commits since v3.1.7**: 1\n- **Test Status**: NSType checking failed\n\n### Changes\n\n- docs: add origin story with provenance preamble and cross-references\n\n### Links\n- [Full Changelog](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.7...v3.1.8)\n- [Documentation](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)\n\n---\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.7...v3.1.8\n","2026-03-02T00:37:06",{"id":235,"version":236,"summary_zh":237,"released_at":238},198341,"v3.1.7","## What's Changed\n\n### Added\n- **Forth SEE word with NanoISA decompilation** — `SEE \u003Cword>` now decompiles any built-in Forth word down to the NanoISA bytecode that implements it inside the interpreter. New `modules\u002Fforth_see\u002F` module provides a self-contained NVM file reader and block-level disassembler. Built-in words show an annotated NanoISA listing; user-defined words show their Forth body; control words (if, do, loop) note they are handled in exec_tokens.\n- **SDL Forth IDE** (`make -C examples forth-ide`) — split-pane SDL window with an interactive Forth REPL on the right (full PTY-backed terminal emulator via libtmt) and a file chooser on the left that loads `.fs` files directly into the REPL. New `modules\u002Fpty\u002F` and `modules\u002Fsdl_term\u002F` modules are reusable components.\n- **ANS Forth test suite** (280 tests) — `make -C examples test-forth` runs a comprehensive FIG Forth 83 \u002F ANS subset test suite using the standard `T{ ... -> ... }T` harness. Test files live in `examples\u002Flanguage\u002Fforth\u002F`.\n- **Interactive REPL** (`make -C examples run-forth`) — readline-based Forth REPL with history.\n- **Implicit function return values** — functions can return the value of their final expression without an explicit `return` statement.\n\n### Fixed\n- SDL Forth IDE file path handling for `include` commands\n- `+loop` negative step termination condition\n- Floored division and symmetric remainder semantics in Forth arithmetic","2026-03-02T00:00:17",{"id":240,"version":241,"summary_zh":242,"released_at":243},198342,"v3.1.6","## What's Changed\n\n### Fixed\n- Eliminate const-qualifier warnings across build pipeline\n\nThe self-hosted transpiler mapped NanoLang's `string` type to C's `char*` while the C reference transpiler used `const char*`. This mismatch caused hundreds of `-Wdiscarded-qualifiers` warnings. Fixed by making all string type mappings consistently use `const char*` across both compilers, the bootstrap hashmap runtime, and module forward declarations.\n\nAlso fixes unused variables, removes unused function parameters in self-hosted compiler code, suppresses shadow test warnings in nanovirt test harness, and fixes the check_shadow_tests.sh regex.\n\n---\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.5...v3.1.6","2026-02-25T08:13:31",{"id":245,"version":246,"summary_zh":247,"released_at":248},198343,"v3.1.5","## 🎉 NanoLang v3.1.5\n\n### 📊 Statistics\n- **Commits since v3.1.4**: 1\n- **Test Status**: 🎉 All tests passed!\n\n### 📝 Changes\n\n- feat(editor): add inline source editor with text input and syntax highlighting\n\n### 🔗 Links\n- [Full Changelog](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.4...v3.1.5)\n- [Documentation](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)\n\n---\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.4...v3.1.5\n","2026-02-24T05:39:31",{"id":250,"version":251,"summary_zh":252,"released_at":253},198344,"v3.1.4","## 🎉 NanoLang v3.1.4\n\n### 📊 Statistics\n- **Commits since v3.1.3**: 1\n- **Test Status**: 🎉 All tests passed!\n\n### 📝 Changes\n\n- feat(launcher): add default args support for examples\n\n### 🔗 Links\n- [Full Changelog](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.3...v3.1.4)\n- [Documentation](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)\n\n---\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.3...v3.1.4\n","2026-02-24T05:31:39",{"id":255,"version":256,"summary_zh":257,"released_at":258},198345,"v3.1.3","## 🎉 NanoLang v3.1.3\n\n### 📊 Statistics\n- **Commits since v3.1.2**: 2\n- **Test Status**: 🎉 All tests passed!\n\n### 📝 Changes\n\n- fix(launcher): run from repo root so icons and source code resolve\n- docs: Update CHANGELOG for v3.1.2 release\n\n### 🔗 Links\n- [Full Changelog](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.2...v3.1.3)\n- [Documentation](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)\n\n---\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.2...v3.1.3\n","2026-02-24T03:58:51",{"id":260,"version":261,"summary_zh":262,"released_at":263},198346,"v3.1.2","## 🎉 NanoLang v3.1.2\n\n### 📊 Statistics\n- **Commits since v3.1.1**: 2\n- **Test Status**: 🎉 All tests passed!\n\n### 📝 Changes\n\n- refactor: gate verbose\u002Fdebug output behind --verbose flag\n- docs: Update CHANGELOG for v3.1.1 release\n\n### 🔗 Links\n- [Full Changelog](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.1...v3.1.2)\n- [Documentation](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)\n\n---\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.1...v3.1.2\n","2026-02-23T21:34:21",{"id":265,"version":266,"summary_zh":267,"released_at":268},198347,"v3.1.1","## 🎉 NanoLang v3.1.1\n\n### 📊 Statistics\n- **Commits since v3.1.0**: 15\n- **Test Status**: 🎉 All tests passed!\n\n### 📝 Changes\n\n- chore: sync beads and add cursor gitignore\n- refactor: rewrite SDL launcher with modular architecture\n- chore: commit pending work from previous sessions\n- fix: resolve conflicting types and missing nl_get_time_ms in stdlib\n- docs: add planning\u002FCHANGELOG.md for release script\n- chore: ignore .beads\u002Fephemeral.sqlite3 runtime data\n- fix: eliminate all -Wdiscarded-qualifiers warnings from clean build and bootstrap\n- fix: resolve remaining TODOs in self-hosted compiler\n- chore: bd sync\n- fix: implement outstanding TODOs across compiler and examples\n- feat: infer anonymous struct literal names from function parameter types\n- refactor: replace str_concat with + operator in stdlib\u002Ftiming.nano, update stale TODOs\n- tests: complete shadow test audit, add ~167 missing shadows across all files\n- fix: reject pure expression statements, validate function arg types in self-hosted typechecker\n- tests: add headers to 89 test files, delete 10 redundant, consolidate generic_union\n\n### 🔗 Links\n- [Full Changelog](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.0...v3.1.1)\n- [Documentation](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)\n\n---\n\n**Full Changelog**: https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.1.0...v3.1.1\n","2026-02-23T01:14:54",{"id":270,"version":271,"summary_zh":272,"released_at":273},198348,"v3.1.0","## I Found My Voice\n\nThis release is about documentation, not code. I now speak in the first person — as the language I am, not as a project described by others.\n\n### What Changed\n\n**Persona & Voice**\n- I defined my personality in `docs\u002FPERSONA.md` — direct, precise, unhurried\n- All 55 user-facing docs rewritten in my voice\n- `AGENTS.md` updated so all future contributors write as me\n\n**Comprehensive Machine Reference**\n- `MEMORY.md` rewritten as a complete machine distillation of my codebase\n- Any LLM can now come up to speed on every feature I have\n\n**Major Cleanup**\n- Deleted 127 completed internal and planning docs\n- Consolidated all remaining work items into `docs\u002FCONSOLIDATED_TODOS.md`\n- `planning\u002F` directory reduced from 125 to 43 active documents\n- `planning\u002FREADME.md` rewritten as a categorized index\n\n### Also Included\n- **fix(compiler):** Fixed stage1 infinite loop on `from...import` statements\n- **feat(examples):** Added test runner driver with timeout and output verification\n- **refactor(examples):** Standardized metadata headers across all 169 example files\n\n### Stats\n- **12 commits** since v3.0.2\n- **127 files deleted**, **55 files rewritten**, **1 new consolidated TODO file**","2026-02-20T22:30:03",{"id":275,"version":276,"summary_zh":277,"released_at":278},198329,"v3.3.6","## NanoLang v3.3.6\n\n### 统计信息\n- **v3.3.5 以来的提交数**: 4\n- **测试状态**: 所有测试通过\n\n### 变更\n\n- docs: 更新 v3.3.6 版本的 CHANGELOG\n- fix: sdl_forth_ide 的原生二进制路径 + nl_forth_interpreter 的 TTY REPL\n- bd init: 初始化珠子问题跟踪\n- feat: 带源映射的堆栈跟踪测试 + 多帧覆盖率\n\n### 链接\n- [完整变更日志](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Fcompare\u002Fv3.3.5...v3.3.6)\n- [文档](https:\u002F\u002Fgithub.com\u002Fjordanhubbard\u002Fnanolang\u002Ftree\u002Fmain\u002Fdocs)","2026-04-03T06:34:22"]