查看“Pascal”的源代码
←
Pascal
跳到导航
跳到搜索
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
== 历史说明 == 最初的标准Pascal语言在很多方面都不同于今天大多数人所熟悉的Object Pascal语言,它简单得多,但也更有限。 Wirth博士本人并不打算将Pascal用于系统编程,他正在进行的语言进化研究是MODLA-2和OBERON语言。 两种语言都与Pascal以与C相似的方式相关,C# 和Java与C相关。 Oberon-2支持面向对象编程的所有概念。 与C语言家族相比,在从Pascal到Oberon的过程中,语言的定义变得更加紧凑,但语言本身变得更加强大。 Pascal的继任者是为了解决Pascal在这方面的弱点而开发的。 然而,随着Object Pascal扩展(例如,单元、位运算符)的广泛采用,许多缺点(尤其是缺乏对单独编译的支持)都被消除了。 然而,在许多地方,Pascal作为玩具语言的名声一直存在,这是不公平的。 === 过去在操作系统开发中的使用 === Pascal在早期的Apple Mac中用作实现语言。 OBERON作为PASCAL的继任者,已经被广泛地用于开发和研究操作系统(参见[http://www.oberon.ethz.ch/Native Oberon]和[http://bluebottle.ethz.ch BlueBottle])。 == 常用工具 == 今天最流行的pascal编译器似乎是Delphi和FreePascal编译器,还有少量的Turbo pascal。 有一个商用的(显然是专有的)操作系统正在用Delphi语言开发,[http://www.tattsoft.com/index.php/products/9-operating-systems/10-classios-an-object-pascal-operating-system.html ClassiOS]是Windows的克隆(以前是[http://www.tattsoft.com/index.php/products/petrosr.html Petros®],用内部的Pascal编译器开发的),由Peter Tattam(最出名的是他在DOS上的tcp/ip协议栈,trumppet系列产品)开发。 他也将Delphi定制为 [http://web.archive.org/web/20110219051243/http://petertattam.com/?p=19 生产Windows设备驱动程序]。 不管怎样,FPC(FreePascal编译器)似乎更适合开发一个可移植的操作系统,因为它具有高度的可配置性,可以为大量平台生成代码。 ==PASCAL与汇编语言的接口== 就像在C中做内核时一样,Pascal编译器会破坏函数名称以使它们传达更多信息 (例如参数和返回类型)。 这意味着如果你只是写 <source lang="pascal"> unit KernelMain; interface implementation procedure kernel_main; begin ... end; end. </source> 你最终可能会得到“THREADVARLIST_P$KERNEL_Main”,而不仅仅是“KERNEL_Main”作为函数名。 如果你使用的是FreePascal,则工具 <tt>objdump</tt> 可以向你显示的符号表.o由编译器生成的文件,它将为你提供函数的 “真实” 名称。 或者,你可以使用编译器附加语句来强制函数使用“公共名称”: <source lang="pascal"> unit KernelMain; interface implementation procedure kernel_main; [public, alias: 'KERNEL_MAIN']; begin ... end; end. </source> 最后,简单地声明一个程序,就像你在为任何普通平台编写Pascal代码时所做的那样,将创建一个名为PASCALMAIN的主例程。 <source lang="pascal"> program Kernel; uses Console,Stuff,Etc; var stuff: type; begin {Your kernel here.} end. </source> 也要注意,C和PASCAL不共享相同的调用约定。 最值得注意的是,PASCAL中的参数是从左向右推的,而C则是从右向左推的。 如果这给你带来了麻烦,你可以使用cdecl修饰符来强制编译器,因为你的Pascal过程的工作方式类似于C函数(这应该主要用于将Pascal代码与C代码接口)。 此外,在PASCAL中,被调用者函数由[[Stack#X86架构上的栈实例|堆栈清理]] 负责,而这通常是C/C环境中调用者的工作。 ==另见== * [[Pascal Bare Bones]] *[[BOOTBOOT]] 载入器有一个用Pascal编写的64位高半内核示例 [[Category:Languages]]
返回至“
Pascal
”。
导航菜单
个人工具
登录
命名空间
页面
讨论
变体
已展开
已折叠
查看
阅读
查看源代码
查看历史
更多
已展开
已折叠
搜索
导航
首页
最近更改
随机页面
MediaWiki帮助
工具
链入页面
相关更改
特殊页面
页面信息