[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-83039":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":16,"subscribersCount":16,"size":16,"stars1d":17,"stars7d":18,"stars30d":19,"stars90d":16,"forks30d":16,"starsTrendScore":20,"compositeScore":21,"rankGlobal":10,"rankLanguage":10,"license":22,"archived":23,"fork":23,"defaultBranch":24,"hasWiki":23,"hasPages":23,"topics":25,"createdAt":10,"pushedAt":10,"updatedAt":28,"readmeContent":29,"aiSummary":30,"trendingCount":16,"starSnapshotCount":16,"syncStatus":31,"lastSyncTime":32,"discoverSource":33},83039,"revo","if-not-nil\u002Frevo","if-not-nil","a dynamic language for the joy of programming","https:\u002F\u002Fgills.pages.dev\u002Frevo",null,"Zig",150,5,102,1,0,21,33,48,63,2.33,"MIT License",false,"main",[26,27],"language","programming-language","2026-06-12 02:04:30","# `revo, the programming language\n\n  \n[homepage & docs](https:\u002F\u002Fgills.pages.dev\u002Frevo)\n| [github](https:\u002F\u002Fgithub.com\u002Fif-not-nil\u002Frevo)\n| [learn](https:\u002F\u002Fgills.pages.dev\u002Frevo\u002Fbasics)\n| [chat & discuss](https:\u002F\u002Fdiscord.com\u002Finvite\u002FXzGWh7TX59)\n\nan expressive, dynamically-typed language for the joy of programming\n\n![written in Zig](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fwritten%20in-Zig-orange)  ![version 0.0.1a](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fversion-0.0.1a-navy)\n\n- [introduction](#introduction)\n- [installing](#installing)\n  - [on posix systems](#on-posix-systems)\n  - [windows](#windows)\n- [usage](#usage)\n- [development](#development)\n- [credits](#credits)\n- [license](#license)\n\n# introduction\n\n```ruby\n# =======================\n# everything is something\n# =======================\nlet x = do # 15\n    let y = 5 + 10\n    y\nend\n\n# =====\n# pipes\n# =====\nlet x = \"hello\"\n  |> _:upper()\n  |> _:sub(1, 2)\n  |> assert_eq(\"el\")\n  |> do\n    let el = _\n    \"h\" + el + \"lo\"\n  end\n  |> assert_eq(\"hello\")\n  |> fn(c)\n\n# ===============================\n# pattern matching & result types\n# ===============================\nfn safe_div(a, b)\n  if b == 0 (:err, :DivByZero)\n  else (:ok, a \u002F b)\n\nmatch safe_div(10, 2)\n  | (:ok, v)  => print(v) # 5\n  | (:err, e) => print(e)\n\n# =============================================================\n# seamless concurrency\n# > write blocking code,\n# > then make it non-blocking by putting `spawn` in front of it\n# =============================================================\nconst h = spawn fn() add(20, 22)\njoin(h) # 42\n\nlet ch = chan()\nfn worker(n) do\n  if n == 6 do\n    send(ch, :done)\n    return n\n  end\n  sleep(n * 100)\n  send(ch, n * 10)\nend\n\nfor i in 0..7\n  spawn worker(n)\n\nloop match recv(ch)\n  | :done => break :done \n  | x => print(\"got\", x)\n\n# ============================================================\n# first-class testing\n# > test blocks get compiled & ran with the `--test` flag only\n# ============================================================\n\nfn add(a, b) a + b\nfn mul(a, b) a * b\n\ntest \"mul works\" expect_eq(add(21, 21), 42)?\n\nsuite \"math\" do\n  const N = 20\n  const check_mul(a, b)\n    expect(mul(a + b) == a * b)\n\n  test \"addition\" do\n    expect(add(N, 22) == 42)?\n    expect(add(20, 22) != 22)?\n  end\n\n  test \"multiplication\" do\n    check_mul(6, 7)?\n    check_mul(20, 22)?\n  end\nend\n```\n\n## simple embedding api\n\n```c\n#include \"revo.h\"\n\nErevoVM *vm = erevo_vm_create();\nif (!vm) return 1;\n\nErevoProgram *program = erevo_compile(vm, \"main.rv\", \"1 + 2\");\nif (!program) {\n  puts(erevo_vm_last_error(vm));\n  return 1;\n}\n\nErevoData result;\nif (!erevo_run(vm, program, &result)) {\n  puts(erevo_vm_last_error(vm));\n}\n\nif (!erevo_eval(vm, \"main.rv\", \"1 + 2\", &result)) {\n  puts(erevo_vm_last_error(vm));\n}\n\nerevo_program_destroy(program);\nerevo_vm_destroy(vm);\n```\n\n\n# installing\nbinary releases are not yet available\n\nyou will need [the latest **stable** version of zig](https:\u002F\u002Fziglang.org\u002Fdownload) to build revo (`0.16.0` at the moment)\n\navailable on most package managers as `zig`\n\n## on posix (linux\u002Fbsd\u002Fmac)\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fif-not-nil\u002Frevo && cd revo\ngit submodule update --init --recursive\n# or -Doptimize=ReleaseSmall for a smaller executable\nzig build --fetch -Doptimize=ReleaseFast\ncp .\u002Fzig-out\u002Fbin\u002Frevo ~\u002F.local\u002Fbin\u002Frevo\n\n# should output the version\nrevo --version\n```\n\n### repl\n\nthe default REPL backend is [isocline](https:\u002F\u002Fgithub.com\u002Fdaanx\u002Fisocline):\n- repl history saved to `~\u002F.revo_history`\n- multi-line expressions are shift+enter or C-j\n- tab completion for revo keywords, commands (`:q`, `:clear`, `:backend`), and stdlib modules\n- go to matching brace with M-b\n- ctrl+r for searching through history\n\nyou can also get a dumb backend by doing `-Drepl=none`\n\n### packaging:\n- AUR: `revo-git` ([info & pkgbuild](https:\u002F\u002Faur.archlinux.org\u002Fpackages\u002Frevo-git))\n\n## windows\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fif-not-nil\u002Frevo && cd revo\nzig build --fetch -Doptimize=ReleaseFast\n\nmkdir \"C:\u002Ftools\u002Frevo\u002Fbin\"\ncopy .\u002Fzig-out\u002Fbin\u002Frevo C:\u002Ftools\u002Frevo\u002Fbin\n\n# now add it to PATH by doing:\n# - Win+S -> `env` -> \u003CEnter>\n# - click \"Environment Variables\" and then \"Path\" in the \"System variables\"\n# - add new at \"C:\\tools\\revo\\bin\"\n#    , or put it in one of the existing ones, if you know what you're doing\n# - press OK for all of the tabs you've opened\n# after that, you have to open a new CMD\u002FPowershell window for PATH changes to take effect\n\n# verify installation\nrevo --version\n```\n*note - the windows version does not yet have an async backend or a full-featured line editor. the latter is the easiest to add, a windows contributor might want to take a look at [.\u002Fsrc\u002Frepl.zig](.\u002Fsrc\u002Frepl.zig)*\n\n# usage\n\n```bash\nusage: revo [options] [script [args...]]\n\noptions:\n  -e code          run code\n  -i               enter interactive mode after executing\n  -d               output the last value the program evaluated\n  -b               compile script to bytecode (.rvo)\n  -o path          output path for -b (default: input with .rvo extension)\n  --test           run test blocks\n  --bench[n]       run with performance counters ([n] iterations, 1 if not specified)\n  --dis            show bytecode disassembly instead of running\n  -h, --help       show this help message\n  --version        show version\n\nexamples:\n  revo                           start interactive REPL\n  revo script.rv                 run script\n  revo -e \"1 + 2\"                run inline code\n  revo -e \"1 + 2\" -i             run inline code and enter REPL\n  revo -b script.rv              compile script to bytecode\n  revo -b -o output.rvo script   compile script with custom output path\n  revo --bench script.rv         run with performance counters\n  revo --dis script.rv           show bytecode disassembly\n```\n\n## development\n\n### building\n\n```bash\nzig build # debug build\nzig build run # debug run (repl implementation is hardcoded to a very simple one)\nzig build -Doptimize=ReleaseFast # release build\nzig build -Drepl=none # minimal repl backend (isocline, none)\n# build C library + auto-generated header\n# check zig-out\u002Finclude\u002F, zig-out\u002Flib\u002F\nzig build lib \n```\n\n**note:** the C library and header are only built with `zig build lib`.\nthe auto-generated header is always in sync with exported functions, marked with `callconv(\"c\")`\n\n### running tests\n\n```bash\nzig build test --summary all \n# opt: -Dtest_filter=\"some test name filter\"\n```\n\n### revolt (the language server)\n\nrevo ships an LSP server at `src\u002Flsp\u002F`. it handles diagnostics, go-to-definition, hover,\nreferences, document symbols, and workspace symbols.\n\nto build:\n\n```bash\nzig build revolt\n```\n\nthe binary lands at `zig-out\u002Fbin\u002Frevolt`\n\n#### neovim setup\n\n```lua\nvim.lsp.config('revolt', {\n  cmd = { 'revolt' },\n  filetypes = { 'rv' },\n  root_markers = { 'lib.json', 'exe.json', '.git' },\n})\nvim.lsp.enable('revolt')\n```\n\nsee [docs\u002Flsp.md](src\u002Flsp\u002FREADME.md) for the full feature list, troubleshooting, and other editors\n\n### contributing\n\nrecommending to a friend is always greatly appreciated. any contributions are welcome!\n\nsee [CONTRIBUTING.md](.\u002FCONTRIBUTING.md)\n\n## credits\n\n- [isocline](https:\u002F\u002Fgithub.com\u002Fdaanx\u002Fisocline) by daanx - MIT\n- [lsp-kit](https:\u002F\u002Fgithub.com\u002Fzigtools\u002Flsp-kit) by the zigtools team - MIT\n\n# license\n\nrevo is licensed under [MIT.](https:\u002F\u002Fmit-license.org\u002F) see the [LICENSE.txt](.\u002FLICENSE.txt) file for details\n","revo 是一种表达力强、动态类型的编程语言，旨在为编程带来乐趣。它使用 Zig 语言编写，具备简洁的语法和强大的功能，如管道操作、模式匹配、结果类型以及无缝并发支持。revo 支持通过简单的 `spawn` 关键字将阻塞代码转换为非阻塞代码，并且内置了第一类测试功能，使得单元测试更加方便。此外，revo 提供了一个简单的 C API，便于在其他项目中嵌入使用。这种语言适合那些希望探索新编程范式或需要快速原型开发的开发者，尤其是在需要灵活处理数据和并发任务的场景下。",2,"2026-06-11 04:09:58","CREATED_QUERY"]