Skip to content
Min: Crypto Token for Beautiful and Secure Code
Branch: master
Clone or download
Latest commit 64842bd Oct 1, 2017
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitattributes initial Sep 28, 2017
.gitignore self compile Oct 1, 2017
Makefile self compile Oct 1, 2017
README.md self compile Oct 1, 2017
any.m self compile Oct 1, 2017
asm.m self compile Oct 1, 2017
b.m self compile Oct 1, 2017
blas.m self compile Oct 1, 2017
box.m
c.m self compile Oct 1, 2017
call.m
cast.m self compile Oct 1, 2017
clock.m self compile Oct 1, 2017
cocoa.m self compile Oct 1, 2017
common_crypto.m self compile Oct 1, 2017
core.m self compile Oct 1, 2017
dbm.m self compile Oct 1, 2017
debug.m self compile Oct 1, 2017
def.m self compile Oct 1, 2017
dl.m self compile Oct 1, 2017
dynamodb.m self compile Oct 1, 2017
env.m self compile Oct 1, 2017
err.m self compile Oct 1, 2017
exp.m
fact.m self compile Oct 1, 2017
fail.m self compile Oct 1, 2017
file.m self compile Oct 1, 2017
flow.m self compile Oct 1, 2017
fun.m
group.m self compile Oct 1, 2017
hash.m self compile Oct 1, 2017
hex.m self compile Oct 1, 2017
http.m self compile Oct 1, 2017
httpd.m self compile Oct 1, 2017
i.m self compile Oct 1, 2017
in.m self compile Oct 1, 2017
info.m
job.m self compile Oct 1, 2017
json.m self compile Oct 1, 2017
key.m self compile Oct 1, 2017
kind.m self compile Oct 1, 2017
list.m self compile Oct 1, 2017
log.m self compile Oct 1, 2017
main.m self compile Oct 1, 2017
main.ma self compile Oct 1, 2017
map.m self compile Oct 1, 2017
mem.m self compile Oct 1, 2017
meta.m self compile Oct 1, 2017
min self compile Oct 1, 2017
n.m self compile Oct 1, 2017
name.m self compile Oct 1, 2017
net.m self compile Oct 1, 2017
op.m self compile Oct 1, 2017
openssl.m self compile Oct 1, 2017
opt.m self compile Oct 1, 2017
out.m self compile Oct 1, 2017
packs self compile Oct 1, 2017
packs.m self compile Oct 1, 2017
pair.m self compile Oct 1, 2017
path.m
perf.m self compile Oct 1, 2017
pipe.m self compile Oct 1, 2017
posix.m self compile Oct 1, 2017
put.m
quant.m self compile Oct 1, 2017
r.m self compile Oct 1, 2017
ref.m self compile Oct 1, 2017
regex.m self compile Oct 1, 2017
rewrite.m self compile Oct 1, 2017
row.m self compile Oct 1, 2017
rule.m self compile Oct 1, 2017
s.m self compile Oct 1, 2017
seq.m self compile Oct 1, 2017
set.m self compile Oct 1, 2017
socket.m self compile Oct 1, 2017
spin.m self compile Oct 1, 2017
spot.m self compile Oct 1, 2017
sqlite.m self compile Oct 1, 2017
step.m self compile Oct 1, 2017
sys.m self compile Oct 1, 2017
tag.m self compile Oct 1, 2017
task.m self compile Oct 1, 2017
term.m self compile Oct 1, 2017
thread.m self compile Oct 1, 2017
time.m
trace.m self compile Oct 1, 2017
trap.m self compile Oct 1, 2017
type.m self compile Oct 1, 2017
unicode.m self compile Oct 1, 2017
unify.m
z.m self compile Oct 1, 2017
zlib.m self compile Oct 1, 2017

README.md

Min: Crypto Token for Beautiful and Secure Code

Min is a new programming language for beautiful and secure code. We issue crypto tokens to investors and developers for bootstrapping the network in open source and governance.

Token networks align participants toward a common goal. Our mission is to build a profitable and sustainable ecosystem of good software.

Below are an introduction to Min the language and a walkthrough of our source code.

Consensus and Incentives

Contributors earn Min coins, denoted by the infimum symbol ∧, through technical work, community building, or business development. Examples include

  • ∧100: Write blogs, documentation, crash reports;
  • ∧1,000: Port libraries, hunt bounties, moderate Slack; and,
  • ∧10,000: Port to iOS / Android / Ethereal VM, launch token sales.

Min solves the most pressing problems of large-scale software development: hiring and collaboration. With Min tokens, decentralized work is rewarded with smart contracts. With Min language, code evolution is guided by strong types.

Our first product is a cross-platform framework for native mobile applications. Soon we will also optimize for machine learning and decentralized applications. Sign up for news of our token launch!

