Upcoming SlideShare
×

# Stekin

1,697 views
1,609 views

Published on

1 Like
Statistics
Notes
• Full Name
Comment goes here.

Are you sure you want to Yes No
• Be the first to comment

Views
Total views
1,697
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
16
0
Likes
1
Embeds 0
No embeds

No notes for slide

### Stekin

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