ときどきの雑記帖 RE* (新南口)
飛鳥の征けぬ空はなし
連休
カレンダー通りです😄
Octave
とある理由でOctaveを使ってみるかと調べてみたら ドキュメントがすげーでかい(長い)。 日本語訳もあるっちゃあるんだけど、ベースのバージョンがかなーり古いもの。 さてどうしたものかと思ったのだけど
完全互換性があることの大きなメリットとして,Matlabの公式ドキュメントを参照できることが挙げられます. 完全互換性がありコードが全く同一なので「Matlabの公式ドキュメント」=「Octaveの公式ドキュメント」にもなるわけです. どういうことかというと,Octaveを使っていてわからないことが出てきた場合, 「Octave 〇〇」とgoogle検索してもあまり資料はなく,あっても英語で書かれてるなんてことが多いのですが, そういう時は「Matlab 〇〇」と検索すれば一番上にMatlabの公式ドキュメントが出てきて,それを見れば大抵のことは解決します. というのもMatlabの公式ドキュメントはものすごく充実しており,しかも日本語にも対応しています.
MATLABの参考書を使うという手もあるかもしれない😄
PowerShell
窓辺の小石(163) “UP THE LINE” 時間線を遡って | マイナビニュース
PowerShellのヒストリーにそんな機能が
今月の(元)皇帝陛下
ついに身罷られた。
来月が最終回というわけでもなさそう。
misc
Prolog
- Prolog language for PostgreSQL proof of concept | Hacker News
- tatut/pgprolog: PostgreSQL Prolog language handler
Mojo
MojoとかVerseとかCarbon(googleのアレ)とか 今どうなっているんだろうと。
IELR
論文読んでる余裕がナッシング
- Full parenthesization / Operator-precedence parser - Wikipedia
- Prattパーサ - Wikipedia
- Prattパーサの紹介|Prattパーサであらゆる演算子をパースする
- What exactly is Pratt parsing used for and how does it work? - Programming Language Design and Implementation Stack Exchange
FORTRAN Compiler on IBM 704
139
TXH LA0001,A,-1200 4F13778 29
TSX DIAG,4 ERROR..LAMBDA TABLE EXCEEDED. 4F13779 30
LA0001 TXH LA0002,B,-301 4F13780 31
TSX DIAG,4 ERROR..BETA TABLE EXCEEDED 4F13781 32
LA0002 TXL LA0003,C,0 4F13782 33
TXH LA0003,C,-139 4F13783 34
TSX DIAG,4 ERROR..ALPHA TABLE EXCEEDED 4F13784 35
という部分もあったので、ALPHAの大きさは139ワードで間違いなさそう。
CAS
いろいろやったあとで
CAL L(CHS) C81 (SI))) 35 = 1, SO 4F15079
SLW CW+1 COMPILE CHS FOR 1ST ELEMENT 4F15080
STZ CW+2 4F15081
STZ CW+3 4F15082
TSX COMP,B 4F15083
こういう具合にコードにしていくらしいと見当はついたものの、
命令コード(上の例でいうL(CHS)
の部分)らしいものが定義されている領域を見ると
REM 4F10405
L(ADD) BCD 1ADD000 SYMBOLIC OPERATION CODE. 4F10406
L(ALS) BCD 1ALS000 SYMBOLIC OPERATION CODE. 4F10407
L(ANA) BCD 1ANA000 SYMBOLIC OPERATION CODE. 4F10408
L(ARS) BCD 1ARS000 SYMBOLIC OPERATION CODE. 4F10409
L(BSS) BCD 1BSS000 SYMBOLIC OPERATION CODE. 4F10410
L(CAL) BCD 1CAL000 4F10411
L(CHS) BCD 1CHS000 SYMBOLIC OPERATION CODE. 4F10412
L(CLA) BCD 1CLA000 SYMBOLIC OPERATION CODE. 4F10413
L(CLM) BCD 1CLM000 SYMBOLIC OPERATION CODE. 4F10414
L(CLS) BCD 1CLS000 SYMBOLIC OPERATION CODE. 4F10415
L(CPY) BCD 1CPY000 4F10416
L(DCT) BCD 1DCT000 SYMBOLIC OPERATION CODE. 4F10417
L(DED) BCD 1DED000 4F10418
L(DVP) BCD 1DVP000 SYMBOLIC OPERATION CODE. 4F10419
L(FAD) BCD 1FAD000 SYMBOLIC OPERATION CODE. 4F10420
L(FDP) BCD 1FDP000 SYMBOLIC OPERATION CODE. 4F10421
L(FMP) BCD 1FMP000 SYMBOLIC OPERATION CODE. 4F10422
L(FSB) BCD 1FSB000 SYMBOLIC OPERATION CODE. 4F10423
L(HPR) BCD 1HPR000 SYMBOLIC OPERATION CODE. 4F10424
L(LDA) BCD 1LDA000 4F10425
L(LDQ) BCD 1LDQ000 SYMBOLIC OPERATION CODE. 4F10426
L(LLS) BCD 1LLS000 SYMBOLIC OPERATION CODE. 4F10427
L(LRS) BCD 1LRS000 SYMBOLIC OPERATION CODE. 4F10428
L(LXD) BCD 1LXD000 SYMBOLIC OPERATION CODE. 4F10429
L(MPY) BCD 1MPY000 SYMBOLIC OPERATION CODE. 4F10430
L(MSE) BCD 1MSE000 SYMBOLIC OPERATION CODE. 4F10431
L(ORA) BCD 1ORA000 SYMBOLIC OPERATION CODE. 4F10432
L(PSE) BCD 1PSE000 SYMBOLIC OPERATION CODE. 4F10433
L(PXD) BCD 1PXD000 SYMBOLIC OPERATION CODE. 4F10434
L(OPR) BCD 1OPRO00 SYMBOLIC OPERATION CODE. 4F10435
L(QXD) BCD 1QXD000 SYMBOLIC OPERATION CODE. 4F10436
L(STA) BCD 1STA000 SYMBOLIC OPERATION CODE. 4F10437
L(STO) BCD 1STO000 SYMBOLIC OPERATION CODE. 4F10438
L(STQ) BCD 1STQ000 SYMBOLIC OPERATION CODE. 4F10439
L(SUB) BCD 1SUB000 SYMBOLIC OPERATION CODE. 4F10440
L(SXD) BCD 1SXD000 SYMBOLIC OPERATION CODE. 4F10441
L(TIX) BCD 1TIX000 4F10442
L(TOV) BCD 1TOV000 SYMBOLIC OPERATION CODE. 4F10443
L(TQO) BCD 1TQO000 SYMBOLIC OPERATION CODE. 4F10444
L(TRA) BCD 1TRA000 SYMBOLIC OPERATION CODE. 4F10445
L(TSX) BCD 1TSX000 SYMBOLIC OPERATION CODE. 4F10446
L(UFA) BCD 1UFA000 SYMBOLIC OPERATION CODE. 4F10447
CAS
がない。
算術IFはCAS
命令があるからああいう形態になったと思ってたのだけど
実は違っていた?
で、IF文の処理をしているところを見ると
REM C0300/ CALLS=-C0190X,C0190,C0390,TEST..,DIAG,C0180,TET00, 4F11928
REM STATEB. 4F11929
REM C0300 PROCESSES IF STATEMENTS. 4F11930
C0300 LXD EIFNO,4 PLACE THE CURRENT INTERNAL FORMULA 4F11931
PXD ,4 NUMBER IN THE DECREMENT OF 1C 4F11932
SSM WITH SIGN SET TO MINUS 4F11933
STO 1C FOR FUTURE TIFGO ENTRY. 4F11934
TSX C0190X,4 * SET CHCTR AND FWA TO BEGIN SCAN. 4F11935
TSX C0190,4 * OBTAIN IN AC THE 1ST NB CHAR (I). 4F11936
LDQ L(X) REPLACE THE CHARACTER I 4F11937
TSX C0390,4 * WITH THE CHARACTER X. 4F11938
LDQ L(10) REPALCE THE CHARACTER F 4F11939
TSX C0390,4 * WITH THE CHARACTER 001010. 4F11940
TSX TESTE0,4 * IF NOT LPAREN -- THEN ERROR. 4F11941
LDQ AEQUAL REPLACE THE CHARACTER LPARAN 4F11942
TSX C0390,4 * WITH THE CHARACTER EQUAL. 4F11943
LXA L(1),2 SET XR2 FOR COUNTING PARENTHESES. 4F11944
TRA *+2 4F11945
C0302 TSX C0190,4 * MAKE SURE THAT NEXT NB CHARACTER 4F11946
CAS ENDMK IS NOT AN ENDMARK. 4F11947
TRA ERR77P * MACHINE ERROR, GO TO DIAGNOSTIC. 4F11948
TSX DIAG,4 * PROGRAM ERROR, GO TO DIAGNOSTIC. 4F11949
CAS ALPAR IF IT IS A LPAREN, 4F11950
TXI C0303,0 THEN ADD 1 TO PAREN COUNT, AND 4F11951
TXI C0302,2,1 GO EXAMINE NEXT CHARACTER. 4F11952
C0303 SUB ARPAR IF IT IS A RPAREN, 4F11953
TNZ C0302 THE TEST PAREN COUNT, AND IF IT 4F11954
TIX C0302,2,1 CAN NOT BE REDUCED,MATE IS FOUND. 4F11955
LDQ ENDMK SO REPLACE THE CHARACTER RPAREN 4F11956
TSX C0390,4 * WITH THE CHARACTER ENDMK. 4F11957
TSX C0180,2 * BINARY EQUIVALENT OF BETA 1. 4F11958
TSX TESTG0,4 * THIS SHOULD BE FOLLOWED BY A COMMA.4F11959
CLA 1G MOVE BETA1 4F11960
STA 1C TO ADDRESS OF 1C. 4F11961
TSX C0190,4 * AND PROCEED TO FORM 4F11962
TSX C0180,2 * THE BINARY EQUIVALENT OF BETA 2. 4F11963
TSX TESTG0,4 * THIS SHOULD BE FOLLWED BY A COMMA. 4F11964
CLA 1G MOVE BETA2 4F11965
ALS 18 TO DECR PART 4F11966
STO 1C+1 OF 1C+1. 4F11967
TSX C0190,4 * AND PROCEED TO FORM 4F11968
TSX C0180,2 * THE BINARY EQUIVALENT OF BETA 3. 4F11969
TSX TESTD0,4 * THIS SHOULD BE FOLLOWED BY ENDMARK.4F11970
CLA 1G MOVE BETA3 4F11971
STA 1C+1 TO ADDRESS OF 1C+1. 4F11972
TXI ARITH,0 * EXIT TO ARITH FOR FINAL PROCESSING.4F11973
REM END OF PROGRAM C0300. 4F11974
なんと最後に算術式の処理ルーチンに飛んでいた
>TXI ARITH,0 * EXIT TO ARITH FOR FINAL PROCESSING.
ここではARITHとなっているけど
ARITH SYN STATEB 4F15884
という定義があるので、実態は算術式のルーチン(の入り口)
1C
*
ES1500 TSX TET00,1 * GO TO PROGRAM TET TO ENTER 1C,1C+1 4F15722
PZE 2 INTO TIFGO TABLE (TABLE 2). 4F15723
TRA ES1530 4F15724
*
CALL
IFもそうなんだけど、TXI ARITH,0
で算術式の処理ルーチンに飛ぶ前に
ソースコードのCALL
をなにやら書き換えているのはなんなんだろう?
REM C3300/ CALLS=C0390,C0190X,C0190,TEST..,ARITH,SUBX00. 4F12381
REM C3300 PROCESSES CALL STATEMENTS. 4F12382
C3300 TSX C0190,4 * IF 1ST CHARACTER OF NAME IS 4F12383
TSX TESTH0,4 * NUMERIC, THEN GO TO THE DIAGNOSTIC.4F12384
TSX C0160,2 * COLLECT THF REST OF THE NAME, WHICH4F12385
TSX TESTC0,4 * SHD BE FOLLOWED BY LPAREN OR ENDMK.4F12386
TZE C3301 IF LPAREN, THEN CHANGE CALL TO A 4F12387
TSX C0190X,4 * PSEUDO-ARITHMETIC FORMULA (Z10=). 4F12388
TSX C0190,4 * PICKUP THE CHARACTER C, 4F12389
LDQ L(Z) AND 4F12390
TSX C0390,4 * REPLACE C WITH Z. 4F12391
LDQ L(10) AND 4F12392
TSX C0390,4 * REPLACE A WITH TEN. 4F12393
LDQ EQUAL AND 4F12394
TSX C0390,4 * REPLACE FIRST L WITH =. 4F12395
LDQ BLANK AND 4F12396
TSX C0390,4 * REPLACE SECOND L WITH BLANK. 4F12397
CLA EIFNO PUT 1ST IFN OF THIS CALL IN CALLNM 4F12398
ARS 18 FOR LATER TABLE ENTRY OF 4F12399
STA CALLNM FIRST / LAST NUMBERS OF CALLS. 4F12400
TXI ARITH,0 * THEN EXIT TO ARITH TO PROCESS. 4F12401
中の人登場
SQLiteってSQL分をバイトコードにコンパイルしてVMでそれを実行するのか
— ゴリラ - 週休7日の仕事が見つかりません (@gorilla0513) April 28, 2024
なんでVMを使うんだろ🤔https://t.co/Ee2PXNa6ai pic.twitter.com/Oof2UlrJVJ
When I first wrote SQLite, I didn't know much about SQL database engines. But I was familiar with compilers. So it was natural for me to treat the problem of writing an SQL database engine as a compiler-construction problem. Hence, SQLite compiles SQL into byte-code.
— D. Richard Hipp (@DRichardHipp) April 28, 2024
Turns out, there are advantages and disadvantages to using byte-code rather than just walking the AST. I think the advantages are more important than the disadvantages for a system like SQLite. I didn't know this when I first wrote, SQLite - I just got lucky.
— D. Richard Hipp (@DRichardHipp) April 28, 2024
そしてこの記事になったらしい
- Why SQLite Uses Bytecode
- Why SQLite Uses Bytecode | Hacker News
- Why SQLite Uses Bytecode : r/programming
リンガーハット なあ
— ベルスター (@hexcite) April 29, 2024
リンガーハットだ‼︎
リンガーハットだろう⁉︎
なあ リンガーハットだろ おまえ pic.twitter.com/nZ6CFVGTNy