{"id":20032251,"url":"https://github.com/weakish/termite","last_synced_at":"2026-03-05T03:32:29.657Z","repository":{"id":146349813,"uuid":"55941552","full_name":"weakish/termite","owner":"weakish","description":"Automatically exported from code.google.com/p/termite","archived":false,"fork":false,"pushed_at":"2016-04-11T04:27:55.000Z","size":55,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-02T05:28:23.036Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Scheme","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/weakish.png","metadata":{"files":{"readme":"README","changelog":"CHANGELOG","contributing":null,"funding":null,"license":"LICENSE","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":"2016-04-11T04:25:23.000Z","updated_at":"2016-04-11T04:26:04.000Z","dependencies_parsed_at":null,"dependency_job_id":"661e4655-2d99-4eec-a5fe-d63a8f63cca5","html_url":"https://github.com/weakish/termite","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/weakish/termite","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weakish%2Ftermite","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weakish%2Ftermite/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weakish%2Ftermite/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weakish%2Ftermite/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/weakish","download_url":"https://codeload.github.com/weakish/termite/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/weakish%2Ftermite/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30108643,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-05T01:39:18.192Z","status":"online","status_checked_at":"2026-03-05T02:00:06.710Z","response_time":93,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2024-11-13T09:36:27.840Z","updated_at":"2026-03-05T03:32:29.636Z","avatar_url":"https://github.com/weakish.png","language":"Scheme","funding_links":[],"categories":[],"sub_categories":[],"readme":"Termite is Copyright 2005-2008 by Guillaume Germain\n(guillaume.germain@gmail.com),  All Rights Reserved.\n\nTermite is released under the same license as Gambit itself, \nsee the LICENSE file.\n\n* See the 'INSTALL' file for installation instructions. *\n\nThe current code should be considered as beta quality.  That is,\nsome of it isn't yet implemented using a very good style, might\ncontains some bug, will probably change in the near future, and the\ninteraction with Gambit might be a little 'rough' for now.\n\nDon't hesitate to bug me (guillaume.germain@gmail.com) if something\ndoesn't work as it should, if you have questions or if you have\nfeature requests.\n\n--------------------------------------------------------\n\nHere is some incomplete documentation about the system.\n\n\nSome Notes\n----------\n\nSee \"examples/start1.sh\" for a minimal Termite program.\n\nThe global environment should be the same on every node, because it\nisn't included in the serialization of ojects.\n\nOne should avoid to make references to unserializable objects in\nclosures and continuations, else things will fail.\n\nThe programs should not use mutations.  Instead, rely on the fact that\npassing messages around /is/ a representation of mutable state.  See\n\"examples/cons.scm\" for an example.  Still, mutable data structures\ncan be hidden behind processes with some care.  Have a look at\n'data.scm' for examples.\n\nTo stay in the \"spirit\" of Termite, one should not use SET!, SET-CAR!,\nSET-CDR!, VECTOR-SET!, STRING-SET! and similar functions.  Better\nintegration in the future with Gambit might prevent those forms and\nfunctions from being available.\n\n\nDatatypes:\n---------\n\nNODE -\u003e node ID\n(make-node ip-address tcp-port#)\n\nTAG -\u003e universally unique identifier\n(make-tag)\n\n\nFunctions and special forms:\n---------------------------\n\n(node-init node)\n\nNecessary to initialize the system.\n\n(spawn thunk)\n\nStart a new process executing the 'body' code and return its PID.\n\n\n(spawn-link thunk)\n\nStart a new process executing the 'body' code and linking that process\nto the current one and return its PID.\n\n\n(remote-spawn node thunk)\n\nSpawn a new thunk on a remote node and return its PID.\n\n\n(self)\n\nGet the PID of the running process.\n\n\n(current-node)\n\nGet the current node we're executing on.\n\n\n(! pid message)\nSend message to process.\n\n\n(? [timeout [default-value]])\n\nReceive a message, block for 'timeout' seconds if no messages.  An\nexception will be raised if no default-value is specified.\n\n\n(?? pred? [timeout [default-value]])\nReceive a message for which (pred? message) is true.\n\n\n(recv\n  (pattern                . code)\n  (pattern (where clause) . code)\n  (after   seconds        . code))\n\nSelectively receive a message that match a pattern, and destructure\nit.  The last clause can optionally be a 'timeout' clause, with code\nto execute if no messages received after a certain amount of time.\n\n\n(!? pid message [timeout [default-value]])\n\nRemote procedure call (or synchronous message).  This requires\ndoing something like:\n\n(recv\n  ...\n  ((from token message) (! from (list token reply)))\n  ...)\n\n\n(shutdown!)\n\nNicely terminate the execution of the current process.\n\n\n(terminate! pid)\n\nForcefully terminate the execution of a local process.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweakish%2Ftermite","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fweakish%2Ftermite","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fweakish%2Ftermite/lists"}