title |
---|
The Hamler Programming Language |
Hamler is a strongly-typed language with compile-time typechecking and built-in support for concurrency and distribution.
Hamler empowers industries to build the next generation of scalable, reliable, realtime applications, especially for 5G, IoT and edge computing.
For almost a decade, we have been developing software systems based on Erlang/OTP, especially our main product EMQ X - the scalable open-source MQTT broker. So, we have always believed that Erlang is a masterpiece of engineering. With amazing concurrency, distribution and fault tolerance, it is one of the few general-purpose language platforms able to properly handle concurrency and soft realtime.
However, from all the experience writing Erlang, we believe that the following features can help Erlang programmer better adapt to the coming wave of 5G, IoT and edge-programming and attract more people for using BEAM.
- Compile-time type checking and type reference
- ADTs, Function Composition, Type Classes
- More friendly syntax for prosperous communities
- Functor, Applicative and Monad...:)
Now all the features are avaliable in the Hamler programming language.
- Functional programming
- Haskell and ML-style syntax
- Compile-time type Checking/Inference
- Algebraic data type (ADT)
- Functions, higher-order functions
- Currying and partial application
- Pattern matching, and Guards
- List comprehension
- Applicative and Monad
- Advanced module system
- Built-in concurrency
The Hamler compiler architecture is shown as below:
The Hamler 0.1 compiler was forked from PureScript 0.13.6. The Hamler source code is parsed to generate CST, then CoreErlang's IR is generated after CST -> AST -> CoreFn's syntax tree transformation, syntax analysis and type checking. The code is then used by the Erlang compiler to generate the final Beam bytecode.
Get installation packages from Github Release
Note: packages for windows will be coming soon...
Linux
$ tar zxvf hamler-$version.tgz -C /usr/lib/hamler
$ ln -s /usr/lib/hamler/bin/hamer /usr/bin/hamler
Centos 7
$ rpm -ivh hamler-$version-1.el7.x86_64.rpm
Debian 8 / Debian 9 / Debian 10 / Ubuntu 16.04 / Ubuntu 18.04 / Ubuntu 20.04
$ dpkg -i hamler_$version_amd64.deb
Homebrew(macOS)
brew tap hamler-lang/hamler
brew install hamler
Build from source code(macOS)
-
Install Erlang
brew install erlang@23
-
Install Stack
brew install haskell-stack
-
Clone hamler from the git repo
git clone https://github.com/hamler-lang/hamler.git
-
Install hamler
cd hamler make make install
mkdir demo-project
cd demo-project
hamler init
make
make run
hamler repl
> -- List, range and enums
> [1,2,3]
> [1..10]
> ['a'..'z']
> -- erlang style maps
> import Data.Map as Map
> -- New map
> m = #{"foo" => "bar", "bar" => "foo"}
> -- Match Map
> #{"foo" := a, "bar" := b} = m
> -- get, put
> Map.get "foo" m -- a = "bar"
> Map.get "bar" m -- b = "foo"
> m1 = Map.put "key" "val"
> -- keys, values
> keys = Map.keys m
> values = Map.values m
- Cheatsheet
- Why Hamler?
- Quick Start
- Basic Types, Functions and Operators
- More Types and Pattern Matching
- High Order Functions And Recursions
- Type Classes
- Applicative and Monad
- Foreign Language Interface
- Data Types Mapping
- Message Passing Concurrency
- OTP Behaviours
- Node and Distributed Erlang
- Differences From Erlang
- FAQ
You can reach the Hamler community and core team via the following channels:
To contribute to Hamler project:
- Report issues: submit any bugs, issues to hamler/issues
- Contribute code: Fork the project, and submit feature requests to hamler-lang/hamler
- Submit a proposal: Fork the hamler-wiki project and submit pull request
The Hamler core team comes from EMQ Technologies Co., Ltd. now:
- Feng Lee: Designer of Hamler Language
- Yang M: Implemented Hamler Compiler
- S Hu: Maintainer of the documentations
- Shawn: Contributed rebar3_hamler plugin
- Rory Z: Contributed homebrew install package
- wivwiv: Designer of hamler-lang.org website
- CrazyWisdom: Maintainer of hamler-lang.org
- ysfscream: Maintainer of hamler-lang.org
- juan6666:Designer of Hamler language logo
We would like to express our great appreciation to the PureScript team and community for all years of efforts making its amazing compiler, especially CoreFn and its incredible adaptability.
The hamler language project is licensed under BSD3, see LICENSE.
EMQ is an open-source software company providing highly-scalable, real-time messaging and streaming platform for IoT applications in 5G Era.