Haskell-style functional programming language running on Erlang VM.
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 4 年前 | ||
| 5 年前 | ||
| 4 年前 | ||
| 5 年前 | ||
| 4 年前 | ||
| 5 年前 | ||
| 4 年前 | ||
| 4 年前 | ||
| 5 年前 | ||
| 6 年前 | ||
| 5 年前 | ||
| 4 年前 | ||
| 4 年前 | ||
| 5 年前 | ||
| 4 年前 |
Hamler 编程语言
Hamler - 在 Erlang 虚拟机上运行的 Haskell 风格的函数式编程语言。
Hamler 是一种强类型语言,具备编译时类型检查和内置的并发与分布式支持。
Hamler 使产业能够构建下一代可扩展、可靠、实时的应用程序,尤其是在 5G、物联网和边缘计算领域。
为什么选择 Hamler?
近十年来,我们一直在开发基于 Erlang/OTP 的软件系统,特别是我们的主要产品 EMQ X - 可扩展的开源 MQTT 代理。因此,我们始终坚信 Erlang 是工程学上的杰作。凭借惊人的并发、分布式和容错能力,它是少数几种能够妥善处理并发和软实时的通用语言平台之一。
然而,从编写 Erlang 的所有经验中,我们相信以下特性可以帮助 Erlang 程序员更好地适应即将到来的 5G、物联网和边缘编程浪潮,并吸引更多人使用 BEAM。
- 编译时类型检查和类型引用
- ADT(代数数据类型)、函数组合、类型类
- 对繁荣社区更友好的语法
- 函数器(Functor)、应用器(Applicative)和单体(Monad)...
现在,所有这些特性都已经在 Hamler 编程语言中提供。
特性
- 函数式编程
- Haskell 和 ML 风格
- 编译时类型检查/推断
- 代数数据类型(ADT)
- 函数、高阶函数
- 柯里化和部分应用
- 模式匹配和守卫
- 列表推导
- 应用器和单体
- 先进的模块系统
- 内置并发
设计
Hamler 编译器架构如下所示:

Hamler 0.1 编译器是从 PureScript 0.13.6 分叉而来。Hamler 源代码被解析以生成 CST,然后经过 CST -> AST -> CoreFn 的语法树转换、语法分析和类型检查后生成 CoreErlang 的中间表示(IR)。代码随后由 Erlang 编译器生成最终的 Beam 字节码。
安装
通过 GitHub Release 获取安装包
Windows 版本的包即将推出...
Linux
$ tar zxvf hamler-$version.tgz -C /usr/lib/
$ ln -s /usr/lib/hamler/bin/hamler /usr/bin/hamler
CentOS 7
$ rpm -ivh hamler-$version-1.el7.x86_64.rpm
德宾 8 / 德宾 9 / 德宾 10 / 乌班图 16.04 / 乌班图 18.04 / 乌班图 20.04
$ dpkg -i hamler_$version_amd64.deb
家酿(macOS)
$ brew tap hamler-lang/hamler
$ brew install hamler
项目结构布局
├── .github/workflows # ci
├── app # hamler commands, such as `compile`, `repl`, ...
├── deploy
├── doc # link to hamler documents
├── lib # hamler standard libraries
∣ ├── Control # common control structures, concurrent Process, and OTP behaviours.
∣ ├── Data # commonly used data structures and functions
∣ ├── Database # common databases in erlang, such as ETS, DETS, and Mnesia
∣ ├── Foreign
∣ ├── Network # hamler network libraries.
∣ ├── System # system libraries including IO, VM, OS, Env, File, Random, Timer, and Logger.
∣ ├── Test # hamler QuickCheck test framework
∣ ├── Foreign.hm # hamler FFI functions
∣ └── Prelude.hm # functions exported by default
├── repl
∣ └── replsrv # hamler REPL server
├── src/Language # hamler compiler source
∣ ├── Hamler
∣ ∣ ├── CodeGen.hs # convert CoreFn to CoreErlang
∣ ∣ ├── Make
∣ ∣ ├── Make.hs
∣ ∣ └── Util.hs
∣ └── Hamler.hs
├── tests
∣ ├── Test # test cases for hamler libraries
∣ ∣ ├── Control
∣ ∣ ├── Data
∣ ∣ ├── Database
∣ ∣ ├── Network
∣ ∣ └── System
∣ ├── Test.hm # entrance to execute test cases
∣ └── Main.hs
├── .gitignore
├── LICENSE
├── Makefile
├── README.md
├── Setup.hs
├── hamler.cabal
├── package.yaml
└── stack.yaml
从源代码构建
必备条件
- Erlang/OTP 版本大于等于23
- Cabal
构建步骤
-
从git仓库克隆hamler
$ git clone https://github.com/hamler-lang/hamler.git $ cd hamler -
配置环境
$ export LC_ALL=en_US.UTF-8 -
构建项目
$ make -
运行测试
$ make test -
安装hamler
$ sudo 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" m
> -- keys, values
> keys = Map.keys m
> values = Map.values m
文档
社区、讨论与支持
您可以通过以下渠道联系 Hamler 社区及核心团队:
贡献
若要为 Hamler 项目做出贡献:
- 反馈问题:将任何错误或问题提交至 hamler/issues
- 贡献代码:参考 路线图 以指导新功能的开发。派生项目,并将功能请求提交至 hamler-lang/hamler
- 提交提案:派生 hamler-wiki 项目并提交拉取请求
核心团队
Hamler 核心团队目前来自 EMQ Technologies Co., Ltd.:
- Feng Lee:Hamler 语言的开发者
- Yang M:Hamler 编译器的实现者
- S Hu:文档维护者
- Shawn:贡献了 rebar3_hamler 插件
- Rory Z:贡献了 homebrew 安装包
- wivwiv:hamler-lang.org 网站的设计者
- CrazyWisdom:hamler-lang.org 的维护者
- ysfscream:hamler-lang.org 的维护者
- juan6666:Hamler 语言标志的设计者
许可与致谢
我们非常感谢 PureScript 团队及社区多年来的努力,打造了出色的编译器,尤其是 CoreFn 及其出色的适应性。
Hamler 语言项目遵循 BSD3 许可,详情请见 LICENSE。
关于 EMQ
EMQ 是一家提供高度可扩展、实时消息和流数据处理平台的开源软件公司,服务于 5G 时代的物联网应用。