ときどきの雑記帖 RE* (新南口)
白い炎
斉藤由貴?
This is the end, my only friend, the end:2023年02月01日分
卒業式で泣かないと冷たい人と言われそう
ドメインとサーバの契約更新が毎年3月初旬なのだが、ここ数日に限ってもインターネットというタンツボに 俺はもう限界だと思った過ぎる出来事だらけなので、今年限りの契約解除との結論が出た。
時折飛んでくるツッコミや 最近ではm4の記事も毎回楽しみにしていた(いまさらのように書く)のですが残念です。
まあ自分もいつまで続けるのかわかったもんではないのですが。
…ってもうアクセスできなくなってる?>https://www.hi-matic.org
赤
「赤いランドセル選ぶ男子が増えている」 土屋鞄製造所がジェンダーレスタイプを拡充する背景
以前(つーても10年以上前)にも書いたことがあるけど、 「赤いランドセルがいい」 とゴネて周囲を困らせた実績あり😄
境界線
この辺は割と通る(新宿ピカデリーや紀伊國屋書店に行くときなど)のだけど 気にしたことがなかったなあ。 次に通るときは確かめてみよう(忘れなければ😄)
メモ
- Portability and the C Language | Hacker News
- https://en.wikibooks.org/wiki/Portability_and_the_C_Language
- A parser and browser for the recently published Lisa Source Code (Pascal & Clascal) : programming
- A parser and browser for the Lisa source code published by the Computer History Museum
- This is a parser for the Lisa Pascal dialect which I started to implement on January 22, 2023.
- Japanese explained to programmers | Hacker News
- Japanese explained to programmers : programming
- https://lajili.com/posts/post-1/
January GNU Spotlight
1月分。
- anastasis-0.3.1
- binutils-2.40
- ddrescue-1.27
- diffutils-3.9
- ed-1.19
- g-golf-0.8.0-a.2
- gcl-2.6.14
- gnunet-0.19.2
- guile-3.0.9
- health-4.0.5
- mit-scheme-12.1
- mpfr-4.2.0
- nano-7.2
- ncurses-6.4
- parallel-20230122
- poke-3.0
- taler-v0.9.1
- texinfo-7.0.2
- tramp-2.6.0
名前を見てもなんのパッケージだっけ? となるものもいくつかあるけどそれはさておき いくつか info-gnu (date) でリリース案内のメールで変更内容(の一部)を確認してみた。
diffutils-3.9 released [stable]
Bug fixes diff -c and -u no longer output incorrect timezones in headers on platforms like Solaris where struct tm lacks tm_gmtoff. [bug#51228 introduced in 3.4]
** Bindings to `openat' and friends The procedures `openat', `open-fdes-at', `statat', `chownat', `unlinkat', `chmodat', `renameat', `mkdirat' and `symlinkat' have been added. They resolve file names relative to a directory passed as a file port. The procedures `chdir' `readlink' and `utime' have been extended to support file ports. The related flags `AT_REMOVEDIR' and `AT_EACCESS' have been added. See `File System' in the manual
Java
と書いていた話、redditでは盛大に盛り上がっていた。
じゃあHNでは? と再度確かめてみたが、話題に上ってはいたものの 盛り上がりはそれほどでもなさげ。
- All | Search powered by Algolia
- https://news.ycombinator.com/item?id=34565395
- https://news.ycombinator.com/item?id=34545369
それで見つけたこのスレッドもなかなか興味深かった。
- Reducing technical debt by valuing comments as much as code | Hacker News
- Reduce technical debt by valuing comments as much as code
Poorly maintained comments are a clear source of technical debt.
Heroku
もう一つHNから。 昨年末に日本でもなんかあったような記憶が>Heroku
Tell HN: Heroku deleted my database with no warning | Hacker News
Herokai here. Unfortunately we had no choice on the data retention front - once we’ve disconnected your database, we aren’t ALLOWED to hold your data for more than 30 days.
Herokai
という表現が目新しいというか初めてみたような気がする。
TechTarget
- ChatGPTが宣告 「プログラマーはコーディングさえできればよい」時代の終わり:「ChatGPT」は開発者を不要にするか【後編】 - TechTargetジャパン システム開発
- ChatGPTのOSS代替「Open Assistant」とは? “ただの複製”ではない理由:“Stable Diffusionの衝撃”を「言語」で再現 - TechTargetジャパン CX
- Stephanie Glen
- Stephanie Glen - TechTarget, News Writer
FORTRAN Compiler on IBM 704
さてホレリス定数のはなし。 のちのFORTRANでは
GNU Fortran - 5.1.14 Hollerith定数のサポート GNU Fortranは、代入、DATA文、関数、サブルーチン引数でホレリス定数をサポートしています。
data x /16Habcdefghijklmnop, 16Hqrstuvwxyz012345/
x(1) = 16HABCDEFGHIJKLMNOP
call foo (4h abc)
Hollerith constant - Wikipedia
By the FORTRAN 66 Standard, Hollerith syntax was allowed in the following uses:
- As constants in DATA statements
- As constant actual arguments in subroutine CALL statements
- As edit descriptors in FORMAT statements
のようにわりと自由にホレリス定数を置けた印象があるけれども、 FORTRAN IIの時点ではFORMAT文の引数にしか置けなかったように思える (要追加調査)。
ということであらためて問題のサブルーチンを眺める
CD000 SCANS FOR HOLLERITH AND ILLEGAL CHARACTERS.
REM CD000/ CALLS=C0190X,C0190,DIAG. 4F11681
REM CD000 SCANS FOR HOLLERITH AND ILLEGAL CHARACTERS. 4F11682
CD000 TSX C0190X,4 * SET SCAN TO PICK UP 1ST CHARACTER. 4F11683
CD001 TSX CD900,1 * IF NOT ENDMARK OR ILLEGAL CHARACTER4F11684
CAS COMMA SCAN 4F11685
TXI CD002,0 FOR 4F11686
TXI CD003,0 HOLLERITH 4F11687
CD002 SUB OPEN SPECIFICATION 4F11688
TNZ CD001 WHICH 4F11689
CD003 TSX CD900,1 * CAN BE= 4F11690
SUB L(10) , N H 4F11691
TPL CD001 OR = ( N H. 4F11692
CD004 TSX CD900,1 * IF NOT ENDMARK OR ILLEGAL CHARACTER4F11693
CAS L(9) CONTINUE SCAN. 4F11694
TXI CD005,0 N 4F11695
TXI CD004,0 IS 4F11696
TXI CD004,0 A 4F11697
CD005 CAS L(H) FIXED 4F11698
TXI CD001+1,0 POINT 4F11699
TXI CD700,0 INTEGER. 4F11700
TXI CD001+1,0 X 4F11701
CD700 TSX C0190,4 * GO GET NEXT NONBLANK CHARACTER, 4F11702
CAS ENDMK AND IF ENDMARK, 4F11703
TXI CD701,0 THEN SKIP 4F11704
TXI CC000,0 * TO NON-ARITHMETIC CLASSIFICATION. 4F11705
CD701 TSX CD600,1 * SINCE HOLLERITH HAS BEEN FOUND, 4F11706
TXI CD700,0 THEN $ IS LEGAL IN FORMAT TEST. 4F11707
CD900 TSX C0190,4 * OBTAIN NEXT NONBLANK CHARACTER, 4F11708
CAS ENDMK AND IF NOT 4F11709
TXI CD800,0 ENDMARK, THEN SKIP 4F11710
TXI CB000,0 * EXIT TO ARITH/NON-ARITH SCAN. 4F11711
CD800 CAS SPECOP CHECK FOR $ 4F11712
TXI CD601,0 WHICH, UNLESS HOLERITH, IS AN 4F11713
TSX DIAG,4 * ERROR -- GO TO DIAGNOSTIC. 4F11714
CD600 CAS PM CHECK FOR RECORD MARK 4F11715
TRA 1,1 WHICH IS AN 4F11716
TSX DIAG,4 * ERROR -- GO TO DIAGNOSTIC. 4F11717
CD601 CAS CHAR3 CHECK FOR MINUS ZERO 4F11718
TRA 1,1 WHICH IS AN 4F11719
TSX DIAG,4 * ERROR -- GO TO DIAGNOSTIC. 4F11720
CAS CHAR2 CHECK FOR PLUS ZERO 4F11721
TRA 1,1 WHICH IS AN 4F11722
TSX DIAG,4 * ERROR -- GO TO DIAGNOSTIC. 4F11723
CAS MINUS CHECK FOR MINUS SIGN 4F11724
TRA 1,1 WHICH IS AN 4F11725
TSX DIAG,4 * ERROR -- GO TO DIAGNOSTIC. 4F11726
SUB TEN CHECK FOR TEN 4F11727
TNZ 1,1 WHICH IS AN 4F11728
TSX DIAG,4 * ERROR -- GO TO DIAGNOSTIC. 4F11729
REM END OF PROGRAM CD000. 4F11730
, 整数 H
あるいは
( 整数 H
という並びがあるかどうかをチェックしているようだ
(まあコメントにもそうあるのだけど)。
サブルーチンの最後の方でいくつかチェックしている「文字」の
定義を確かめると(順序はソースコードでの登場順ではなく
「コード」の値順)
TEN OCT 12 (1010) - CTEST-11 4F10308
MINUS OCT 14 - 4F10331
CHAR2 OCT 32 CONSTANT USED BY CD000. 4F10335
CHAR3 OCT 52 CONSTANT USED BY CD000. 4F10337
PM OCT 72 RECORD MARK (ILLEGAL) -CD000 4F10344
となっていて、これと BCD (character encoding) - Wikipedia とを見比べるとMINUS(OCT 14)がちょっと引っかかるけど その他の「4文字」は無効なものであるらしく それをはじいているようだ。
このサブルーチンのコードでのチェックだと
FORMAT ,1HFOO(4HHELL
みたいなものも通してしまうような気がするけど
それはFORMATの解析をするサブルーチンでチェックしているのかもしれない
(要確認)。
このサブルーチンでエラーが見つからなかった場合
TXI CC000,0 * TO NON-ARITHMETIC CLASSIFICATION. 4F11705
か
TXI CB000,0 * EXIT TO ARITH/NON-ARITH SCAN. 4F11711
の二か所かのいずれかから抜ける。 前者はホレリス定数が見つかった場合 (ホレリス定数があるstatementはarithmeticではあり得ないから)の経路で、 後者は見つからなかった場合の経路のように思えるけど あまり自信はない😓
FORMAT
FORMATについてちょっと補足しておくと、 ホレリス定数以外にもCのprintfでいう 書式文字列みたいなものが書ける。
FORTRAN_paper_1957.pdf p13
DIMENSION ALPHA(25), RHO(25)
1 FORMAT(5F12.4)
2 READ 1, ALPHA, RHO, ARG
こんな感じ。
- SystemsManualForIBM704And709FORTRAN.pdf
- c1070.pdf
Fedoraプロジェクトではコンパイルオプションをめぐって議論が紛糾している。論点はフレームポインタをシステム全体で有効にするか否かで、フレームポインタはデバッグや診断に役立つが、同時に1~2%の (Pythonに至っては10%もの) 速度低下が生じる。人によっては許容しがたいhttps://t.co/TDWZideWxx
— 新山祐介 (Yusuke Shinyama) (@mootastic) February 1, 2023
自分も以前に言及した話題 のような。と思ったら lwn.netでも記事になったからか。
前述のXCとgccの出力コードの比較では 「omit-frame-pointer」(最適化の一つ)にスポットが当たっていたような (実行速度にかなり利いていた)記憶があるんだけど、 その「最適化」が時代の流れで脇へ追いやられそうな?
Fedora Decides After All To Allow Default Compiler Flag To Help Debugging/Profiling - Phoronix
There are some performance hits and in the past SUSE engineers have characterized it as in the possible 5~10% range depending upon the particular software. Meta/Facebook engineers have been eager to push this change for Fedora while some GNOME developers would also like to see it happen for the improved debugging/profiling being enough to justify any performance costs.
The Performance Cost To A Proposed Fedora 37 CFLAGS/CXXFLAGS Change - Phoronix
Written by Michael Larabel in Software on 27 June 2022.
追記
続報: Fedora 38では今やフレームポインタが入った。このおかげでフレームグラフのような解析の情報量が圧倒的に増えた。https://t.co/3c3tj1X1TX
— 新山祐介 (Yusuke Shinyama) (@mootastic) February 5, 2023
bug
その考慮ありませんでした。
— けい@カブトム神【非公式】 (@kei_kabutomushi) January 31, 2023
ありがとうございます。
64bit環境前提なら。と言うのは理解してたのですが、確かに整数型ですよね。
2000年問題だかどこかで"(t1+t2)/2の実装が原因で起きたバグ"と言うのだけ覚えていて、ふと思い出したのでツイートしましたが、私もちゃんと勉強し直さなきゃですね…
2000年問題じゃないような記憶があった (といいつつ詳しいことは覚えていない) のでちょっと調べてみた。 たぶんこれだ。
Joy of Programming: About the Java Overflow Bug - Open Source For You
2009年2月の記事なので14年前すか(遠い目)。
んで、実際どういうものだったかというと
In his popular blog post [1], Joshua Bloch (Java expert and author of books on Java intricacies) writes about how a bug [2] in binarySearch and mergeSort algorithms was found in his code in java.util.Arrays class in JDK. It read as follows:
public static int binarySearch(int[] a, int key) { int low = 0; int high = a.length - 1; while (low <= high) { int mid = (low + high) / 2; int midVal = a[mid]; if (midVal < key) low = mid + 1 else if (midVal > key) high = mid - 1; else return mid; // key found } return -(low + 1); // key not found.
あー(蘇る記憶)。
- Extra, Extra - Read All About It: Nearly All Binary Searches and Mergesorts are Broken – Google AI Blog
- Bug ID: JDK-5045582 (coll) binarySearch() fails for size larger than 1«30