When designing Arc-Script, languages which could be good to borrow ideas from are:
Go (For its simplicity and concurrency-oriented design)
Julia (For its data-science oriented design)
Rust (For its safety, performance, and sane design)
Scala (For its scalability and functional syntax)
Python (For its conciseness)
OCaml (For its conciseness without compromising static typing)
Javascript (For its simplicity)
Erlang (For its simplicity and concurrency-oriented design)
Pony (For its actor model and static typing)
Swift (For its simplicity and IR)
Zig (For performance, safety)
One thing to be noted is that Arc-Script is a statically typed compiled language. Of the above languages, only Rust shares the same design principle. Therefore it is necessary to include Rust in the discussion.
Following is a list of features which are either up for discussionπ‘, rejected β, accepted π (but not decided how it should be implemented), or implemented β .
β Static typing (Rust, OCaml, Scala)
β Sum-types (Rust, OCaml)
β Record-types (OCaml)
π‘ Public/Private visibility
π‘ Semantic indentation (Python)
π‘ begin and end syntax (Julia)
π‘ Sequential composition at line break (Python)
π‘ Functions with multiple results (Python/Go)
π‘ Named return values (Go)
π‘ Zero-values for all basic types (Go)
π‘ Explicit conversions (Go/Rust)
π‘ Methods are functions with receivers (Go)
π‘ Interfaces (Go)
π‘ Implicit implementations (Go)
π‘ Consecutive parameters with same type (Go)
π‘ Defer statements (Go)
π‘ Static/Dynamic Arrays and Slices (Go/Rust)
π‘ Channels (Go)
π‘ Channels can be opened and closed
π‘ Channels can have directions, i.e., capabilities
When designing Arc-Script, languages which could be good to borrow ideas from are:
One thing to be noted is that Arc-Script is a statically typed compiled language. Of the above languages, only Rust shares the same design principle. Therefore it is necessary to include Rust in the discussion.
Following is a list of features which are either up for discussionπ‘, rejected β, accepted π (but not decided how it should be implemented), or implemented β .
begin
andend
syntax (Julia)map
type (Go)string
type (Go)rune
type (Go)imaginary
type (Go)var
keyword (Julia/Python)do
keyword (Julia)β
(Julia)|>
(Julia)error
s) andtry
-else
(Pony)+~
, partial addition+?
, checked addition+
(Pony)with
-blocks for disposal of objects (Pony)apply
functions (Pony, Scala)match
-else
(Pony)None
(nil) to
Default` coalescing operator (Swift)unless
blocks (Elixir)%{key => val}
(Elixir)%{map | key => val}
(Elixir)^x = y
(Elixir)