{"id":22375887,"url":"https://github.com/stylewarning/big-string","last_synced_at":"2026-02-22T16:02:25.500Z","repository":{"id":236852832,"uuid":"625691305","full_name":"stylewarning/big-string","owner":"stylewarning","description":null,"archived":false,"fork":false,"pushed_at":"2023-04-09T22:12:59.000Z","size":4,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-25T23:34:10.257Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Common Lisp","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/stylewarning.png","metadata":{"files":{"readme":"README","changelog":null,"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":"2023-04-09T22:05:30.000Z","updated_at":"2023-10-16T12:40:53.000Z","dependencies_parsed_at":"2024-04-29T00:08:20.367Z","dependency_job_id":"51416ef2-35d2-4980-8b8d-03549e421f8d","html_url":"https://github.com/stylewarning/big-string","commit_stats":null,"previous_names":["stylewarning/big-string"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stylewarning%2Fbig-string","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stylewarning%2Fbig-string/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stylewarning%2Fbig-string/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/stylewarning%2Fbig-string/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/stylewarning","download_url":"https://codeload.github.com/stylewarning/big-string/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245708990,"owners_count":20659625,"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":[],"created_at":"2024-12-04T21:28:07.482Z","updated_at":"2025-10-24T16:17:49.695Z","avatar_url":"https://github.com/stylewarning.png","language":"Common Lisp","funding_links":[],"categories":[],"sub_categories":[],"readme":"                              BIG-STRING\n                              ==========\n\n                           By Robert Smith\n\n\nINTRODUCTION \u0026 USAGE\n--------------------\n\nBIG-STRING is a library for working with big strings. Despite the\nname, BIG-STRING is also useful for general collections of strings. It\nis very much like Java's StringBuilder class. Care has been taken to\nmake most operations linear in time at worst.\n\nThe usual trick to concatenate many strings together in (probably)\nlinear time is to use WITH-OUTPUT-TO-STRING:\n\nCL-USER\u003e (let ((strings '(\"this \" \"is \" \"a \" \"collection \" \"of \" \"strings.\")))\n           (with-output-to-string (*standard-output*)\n             (dolist (string strings)\n               (princ string))))\n\"this is a collection of strings.\"\n\nDepending on how WITH-OUTPUT-TO-STRING is implemented, this might not\nbe linear, and could be inefficient (the standard makes no complexity\nguarantee).\n\nBIG-STRING encapsulates this idea in a data structure:\n\nBIG-STRING\u003e (let* ((strings '(\"this \" \"is \" \"a \" \"collection \" \"of \" \"strings.\"))\n                   (bs (make-big-string)))\n              (dolist (string strings bs)\n                (big-string-append bs string)))\n#\u003cBIG-STRING of 32 characters {10074D6AD3}\u003e\n\nWe can convert this into a string in guaranteed linear time:\n\nBIG-STRING\u003e (string-of-big-string *)\n\"this is a collection of strings.\"\n\nIt is possble to do an analogous operation by creating a new string\nstream using MAKE-STRING-OUTPUT-STRING, writing to the resulting\nstream, and the obtaining the string using GET-OUTPUT-STREAM-STRING.\n\nIn a sense, we are building a string lazily. But more interestingly,\nwe can operate on it as if itself was a string.\n\nBIG-STRING\u003e (list (big-string-length **)\n                  (big-string-char ** 10)\n                  (big-string-substring ** 8 20))\n(32 #\\c \"a collection\")\n\n\nLIMITATIONS\n-----------\n\nRight now, a few operations are slightly inefficient. Also, some more\nstring-like functions should be implemented.\n\nThe implementation right now takes about twice the time than SBCL\ntakes with string streams. However, with some type tweaking,\nBIG-STRING goes at the same speed or faster, with about half the\nmemory.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstylewarning%2Fbig-string","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstylewarning%2Fbig-string","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstylewarning%2Fbig-string/lists"}