{"id":20559194,"url":"https://github.com/coyove/sc45","last_synced_at":"2026-05-26T13:50:03.489Z","repository":{"id":96294753,"uuid":"262054402","full_name":"coyove/sc45","owner":"coyove","description":"Sc45 is a relatively-small-basically-working Scheme dialect in Go","archived":false,"fork":false,"pushed_at":"2021-06-04T12:08:28.000Z","size":610,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-16T18:55:20.913Z","etag":null,"topics":["dependency-free","golang","interpreter","scheme","script"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coyove.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-05-07T13:14:13.000Z","updated_at":"2022-03-08T08:39:43.000Z","dependencies_parsed_at":null,"dependency_job_id":"26400e55-3ef7-4149-8a79-a69f9c0bec9f","html_url":"https://github.com/coyove/sc45","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coyove%2Fsc45","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coyove%2Fsc45/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coyove%2Fsc45/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coyove%2Fsc45/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coyove","download_url":"https://codeload.github.com/coyove/sc45/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242165413,"owners_count":20082470,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dependency-free","golang","interpreter","scheme","script"],"created_at":"2024-11-16T03:49:28.437Z","updated_at":"2026-05-26T13:49:58.448Z","avatar_url":"https://github.com/coyove.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"Sc45 is a relatively-small-basically-working scheme dialect in Go, its core consists of only one file (sc45.go) with 1k LOC.\n\nSc45 serves one purpose: give your program an embedded REPL on-the-fly with minimal efforts:\n\n```Go\nfunc init() {\n    it := sc45.New()\n    it.Store(\"turn-on-flag1\", sc45.V(func(v bool) { FLAG1 = v }))\n    it.Store(\"turn-on-flag2\", sc45.V(func(v bool) { FLAG2 = v }))\n    it.Store(\"pre-setup\", sc45.V(func(n int, kafkaTopic string) { RerouteMsg(n, kafkaTopic) }))\n    ...\n\n    // 1. If your server has debug/pprof enabled:\n    it.InjectDebugPProfREPL(\"Title\")\n    // Navigate to http://.../debug/pprof/repl to use the REPL\n\n    // 2. If you can access to the working directory where your server is running in:\n    it.RunSimplePipeREPL(\"/tmp/debug_pipe\")\n    // This will output a 'repl' script in current working dir, you can: cd $CWD \u0026\u0026 ./repl to use the REPL\n    // Note that this script needs mkfifo and access to '/tmp/debug_pipe'\n\n    ...\n}\n```\n\nInside REPL:\n```Scheme\n(turn-on-flag1 #t)\n(pre-setup 10 \"debug-topic\")\n...\n(turn-on-flag1 #f)\n(turn-on-flag2 true)\n```\n\n# Language details\n- `call/cc` is not supported, due to sc45's recursive evaluation intepreter, this is also impossible\n- Numbers are float64 + int64 internally, int64 will be promoted to float64 when needed\n- Macro definition syntax: `(define name (lambda-syntax (paramlist) body))`, macro is a legit function which takes expressions as inputs and outputs expressions, and it can also refer upper level symbols\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoyove%2Fsc45","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoyove%2Fsc45","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoyove%2Fsc45/lists"}