NetBSD/amd64上でFree Pascalでプログラムを書いてみる

この記事は、NetBSD Advent Calendar 2025の1日目の記事です。

Free Pascalとは?

Free Pascalとは、オープンソースのPascalとObject Pascalコンパイラーで、 オリジナルのPascal言語だけでなく、Turbo PascalのPascal言語やDelphiのObject Pascal言語もサポートしているようです。

私はPascalの熱心なユーザーであったことはないのですが、書籍の中では疑似コードとしてPascal風のソースコードを目にしたことは数多くあります。

Free Pascalとしては、NetBSDをサポートしていたようなのですが、pkgsrcには取り込まれていなかったようです。 Free Pascalコンパイラーを使っている人にとっては当たり前なのかもしれませんが、NetBSD上でコンパイルする場合に 必要だった事項を記載しておきたいと思います。

Free Pascalコンパイラーをインストールする

NetBSD/amd64でFree Pascalコンパイラーのバージョン3.2.2を利用することができます。 pkgsrc/lang/fpcとしてインポートされており、 Free Pascalのコンパイラーは、/usr/pkg/bin/fpcとしてインストールされます。 以下のように実行してインストールすれば良いでしょう。

# cd /usr/pkgsrc/lang/fpc
# make install

また、以下のように実行すると、fpcのバージョンを確認することができます。

$ fpc
Free Pascal Compiler version 3.2.2 [2025/12/08] for x86_64
Copyright (c) 1993-2021 by Florian Klaempfl and others
fpc [options] <inputfile> [options]
 Only options valid for the default or selected platform are listed.
(以下略)

初期設定

まず、Free Pascalでプログラミングするために使うディレクトリーを作り、そのディレクトリーへ移動します。

$ mkdir free-pascal
$ cd free-pascal

次に、以下のように実行して、fpc.cfgという設定ファイルを作成します。 これがfpcコマンドの実行時に参照されるファイルで、この中で標準的な設定が定義されています。 個々をコマンドライン引数でfpcへ渡しても良いのかもしれませんが、 繰り返し入力するには、相当長いコマンドライン引数になりそうです。

$ fpcmkcfg -d basepath=/usr/pkg/lib/fpc/3.2.2 > fpc.cfg

サンプルプログラムをコンパイルしてみる

Hello worldは、以下のように書けば良いようです。 hello.pasとして保存しておきます。

program Hello;
begin
  writeln ('Hello, world.');
end.

以下のようにコンパイルし、実行します。

$ fpc hello.pas
$ ls hello*
hello hello.o hello.pas
# ./hello
Hello, world.

もう少し複雑なものとして、階乗を再帰で実装してみます。 factorial.pasとして保存しておきます。

program factorial;

function fact(n: integer): longint;
begin
    if (n = 0) then
        fact := 1
    else
        fact := n * fact(n - 1);
end;

var
    n: integer;

begin
    for n := 0 to 16 do
        writeln(n, '! = ', fact(n));
end.

以下のようにコンパイルし、実行します。

$ fpc factorial.pas
Free Pascal Compiler version 3.2.2 [2025/12/08] for x86_64
Copyright (c) 1993-2021 by Florian Klaempfl and others
Target OS: NetBSD for x86-64
Compiling factorial.pas
Linking factorial
17 lines compiled, 0.1 sec
$ ls factorial*
factorial       factorial.o     factorial.pas
$ ./factorial
0! = 1
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800
11! = 39916800
12! = 479001600
13! = 1932053504
14! = 1278945280
15! = 2004310016
16! = 2004189184

おわりに

Pascalコンパイラーとしては、pkgsrcにはGNU Pascal Compiler (GPC)もpkgsrc/lang/gpcとして収録されているようです。 こちらもいずれ使ってみたいと思います。

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。

NetBSD/amd64上でFree Pascalでプログラムを書いてみる

この記事は、 NetBSD Advent Calendar 2025 の1日目の記事です。 Free Pascalとは? Free Pascal とは、オープンソースのPascalとObject Pascalコンパイラーで、 オリジナルのPascal言語だけ...