100x and Roadmap

Currently Min compiles to x86-64 machine code without any external tools. Self-contained for cross compilation and consistent on any platform, Min does not use any C backends, assembly, or linker.

  • Self-compile without any tools on Mac OS X
  • Port to Linux, iOS, Android, Javascript, Windows
  • Generalized sequences, memory management
  • Coding guide, language specification
$ make
./min binary `cat packs` 3< main.ma > min1
chmod +x min1
./min1 binary `cat packs` 3< main.ma > min2
[[ `md5 < min1` == `md5 < min2` ]]

Charm and Delight

Min is the most innovative programming language designed for beautiful code. To create it, we have started from scratch with machine code, then re-thought every syntax and idiom.

Beautiful code, like mathematics, is pleasurable to learn and to write. With Min, immutability by default simplifies stateful computations. Rich, advanced types eliminate mistakes and guide optimizations.

The art of programming — with the right syntax.

Minimalist syntax Immutable data Advanced types
orthogonal yet intuitive think in mathematics automatically bug-free

Philosophy. Yearn for the vast and endless Bits.

hex1 x:C : N = \a <= x <= \f & x - \a + 10 | x - \0
Fact (hex1 \d == 13)

hex s:S n=0 : N = s.0 & hex s+1 16n+s.0.hex1 | n
Fact (hex 'cafebabe' == 3405691582)

To code, don't drum up the men to use frameworks and design patterns. Instead, teach them to yearn for elegant algorithms in beautiful syntax. Min's novel parser uses horizontal spacing and vertical layout to free programming from clutters of delimiters and LALR(1) grammars. Here, zero keywords and all operators are of a single keyboard character except the four relational operators.

builtin keywords delimiters with layout composite operators
0 0 4

Purpose. Fun for Thinkers and Tinkers.

Everyone can be taught to code but thinkers dream of abstractions and tinkers obsess with implementations. Min's design emphasizes the unifying foundation of higher-order functions and formal types. This means flow controls and generic sequences are naturally user-definable. You can think in terms of mathematical logic, and write as such.

hash_get rows:0/1 x:0 : 1 = rows 
 . hash x % size rows
 / y? x == y
 . head
Fact (hash_get ['foo'?13, 'bar'?42] 'bar' == 42)

All the while, you can peek behind every piece of Min's code — no dragons of macros or generated C code ahead. Tinker and master the intricate clockwork of our compiler in a unified language, from machine registers as well as database backends, all the way to web frontends and decentralized applications.

items = Sql 'rds.amazonaws.com:3306/tasks'
 . join users on=(x? u? x.user == u.id)
 / x? x.status != Done
 . top 5

done id:N = Xhr async=1 '/done?[id]'
Html
  Title Top [items.size] TODO
  items * id,summary,time,name?
    Li onclick=done(id) [summary], [time] by [name]
Infinite model Unified web
strings, files, tables as lazy sequence SQL, HTML, Javascript in one syntax

Technology. Need for Speed and Security.

In “Computer Scientists Close In On Perfect, Hack-Proof Code,” Kevin Hartnett at Quanta Magazine writes:

Key parts of Little Bird’s computer system were unhackable with existing technology, its code as trustworthy as a mathematical proof... That results made all of Darpa stand up and say, oh my goodness, we can actually use this technology in systems we care about.

Previously, when computers were isolated in homes and offices, programming bugs were merely inconvenient. Now those same small coding errors open massive security vulnerabilities on networked machines that allow anyone with the know-how free rein inside a computer system.

Memory management costs enormous development effort or it dominates runtime cycles. Min's innovative type inference automates ownership annotations in a region-based memory model, so code remains at a high-level abstraction without the complexity of a garbage collector.

Term = Tag
 Nil
 Apply fun:Term arg:Term
 If test:Term pos:Term neg:Term
 Binary left:Term op:S right:Term

rewrite : Term? Term =
  Binary (Binary a '&' b) '|' c? If a b c    
  Binary a '&' b? If a b Nil
  Binary a '.' b? Apply b a
  Binary a '@' b? Binary b ';' a

Min's precise types also guarantee correctness before execution and optimize for machine performance. Scaling to a million page requests or intensive scientific computations won't need delegating to foreign functions. With Min, you won't have to worry about null pointers in critical services, or stealing and tampering of your digital assets in decentralized applications.

black_scholes
 s : ℝ # stock price
 x : ℝ # strike price
 t : ℝ # expiration time in years
 r : ℝ # risk-free interest rate
 σ : ℝ # volatility
 : ℝ
 = s ϕ(d1) - x e^(-r t)ϕ(d2) @ 
  ϕ = Normal.cdf
  d0 = log s/x + (r + σ²/2)t
  d1 = d0 / σ√t
  d2 = d1 - σ√t

