{"id":33054817,"url":"https://github.com/ALANVF/star","last_synced_at":"2025-12-03T10:01:00.829Z","repository":{"id":45816627,"uuid":"335099661","full_name":"ALANVF/star","owner":"ALANVF","description":"An experimental programming language that's made to be powerful, productive, and predictable","archived":false,"fork":false,"pushed_at":"2025-03-25T21:40:19.000Z","size":2344,"stargazers_count":136,"open_issues_count":0,"forks_count":2,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-06-05T19:48:39.681Z","etag":null,"topics":["compiler","functional","language","message-passing","object-oriented","powerful","star"],"latest_commit_sha":null,"homepage":"","language":"Haxe","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ALANVF.png","metadata":{"files":{"readme":"README.md","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,"zenodo":null}},"created_at":"2021-02-01T22:19:09.000Z","updated_at":"2025-06-01T05:29:41.000Z","dependencies_parsed_at":"2024-01-29T08:09:48.383Z","dependency_job_id":"22dbdbbc-5995-46f2-a4d6-e464b51f7734","html_url":"https://github.com/ALANVF/star","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ALANVF/star","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ALANVF%2Fstar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ALANVF%2Fstar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ALANVF%2Fstar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ALANVF%2Fstar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ALANVF","download_url":"https://codeload.github.com/ALANVF/star/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ALANVF%2Fstar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":27473698,"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","status":"online","status_checked_at":"2025-12-03T02:00:06.367Z","response_time":57,"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":["compiler","functional","language","message-passing","object-oriented","powerful","star"],"created_at":"2025-11-14T04:00:21.846Z","updated_at":"2025-12-03T10:01:00.816Z","avatar_url":"https://github.com/ALANVF.png","language":"Haxe","readme":"\u003cimg src=\"logo.png\" alt=\"Logo\" width=\"250\" align=\"right\"/\u003e\n\n# Star\n\nStar is an experimental programming language that's made to be powerful, productive, and predictable:\n- Powerful: Get stuff done with less boilerplate\n- Productive: Get stuff done quickly without working against the language\n- Predictable: Get stuff done without having to think about it twice\n\n\u003cbr\u003e\n\nOne of the most important goals of Star is that it's designed to be completely consistent. In other words, Star has been designed to not have edge cases, footguns, or any sort of \"magic\" that's exclusive to language built-ins.\n\n\n## Primary features\n\n- A vast and unlimited type system and type hierarchy\n\t- Multiple inheritance allows for more code reuse\n\t- Kinds (variants) can be used to represent a fixed selection of values as well as specific arrangements of data\n\t\t- Kinds may inherit from classes, protocols, and even other kinds\n\t\t- Kinds may have instance members like classes do, which are accessible from any kind value\n\t\t- Multi-kinds can be used to represent a set of various flags, options, and choices without needing sets or hashmaps\n\t- Generics allow types and methods to be compatible with different types without code duplication\n\t\t- Generic constraints can require specific types, supertypes, subtypes, and shapes (members / methods), all of which can reference other generics\n\t\t- Multiple constraints are allowed on a generic\n\t\t- Generics can require a specific number of type parameters, which allows for powerful constructs like higher-kinded types\n\t\t- Generics can be assigned to a type alias for use elsewhere, effectively creating Haskell-like \"typeclasses\"\n\t- Type specialization and type refinement can allow for multi-dispatch, and enable certain functionality depending on the types given\n\t- Categories are named type extensions that can add new functionality to existing types at compile-time\n- Rich standard library comes with the essentials, many data structures, and other common functionality\n\t- ...and some nuclear batteries (in case you needed them)\n- Low-level *and* high-level\n\t- Writing low-level code shouldn't be a pain\n\t- Writing high-level code shouldn't require five layers of abstraction\n\n\n## Other notable features\n\n- Unified type conversion system makes magical methods like `toString` a thing of the past\n- Cascades and nested cascades completely eliminate the need for temporary variables and builder types\n- Pattern matching on classes, kinds, and other data structures allows for efficient and concise decision-making code\n- Block expressions allow for statements to be used within an expression\n- Structured loop constructs reduce off-by-one errors\n- Omission of null values prevents an entire category of errors, bugs, and headaches\n\n\n### A word on syntax\n\nBefore you click away because of how weird the syntax might look, please just give Star a chance. It may seem weird at first,\nbut every aspect of Star's syntax has a purpose. None of it exists \"just for decoration\" or anything ridiculous like that.\nRather, the syntax is made to be completely unambiguous, which means that some things have to look different (within reason)\nin order to be distinguishable.\n\nFor example, Star uses `#{...}` for tuples instead of `(...)`. This is because `(...)` is also used for grouping expressions.\nThe fact that `(1)` produces an integer might be surprising for those who were expecting a single-element tuple.\nMost languages use the syntax `(1,)` for single-element tuples in order to solve the ambiguity issue, however this results in\nan edge case, which then creates more issues and inconsistency. By explicitly distinguishing tuple syntax from grouping syntax,\nall issues caused by the inconsistency and edge case have been resolved.\n\n\"Wow that's dumb\", right? Well maybe you don't care about these kinds of issues. However these issues can add up, and make\nlanguages increasingly difficult to learn and incredibly annoying to use. This ends up benefiting nobody and only frustrates\nthe programmer even more.\n\n\n### Example\n\n\n```swift\nmodule Main {\n\ton [main] {\n\t\tCore[say: \"Welcome to Star!\"]\n\t}\n}\n```\n\n\n### Running Star\n\nThings you'll need in order to run Star:\n- Haxe (4.3.1 or later)\n- [My fork of HashLink](https://github.com/ALANVF/hashlink/tree/star) (you'll have to build it yourself, sorry!)\n- Haxe libraries:\n\t- haxe-strings\n\t- hashlink (separate library used by the compiler)\n- Nim (1.7.1 or later)\n- VS2019 + universal C runtime library (WINDOWS ONLY)\n\nIf you are on windows, you'll want to run this (recursively, somehow) on the contents of `src`, `star`, and `stdlib`:\n```powershell\nfsutil.exe file setCaseSensitiveInfo \u003cpath\u003e enable\n```\n\nYou'll also want to set the `HASHLINKPATH` env var to wherever your current version of hashlink is (the base folder, not the Release folder!).\n\nIf you're on windows, run `compile.ps1` and pray it works on your computer because using msvc from the cli sucks.\n\nIf you're not on windows, please be patient until I get a solution up, or do it yourself if you're so inclined (it's the same as `compile.ps1`, but without the stupid stuff to compile using msvc).\n\nBoth the compiler and the VM are still fairly unfinished, so there will be many bugs and crashes!\n\n### Thinking ahead\n\nI've always loved the tooling and features provided by Smalltalk languages like Pharo and Self, but I've never liked using them\nbecause it's all restricted to the VM. I'd like to eventually have the same kind of tooling for Star, but make it all \"pluggable\"\nthrough an API so that it can be used from other editors, IDEs, languages, build tools, etc. It sounds like wishful thinking, but I'm\nsure it could somehow be possible once Star gains more traction.\n\n\n### Resources\n\n- Language specification (most of it): https://github.com/ALANVF/Star-lang-specification\n","funding_links":[],"categories":["Uncategorized"],"sub_categories":["Uncategorized"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FALANVF%2Fstar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FALANVF%2Fstar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FALANVF%2Fstar/lists"}