irken-compiler, Irken是一个静态类型的方案变体 或者像ML一样的lisp

分享于 

6分钟阅读

GitHub

  繁體 雙語
Irken is a statically typed variant of Scheme. Or a lisp-like variant of ML.
  • 源代码名称:irken-compiler
  • 源代码网址:http://www.github.com/samrushing/irken-compiler
  • irken-compiler源代码文档
  • irken-compiler源代码下载
  • Git URL:
    git://www.github.com/samrushing/irken-compiler.git
    Git Clone代码到本地:
    git clone http://www.github.com/samrushing/irken-compiler
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/samrushing/irken-compiler
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    

    Irken编译器

    irken logo

    Irken是一种静态类型的简化格式。 或者。像ML一样的lisp,取决于你的观点。 如果你不熟悉任何语言系列,Irken就是一种强类型的。编译的语言,类似于 MACROS 语法。 它使用类型推断和强大的类型系统,使你的速度与高级数据类型和更高安全性( 如c/C++ 语言)的编译语言的速度一样。

    新闻:

    20170329: 合并了字节码后端和虚拟机。

    已经在四个平台上进行了测试:

    • amd64 osx-10
    • amd64 freebsd-11
    • amd64 linux-ubuntu-xenial
    • aarch64 linux rpi-3

    是,这意味着Irken在ARMv8上工作 ! ( 所有三个后端) ( 详细信息见下面)。

    20170217: 合并了LLVM后端,加上许多新的&特性。

    简介/教程:

    http://dark.nightmare.com/rushing/irken/irken/lang.html

    熟悉该语言的最佳方法是阅读'自我'目录中的源代码,并浏览"测试"中的文件。

    Bootstrap:

    Irken现在自己编写,所以你需要对它进行 Bootstrap 编写。 你可以通过 python 脚本执行这里操作,或者手动。 [see https://github.com/samrushing/irken-compiler/wiki/bootstrapping-manually ]

    只需运行 make bootstrap:

     
    $ make bootstrap
    
    
    
     

    默认编译器是'clang',要使用 gcc:

    
    $ CC=gcc make bootstrap
    
    
    
    

    执行以下操作:

    • 使用自/bootstrap。byc生成和编译自/编译。
    • 这里二进制文件将用于重新编译编译器。
    • 二进制文件将重新编译编译器。
    • 步骤 2和 3的输出比较,它们应该相同。

    注意:不能使用优化进行编译,因为这禁用了Irken依赖的尾调用优化,否则堆栈将立即 overflow。

    插件安装:

    
    $ python util/install.py
    
    
    
    

    这将将支持文件安装到 /usr/local/lib/irken 中,并将二进制文件作为 /usr/local/bin/irken。 如果要使用不同的前缀( 像 /usr ),请编辑 util/install.pyself/context.scm,然后在安装前重新生成自/编译:

    
    $ self/compile self/compile.scm
    
    
    
    

    用法:

    下面是一个示例- 构建玩具VM并测试它:

    
    $ cd vm
    
    
    $ irken vm.scm
    
    
    $./vm tests/t11.byc
    
    
    
    

    VM执行一些运行'tak'基准 20次的字节码。

    你可以能希望尝试使用相对较小的示例来查看和理解编译器的'详细'输出:

    
    $ irken -v tests/t_while.scm
    
    
    
    

    编译C 输出时,Irken将使用CC和 CFLAGS 环境变量。 你可以尝试另一个编译器:

    
    $ CC="gcc" CFLAGS="-std=c99 -O2 -I." irken.. .
    
    
    
    

    后端LLVM后端:

    要使用LLVM后端:

    
    $ irken vm.scm -llvm
    
    
    
    

    注意:llvm后端目前假设 -flto 可以提供给 clang,这在 OS X 上有效,但在 FreeBSD & Linux上似乎失败了。 我想需要某种插件。 如果需要,可以从 flags.scm 中删除 -flto

    字节码后端:

    现在Irken提供了一个VM和字节码后端。 VM比编译的代码运行约 3 -4X慢,但是可以加速开发,因为edit-compile-run循环跳过了调用C 编译器。 处理编译器( 在我的机器上) 时的转换是 ~5s.

    要使用字节码/虚拟机:

    
    $ irken myfile.scm -b
    
    
    $ irkvm myfile.byc
    
    
    
    

    你还可以在虚拟机中运行编译器:

    
    $ irkvm self/compile.byc myfile.scm -b
    
    
    $ irkvm myfile.byc
    
    
    
    

    我目前使用一个通用的FFI接口,它应该可以从所有 3个后端使用。

    ARMv8

    我能够在 树莓派 3上运行 Irken,使用 pi64 分布。 良好的news: readcyclecounter 似乎在ARM上工作得很好。 错误的news: 用户模式没有读取权限的权限。 我可以通过注释包含/{header1.c,gc1.c} 中的所有rdtsc相关代码来完成所有工作。 我理解,读这个 register 是一个不好的主意,因这里我可以在源代码中 conditionalize。


    STA  lis  STAT  type  静态  VAR  
    相关文章