2012-03-10

スペースシャトル専用言語HAL/Sに関する電子書籍『スペースシャトル専用言語HAL/Sに関する電子書籍』 - Nao_uの日記 を含むブックマーク はてなブックマーク - 『スペースシャトル専用言語HAL/Sに関する電子書籍』 - Nao_uの日記 『スペースシャトル専用言語HAL/Sに関する電子書籍』 - Nao_uの日記 のブックマークコメント

コンピュータ言語の黎明期に作られた、文字通り前世紀の遺物をずっと引きずって運用されてたらしい。こんな世界もあるんだ。

基本的なシャトルの制御はこのソフトウェアに委ねられている。では、そのソフトウェアを記述している言語もまた素晴らしいものなのだろうか。いや、残念ながら、極めて残念ながら、それは悲惨極まりない言語なのだ。

正直なところを言おう。シャトルがこの言語を使いながらコンピュータシステムで致命的な不具合を出さなかったというのは、ひとつの奇跡だ。

HAL/S には頑健なコードを書くための要素が多く欠落している。C の構造体や共用体がどれだけ 素晴らしい機能であるか、万人が知るべきである。組み込みプログラマレジスタに値をセットす るとき、それに HAL/S を使わないで良い事をカーニハンとリッチーに感謝すべきだ。

C のプリプロ セッサマクロにすら感謝の祈りを忘れるべきではない。C のポインタの危険性を剥き身のナイフに 例えるなら、HAL/S の COMPOOL はピンが最初から抜かれている手榴弾に例えられるべきだ。

HAL/S は珍しい、死亡日時がはっきりしたプログラミング言語となる。命日は 2011 年 7 月 21 日、 最後のシャトル搭載の AP-101S から火が落とされる瞬間だった。これより 先、HAL/S でコードが記述されることは二度と無いだろう。


HAL/S は、素晴らしいとはちょっと言い難い仕様を色々と持っている。最悪とまでは言わないが、 基本的に駄目な仕様で溢れている。

例えば HAL/S では、数値及び変数間の一文字空白は、乗算を表す。

DECLARE RV INTEGER;

RV = 123 456;

C "RV = 56088"

2 行目の、123 と 456 の間にある空白がそれである。ちなみに 1 行目は変数宣言、3 行目はコメ ントだ。

確かに、数学での算術記述において、乗算演算子は通常省略されるが、それをこのような形で真 似できるようにした HAL/S でも、他のプログラミング言語と同じく、字句解釈のために乗算演算子 に何らかの文字を割り当てる必要があった。結果、恐ろしい事に、空白が乗算演算子と化した訳だ。 他の言語では乗算記号に使われるアスタリスク*は HAL/S ではベクタ型の乗算にしか使うことがで きない。アスタリスク二連続**は階乗なのに、である。

ただでさえバグを出したら人が死ぬようなソフトウェアを書くのは怖いのに、こんな言語で書かれたシステムが21世紀になっても運用されてたとは。こんな状態であっても、膨大なコストをかけて検証された運用実績のあるシステムを置き換えるのは困難なんだろうなぁ

歴史のある軍用機のソフトウェアとかがどんな言語で、どういった規模のもので動いてるのか気になる。1990年代後半に運用がGPSと統合されたあたりで一気に進歩したらしいので、さすがに最近は現代風の言語に置き換わってたりするのかな

2012-03-10 - Nao_uの日記 を含むブックマーク 2012-03-10 - Nao_uの日記 のブックマークコメント

Seiya Ishibashi@i_saint

.@Nao_u_ アメリカの軍用機のシステムは長いこと ADA でしたが、最近は C++ になってきてるそうです。 コーディング規約とか規模とか一部情報が出てますね。http://t.co/Q63j8GFu

@Samieru_NIGORO 実績のあるものと同等以上のものを新規に作って置き換えるコストを考えると、それはそれであまりやりたくない類の仕事になりそうですよね

@Bug1978 PC98が現役で動いてたりすると、故障したときの対応とかが大変そうですよね。ドライブが壊れても代替品がなさそう

Seiya Ishibashi@i_saint

ADA って「コンパイルが通ったら絶対クラッシュしない」のが特徴の言語と聞いた覚えがあるけど、真実ならコンシューマゲーム開発にも導入すべきじゃなかろうか。

軍用機のプログラムをC++で書くのはそれはそれでちょっと怖い感じが。ゲーム向けのスクリプト言語も実行時エラー対策が大変そうなので、分野によっては多少効率が落ちてもADAみたいなバグが出にくいコードを書ける言語があれば便利そう