Janet 介绍
安装
Janet 为一些系统提供了预编译程序,但是如果你想开发 Janet,在非x86平台运行 Janet,或者使用最新版,就必须从源码编译 Janet。
Windows
在 Windows 上的推荐安装方式是从 GitHub 的发布页面下载安装程序,然后直接运行安装程序。也可以通过 Scoop 安装,但是已不再维护更新。
如果你想使用 jpm 来安装原生扩展,还需要安装 Visual Studio 才行,最好是较新的版本(2019或2017应该可以)。对64位版本,在 x64 Native Tools Command Prompt 中运行 jpm,32位版本在 Developer Command Prompt 中运行。在这些特殊的命令行中运行 jpm 是为了在安装插件时让它能够使用 Microsoft 编译器来编译原生模块。
“x64 Native Tools Command Prompt”是一个特定的命令提示符工具,它是与Visual Studio配套的。它为开发人员提供了一个用于64位应用程序开发的环境,其中包含了编译64位原生代码所需的工具和配置。
Linux
Arch Linux
通过 janet-lang-git 或 janet-lang 从 Arch user repositories 安装最新的 git 版本或最新的稳定版本。
其他Linux
见下面的从源码安装部分。
macOS
可以直接通过 homebrew 包管理器安装,要安装最新的 git 版本可以加上 --HEAD 参数。
brew install janet
从源码编译运行
如果你喜欢最新版的 Janet,尝试在非 macOS 或 Windows 平台上运行 Janet,或者想帮助开发 Janet,可以从源码构建 Jenet。Janet 只使用 Make 和批处理文件在 POSIX 和 Windows 上编译。可以通过在编译之前修改 src/conf/janetconf.h 头文件来配置 Janet。
非root安装(macOS和Unix-like)
要将 Janet(和 jpm)安装到 local 或临时目录,只需要设置 PREFIX 环境变量即可,默认是 /usr/local 。你还可以将 PREFIX/bin 添加到 path 环境变量,以便使用 janet 和 jpm 命令以及其他 jpm 安装的脚本。
export PREFIX="$HOME"/.local
make -j
make install
make install-jpm-git # you can also do this manually by reading the janet-lang/jpm.git readme
export PATH="$PREFIX"/bin:"$PATH"
macOS和Unix-like
在大多数平台,使用 Make 编译 Janet。编译结果(包括 janet 命令)会放到 build/ 目录下。
cd somewhere/my/projects/janet
make
make test
编译完成后,运行 make install 来安装 janet 命令和库。默认会安装到 /usr/local ,可以修改 Makefile 自定义。
接下来安装 Janet 包管理工具(jpm),克隆 https://github.com/janet-lang/jpm 仓库,进入仓库目录运行:
[sudo] janet bootstrap.janet
FreeBSD
FreeBSD 的编译指令和 Unix-like 很相似,但是需要使用 gmake 和 gcc 来编译。
cd somewhere/my/projects/janet
gmake CC=gcc
gmake test CC=gcc
Windows
- 安装 Visual Studio 或 Visual Studio Build Tools (你需要最新的 MSVC 编译工具和 Windows SDK 组件)
- 打开 Visual Studio 命令提示符(
cl.exe和link.exe需要在 PATH 环境变量中) cd到 Janet 目录- 运行
build_win编译 Janet - 运行
build_win test确保一切就绪
接下来
- 安装 https://github.com/wixtoolset/wix3/releases 并添加到 PATH 环境变量
- 打开 Visual Studio 命令提示符(
cl.exe和link.exe需要在 PATH 环境变量中) cd到 Janet 目录- 运行
build_win dist - 最后运行生成的
.msi安装文件
Meson
Janet 也提供了一个 Meson 编译文件。他不是当前主要支持的构建系统,但是可以在任何支持 Meson 的系统上运行。Meson 也提供了比 Make 和批处理文件更好的 IDE 和工具。
最小化构建
如果你想减小编译的 Janet 和库的大小,需要放弃一些特性并使用 -Os 编译。使用 Meson 如下:
git clone https://github.com/janet-lang/janet.git
cd janet
meson setup SmallBuild
cd SmallBuild
meson configure -Dsingle_threaded=true -Dassembler=false -Ddocstrings=false \-Dreduced_os=true -Dsourcemaps=false -Dpeg=false \-Dint_types=false --optimization=s -Ddebug=false
ninja
# ./janet should be about 40% smaller than the default build as of 2019-10-13
你也可以通过 Makefile 实现,修改 CFLAGS,并取消 src/conf/janetconf.h 文件中的一些行的注释。
第一个程序
根据传统,一个简单的 Janet 程序是打印 “Hello, World!”。将下面代码写入 hello.janet 文件,然后运行 janet hello.janet :
(print "Hello, World!")
控制台中应该会打印出”Hello, World!”,然后程序退出。现在你有了一个可以运行的 Janet 程序了。
不带任何参数的运行 janet 会进入 REPL(read-eval-print-loop)。这个模式下 Janet 像计算器一样运行,读取用户输入,求值,然后打印结果,无限循环。这个模式可以用来探索 Janet 或者用 Janet 进行原型设计。
hello world 是你可以写的最简单的程序了,仅有极少的语法构成。第一个元素是 print 符号。这是一个将参数打印到控制台的简单函数。第二个参数是字符串字面量 “Hello, World!”,它是 print 函数的唯一参数。最后 print 符号和字符串字面量被包裹到小括号中构成一个元组。在 Janet 中,圆括号和方括号构成了一个元组,当结果元组不是函数调用时通常使用方括号。上面的元组表示使用参数 "Hello, World!" 调用函数 print 。
Janet 中的所有操作都采用前缀表示法:元组中的第一个值是操作的名称,剩余部分是传给它的参数。这和函数调用很相似,在 Janet 中这一思想扩展到了算术运算和流程控制。
第二个程序
如果你创建了一个 “main” 函数,运行脚本时 janet 会自动帮你调用这个函数。下面是一个示例,它会打印出传给程序的命令行参数元组,参数长度,并问候参数中的第一个人。
#!/usr/bin/env janet(defn print-greeting[greetee](print "Hello, " greetee "!"))(defn main[& args](pp args) # pretty-prints the args tuple(print (length args))(print-greeting (get args 1)))
输出:
$ ./foo.janet World Famous Fries
("./foo.janet" "World" "Famous" "Fries")
4
Hello, World!
核心库
Janet 有一个超过300个函数和宏的内建核心库。使用它们可以提高 Janet 编程效率。
当你想查看某个绑定的简短文档时,可以在 REPL 中使用 doc 宏来查看文档。
(doc defn) # -> Prints the documentation for "defn"
使用 doc 宏不带任何参数可以打印出所有全局绑定列表。
(doc)
注意:参加 all-bingings 函数查看相关功能。
你也可以在网页上浏览 core library API 文档。
