HAL/S:アセンブラとC++の狭間で2020年09月06日 12:14

HAL/S:アセンブラとC++の狭間で
HAL/S:アセンブラとC++の狭間で


打ち上げロケットが一段落して、宇宙ネタも一休み・・・。

何か面白いことはないかと、いつも覗いているチェコ語のページを見ると、一風変わった記事が出ていた。

(NASAと協力して、SpaceXは異なる企業文化に対処する必要がありましたが、最終的に批評家を沈黙させました)
https://www.elonx.cz/spacex-se-pri-spolupraci-s-nasa-muselo-vyporadat-s-odlisnou-firemni-kulturou-ale-nakonec-umlcelo-kritiky/

主筆のペトルメレチンや、味わい深い記事を載せているイジーハダチではない。

どうやら翻訳記事のようだ。

(SpaceXとNASAが米国の宇宙飛行士の打ち上げを取り戻すために苦い文化衝突をどのように克服したか)
https://edition.cnn.com/2020/08/09/business/spacex-nasa-astronaut-launch-demo-2-culture-clash-scn/index.html

英語の記事だが、自動翻訳の得手不得手もあり、チェコ語からの方が読みやすかったりする(そうなのかあ?)。

ビミョーなニュアンスのところだけ、英語の原文に当たりながら読んだ。

この記事自体も面白かったが、スペースシャトルのプログラム開発に使用されていたというHAL/Sというプログラミング言語について読んだ別記事が楽しかったな。

(プログラミング HAL/S)
http://www2a.biglobe.ne.jp/~mizuki/tmp/programming_HAL_S_V2a.pdf

「本書では、残念ながら優れた言語とならなかった例として、ひとつのプログラミング言語を紹介する。」

浮沈子は、専門家ではないので、言語仕様の詳細に触れられているこの記事が理解できるとは言わない。

1割も分からないかもしれない。

また、言語仕様の優劣について触れられている部分の妥当性についても判断はできない。

でも、面白かったな。

関連事項も調べたりして、少しお勉強もした(セマフォとか)。

スペースXが、組み込み系でC++を使っていることは、以前にも読んで知っている。

(SpaceX開発のロケット「Falcon 9」はLinuxとC++で宇宙へ飛び立っている)
https://gigazine.net/news/20200719-linux-on-falcon-9/

「Falcon 9やGrasshopper、Crew Dragonのソフトウェア担当チームは35人のエンジニアで構成されているとのこと。任務はそれぞれのコアプラットフォームやシミュレーションソフトウェア、地上局の通信および分析用のソフトウェアの開発で、ソフトウェアはCあるいはC++でコーディングされている」

また、スペースレーザーの開発に当たって、C++の技術者を募集しているという記事も読んだ。

(SpaceXは、Starlinkインターネット衛星用の「スペースレーザー」を開発するエンジニアを探しています)
https://www.tesmanian.com/blogs/tesmanian-blog/spacex-starlink-lasers

「個々の衛星はおよそ227キログラム(500.5ポンド)の打ち上げ質量を持つオフィスデスクのサイズです。」

うーん、バージョン0.9の仕様だな・・・。

まあいい。

「SpaceXは今週、「エンジニアリングへの情熱」とC ++プログラミング言語の知識を持つシニアソフトウェアエンジニアを探して、「スペースレーザー」の開発を支援する「スターリンクレーザーコミュニケーションチーム」に参加することを発表しました。」

「ゼロから新しいテクノロジーを構築する必要があります」

「この職務には航空宇宙の経験は必要ありません。「組み込みC ++に習熟している」だけです。」

(C++)
https://ja.wikipedia.org/wiki/C%2B%2B

「C言語のようにハードウェアを直接扱うような下位層向けの低水準言語としても、複雑なアプリケーションソフトウェアを開発するための上位層向け高水準言語としても使用可能である。」

現在でも、たびたび改定が行われている現役バリバリの言語だな。

先に引用したHAL/Sの記事を読むと、スペースシャトルのプログラムは、下手をしたらアセンブラで書かれていたかもしれない。

「1962 年から暫く、アポロ誘導コンピュータのソフトウェア開発初期には YUL と呼ばれる独自のアセンブラ言語が用いられていた。」

「最終的には DAPというアセンブラ言語に置き換えられたようである。」

