hamler:Haskell-style functional programming language running on Erlang VM.

Haskell-style functional programming language running on Erlang VM.

分支1Tags19
文件最后提交记录最后更新时间
4 年前
5 年前
4 年前
5 年前
4 年前
5 年前
4 年前
4 年前
5 年前
6 年前
5 年前
4 年前
4 年前
5 年前
4 年前

Hamler 编程语言

GitHub Release Docker Pulls Slack Twitter Community

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-compiler

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

从源代码构建

必备条件

构建步骤

  1. 从git仓库克隆hamler

    $ git clone https://github.com/hamler-lang/hamler.git
    $ cd hamler
    
  2. 配置环境

    $ export LC_ALL=en_US.UTF-8
    
  3. 构建项目

    $ make
    
  4. 运行测试

    $ make test
    
  5. 安装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 核心团队目前来自 EMQ Technologies Co., Ltd.

许可与致谢

我们非常感谢 PureScript 团队及社区多年来的努力,打造了出色的编译器,尤其是 CoreFn 及其出色的适应性。

Hamler 语言项目遵循 BSD3 许可,详情请见 LICENSE

关于 EMQ

EMQ 是一家提供高度可扩展、实时消息和流数据处理平台的开源软件公司,服务于 5G 时代的物联网应用。

项目介绍

运行在Erlang虚拟机上的 Haskell 风格的函数式编程语言。【此简介由AI生成】

定制我的领域
291.04 K39访问 GitHub