目前,該項目的網站為www.freepascal.org,最新版本為2系列。
此前被廣泛使用的PASCAL編譯器普遍為Turbo Pascal & Borland pascal。但是它們可用的空間十分有限。而Free Pascal理論上可以使用4GB內存。所以在利用Free Pascal編程的時候,可以改變原有思路,將大量時間轉嫁給空間,提高效率。
雖然Free Pascal盡量設計得和Turbo Pascal接近,但是由於以下的兩個原因,兩者之間還是有壹些區別的:
1. Free Pascal是壹個32位的編譯器,而Turbo Pascal只是16位編譯器;
2. Free Pascal是壹個跨平臺的編譯器,而Turbo Pascal只在windows上使用。
如果妳的代碼是遵守ANSI Pascal的,那麽代碼從Turbo Pascal移植到Free Pascal是沒有問題的。
下面是在Turbo Pascal上可以使用,但是在Free Pascal就不能使用的壹些語言特性:
1. 函數和過程在使用時,參數的類型必須和定義時完全壹致。原因是在Free Pascal中添加了函數重載功能。
2. PROTECTED,PUBLIC,PUBLISHED,TRY,FINALLY,EXCEPT,RAISE成為了關鍵字,因此不能作為函數和過程的名字。
3. FAR,NEAR不再是關鍵字了。原因是Free Pascal是32位系統,不再需要這些關鍵字。
4. 布爾表達式不壹定要全部進行計算。只要最終結果已經能夠確定,就不再計算其它還沒有計算的部分了。比如布爾表達式exp1 AND exp2 AND exp3,如果已知exp1的結果是false,那麽怎麽表達式的結果肯定是false,exp2和exp3就不用進行計算了。
5. 在Free Pascal中,集合中的元素都是4個字節長的。
6. 表達式執行的順序是不確定的。比如對於表達式a:=g(2)+f(3); 不保證g(2)壹定在f(3)之前執行。
7. 如果用Rewrite打開文件,那麽文件就只能被寫入了。如果需要讀取這個文件,要對文件執行Reset。
8. Free Pascal在程序結束之前壹定要關閉輸出文件,否則輸出文件可能不能被正確的寫入。
9. Free Pascal理論上可以使用4GB的內存,因此實際上幾乎可以使用系統中的所有剩余內存(除非賽題中有內存限制)。這是Free Pascal由於32位的編譯器。但是對於Turbo Pascal來說,由於是16位的編譯器,因此不能定義大小超過64KB的數據類型和變量,並且在DOS實模式下可以使用的內存總數只有640KB。
下面是Free Pascal相對於Turbo Pascal擴充的壹些功能:
1. 函數可以返回復雜的類型,比如記錄和數組。
2. 在函數中,函數的返回值可以作為壹個變量來處理。比如:
function a : longint;
begin
a:=12;
while a>4 do
begin
{...}
end;
end;
這個例子在Turbo Pascal中,a>4會被認為是函數的遞歸調用,但是在Free Pascal中會認為a只是壹個變量。如果想在Free Pascal中實現遞歸調用,就要寫成下面的形式:
function a : longint;
begin
a:=12;
{ this is the recursive call }
if a()>4 then
begin
{...}
end;
end;
3. exit可以接受壹個參數作為函數的返回值。比如:
function a : longint;
begin
a:=12;
if a>4 then
begin
exit(a*67); {函數的返回值就是a*67 }
end;
end;
4. Free Pascal支持函數重載。可以用相同的名字定義不同的函數,只要這些函數的參數不同,就是不同的函數。比如:
procedure DoSomething (a : longint);
begin
{...}
end;
procedure DoSomething (a : real);
begin
{...}
end;
可以使用不同的參數類型longint或者real來調用不同的DoSomething過程。
由於這個功能,函數的提前聲明必須有完整的參數聲明:
procedure x (v : longint); forward;
{...}
procedure x;{ 這裏定義的過程x重載了前面聲明的過程x。因此這裏的兩個x是不同的}
begin
{...}
end;
5. Free Pascal容許運算符重載。比如,可以自己為矩陣運算定義壹個“+”運算。
6. Free Pascal在windows 95及其以上的windows版本上支持長文件名。對於文件名,由於windows系統對大小寫不敏感,因此在程序中,文件名的大小寫是無關的。但是對於其它大小寫敏感的系統,比如linux,程序中用到的文件名必須和系統中的文件名完全壹致。但是由於信息學競賽的評測系統壹般是linux,因此要求程序中的文件名和系統中的文件名壹樣。