Cowgol是一种实验性的,适用于非常小的系统的ADA灵感语言(6502,Z80等)。它不同,因为它的'旨在自托管在这些设备上:最终目标是能够重建整个编译器onan 8位微量,虽然我们'尚未存在。
桌面驱动,易于端口后端(80386后端是1.2kloc,需要其他编译器更改)
微小:80386 Linux编译器二进制文件是70KB(包括ELF开销)8080 CP / M编译器58KB(跨越两个可执行文件)
现在它在一个状态下,您可以在一个状态下构建PC上的交叉编译器,然后使用它来编译所选设备的编译器,如果它' Smallenough' smallengenge and fit fit it prefe程式。实际上你和#39; LLBE在PC上交叉编译。
6303,在6303版的fuzix上(如果有人知道Flex并希望撕裂这项工作,请联系)。
6502解释字节码,在BBC Micro带有管第二处理器;这与上面就像上面一样,但生成了基于堆栈的字节码,其中包含了基于堆栈的字节码。它'得更小,但也慢。
68000,在Atari St TOS(虽然大多数系统呼叫aren' t挂钩的upyet,所以你可以' t做任何事情,而不是打印的东西)和linux m68k(如果youcan仍然找到一个运行的机器)。
8086,在DOS上(它发出带有64KB代码和64KB数据的小模式.exe文件)。
通用和可怕的C.这会产生非常大的慢速二进制文件,如果您没有' T.T' T. The Cowgolcompiler。
基本的。是的,真的---有一个后端,它将转换为terriblemicrosoft基本。我主要作为一个笑话,只支持一部分中语言,但它确实有效。
(它用于支持在TheApollo SpaceCraft中使用的Apollo指南,但我必须在重写Thecompiler和我没有重新制作AGC后端的同时删除代码生成器。)
带有管第二处理器的BBC微型。遵循此链接的LientIn-BrowerDemocourtesy的Matt Godbolt' s优秀的JSBEEB模拟器:按Shift + F12(' s偏移+ bbc micro的shift + break + break + break + break + break + break + bread + bread + back and bbc micro)启动编译器,当它' sdone类型出去逃避结果。这是生成完整的65c02 machinecode。
许多其他平台都有未完成的系统调用库,因此在复选者测试所有通行证和编译器时,他们赢得了' t工作如果你运行它们。如果有必要,这应该是易于修复的 - 让我知道并询问。(我尚无第39岁。)其他平台有工作系统Calllibraries,但CowGol不提供汇编程序,所以您需要源您所在(例如:MS-DOS和ATARI ST TOS)。所以编译器技术上工作;你只能做任何有用的东西。
#释放在参数中的节点树。这比它更令人兴奋#应该是因为我们没有递归。##编辑注意:实际上这个子程序在编译器#源代码中不再存在,因为我用更简单更好地替换它。没有#物质,榜样仍然存在.sub discard(node:[node])是var pending:= node;挂起!=(0作为[节点])循环节点:=挂起;挂起:= node.dlink; #取消链接和推动任何孩子。如果node.left!=(0为[节点]),那么node.left.dlink:= pending;挂起:= node.left;万一;如果node.right!=(0作为[节点]),那么node.Right.Dlink:=挂起;挂起:= node.right;万一; #现在免费这个节点。免费(节点为[UINT8]);结束循环;结束子;
没有递归和有限的堆栈使用(大多数平台I' m targetingdon' t真的支持堆栈框架)
我始终对编译器感兴趣,并有各种其他的其他其他方案:阿姆斯特丹编译器Kitand Cowbel,名称二。 (我的WebsiteContains的语言部分是公平的条目。从1998年仍然存在的最旧的编译器。)
Cowgol是基于我从这一切学到的什么。它&#39应该是有用的,而不仅仅是一个玩具。我' m令人愉快的是,所生成的代码是多么好的惊喜;不是那样的话,GCC的主要代码统一体二进制文件是23552KB,而CowGol' s是65kb ...
从源中查看GitHub存储库和博合金。 (或者,您可以从最新版本下载源快照,但是我提出了更好的GitHub存储库,因为我不经常打算暗示粗糙的正式版本。)构建说明是在他们的所有页面上。
通过创建一个githubissue询问,或者在[email protected]上发送发出电子邮件。 (但是我更喜欢你一个问题,所以其他人可以看到它们。)
你想了解关于Cowgol的一切,语言; TL; DR:非常强烈的类型; ada样语法;多个返回参数; NORECUREION;有限的混叠;嵌套功能。
牛肝,工具链概述; TL; DR:单乘客前锋;全局分析仪和饲养到第三派对的链接器;用纯正的牛头狼写。
它' s' s oder' s欠发达的,到目前为止,只有一个用在牛头掌中写的实际编程,这是牛歌编译器。 (和牛仔链和牛牛。)
没有空。这个' s语义,但现在你必须投射0拓展类型来使用null。 (我知道Don' t的语言有null,但它们'在大型机器上都比牛肝')瞄准。)
牛戈尔主要由我写的大卫给出了大卫,额外的贡献是从@ github打碎的贡献。在[email protected]上随时与Meby邮件联系。您也可能喜欢Tovisit我的网站;那么有可能或可能在那里有吸引力。
CowGol是在2-Clase BSDlicense下提供的开源软件。 SimplededSummary:做你喜欢的东西,只是不要声称你写了它。
例外是第三个Party目录的内容,由其他人撰写,并未由此许可证涵盖。此目录ASA整体包含GPL软件,这意味着如果您重新分配了entiFirectory,则必须符合GPL的条款。
第三个_Party / Lib6502包含Lib6502库的黑客副本,即©2005 IAN Plumarta,可根据麻省理工学院许可证提供。有关全文,请参见第三个_party / lib6502 / copying.lib6502。
第三个_party / zmac包含venable zmac 8080和z80assembler的副本。它' s在公共领域。
第三个_party / apout包含一个主要由Warren Toomey和Erecwards编写的APOUT PDP-11 SYSV二进制模拟器的副本。它以麻省理工学院执照的条款分发;查看fulltext的第三个_party / apout /版权。
第三_Party / RC2014EMU包含由alan Cox编写的RC2014仿真器的子集。它根据GPL 3.0许可的条款分发;请参阅第三个_party / rc2014emu /复制全文。
第三个_party / emu2构成由dmsc @ github(和其他)编写的emu2 dos仿真器的副本。它根据GPL 2.0LICENSE的条款分发;查看全文的第三个_party / emu2 /许可证。
第三个_party / djlink包含[email protected]编写的djlink 16位链接器的副本。它是根据GPL 2.0 Licesne的条款分发;有关全文,请参阅第三个_party / djlink /复制,其中包含额外的授予授予第三个_party / djlink / copying.dj。
第三个_Party / Musashi包含由Karl Stenerud编写的Musashi 68000仿真库的副本。它可以根据弥留的条款分配;有关全文,请参见第三个_party / musashi / readme.txt。它还包含John R. Hauser' S软空间库,可分配的底部的自定义但Mit牌照的副本;请参阅第三个_party / musashi / softfloat / readme.txtfor the text。