ときどきの雑記帖 RE* (新南口)
Show must go on
今週のしずえさん
今週は見られないかもしれないと思っていたが、 最後の最後(年内最終出社日帰路での降りる駅に着く直前)で見ることができた。
元旦の「旦」
for
以前ちょっと書いていたこと (for、for) と似たことを書いた記事が話題に。
まあわたしは「なぜfor
という単語を(あの構文で)使うようになったのか」
にはあまり興味がなくて触れなかった(調べなかった)ので、
そこは面白く感じた。
さっき読み返したら「補足」がついていた。
補足(2021/12/28)
皆様、特にМорожеさん、指摘ありがとうございます。
「~に対して」の für と取るのが妥当であること、“compute for a given set of formulae” だからこそ “Für k = 2(1)n” という風な記法になっていること、異論の余地がありません。
コメントの通りで、for文はfürの翻訳借用から直接由来したと考えるよりは、“compute for a given set of formulae"だったり、 “A for loop statement repeats for a certain number of times.” だったりの繰り返しの目的、 〜に対しての意味としてのforから由来すると考える方が妥当であります。 Superplanのfür文が最古のfor-loopを使ってる言語だとしても、繰り返しの目的という意味でのfürであり、 辞書に意味が存在することから安直に解釈してしまったこと反省しております。
「Морожеさんのコメント」とはどんなものかと、まずは記事のコメントを見たが見つからず、 じゃあとはてブについたコメントかと思ったが同様の指摘をしたものはあったが 名前が違う。
[B! プログラミング] for文のforはなぜforなのか? - yapattaのブログ
namiskのブックマーク / 2021年12月27日 - はてなブックマーク
英語のforの意味からして違和感なかったけども。繰り返すことが目的ではなくて、 「ある集合の各要素に対してこれこれの処理をせよ」と考えれば自然な英文。
uunfoのブックマーク / 2021年12月27日 - はてなブックマーク
Wikipediaで単語のforそのまんまとも書かれてるように単純に「に対して」でしょう。 数学でn=1,2,3,…に対してほにゃららが成り立つと言うのを英語でfor n=1,2,3,…, blurblurと言うように
twitterでこういうやり取りもあったが「コメントそのもの」ではなく。
こういうの(数学やプログラミングにおける記法の地域性や発祥のたぐい)って共通部分の人が少ないからかあんまりリサーチされてないがちで追うのめちゃくちゃ楽しいんですよね コメントの方は事実を並べてちょっと強い言い方になってしまいましたが責めたりするつもりは一切ないのでお気になさらず
— 🍨卵生 Мороже💣 (@Morojenium) December 28, 2021
じゃあどこについてたコメントなのよと思いつつ 再度元記事のコメント欄を見たら「もっと読む」というリンク(?)があり、 そこをクリックして無事発見。
脱線
natsutan は相変わらず斜め上というかピントを外したコメントを(ry
natsutanのブックマーク / 2021年12月27日 - はてなブックマーク
脱線その2
for については川俣さんもKindle本 数値をカウントせよ・あなたの知らないfor文の機能と歴史 (ITプロ豆知識シリーズ) | 川俣 晶 | Kindleストア を出していたりするのだけど、その内容はというと…
おまけ
はてブのコメントの中に
hase0510のブックマーク / 2021年12月27日 - はてなブックマーク
それよりWHILE~WENDの「WEND」ってなに? ・・・まさか「WhileEND」なのか!????????!???
というのがあったけど、そのまさかでしょうね。
END
はすでにプログラムを終了する命令に使われていたし
ENDIF
のようにしてENDWHILE
とするのは長くなる。
また、END WHILE
のように空白入りの二単語でというのもどうかということで
(BASICの末裔のひとつであるVBAなんかには END xxxx ってのがいくつかありますが)、
WEND
なる予約語を生み出したんじゃないかなあ(要調査)。
おまけその2
元記事を読んで「なぜforという単語を選んだのか」について 自分でも興味がわいたのでちょっと調べはじめたのだけど、 脇にそれたところで別の面白そうな題材を見つけてしまい収拾がつかなくなった😄
ので、とりあえずリンクだけ並べてごまかす (ドイツ語わかんねーっ)。
- For loop - Wikipedia
- What is the origin of C-style for loop syntax? Why was it made that way? - Quora
- The History of Computer Programming FOR Loops | Level Up Coding
- ALGOL - Wikipedia
- History of ALGOL - Software Preservation Group
- Heinz Rutishauser - Wikipedia
- Superplan - Wikipedia
- Über automatische Rechenplanfertigung bei programmgesteuerten Rechenmaschinen - Rutishauser - 1951
- A・J・パリス氏 ALGOLを開発したチームのリーダー – 電気通信大学プログラミング教室/uecプログラミング教室
- An introduction to ALGOL
- Proposal for A Programming Language - ACM_ALGOL_1958.pdf
- The syntax and semantics of the proposed international algebraic language of the Zurich ACM-GAMM Conference - ICIP-1959.pdf
- Oral History Interview with Friedrich L. Bauer - interviewBauer.pdf
- A Politico-Social History of Algol (With a Chronology in the Form of a Log Book) - Bemer-Algol.pdf
- Proposal for a Universal Language for the Description of Computing Processes - Bauer1958.pdf
History of compiler construction
- The Early Development of Prograxruning Languages
- History of compiler construction - Wikipedia
- Compiler Construction before 1980 (wayback machine)
- Address programming language - Wikipedia
まあ気が向いたら掘り起こして(謎) 何か書くかもしれない。
京大のアレ
- 京大スパコンのデータ77TBが消失 バックアップ処理中に不具合 日本ヒューレット・パッカード「100%弊社の責任」 - ITmedia NEWS
- 京大のスパコンのデータが約77TB消失してしまったらしい。約28TBは復元不能。日本HPの報告書には『弊社100%の責任』『補償はご意向に沿うようにする』と絶望しかない文章が並んでる…。 - Togetter
- 日本HP製ソフトの不具合で京大スパコンのデータ77TBが消失 - PC Watch
三つ目の記事、本文では
京都大学学術情報メディアセンターは28日、日本ヒューレット・パッカード合同会社が開発したスパコン用ストレージをバックアップするプログラムの不具合により、大容量ストレージ(/LARGE0)の一部が意図せず削除されたと発表した。
とちゃんと(?)書いているけど、見出しの「日本HP製ソフト」というのはまずいんじゃないかなあ。
追記
訂正された模様
それはさておき
シェルスクリプト(少なくともbashとWindowsバッチファイル)は実際複数行にまたがる構文じゃなければ一行ずつ実行されるのよね。だから実行中に自分自身を書き換えて追記するとそれも実行されるとか、exitの後ろ側にシェルスクリプトとして解釈できないバイナリを置いても実行できるとかある
— 白山風露 (@kazatsuyu) October 27, 2021
や
https://www.iimc.kyoto-u.ac.jp/services/comp/pdf/file_loss_insident_20211228.pdf
3 ファイル消失が発生した原因
バックアップスクリプトには、find コマンドにより 10 日以上古いログファイルを削除する処 理が含まれています。スクリプトの機能改善と合わせて、find コマンドの削除処理に渡す変数名 を視認性・可読性を高めるため変更いたしましたが、この修正したスクリプトのリリース手順に 考慮不足がありました。
bash は、シェルスクリプトの実行中に適時シェルスクリプトを読み込みます。この挙動によ る副作用を認識できておらず、実行中のスクリプトが存在している状態でスクリプトの上書きに よりリリースしてしまったことで、途中から修正したシェルスクリプトの再読み込みが発生し、 結果的に未定義の変数を含む find コマンドが実行されてしまいました。この結果、本来のログ ディレクトリに保存されたファイルの削除をする処理ではなく、/LARGE0 のファイルを削除し てしまいました。
「適時シェルスクリプトを読み込みます」の部分をみて そういやそうだっけかとbashのソースコードを読みに行き、 ある程度情報やら構想がまとまったところでさて記事にでも書き起こそうかと思ったら
雑に bash のソースを読んだ。https://t.co/zM1TgLl4Ao
— mattn (@mattn_jp) December 29, 2021
見事に先を越されていたので止め😄
概ね予想通りかな。一時ファイル→rename であれば問題にならない奴だ(流石に file を何度も openしたりはしないよなあ) https://t.co/SRgRb5BGKZ
— 眼力 玉壱號 (@objectxplosive) December 29, 2021
「何度もオープンしたりしない」はその通りで、オープンしっぱなしで必要に応じて読み進めてました。 この点に関しては便乗(?)で盛り上がった [B! shell] Tips: 実行中のシェルスクリプトを書きかえるときには - Qiita にあったコメントのこれが理由ではないかと。
しっかし、mainだけでも4か所も こういう判定しているのはどうにかできんのかという気がしないでもない。>bash
bash/shell.c at master · bminor/bash
if (interactive_shell)
{
if (interactive_shell == 0)
{
if (shell_script_filename)
open_shell_script (shell_script_filename);
else if (interactive == 0)
{
/* Do the things that should be done only for interactive shells. */
if (interactive_shell)
{
bashは再読み込みするから実行中にファイル書換えたことで云々は軽率ではあるけど根本的な問題ではなく
ですよねー。
ところで「怪談」の
もうお判りですね?そう大量の削除漏れファイルによってinodeが枯渇して、ディスクに空きがあってもファイルが作れない状態になってしまったのだ。
に関連して。
身近なところ(謎)に WindowsでCドライブのルートに一時ファイルを作成するプログラムを作った部署があり さらにそのプログラムは一時ファイルをちゃんと後始末していなかったものだから ある時点で動作がおかしくなるという事態が発生したことが (FATを使っていた古の環境でのお話)。
zsh
bashだけではなくzshもちょっと調べたのだけど (こっちはこっちでbashとは違った読みづらさが…) zshはスクリプトを丸ごとメモリに読み込んでから処理しているっぽい? (要確認)
zsh/init.c at 5.9 · zsh-users/zsh
(追記) bashと同様だった模様
追記
追記 2021/12/29
Twitter で daemon1995 さんからご指摘頂き、確認したところ、Linux の dash(/bin/sh)、zsh では再現、 FreeBSD の sh/bash では再現せず。どうやら UNIX System-V だと再現する様です。
追記2
ということで
2021年分はたぶんこれが最後で、2022年も元日からということは多分しないと思う。
よいお年を。
#佐藤大輔患者用老人ホーム
— 近藤周防守光鶴こんどうすおうのかみひづる (@nagatonokami30) December 25, 2021
年が明けると同時に誰からともなく『年の初めのためしとて 終わり無き世のめでたさを』と大合唱が始まり、夜勤の新人が状況のあまりの異常さに呆れ果てる