Free Pascal 本身是一种编程语言吗?或者,只是一个支持 Pascal 开发的编译器?

Is Free Pascal a Programming language by itself? Or, just a compiler supporting Pascal development?

当我搜索 Free Pascal 时,我感到非常困惑。 freepascal.org 表示它是一个编译器,用于在各种体系结构的系统上编译 Pascal 语言代码。但是,我也发现很少有在线发布的招聘 Free Pascal 程序员的工作。请对此有所了解。提前致谢!

正如网站所说,Free Pascal 是一个编译器。然而,各种编译器制造商——甚至包括 FOSS 编译器作者——将扩展合并到编译器编译语言的标准定义中并不少见。当您看到“x 程序员”的招聘广告时,其中 x 是一个特定的实现(例如,Free Pascal),这通常意味着 "this is the compiler we use; you should be familiar with it and with the extensions to the language that it supports".

在某些情况下 - 例如,早期的 Turbo Pascal - 它也可能指将特定产品用作完整的开发环境 (IDE),如果它包含一个,并且你会被期望还要熟悉 IDE 的各个组件。

Free Pascal 是一个支持多种方言的编译器。

很多像您这样的困惑来自过于简单化的文章,这些文章将 FPC/Lazarus 作为直接 Delphi 的替代品。 Lazarus/fpc的整个发展历程与TP和Delphi不同。

大多数方言模式是现有的方言,带有较小的扩展(通常是所有方言都支持的特性),一些方言(如 Objective Pascal)完全是 Free Pascal 的发明。

部分方言:

  • {$mode tp} - 涡轮帕斯卡方言
  • {$mode fpc} - 默认 模式。 Turbo Pascal 方言清除了剂量主义和 16 位主义(与 TP 几乎没有区别)
  • {$mode Delphi} - Delphi 方言 + 兼容扩展
  • {$mode DelphiUnicode} - Delphi 将字符串更改为 unicodestring 的方言,如 D2009(虽然不完整的运行时支持)
  • {$Mode objfpc} - Delphi 方言的免费 Pascal 版本。 (不兼容的扩展名)
  • {$mode macpascal} - 基于 Apple 的 pascal,主要是 Codewarrior 派生的
  • {$mode ISO} - 进程中的 ISO-7185 Pascal 模式。
  • {$modeswitch objectivec1} 和 {$modeswitch objectivec2},打开 objective C 对象模型更容易 COCOA接口,区别同objective C1.x和2.xlanguages/runtimes。这是 Objective 帕斯卡

主要缺失的是 ISO10206 (1990),第二个 Pascal 语言标准(大多数主要供应商都忽略了)

方言模式由单位决定,一个程序可以使用多种方言。模式 objfpc 是 Lazarus 的默认模式,因此是当今最常用的方言。

objfpc 模式下不兼容扩展的一个典型示例是需要 @ 来为过程(或方法)变量赋值。这是对某些情况的消歧,其中 proctype 是函数的 return 值。

$mode objfpc 的一些差异已在后来的 Delphi 版本中实现(例如 {$pointermath on},后者在 $mode objfpc 中是默认的)。 $Mode objfpc 在 C++

之后也有一个非常早(2007 年初)的泛型模型实现