Unison 语言
概述
Unison 是一种现代的、静态类型的纯函数式语言,能够使用单个程序描述整个分布式系统。以下是一个分布式 map-reduce 实现的示例:
-- 注释以 `--` 开头
mapReduce loc fn ifEmpty reduce data = match split data with
Empty -> ifEmpty
One a -> fn a
Two left right ->
fl = forkAt loc '(mapReduce loc fn ifEmpty reduce !left)
fr = forkAt loc '(mapReduce loc fn ifEmpty reduce !right)
reduce (await fl) (await fr)
这个函数可以在本地模拟(可能会注入故障以进行测试),或者在分布式计算池上运行。有关如何构建此类分布式计算库的更深入介绍,请参阅这篇文章。
其他资源:
- 了解 Unison 背后的大想法
- 查看项目网站
- 在 Discord 聊天室中打招呼或潜水
- 探索 Unison 生态系统
- 学习 Unison
使用 Stack 构建
如果这些说明对您不适用或不完整,请提交问题。
构建使用 Stack。如果您还没有安装,请按照您平台的安装说明进行操作。(提示:brew update && brew install stack
)
$ git clone https://github.com/unisonweb/unison.git
$ cd unison
$ stack --version # 如果遇到问题,我们需要知道这个版本
$ stack build --fast --test && stack exec unison
要在从源代码构建时运行 Unison 本地 UI,您可以使用 /dev-ui-install.sh
脚本。它将下载 unison-local-ui 的最新版本,并将其放在 stack build
创建的 unison 可执行文件的预期位置。当您启动 unison 时,您将看到 Unison 本地 UI 运行的 URL。
有关开发过程中可能使用的构建命令列表,请参阅 development.markdown
。
语言服务器协议 (LSP)
此处查看语言服务器设置说明。
代码库服务器
当 ucm
启动时,它会启动一个由 Unison 本地 UI 使用的代码库 Web 服务器。它会选择一个随机端口和一个唯一的令牌,在启动 UI 时必须使用该令牌才能正确连接到服务器。
可以通过在启动 ucm
时提供环境变量来配置端口、主机和令牌:UCM_PORT
、UCM_HOST
和 UCM_TOKEN
。
配置
此处查看配置文档