fuz*_*Tew
5
javascript
c++
lisp
opengl
flash
我想开发(或者发现,如果已经在开发中)一个支持加速图形和声音的框架,该框架构建在一个足够灵活的系统上,可以编译成以下内容:
- 原生ppc/x86/x86_64/arm二进制文件或编译它们的语言
- JavaScript的
- ActionScript字节码或编译它的语言(ActionScript 3,Haxe)
- 可选Java
我想,例如,创建一个API,我可以打开窗口并进行类似OpenGL的调用,框架以相对有效的方式将其映射到带有画布对象的WebGL,Flash中的3d图形,带有EGL的OpenGL ES 2,或者X11,Windows或Cocoa窗口中的桌面OpenGL.
到目前为止,我一直在研究这些途径:
- 在Haxe建立游戏库
- 优点:
- 存在PHP,JavaScript,ActionScript字节码,C++的目标
- 高级,面向对象的语言
- 缺点:
- 不支持finally {}块或析构函数,使资源清理变得困难
- C++目标不允许室用于产生高度优化库 - 外国功能接口要求所有原始类型的包装对象装箱,仿佛写入绑定的脚本语言; 这些对于实时图形和音频来说是不合适的,尤其是导出低级功能.
- 似乎还不成熟
- 使用C预处理器创建翻译器,完全用宏编写程序
- 优点:
- 缺点:
- 这是一项艰巨的任务,可能是工作的错误工具
- CPP实现在功能支持方面差异很大(例如,尽管声称符合C99,但xcode cpp没有可变参数宏)
- 在这条路线上几乎没有优化空间
- 使用llvm支持多个后端,将c/c ++定位到Web语言
- 优点:
- 可以用c/c ++编写代码
- LLVM是一种非常成熟的高度优化编译器,可执行全局内联
- 动作脚本(炼金术)和javascript(emscripten)存在目标
- 缺点:
- Actionscript目标是封闭源,非维护和错误.
- Javascript目标不使用HTML5的功能进行适当的优化(例如带有类型数组的线性内存),并且不成熟
- LLVM目标必须从低级字节码转换,因此高级构造将丢失,并且通过翻译单个指令来创建膨胀的不可读代码,这对于未准备好的JIT进行优化可能更加困难."jump"指令会导致没有"goto"语句的语言出现问题.
- 使用libclang编写从C/C++到Web语言的翻译器
- 优点:
- 一个漂亮的解析库,可以轻松访问代码结构
- 可以用C/C++编写代码
- 赞助了Apple的开发者工作
- 缺点:
- 不完整的; 当前功能集针对IDE.基本运算符是未公开的,必须从返回的AST元素中手动解析以进行标识.
- 在编译之前翻译代码可能会放弃在c/c ++中假设的优化,例如内联.
- 为clang创建新的代码生成器以转换为Web语言
- 优点:
- 缺点:
- 没有API; 代码结构不稳定
- 比使用libclang要大得多的工作; 铿锵的内脏是复杂的
- 在Common Lisp中构建游戏库
- 优点:
- 灵活,完善的语言
- 广泛的内省应该可以轻松编写翻译人员
- 译员至少存在于javascript中
- 缺点:
我应该追求以下哪些途径?你知道其他任何系统或任何可能有用的系统吗?
像这样的一般项目是否已存在于某个地方?
谢谢你的任何意见.