16
__ __ __ __ \ \/ /\ \ \/ /\ ________________________________________________________\ /_/__ ________________________________________________________\ /_/__ / _______________________________________________________ ___/\ / _______________________________________________________ ___/\ / /\_____________________________________________________/ /\ \__\/ / /\_____________________________________________________/ /\ \__\/ / / / __________ _______ __ ___ __ __ / / /\_\ / / / __________ _______ __ ___ __ __ / / /\_\ ( ( / /___ ____/\ / _____/\ / /\,' _/\ / /\ / |\ / / / \_\ ( ( / /___ ____/\ / _____/\ / /\,' _/\ / /\ / |\ / / / \_\ \ \\ \__/ /\___\// /\____\// /,' ,'\_/ / / / / || / / / \ \\ \__/ /\___\// /\____\// /,' ,'\_/ / / / / || / / / \ \\ / / / / /_/_ / /' ,' ,' / / / / /| ||/ / / \ \\ / / / / /_/_ / /' ,' ,' / / / / /| ||/ / / ) )\ / / / / ____/\ / ,' ,' / / / / / | |/ / / ) )\ / / / / ____/\ / ,' ,' / / / / / | |/ / / / / / / / / / /\___\/ / /\ \,' / / / / / /| ' / / / / / / / / / /\___\/ / /\ \,' / / / / / /| ' / / ______/ / / / / / / /_/___ / / /\ \__ / / / / / / | / / ______/ / / / / / / /_/___ / / /\ \__ / / / / / / | / / /_______/ / /_/ / /_______/\/_/ / \__/\/_/ / /_/ / |_/ / /_______/ / /_/ / /_______/\/_/ / \__/\/_/ / /_/ / |_/ / \_______\/ \_\/ \_______\/\_\/ \_\/\_\/ \__/ \__/ \_______\/ \_\/ \_______\/\_\/ \_\/\_\/ \__/ \__/ https://github.com/neuront/steki n Website: http://bitfoc.us/ Twitter: @neuront

Stekin

  • Upload
    -

  • View
    1.611

  • Download
    5

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Stekin

__ ____ __ \ \/ /\ \ \/ /\ ________________________________________________________\ /_/__ ________________________________________________________\ /_/__ / _______________________________________________________ ___/\ / _______________________________________________________ ___/\ / /\_____________________________________________________/ /\ \__\/ / /\_____________________________________________________/ /\ \__\/ / / / __________ _______ __ ___ __ __ / / /\_\ / / / __________ _______ __ ___ __ __ / / /\_\ ( ( / /___ ____/\ / _____/\ / /\,' _/\ / /\ / |\ / / / \_\ ( ( / /___ ____/\ / _____/\ / /\,' _/\ / /\ / |\ / / / \_\ \ \\ \__/ /\___\// /\____\// /,' ,'\_/ / / / / || / / / \ \\ \__/ /\___\// /\____\// /,' ,'\_/ / / / / || / / / \ \\ / / / / /_/_ / /' ,' ,' / / / / /| ||/ / / \ \\ / / / / /_/_ / /' ,' ,' / / / / /| ||/ / / ) )\ / / / / ____/\ / ,' ,' / / / / / | |/ / / ) )\ / / / / ____/\ / ,' ,' / / / / / | |/ / / / / / / / / / /\___\/ / /\ \,' / / / / / /| ' / / / / / / / / / /\___\/ / /\ \,' / / / / / /| ' / / ______/ / / / / / / /_/___ / / /\ \__ / / / / / / | / / ______/ / / / / / / /_/___ / / /\ \__ / / / / / / | / //_______/ / /_/ / /_______/\/_/ / \__/\/_/ / /_/ / |_/ //_______/ / /_/ / /_______/\/_/ / \__/\/_/ / /_/ / |_/ /\_______\/ \_\/ \_______\/\_\/ \_\/\_\/ \__/ \__/\_______\/ \_\/ \_______\/\_\/ \_\/\_\/ \__/ \__/

https://github.com/neuront/stekinWebsite: http://bitfoc.us/

Twitter: @neuront

Page 2: Stekin

概要•示例•特性•搞起

Page 3: Stekin

Samplesfunc fib(x) funcfunc add() return fib(x - 1) + fib(x - 2) if x < 2 return 1 return add()write(fib(4))

Page 4: Stekin

Samplesfunc make_pair(x, y) func selector(s) return s(x, y) return selectorfunc first(x, _) return xfunc second(_, y) return y

x: make_pair(10, 6)write(x(first))write(x(second))

Page 5: Stekin

Stekin ...•不是– 解释器– 字节码产生器 + 虚拟机

•而是编译器– 产生标准 C++ 代码– 间接产生可执行文件

Page 6: Stekin

借鉴 Python•缩进语法•禁止 tab 缩进•必须 4 空格缩进

Page 7: Stekin

借鉴 Haskell•无需担心类型– 常量类型由初值推导– 只有常量没有变量– 函数返回值类型由 return 推导

Page 8: Stekin

借鉴 C 艹•函数皆泛型– 实参类型推导

Page 9: Stekin

引用外部变量•静态链– 函数隐含外层栈帧基址参数– 由编译器传入

Page 10: Stekin

模块设计parser

grammar flowcheck

proto

instance output前端模块上下文无关

语义模块上下文敏感后端代码生成

Page 11: Stekin

模块设计•编译过程– 就是模块之间的 AST 变换– 同时逐层增加上下文信息

Page 12: Stekin

模块设计•错误检查– 逐层检查正确性• 函数重复定义 ? --- flowcheck• 条件类型为 bool ? --- instance• ...

Page 13: Stekin

现在什么个情况我想应该做点这样这样的东西貌似有趣的样子这东西用起来还行连这都不知道还说混这一行的

Page 14: Stekin

编•Stekin 使用 C++ 编写– 和 lex / yacc– 使用 C++ 2011 (0x) 标准特性

•后端产生标准 C++ 代码– 无需新标准支持就能编译的代码

Page 15: Stekin

License•LGPL– 使用到了 GMP

Page 16: Stekin

__________ __ __ __ __ __ __ ___ ______ __ /___ ____/\ / /\ / /\ ,', |\ / |\ / /\ / /\,' _/\ / ____/\ / /\ \__/ /\___\/ / / / / / / ,','| || / || / / / / /,' ,'\_/ / /\___\/ / / / / / / / /_/__/ / / ,',' | || / /| ||/ / / / /' ,' ,' ( ( / / / / / / / / _____ / / / /____; ;| / / | |/ / / / ,' ,' \ \\ / / / / / / / /\___/ / / / _____ / ; / / /| ' / / / /\ \,' ) )\ /_/ / / / / / / / / / / / / / / / / / / / | / / / / /\ \__ ____/ / / _\_\//_/ / /_/ / /_/ / /_/ / /_/ / /_/ / |_/ / /_/ / \__/\/_____/ / /_/\\_\/ \_\/ \_\/ \__/ \_\/ \__/ \__/ \_\/ \_\/\_____\/ \_\/

Stekin repo: https://github.com/neuront/stekin