「それでもアセンブラで開発するよりかは遥かにましだった。実際は当初 NASA ではアセンブラでの開発が強く主張されていた。組み込み用プログラミング言語は当時信頼性とパフォーマンスの両面でまったく信用されていなかった。」

「パフォーマンステストで、アセンブラ記述より 5 パーセント速度が务るだけという性能をベンチマークで示し、ようやく HAL/S の採用が決まったのである。」

「ただ、シャトルフライトソフトウェアの開発が HAL/Sという高級言語で行えたことは成功と言っても良かったのかも知れない。もしアセンブラで開発が行われていたら、プロジェクトは果たしてどうなっていただろうか。……いや、それでもうまく行っていたのかも知れない。開発期間やコストはまったく違うものになっていただろうが。」

HAL/Sは、失敗した言語だったんだろうか?。

記事の筆者である水城氏は、こんな風に評している。

「シャトルフライトソフトウェアの開発はコストの問題はあるにしても、安全にその使命を果たしたという意味では成功だった。しかし HAL/S そのものは、やはり失敗した開発である。宇宙機向け汎用言語という当初の目的を果たせず、組み込みソフトウェアの世界で HAL/S はほとんど影響を与えることができなかった。」

そして、こうも述べている。

「HAL/S は珍しい、死亡日時がはっきりしたプログラミング言語となる。STS-135 向けのミッション用コード差分の最後のものが書かれた瞬間に、HAL/S の死は確定する。命日は 2011 年 7 月 21 日、最後のシャトル OV-104 アトランティス搭載のP-101S から火が落とされる瞬間だった。これより先、HAL/S でコードが記述されることは二度と無いだろう。」

どんなプログラミング言語であれ、そこには、それに関わった多くの人々の英知と凡知(?)が染みついている(コードを書かされたプログラマの恨みも・・・)。

まあ、どうでもいいんですが。

オリオンやスターライナーのプログラムが、どんな言語で開発されているかは知らない。

時が経てば、C++だって同じように呼ばれることになるのかも知れないしな。

現代の宇宙船は、ソフトウェアのデバイスに過ぎない。

人間が操縦して飛ばすことは最早出来ず、操縦桿(タブレットのボタン)とエンジンの間には、コンピューター殿がデンと構えて仕切っている。

何をどうしたいかを指示すれば、最適な操縦で良きに計らってくれる。

ISSタクシー程度なら、完全自動運転で連れて行ってもらえる(タイマーさえ合っていれば!)。

HAL/Sは、当時作られた2001年宇宙の旅に登場するコンピューター、HAL9000にあやかったものともいわれる。

「HAL/S という言語の名前の前半はこの MAC 言語の主開発者、Halcomp の名前に由来するとされているが、当時公開された映画"2001:a space dyssey"の中に出てくるコンピュータ、HAL9000 に由来する部分も当然ある筈である。」

「HAL/S の名前の後半、スラッシュの次の S は、シャトルを意味するとされている。」

コンパイラの作成に成功していれば、探査機ガリレオにも使用されて、HAL/Gとか出来てたかもしれないな。

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

そうならなかったのは、膨大なチェックの手間をかけたからに相違ない。

スターライナーのソフトウェアチームに、爪の垢でも煎じて飲ませたいところだろうが、彼らに必要だったのは経費と時間(人手も?)かもな。

結果的に、スペースシャトルは地に落ち、ファルコン9だけが残った(開発言語とは無関係でしょうが)。

今後、様々な宇宙機が飛び回るだろうが、それを飛ばしているのは人間じゃない。

人間が書いたコードを実行しているコンピューター殿が、良きに計らっている。

言語の良し悪しは、実行コードの品質に関わるだろうが、時間とコストと手間の問題でもある。

スペースレーザーのコードが間違っちまって、多数のスターリンク衛星からの集中砲火を受けて、カイパー衛星が焼かれて落ちたりしてな(そんなあ!)。

よくよく検証してから実装してもらいたいもんだな・・・。

コメント

コメントをどうぞ

※メールアドレスとURLの入力は必須ではありません。 入力されたメールアドレスは記事に反映されず、ブログの管理者のみが参照できます。

※なお、送られたコメントはブログの管理者が確認するまで公開されません。

※投稿には管理者が設定した質問に答える必要があります。

名前:
メールアドレス:
URL:
次の質問に答えてください:
kfujitoの徒然の筆者のペンネームは、
「○○子」です。
○○を記入してください。

コメント:

トラックバック