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

Vij*_*jay 3 pascal freepascal

当我搜索Free Pascal时,我非常困惑.freepascal.org表示它是一个编译器,用于在各种体系结构的系统上编译Pascal语言代码.但是,我也发现在网上寻找免费Pascal程序员的工作很少.请详细说明一下.提前致谢!

Mar*_*ort 13

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

很多像你这样的困惑来自过于简化的文章,这些文章将FPC/Lazarus作为dropin Delphi的替代品.Lazarus/fpc的整个开发历史与TP和Delphi不同.

大多数方言模式都是现有的方言,具有较小的扩展(通常由所有方言支持的特征),而一些方言(如Objective Pascal)完全是免费的Pascal发明.

一些方言:

  • {$ mode tp } - turbo pascal方言
  • {$ mode fpc } - 默认模式.Turbo Pascal方言清除了dosisms和16-bitism(与TP的差异很小)
  • {$ mode Delphi } - Delphi方言+兼容扩展
  • {$ mode DelphiUnicode } - 将字符串更改为unicodestring的Delphi方言,如D2009(尽管运行时支持不完整)
  • {$ Mode objfpc } - Delphi方言的免费Pascal版本.(不兼容的扩展)
  • {$ mode macpascal } - 基于Apple的pascal,主要是Codewarrior派生的
  • {$ mode ISO } - 正在进行ISO-7185 Pascal模式.
  • {$ modeswitch objectivec1 }和{$ modeswitch objectivec2 },切换目标C对象模型以便于COCOA接口,差异与目标C 1.x和2.x语言/运行时相同.这是Objective Pascal

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

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

模式objfpc中不兼容扩展的典型示例是要求@用于过程(或方法)变量赋值.对于proctype是函数返回值的某些情况,这是一种消歧.

一些$ mode objfpc差异已在后来的Delphi版本中实现(如{$ pointermath on},后者默认为$ mode objfpc).$ Mode objfpc在C++之后也非常早期(2007年初)实现了泛型模型


Jef*_*lin 6

正如网站所说,免费Pascal是一个编译器.但是,各种编译器制造商(甚至包括FOSS编译器作者)将扩展纳入编译器编译的语言的标准定义并不罕见.当你看到一个" x程序员" 的工作广告,其中x是一个特定的实现(例如,Free Pascal),它通常意味着"这是我们使用的编译器;你应该熟悉它并使用该语言的扩展它支持".

在某些情况下 - 例如,早期的Turbo Pascal - 它也可能将特定产品的使用称为完整的开发环境(IDE),如果它包含一个,那么您应该熟悉它的各个组件. IDE也是如此.

  • 答案假定一个编译器,一种方言,对于像Pascal这样的长期现有语言来说过于简单化了.像$ mode macpascal这样的模式只是由数百万行代码库的存在驱动的 (3认同)
  • 该模式不是必需的,也可以从cmdline设置.但是$ mode并不是纯粹的加法,而且模式的变化可能非常深刻.这也是为什么你必须一次指定一个完整的编译单元的原因 (2认同)