Programming and Rules

Here's the directory of Min's source code with description. We're making steps toward our mission and our language.

machine data
z.m zero, void, nil, null, unit
b.m bit, bool, boolean, flag, truth, logic
c.m char, character, unicode code point
n.m nat, number, non-negative, unsigned
i.m int, integer, signed, natural number
r.m real, floating-point number
interpreted data
any.m abstract data
hex.m hexadecimal number
mem.m memory address, pointer
unicode.m universal character set
fun.m function, procedure, routine
structured data
opt.m optional, nullable, some, pointed
pair.m two data, product, cons
ref.m reference, mutable
row.m array, tuple, vector, product
s.m str, string, character array
list.m singly linked list
seq.m sequence, container, collection, generator
box.m packed data, inlined
key.m named, label, struct, record
map.m finite map, association, dictionary, finite function
hash.m hashtable, mutable and unordered map
set.m mathematical set
flow.m stream, buffer, port
regex.m regular expression, character pattern
json.m javascript object notation
hardware
core.m cpu, multi processor, hyperthread
spin.m concurrency synchronization lock
clock.m timer, frequency tick
operating system
sys.m system call, kernel call
posix.m portable operating system interface
dl.m dynamic linking loader, dynamic library
job.m unix job, process
thread.m system-mode parallelism
task.m user-mode parallelism, coroutine
time.m calendar, date and time, epoch
env.m environment, context
langauge
cast.m type cast, coercion
fail.m fatal exit, abort, exception, error
fact.m assert, check, test
trap.m signal, interrupt, fault
call.m call stack, stack trace
perf.m performance, profile, monitor
main.m top level, entry point, program start
file system
path.m unix file path, file name
file.m unix file description / number / handler
pipe.m unix pipeline, process input/output chain
in.m file 0, standard input
out.m file 1, standard output
put.m file 1, standard output, with newline
err.m file 2, standard error
log.m file 2, standard error, with newline
info.m file 4, informational output
trace.m file 5, performance time tracing
debug.m file 6, verbose debugging diagnostic
network
socket.m network file
net.m network address, ip address, host identification
openssl.m secure sockets layer
common_crypto.m common crypto in mac os x
http.m hypertext transfer protocol
httpd.m hypertext transfer protocol daemon, web server
library
zlib.m compression via gzip
blas.m basic linear algebra subprograms
dbm.m unix simple database
sqlite.m sql database engine
cocoa.m cocoa ui in mac os x
quant.m quantitative analysis
dynamodb.m amazon cloud key-value database
compiler
main.ma mach object file format for mac executables
spot.m file position, path and line and column
tag.m tagged union, enum, algebraic data type
name.m identifier, unique string, naming convention
op.m symbolic operator, prefix/infix/suffix function
meta.m reflection, string interpolation
term.m token, node, word, lexical form
exp.m expression, tree, phrase, parser form
group.m delimited, lexical sub-term, glue / associate
rule.m rewrite rule, pattern matching
rewrite.m tree rewrite
kind.m class of type
unify.m constraint resolve
def.m definition, equality
type.m class of term
step.m opcode, linear computation, flat execution
asm.m assembly, machine code

Minimal and Infimum

What is the minimal set of equations for programming? How do we derive the equivalence principle among types with finite symbols?

operator name equivalence
x,y Pair x y
%x Ref x Z, x
!x Opt x B, x
a=x Key a x x
a:x?y Fun a:x y *(x, y)
x+y Tag x y N, (x, y)
x^n Row x n x, x, ..., x
*x List x x, *x
+x Seq x !x + *x + x^
<x Flow x +x, +x
x/Z Set x N, x^
x-y Map x y *(x, y)
x/y Hash x y N, (x, y)^
  head,tail %ref !opt name=term arg:type?val tag+tag
  row^size *list +seq <flow set-Z bag-N 
  key-term path~node hash/term
code equivalence
a .f b f a b
[a, b, c] a, (b, (c, 0))
f a+b -c / d (f (a + b) (- c)) / d
a & b | c & d | e if a b (if c d e)
f x,y=a:t : u = b f = ((z = (a : t))? (x, y = z; b : u))
a . (A x & b? c; ?d) (tag a == A & b) & (x = item a; c) | d
f a
 g b
 h c
f a (g b) (h c)
| a & f d
| b & g e
| c
if a (f c) (if b (g e) c)

Hungry and Foolish

Join our mailing list and Slack to build the future!

I learned about serif and sans serif typefaces, about varying the amount of space between different letter combinations, about what makes great typography great. It was beautiful, historical, artistically subtle in a way that science can't capture, and I found it fascinating... It was the first computer with beautiful typography.

Stephen Tse <s@min-lang.com>.

You can’t perform that action at this time.