またまた古い言語で、今度はALGOLにチャレンジ。本当に作れるかどうか確証はない。
流石に最近の現場で使われることはまず無いであろう、歴史上の言語だが、ブロック構造や入れ子、という記法を初めて導入した言語なので、いろんな言語の『ご先祖様』とは言えるだろう。
流石に手に入るような開発環境はないかなと思って調べてみたら、意外にもそこそこあるようだ。
ただ、一口にALGOLとひとまとめにしてしまうと何かと問題があるようで、実装によってかなり仕様に差異があるようで、Wikiで紹介されてるHello Worldだけを比べてみても、結構な差がある。(ざっくり分けても、ALGOL 58、ALGOL 60、ALGOL 68 とあり、特にALGOL 60は非常に派生版が多いようだ)
とはいえ、フリーで使えて、Linuxで動いて・・・となると「Algol 68 Genie」の一択か。
公式:https://jmvdveer.home.xs4all.nl/en.algol-68-genie.html
こちらにはソースが公開されているので、それを落としてきてビルド&インストールとなるようだ。
一部ディストリビューションはパッケージもある模様。(Debian、Ubuntu、Arch Linux)
流石にAlpine用はないようだ。
Alpine にbuild-base をインストールして、wget でソースを落とし、ビルドしてみると、すんなりビルドは通って、インストールできた。
Dockerfileにすると、こんな感じ。
## Dockerfile
FROM alpine
WORKDIR /home/algol
RUN set -x && \
apk update && \
apk add --no-cache build-base && \
wget https://jmvdveer.home.xs4all.nl/algol68g-2.8.4.tar.gz && \
tar xvf algol68g-2.8.4.tar.gz && \
./configure && make install
CMD ["/bin/sh"]
## docker-compose.yaml
version: '3'
services:
algol:
build: .
container_name: algol
volumes:
- .:/home/algol
tty: true
Hello world も特に問題なく実行できました。
Algol 68 Genieの場合、”a68g [filename]”となるのだが、コンパイルして実行ファイルが出来るわけではないようで、コンパイル型なのか、インタプリタ型なのかすらも、実装によって異なる言語のようだ。