またまた古い言語で、今度は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]”となるのだが、コンパイルして実行ファイルが出来るわけではないようで、コンパイル型なのか、インタプリタ型なのかすらも、実装によって異なる言語のようだ。