Upload
-
View
1.611
Download
5
Embed Size (px)
DESCRIPTION
Citation preview
__ ____ __ \ \/ /\ \ \/ /\ ________________________________________________________\ /_/__ ________________________________________________________\ /_/__ / _______________________________________________________ ___/\ / _______________________________________________________ ___/\ / /\_____________________________________________________/ /\ \__\/ / /\_____________________________________________________/ /\ \__\/ / / / __________ _______ __ ___ __ __ / / /\_\ / / / __________ _______ __ ___ __ __ / / /\_\ ( ( / /___ ____/\ / _____/\ / /\,' _/\ / /\ / |\ / / / \_\ ( ( / /___ ____/\ / _____/\ / /\,' _/\ / /\ / |\ / / / \_\ \ \\ \__/ /\___\// /\____\// /,' ,'\_/ / / / / || / / / \ \\ \__/ /\___\// /\____\// /,' ,'\_/ / / / / || / / / \ \\ / / / / /_/_ / /' ,' ,' / / / / /| ||/ / / \ \\ / / / / /_/_ / /' ,' ,' / / / / /| ||/ / / ) )\ / / / / ____/\ / ,' ,' / / / / / | |/ / / ) )\ / / / / ____/\ / ,' ,' / / / / / | |/ / / / / / / / / / /\___\/ / /\ \,' / / / / / /| ' / / / / / / / / / /\___\/ / /\ \,' / / / / / /| ' / / ______/ / / / / / / /_/___ / / /\ \__ / / / / / / | / / ______/ / / / / / / /_/___ / / /\ \__ / / / / / / | / //_______/ / /_/ / /_______/\/_/ / \__/\/_/ / /_/ / |_/ //_______/ / /_/ / /_______/\/_/ / \__/\/_/ / /_/ / |_/ /\_______\/ \_\/ \_______\/\_\/ \_\/\_\/ \__/ \__/\_______\/ \_\/ \_______\/\_\/ \_\/\_\/ \__/ \__/
https://github.com/neuront/stekinWebsite: http://bitfoc.us/
Twitter: @neuront
概要•示例•特性•搞起
Samplesfunc fib(x) funcfunc add() return fib(x - 1) + fib(x - 2) if x < 2 return 1 return add()write(fib(4))
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))
Stekin ...•不是– 解释器– 字节码产生器 + 虚拟机
•而是编译器– 产生标准 C++ 代码– 间接产生可执行文件
借鉴 Python•缩进语法•禁止 tab 缩进•必须 4 空格缩进
借鉴 Haskell•无需担心类型– 常量类型由初值推导– 只有常量没有变量– 函数返回值类型由 return 推导
借鉴 C 艹•函数皆泛型– 实参类型推导
引用外部变量•静态链– 函数隐含外层栈帧基址参数– 由编译器传入
模块设计parser
grammar flowcheck
proto
instance output前端模块上下文无关
语义模块上下文敏感后端代码生成
模块设计•编译过程– 就是模块之间的 AST 变换– 同时逐层增加上下文信息
模块设计•错误检查– 逐层检查正确性• 函数重复定义 ? --- flowcheck• 条件类型为 bool ? --- instance• ...
现在什么个情况我想应该做点这样这样的东西貌似有趣的样子这东西用起来还行连这都不知道还说混这一行的
编•Stekin 使用 C++ 编写– 和 lex / yacc– 使用 C++ 2011 (0x) 标准特性
•后端产生标准 C++ 代码– 无需新标准支持就能编译的代码
License•LGPL– 使用到了 GMP
__________ __ __ __ __ __ __ ___ ______ __ /___ ____/\ / /\ / /\ ,', |\ / |\ / /\ / /\,' _/\ / ____/\ / /\ \__/ /\___\/ / / / / / / ,','| || / || / / / / /,' ,'\_/ / /\___\/ / / / / / / / /_/__/ / / ,',' | || / /| ||/ / / / /' ,' ,' ( ( / / / / / / / / _____ / / / /____; ;| / / | |/ / / / ,' ,' \ \\ / / / / / / / /\___/ / / / _____ / ; / / /| ' / / / /\ \,' ) )\ /_/ / / / / / / / / / / / / / / / / / / / | / / / / /\ \__ ____/ / / _\_\//_/ / /_/ / /_/ / /_/ / /_/ / /_/ / |_/ / /_/ / \__/\/_____/ / /_/\\_\/ \_\/ \_\/ \__/ \_\/ \__/ \__/ \_\/ \_\/\_____\/ \_\/
Stekin repo: https://github.com/neuront/stekin