All Projects → ALANVF → star

ALANVF / star

Licence: Apache-2.0 license
An experimental programming language that's made to be powerful, productive, and predictable

Programming Languages

haxe
709 projects
nim
578 projects
Vim Script
2826 projects

Projects that are alternatives of or similar to star

ekzo
💫 Functional Sass framework for rapid and painless development
Stars: ✭ 32 (-63.64%)
Mutual labels:  functional, object-oriented
Duck
Duck-Typed Programming in C
Stars: ✭ 14 (-84.09%)
Mutual labels:  object-oriented, message-passing
Star-lang-specification
Work in progress specs for the Star programming language
Stars: ✭ 26 (-70.45%)
Mutual labels:  object-oriented, star
Eclipse Collections
Eclipse Collections is a collections framework for Java with optimized data structures and a rich, functional and fluent API.
Stars: ✭ 1,828 (+1977.27%)
Mutual labels:  functional, object-oriented
snap
Snap Programming Language
Stars: ✭ 20 (-77.27%)
Mutual labels:  functional, object-oriented
zio-http4s-example
For anyone who's struggling to put an http4s server together with ZIO
Stars: ✭ 19 (-78.41%)
Mutual labels:  functional
potassium
A framework for writing robot software with functional programming in Scala
Stars: ✭ 16 (-81.82%)
Mutual labels:  functional
stream
Go Stream, like Java 8 Stream.
Stars: ✭ 60 (-31.82%)
Mutual labels:  functional
treecko
A collection of functional and immutable helpers for working with tree data structures.
Stars: ✭ 31 (-64.77%)
Mutual labels:  functional
ADE9078-3PhaseWattmeter
An Isolated design for a demo board using the Analog Devices ADE9078 3 phase AC wattmeter. Design allows both WYE (STAR) and Delta (TRIANGLE) distributions to be measured along with Blondel and non-Blondel measurement schemes. The project includes a SPI based Arduino style library.
Stars: ✭ 24 (-72.73%)
Mutual labels:  star
conjson
(conventional, consistent, conformative) JSON - A simple, functional, no-tags-required mechanism to handle and transform JSON representations of values, consistently.
Stars: ✭ 47 (-46.59%)
Mutual labels:  functional
TypeInferencer
Algorithm W and Algorithm M in F#
Stars: ✭ 33 (-62.5%)
Mutual labels:  functional
decaf-rs
The Decaf compiler, written in Rust
Stars: ✭ 43 (-51.14%)
Mutual labels:  object-oriented
Bitcoin-wallet-cracker
Automated Bitcoin wallet generator that with mnemonic and passphrases bruteforces wallet addresses
Stars: ✭ 140 (+59.09%)
Mutual labels:  star
iterum
Handling iterables like lazy arrays.
Stars: ✭ 28 (-68.18%)
Mutual labels:  functional
ribosome-py
neovim python plugin framework
Stars: ✭ 12 (-86.36%)
Mutual labels:  functional
venus
OO Standard Library for Perl 5
Stars: ✭ 14 (-84.09%)
Mutual labels:  object-oriented
Vaquero
A scripting language for cowboy coders
Stars: ✭ 18 (-79.55%)
Mutual labels:  message-passing
StarRateView
swift五星评分,星星评分控件,支持自定义数量、拖拽、0.1颗星等多种操作
Stars: ✭ 22 (-75%)
Mutual labels:  star
rudash
Rudash - Lodash for Ruby Apps
Stars: ✭ 27 (-69.32%)
Mutual labels:  functional

Logo

Star

Star is an experimental programming language that's made to be powerful, productive, and predictable:

  • Powerful: Get stuff done with less boilerplate
  • Productive: Get stuff done quickly without working against the language
  • Predictable: Get stuff done without having to think about it twice

One 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.

Primary features

  • A vast and unlimited type system and type hierarchy
    • Multiple inheritance allows for more code reuse
    • Kinds (variants) can be used to represent a fixed selection of values as well as specific arrangements of data
      • Kinds may inherit from classes, protocols, and even other kinds
      • Kinds may have instance members like classes do, which are accessible from any kind value
      • Multi-kinds can be used to represent a set of various flags, options, and choices without needing sets or hashmaps
    • Generics allow types and methods to be compatible with different types without code duplication
      • Generic constraints can require specific types, supertypes, subtypes, and shapes (members / methods), all of which can reference other generics
      • Multiple constraints are allowed on a generic
      • Generics can require a specific number of type parameters, which allows for powerful constructs like higher-kinded types
      • Generics can be assigned to a type alias for use elsewhere, effectively creating Haskell-like "typeclasses"
    • Type specialization and type refinement can allow for multi-dispatch, and enable certain functionality depending on the types given
    • Categories are named type extensions that can add new functionality to existing types at compile-time
  • Rich standard library comes with the essentials, many data structures, and other common functionality
    • ...and some nuclear batteries (in case you needed them)
  • Low-level and high-level
    • Writing low-level code shouldn't be a pain
    • Writing high-level code shouldn't require five layers of abstraction

Other notable features

  • Unified type conversion system makes magical methods like toString a thing of the past
  • Cascades and nested cascades completely eliminate the need for temporary variables and builder types
  • Pattern matching on classes, kinds, and other data structures allows for efficient and concise decision-making code
  • Block expressions allow for statements to be used within an expression
  • Structured loop constructs reduce off-by-one errors
  • Omission of null values prevents an entire category of errors, bugs, and headaches

A word on syntax

Before you click away because of how weird the syntax might look, please just give Star a chance. It may seem weird at first, but every aspect of Star's syntax has a purpose. None of it exists "just for decoration" or anything ridiculous like that. Rather, the syntax is made to be completely unambiguous, which means that some things have to look different (within reason) in order to be distinguishable.

For example, Star uses #{...} for tuples instead of (...). This is because (...) is also used for grouping expressions. The fact that (1) produces an integer might be surprising for those who were expecting a single-element tuple. Most languages use the syntax (1,) for single-element tuples in order to solve the ambiguity issue, however this results in an edge case, which then creates more issues and inconsistency. By explicitly distinguishing tuple syntax from grouping syntax, all issues caused by the inconsistency and edge case have been resolved.

"Wow that's dumb", right? Well maybe you don't care about these kinds of issues. However these issues can add up, and make languages increasingly difficult to learn and incredibly annoying to use. This ends up benefiting nobody and only frustrates the programmer even more.

Example

module Main {
	on [main] {
		Core[say: "Welcome to Star!"]
	}
}

Running Star

Things you'll need in order to run Star (or rather, the parser. the compiler and runtime don't exist yet):

If you are on windows, you'll want to run this (recursively, somehow) on the contents of src, star, and stdlib:

fsutil.exe file setCaseSensitiveInfo <path> enable

Thinking ahead

I've always loved the tooling and features provided by Smalltalk languages like Pharo and Self, but I've never liked using them because 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" through an API so that it can be used from other editors, IDEs, languages, build tools, etc. It sounds like wishful thinking, but I'm sure it could somehow be possible once Star gains more traction.

Resources

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].