Red程序被编译成Red/System代码,并与Red标准库链接,而Red标准库则大部分采用Red/System,少部分用Red自身写就。该库目前未压缩体积约为200KB。我们的目标是在发行1.0版时,将其控制在500KB左右。
Red与Red/System紧密集成,有数种方法在Red语言中调用或内嵌Red/System代码。其中最有用的一种是“常规”函数类型,它允许定义一个Red函数,其函数体为纯Red/System代码。Red语言会为你自动完成传递参数和返回值的装箱/拆箱操作。有了Red/System的帮助,Red语言便可以解决从硬件到DSL的任何抽象层次,从而成为真正的首个全栈编程语言。
因此,Red依靠Red/System工具链来生成可执行文件。该编译器和链接器目前支持的目标平台包括:
CPU:IA-32、ARMv5和有限的AVR-8支持(Atmel328P)
文件格式:PE、ELF、Mach-o、.dll、so、APK,以及Windows驱动程序
计划支持的其他格式:
后端:IA-64、ARMv7、asm.js、JVM、CLR、Dalvik,以及LLVM
文件格式:.lib、.a、.ipa,各种驱动程序格式,war(Web归档)
除此之外,Red语言还依靠桥接技术,以访问像Java那样的虚拟机,尤其是提供对Android的支持。事实是,目前已可通过Red/Java桥,采用JNI技术来从Red程序远程控制Java和Android API,并获取事件返回。2014年晚些时候,我们还计划推出Red/Obj-C桥,以访问iOS和Cocoa API。
尽管后端和文件格式的组合可能性繁多,但确定选用何种目标平台的Red配置文件却短小精悍。这就使得交叉编译变得非常简单,例如:
从Linux或Mac平台上生成一个Windows平台的可执行文件:
$ red -t Windows hello.red从Windows平台上生成一个Raspberry Pi平台的可执行文件:
$ red -t Linux-ARM hello.red以下是关于这些目标平台的定义:
Windows [ OS: 'Windows format: 'PE target: 'IA-32 type: 'exe sub-system: 'GUI ] Linux-ARM [ OS: 'Linux format: 'ELF target: 'ARM type: 'exe base-address: 32768 ; 8000h dynamic-linker: "/lib/ld-linux.so.3" ]Red语言的开发工作仍然任重道远。目前它的工具链部分使用Rebol2完成自举(指Red语言和Red/System编译器+链接器)。由于需支持JIT编译动态生成的Red/System代码,Red语言必须有自承载能力,所以所有工具链需要在1.0版之后用Red语言重写。新的工具链将能生成真正包含全部特征的Red语言,并同时为两种编译器提供优化层,生成更小更快的代码。目前,Red/System的性能实测下来大约比C慢4~6倍,这对于未经优化的本地代码而言已经不错了。
性能还会随着即将到来的并发支持而得到提升。今年晚些时候,Red语言会提供一个完全异步I/O接口,以及M:N线程模型(M个轻量级线程,分发到N个OS线程中去)。根据目前的计划,更高级别的抽象会使用Actor模型,这是为了实现简单而高效的共享状态同步。从用户的角度看,Actor也只是个一等的数据类型,和使用任何其他对象都差不多,很少或者根本没有额外的语法负担。然而,考虑到Go语言的goroutine模型的拥趸之多,我们仍在斟酌各种选项以决定使用Red语言的最佳模式。
Red语言是一个开源项目,采用BSD许可证。作为语言的作者,我全职工作于此业已三年。项目资金来自用户和支持者捐款。自2011年首次发布以来,得到的支持已然令我难以置信。开发者对于Red语言可提供的一切感到惊喜,尤其是那些了解Rebol语言能力的用户。Red语言对于他们中的大多数人,包括我自己,都是梦寐以求的工具。Red语言再次将乐趣带回了程序设计,将复杂性拒之门外,让程序员们再次感觉控制在握,就像那曾经经历的8位机时代。
从中国开始由于Red语言将具备强大的Android支持,又格外适合新入行的程序员,我们希望它能够被世界上最大的Android市场——中国所接受。在中国,程序员数量巨大,而最有才华的Red语言贡献者中,就有一位是来中国上海的程序员谢晴天。
你可以从下载Red二进制文件。可执行文件只有半兆字节,包含了整个工具链,其中包括Red语言和Red/System编译器,一个带有可选控制台的解释器,还有目前支持30余种数据类型的整个标准库。你也可以尝试虽然老旧一些,但比较完整的Rebol2解释器,尤其是在测试GUI DSL时。