ときどきの雑記帖 RE* (新南口)
The World of Narue
SFマガジン
ガンダムが…ヤマトが…!感涙必至 SFマガジン10月号「スタジオぬえ創立50周年記念特集」全国の書店から注文殺到、発売前に在庫全滅!?編集長に聞いた|まいどなニュース
買った。
「スターシップライブラリ」が(一部)再録されていたのはうれしいけど、 できれば「SF的に正しい宇宙戦艦」(みたいな内容。詳細は覚えていない) の回が読みたかった。
ホッホ
とある本を読んでいたら、 ある章の始まりにゴッホの言葉だという引用があったのだけど 名前が「ヴィンセント・ヴァン・ゴッホ」となっていて。
「最近はそっちの方が原語の発音に近いということで フィンセント~のように濁らせないんじゃなかったっけ」 と思い調べてみると
なお、オランダ人名のファン(van)はミドルネームではなく姓の一部であるため省略しない。
へー。そうするとPythonの Guidoさんもそうなのか。
そして ゴッホとは - コトバンク
オランダの画家。正しくは〈ファン・ホッホ〉で,〈ゴッホ〉はドイツ語読みにもとづく日本での慣用。
言われてみればなるほどだがそうだったのか>「ファン・ホッホ」
解体工事
鹿島が世界貿易センタービルを解体中、床を斜めに切断する新工法で工期短縮 | 日経クロステック(xTECH)
メモ。
Top Programming Languages 2022
Top Programming Languages 2022 - IEEE Spectrum
(ぴー)とか(ぴー)みたいなところの「調査」よりは信頼できる?
コミック乱
読んでいた連載がどれも完結(してないけど終わったものもあるが)した ので買うのを止めたら即座にこういう新連載があって また買うことに😄
本日発売の「コミック乱」で、「センゴク」の宮下英樹先生の新連載「大乱 関ヶ原」がスタート!
— 歴史群像 (@Rekigun) August 26, 2022
9月6日発売の「歴史群像10月号」では、宮下先生のもうひとつの新連載「神聖ローマ帝国 三十年戦争」もスタートします!
歴史のリアルに迫るダブル連載、歴史ファン必読! https://t.co/i0302CYJxU
「センゴク」の連載末期よりは面白くなりそう?
そして歴群でも連載と。こっちは舞台が欧州だけど。
GCC’s assembler syntax
まあ使うことはないと思うけど、せっかく見つけたのでメモ。
Marine Corps
Rebuild: 340: Accept All Cookies (hak) をようやく聴いたのだけど
Top Gun: Maverick
この話題のときに「Marinesの宣伝映画」みたいなことを hakuroさんが言っていたのが気になった。
「トップガン」て海軍(NAVY)。だよねえ? Marinesだと「海兵隊」だと思うんだけど。 ハートマン軍曹のいたところ。
awk
この話題
- Brian Kernighan adds Unicode support to Awk : programming
- Brian Kernighan adds Unicode support to Awk | Hacker News
- 開発から 45 年、プログラミング言語 AWK に Unicode サポートが追加 | スラド デベロッパー
onetrueawkのリポジトリは追いかけていたつもりなのに なんで気がつかなかったのかと思ったけど、 自分が見ていたのは isssueだけでcommitは見ていなかったのと マスターとは違うブランチ unicode-support で作業されていたから。 のようだ。
- Add BWK’s email. ・ onetrueawk/awk@9ebe940
- Commits ・ onetrueawk/awk master
- Commits ・ onetrueawk/awk unicode-support
あとで変更内容を読んでみよう。
strscpy
現在Linuxではstrlcpyからstrscpyへの移行が進められているが、strlcpyが導入されたのはLinux 2.4の時代で、strlcpyが現れる箇所は膨大で、strscpyへの移行は長い道のりになっている。Linux 6.0-rc2の時点でstrlcpyを使っている箇所が1400以上に対して、strscpyに移行している箇所が1800箇所程らしい
— Fadis (@fadis_) August 26, 2022
strcpy_s とはまた違うものなのかと思ったのですがそうらしいですね。 かなり以前にstrlcpyの問題点を指摘していたのはUlrich Drepperでしたっけか。
- Subscription required [LWN.net]
- strscpy
- strscpy() and the hazards of improved interfaces [LWN.net]
- [PATCH] scsi: target: move from strlcpy with unused retval to strscpy (Linux SCSI Target)
- What defines strscpy in C?…anycodings
- c - 什么定义了 C 中的 strscpy? - 探索字符串
違い
strncpy, strlcpy, strscpyの戻り値の違いは以下の通り
- strncpy(dst,src,n):srcからdstへ文字列をコピーする。文字列がnより長い場合’\0’はコピーされない。dstを返す。
- strlcpy(dst,src,n):srcからdstへ文字列をコピーする。文字列がn-1より長いと’\0’を最後に追加する。srcにある文字列の’\0’を含まない長さを返す。(コピーした長さではない)
- strscpy(dst,src,n):srcからdstへ文字列をコピーする。文字列がn-1より長いと’\0’を最後に追加して-E2BIGを返す。コピーした文字列の長さを返す。(常に戻り値がn-1より小さい)
strcpy_s
そしてstrcpy_sはというと
- strcpy_s | Programming Place Plus C言語編 標準ライブラリのリファレンス
- strcpy_s、wcscpy_s、_mbscpy_s、_mbscpy_s_l | Microsoft Docs
コピーに成功したら 0 が返される。何らかのエラーが発生したら 0以外が返される。
正常に終了した場合は 0 を返し、それ以外の場合はエラーを返します。
戻り値は単純に「エラーがあったかなかったか」だけを返すと。
FORTRAN Compiler on IBM 704
久しぶりにFORTRANのはなし。
関数
以前
Function definition - Rosetta Code
In FORTRAN I (1957), inline function could be defined at the beginning of the program. Let’s note than to specify a floating point real the name of the statement function begins with an X (no type declaration) and to specify this is a function the name ends with a F.
XMULTF(X,Y)=X*Y
And for interger multiplication:MULTF(I,J)=I*J
というのを引用して、FORTRAN Iからユーザー定義関数あったのか? とそれを疑問に思っているようなことを書いたのだけど
October 15, 1956
を読んでいて次のような記述を見つけた。
p.12 FUNCTIONS
The name of the function is 4 to 7 alphabetic or numeric characters (not soecial characters), of which the last must be F and the first must be alphabetic. Also, the first must be X if and only if the value of the function is to be fixed point. The name of the function is followed by parentheses enclosing the argments (which may be expressions), separated by commas.
Rosseta Codeの方でもそう書かれていたけど 名前の最後がFで終わっているものは(その他にも条件があるけど) 関数の名前だとある。
確かにFORTRAN IIのソースコードを見ても
MS060 ALS 36,2 POSITI0N CHAR FOR BUILDING SYMBOL. 4F13500
ORS G ADD CHAR TO THOSE IN G. 4F13501
TXI MS061,2,6 UPDATE POSITIONING TAG. 4F13502
MS061 TSX C0190,4 GET NEXT CHAR. 4F13503
MS070 LXA L(10),4 PREPARE TO TEST FOR PUNCTUATION. 4F13504
MS071 CAS CTEST,4 X 4F13505
TRA MS072 X 4F13506
TRA MS091 CHAR IS SOME PUNCTUATION. 4F13507
MS072 TIX MS071,4,1 X 4F13508
TXL MS060,2,18 IF THIS IS CHAR I, 2 /R 3 GO BUILD G. 4F13509
CAS L(F) IS THIS AN F ENDING FUNCTION NAME. 4F13510
TRA MS073 X 4F13511
TRA MS080 MAYBE, GO LOOK AT NEXT CHAR. 4F13512
MS073 TXL MS060,2,36 TEST FOR UNDER 7 CHARS. 4F13513
MS074 TSX DIAG,4 BUILD G, 7TH CHAR IS ERROR. 4F13514
MS080 TSX C0190,4 GET NEXT CHAR. 4F13515
CAS OPEN TEST FOR (. 4F13516
TRA MS081 X 4F13517
TRA MS092 YES, THIS IS A FUNCTION NAME. 4F13518
MS081 STO FIRSTC NO, SAVE CURRENT CHAR. 4F13519
CAL L(F) ADD F TO CONTENTS OF G, 4F13520
ALS 36,2 X 4F13521
ORS G X 4F13522
TXH MS074,2,36 TEST FOR 7TH CHAR, YES IS ERROR, 4F13523
CLA FIRSTC RESTORE CURRENT CHAR. 4F13524
TXI MS070,2,6 UPDATE POSITIONING TAG, 4F13525
名前の最後がF
かどうかの判定をしているようだ。
同じく p.10 WARNING にはこうある。
The name of a variable must not be the same as the name of any function used in the program after the terminal F of the function name has been removed. Also, if a subscripted variable has 4 or more characters in its name, the last of these must not be an F. (For the meaning of “function” and “subscripted” see Chapter 3 and the last section of this chapter.)
こちらには配列変数(subscripted variable)についての記述もあって、 名前の長さが4文字以上でなければならない。と。
…でも変数名ってMAX 6文字でなかったっけ?
それはさておき別のドキュメント THE FORTRAN AUTOMATIC CODING SYSTEM のp.5~p.6にかけても関数についての記述がある。
Function Statements
Example 2: Define a function of three variable to be used throughout a given problem, as follows:ROOTF(A,B,C)=(-(B/2.0)+SQRTF((B/2.0)**2 - A*C/A))
Function statements must precede the rest of the program. They are composed of the desired function name (ending in F) followed by any desired arguments which appear in the arithmetic expression on the right of the * sign. The definition of a function may employ any previously defined functions. Having defined ROOTF as above, the programmer may apply it to any set of arguments in any subsequent arithmetic statements. For example, a later arithmetic statement might be:
THETA = 1.0 + GAMMA*ROOTF(PI, 3.2*Y + 14.0, 7.83)
同じドキュメントにあるサンプルコードには
1 POLYF(X) = C0 + X*(C1 + X*(C2 + X*C3))
2 DIMENSION A(1000), B(1000)
3 QMAX = -1.0 E20
4 DO 5 I=1, 1000
5 QMAX = MAXF(QMAX, POLYF(A(I)) + B(I))/POLYF(A(I) - B(I)))
6 STOP
というのがあって、 その辺から考えると 関数定義 → 配列宣言 → プログラム本体 のように書いたらしい。 確かにこれなら問題なく解析できるか。
ということでFUNCTION
を使わない関数定義はFORTRAN Iから
あったようだ。というお話。
- THE FORTRAN automatic coding system.pdf
- The FORTRAN Automatic Coding System for the IBM 704 EDPM : Programmer’s Reference Manual - 102649787.05.01.acc.pdf
- GitHub - nikitinprior/dF80: Restored F80 compiler code for CP/M
- GitHub - ratboy666/string: Microsoft FORTRAN-80 (F80) string handling library. Simple, fast, mostly FORTRAN.
IJKLMN
ちょっと前に FORTRANの暗黙の型宣言で整数が Iから始まっていたり DO文の繰り返しで(ネストが深くなる方向に) I。J、Kとなるのは… という(何十回めかの)話題があったけど バッカスがどう言っていたかなどに関するリンク。
- メモ帳:Fortranのループ変数が I,J,K,L,M,N になった理由 - fortran66のブログ
- 【メモ帳】Fortran で副プログラム引数は FORTRAN II から - fortran66のブログ
- 【メモ帳】雑記 - fortran66のブログ
- 【メモ帳】バッカス講演 - fortran66のブログ
- 【メモ帳】長月の二十日のころ - fortran66のブログ
- LINK切れのメモ帳 - fortran66のブログ
古代言語
古代言語FORTRANの解読について という記事で次のようなコーディングのルールが書かれていた
コーディングルール
これは飽くまでも個人的に提案するコーディングルールですが, このルールに適合するコードに変換していきます.
- 基本的に全て小文字で書きましょう. 大文字は読みにくいです.
- 行番号の使用は禁止です(do文, if文, write文のfmtなど).
- continue文も禁止です(doとifには必ずend doとend ifを対応させます).
- 全てimplicit noneにします.
- implicit integer (I-N)は禁止です.
- implicit double precision (a-h,o-z)は禁止です.
- グローバル変数は禁止です(多少コードが長くなっても, 純粋関数にしましょう).
- common文やmoduleによる変数の渡しも禁止です(グローバル変数と同様, 明示的に変数を引数を書くことを薦めます. 長くなる場合はオプショナル変数などを活用しましょう).
- グローバル変数も原則禁止です.
- 空行のコメントアウトは不要です.
- 適切なインデントをしましょう.
グローバル変数の禁止が2回出てくるのは 大事なことだからだろうか?🤔