<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-Hans-CN">
	<id>http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=Pascal</id>
	<title>Pascal - 版本历史</title>
	<link rel="self" type="application/atom+xml" href="http://wiki.foofun.cn//index.php?action=history&amp;feed=atom&amp;title=Pascal"/>
	<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Pascal&amp;action=history"/>
	<updated>2026-04-04T03:55:08Z</updated>
	<subtitle>本wiki上该页面的版本历史</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://wiki.foofun.cn//index.php?title=Pascal&amp;diff=1177&amp;oldid=prev</id>
		<title>Zhang3：创建页面，内容为“== 历史说明 == 最初的标准Pascal语言在很多方面都不同于今天大多数人所熟悉的Object Pascal语言，它简单得多，但也更有限。  Wirth博士本人并不打算将Pascal用于系统编程，他正在进行的语言进化研究是MODLA-2和OBERON语言。 两种语言都与Pascal以与C相似的方式相关，C# 和Java与C相关。 Oberon-2支持面向对象编程的所有概念。 与C语言家族相比，在从Pascal到Oberon…”</title>
		<link rel="alternate" type="text/html" href="http://wiki.foofun.cn//index.php?title=Pascal&amp;diff=1177&amp;oldid=prev"/>
		<updated>2022-04-23T00:58:32Z</updated>

		<summary type="html">&lt;p&gt;创建页面，内容为“== 历史说明 == 最初的标准Pascal语言在很多方面都不同于今天大多数人所熟悉的Object Pascal语言，它简单得多，但也更有限。  Wirth博士本人并不打算将Pascal用于系统编程，他正在进行的语言进化研究是MODLA-2和OBERON语言。 两种语言都与Pascal以与C相似的方式相关，C# 和Java与C相关。 Oberon-2支持面向对象编程的所有概念。 与C语言家族相比，在从Pascal到Oberon…”&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== 历史说明 ==&lt;br /&gt;
最初的标准Pascal语言在很多方面都不同于今天大多数人所熟悉的Object Pascal语言，它简单得多，但也更有限。&lt;br /&gt;
&lt;br /&gt;
Wirth博士本人并不打算将Pascal用于系统编程，他正在进行的语言进化研究是MODLA-2和OBERON语言。 两种语言都与Pascal以与C相似的方式相关，C# 和Java与C相关。 Oberon-2支持面向对象编程的所有概念。 与C语言家族相比，在从Pascal到Oberon的过程中，语言的定义变得更加紧凑，但语言本身变得更加强大。&lt;br /&gt;
&lt;br /&gt;
Pascal的继任者是为了解决Pascal在这方面的弱点而开发的。 然而，随着Object Pascal扩展（例如，单元、位运算符）的广泛采用，许多缺点（尤其是缺乏对单独编译的支持）都被消除了。 然而，在许多地方，Pascal作为玩具语言的名声一直存在，这是不公平的。&lt;br /&gt;
&lt;br /&gt;
=== 过去在操作系统开发中的使用 ===&lt;br /&gt;
Pascal在早期的Apple Mac中用作实现语言。&lt;br /&gt;
&lt;br /&gt;
OBERON作为PASCAL的继任者，已经被广泛地用于开发和研究操作系统(参见[http://www.oberon.ethz.ch/Native Oberon]和[http://bluebottle.ethz.ch BlueBottle])。&lt;br /&gt;
&lt;br /&gt;
== 常用工具 ==&lt;br /&gt;
今天最流行的pascal编译器似乎是Delphi和FreePascal编译器，还有少量的Turbo pascal。&lt;br /&gt;
&lt;br /&gt;
有一个商用的(显然是专有的)操作系统正在用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设备驱动程序]。&lt;br /&gt;
&lt;br /&gt;
不管怎样，FPC（FreePascal编译器）似乎更适合开发一个可移植的操作系统，因为它具有高度的可配置性，可以为大量平台生成代码。&lt;br /&gt;
&lt;br /&gt;
==PASCAL与汇编语言的接口==&lt;br /&gt;
就像在C中做内核时一样，Pascal编译器会破坏函数名称以使它们传达更多信息 (例如参数和返回类型)。 这意味着如果你只是写&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
unit KernelMain;&lt;br /&gt;
&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
procedure kernel_main;&lt;br /&gt;
begin&lt;br /&gt;
    ...&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
你最终可能会得到“THREADVARLIST_P$KERNEL_Main”，而不仅仅是“KERNEL_Main”作为函数名。 如果你使用的是FreePascal，则工具 &amp;lt;tt&amp;gt;objdump&amp;lt;/tt&amp;gt; 可以向你显示的符号表.o由编译器生成的文件，它将为你提供函数的 “真实” 名称。&lt;br /&gt;
&lt;br /&gt;
或者，你可以使用编译器附加语句来强制函数使用“公共名称”：&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
unit KernelMain;&lt;br /&gt;
&lt;br /&gt;
interface&lt;br /&gt;
&lt;br /&gt;
implementation&lt;br /&gt;
&lt;br /&gt;
procedure kernel_main; [public, alias: 'KERNEL_MAIN'];&lt;br /&gt;
begin&lt;br /&gt;
    ...&lt;br /&gt;
end;&lt;br /&gt;
&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
最后，简单地声明一个程序，就像你在为任何普通平台编写Pascal代码时所做的那样，将创建一个名为PASCALMAIN的主例程。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;pascal&amp;quot;&amp;gt;&lt;br /&gt;
program Kernel;&lt;br /&gt;
&lt;br /&gt;
uses Console,Stuff,Etc;&lt;br /&gt;
&lt;br /&gt;
var&lt;br /&gt;
 stuff: type;&lt;br /&gt;
&lt;br /&gt;
begin&lt;br /&gt;
{Your kernel here.}&lt;br /&gt;
end.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
也要注意，C和PASCAL不共享相同的调用约定。 最值得注意的是，PASCAL中的参数是从左向右推的，而C则是从右向左推的。 如果这给你带来了麻烦，你可以使用cdecl修饰符来强制编译器，因为你的Pascal过程的工作方式类似于C函数(这应该主要用于将Pascal代码与C代码接口)。 此外，在PASCAL中，被调用者函数由[[Stack#X86架构上的栈实例|堆栈清理]] 负责，而这通常是C/C环境中调用者的工作。&lt;br /&gt;
&lt;br /&gt;
==另见==&lt;br /&gt;
&lt;br /&gt;
* [[Pascal Bare Bones]]&lt;br /&gt;
*[[BOOTBOOT]] 载入器有一个用Pascal编写的64位高半内核示例&lt;br /&gt;
&lt;br /&gt;
[[Category:Languages]]&lt;/div&gt;</summary>
		<author><name>Zhang3</name></author>
	</entry>
</feed>