ときどきの雑記帖 RE* (新南口)
Squad Leader
MMXXII
いまさらのように気がついた(知った)のだけど、 2022ってローマ数字で表記すると
渋谷駅
池袋のジュンク堂に行こうかと思ったが 例の工事で山手線の外回りの大崎―池袋間が運休なので 止めた(池袋に出るのに山手線外回りを使うことはないのだけど 諸々の影響を考えて)。
JR山手線渋谷駅、線路切替工事始まる 内・外回りホーム同一化へ - シブヤ経済新聞
excel
Excelの入力と表示の話 のつづき。
A B 1 $100 =A1+100 2 \100 =A2+100 3 €100 =A3+100 4 £100 =A4+100 5 ?100 =A5+100 という内容で入力したものが
A B 1 $100 \200 2 \100 \200 3 €100 \200 4 £100 #VALUE! 5 ?100 #VALUE! こんな表示になる。
これ、クォート'
に続いて数字を入れた場合に文字列扱いになるように、
一部の通貨記号に続いて数字を入れた場合には
セルには「数値」が入り、
そのセルの書式が「通貨」になるようだ。
だから、上記の引用部二つ目の例でB列の表示がどれも
日本円表記になっている。と。
sed
そう言えば大昔のsedにはコメントというものがなかったとか ただし1行目が
#n
だったら
-n
オプションが指定されたのと同じ動作になる とかいうのがあったような記憶があるんだけど 実際どうだったんだろう?
ということで(ry
まずはv7のsed v7unix/sed0.c を見ることにする。 ファイルから一行読み込んで処理する関数はfcompという名前のもので 内容はというと以下の通り
v7unix/sed0.c at master · v7unix/v7unix
fcomp()
{
register char *p, *op, *tp;
char *address();
struct reptr *pt, *pt1;
int i;
struct label *lpt;
compfl = 1;
op = lastre;
if(rline(linebuf) < 0) return;
if(*linebuf == '#') {
if(linebuf[1] == 'n')
nflag = 1;
}
else {
cp = linebuf;
goto comploop;
}
for(;;) {
if(rline(linebuf) < 0) break;
cp = linebuf;
comploop:
/* fprintf(stdout, "cp: %s\n", cp); /*DEBUG*/
while(*cp == ' ' || *cp == '\t') cp++;
if(*cp == '\0' || *cp == '#') continue;
if(*cp == ';') {
cp++;
goto comploop;
}
p = address(rep->ad1);
if(p == badp) {
fprintf(stderr, CGMES, linebuf);
exit(2);
}
一行目の行頭の#n
を特別扱いしているのは確かにそうだった
(細かい話をするとfcompから呼び出しているrlineという関数も見る必要があるんだろうけどそこは省略)。
その他の#
については行の残りを読み飛ばしている
if(*cp == '\0' || *cp == '#') continue;
のでコメントだわねえ。
「コメント文がない」という記憶はどこから来たんだろう?
gcc for Human68k
ちょっとX68000のgcc真里子版が意味分からないんだけど……。
— isimiya9 (@isimiya9) January 4, 2023
intが32bit?
16bit MPUなのに?
もしかして16bit分しか使わないならshortのほうがパフォーマンス出るの?#X68000 pic.twitter.com/TUI7mxguQY
68000では32bitデータをレジスターにメモリーからロードする場合、 16bitずつ2回に分けてアクセスするのでその分遅くなると言えば遅くなる。 ので、shortにすると早くなる可能性(局面)はあると思う。
他には乗除算命令も「16bit」のそれなので、 int×intでライブラリ関数を呼んでたりしていたなあ>X68k のCコンパイラー
x68は全部32bit intなのか。それともgccだけ32bitなのかしら。後者ならunix系からの影響とか?
— Kazuho Oku (@kazuho) January 4, 2023
シャープ純正のCコンパイラがint=32bitでした
— 後藤 浩昭 / GORRY (@gorry5) January 4, 2023
かなり後の方になってユーザーグループが作ったlibcが配布されるようになるまでは XC(シャープが販売していたCコンパイラー)のライブラリを使うことになっていたので、 「建前」としてはXCを持っていないとgccを入手してもあまり意味なかったのだよね (さらに言えば、アセンブラー(as.x)とリンカー(lk.x)もXCのそれを使用 していた(のちにhas.xやhlk.xが作成・公開された))。
ところでX68kへのgccの移植については
261 :ナイコンさん:2007/03/06(火) 13:12:27
シャープはパソコンに対して経営資源を分散させまくりだったからな。
X68000 は GCC を最初に移植した近藤くんが超偉い
ユーザーの間で広く使われたのはツイートにもある真里子版 gccだろうけど、 その前にこの近藤版というのがあった。 近藤さんのgcc移植苦労話がどこかで書かれていたはずなのだけど 雑誌記事だったかBBSへの投稿だったか。 ということを考えながら近藤版gccについて検索したらこういうのがみつかった。
X680x0 は、 TeX が主に動作している、 CPU に 680x0 を持ったワークステー ションのアーキテクチャに近いパーソナルコンピュータです。このため、元来は TeXの動作に最も支障が少ないパーソナルコンピュータのひとつなのです。
しかし、実際に TeX が X680x0 上で動くようになるまでにはたくさんの人々 の努力が必要でした。シャープから発売された XC コンパイラ Ver .1.00 は TeX はもとより、 UNIX 上で動くプログラムをコンパイルするには信頼性と性能が低 すぎました。それでも有志の方々は、だましだまし UNIX 上のプログラムを少 しずつ X 680x0 に移植してきましたが、本格的な移植が始まったのは GNU C Compiler が X 680x0 上に移植されてからのことです 。 GNU C Compiler (以下、 GCC と書く)は 、 Free Software Foundatioin (以下 、 FSF と書く) 6)が配布して いるCコンパイラで、 XC と比較すると非常に高速で、信頼性の高い C コンパ イラです。この GCC を大変な努力の末、移植されたのが近藤真己氏でした。こ の近藤版 GCC なくしては、現在の X680x0 の TeX 、 X680x0 の多数のフリーソ フトはこの世に存在しなかったでしょう。
この近藤版 GCC のリリースをきっかけに多数の UNIX 上のフリーソフトが X680x0 に移植されました。そのなかのひとつが TeX システムだったのです。最 初の X680x0 版のTeXは、前田薰氏 7)によって X680x0 の世界にもたらされま した。この TeX は、現在の X680x0 版 TeX とは異なる、英語専用の TeX でし た。英語専用の TeX では日本語を直接処理することはできません。
真里子版 gccについてはCマガジンの記事になってた記憶があるんだけど C MAGAZINE バックナンバー一覧 じゃあわからんなあ。
掛け算
大昔のCPUは乗算がとても遅かったせいで、組み込み界隈では、乗算は御法度という雰囲気があったりした。シフトに置き換えるとか、いまではただの老害だけども。
— 椚座 くにゅくにゅ 💉×5 淳介 (@kunukunu) January 5, 2023
そう言えばgccとXCの生成コードの比較なんてのがOh! Xに載った ことがあるんだけどその記事でだったか 別の号の記事でだったかで、 (当時の)gccがいかに乗数が定数の乗算をいかに 掛け算命令を使わないコードで出力するか を試していたものがあったような(これはCマガジンだったかも)。
今のgccなら素直に乗算命令吐くんだろうか (「石」にもよるんだろうけど)?
no-omit-frame-pointer
前述の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.
xargs
[Q&A] xargsコマンドの引数分割のおかしな挙動についての質問 - Qiita
のつづき。
xargs(1) - NetBSD Manual Pages
If utility attempts to invoke another command such that the number of arguments or the size of the environment is increased, it risks execvp(3) failing with E2BIG.
- Chris’s Wiki :: blog/unix/ExecEnvironmentIssue
- [bug #62622] E2BIG misbehaviour
- [bug #62622] E2BIG misbehaviour
- bug-bash Archives
- Re: execve E2BIG (Argument list too long)
- execve E2BIG (Argument list too long)
- c - Why am I getting E2BIG from exec() when I’m accounting for the arguments and the environment? - Stack Overflow
- Arithmetic expression: evaluation order bug
- Re: findutils-4.1.20: a comment on xargs.c arg_max
- findutils - Bugs: Browse Items [Savannah]
- findutils - Bugs: bug #37093, /usr/bin/xargs: rm: Argument list… [Savannah]
- findutils.git - GNU findutils
Merge Leslie Polzer’s SOC 2007 changes for better ARG_MAX support
2008-03-23 Leslie Polzer leslie.polzer@gmx.net
(bc_do_exec): Rename from do_exec, and make global. Modify the function to react to exec failing with E2BIG by trying again
- xargs/xargs.1: Mention that xargs automatically adopts to the situation where exec fails with E2BIG.
このコミットで例のチェックが入った模様。 2008年か。
quote
xargs繋がりで。
gitでマージ済みブランチを列挙してxargsで自動でローカルから削除するスクリプトがだいぶ前から動いてなくて、原因を調べてみたら I"ll_be_back なるブランチ名がquoteが閉じられてない判定でxargsがお怒りなさっていた pic.twitter.com/rLCtedxbS4
— 確定申告 (@mzyy94) January 5, 2023
— yoh2 (@yoh2_sdj) January 6, 2023
xargs.c\xargs - findutils.git - GNU findutils
if (state == QUOTE)
{
exec_if_possible ();
die (EXIT_FAILURE, 0,
_("unmatched %s quote; by default quotes are special to "
"xargs unless you use the -0 option"),
quotc == '"' ? _("double") : _("single"));
}
case QUOTE:
if (c == '\n')
{
exec_if_possible ();
die (EXIT_FAILURE, 0,
_("unmatched %s quote; by default quotes are special to "
"xargs unless you use the -0 option"),
quotc == '"' ? _("double") : _("single"));
}
if (c == quotc)
{
state = NORM;
seen_arg = true; /* Makes a difference for e.g. just '' or "" as the first arg on a line */
continue;
}
break;
static void
exec_if_possible (void)
{
if (bc_ctl.replace_pat || initial_args ||
bc_state.cmd_argc == bc_ctl.initial_argc || bc_ctl.exit_if_size_exceeded)
return;
bc_do_exec (&bc_ctl, &bc_state);
}
なるほど? (なんで exec_if_possible()を呼んでからdie()してるんだろう)
FORTRAN Compiler on IBM 704
SYN
SYN の話のつづき。
grep -e "^.\{7\}SYN" fort1.asm
などとするとSYNを使って別名をつけているものを抜き出せるのだけど
結構数がある。
ということで全部丸ごと貼り付けることはせず 一番目立つ部分を。
RAXR4 SYN ERASE COMMON WORKING STORAGE. 4F15947
1E SYN ERASE COMMON WORKING STORAGE. 4F15870
DIMCTR SYN ERASE COMMON WORKING STORAGE. 4F15908
DOE SYN ERASE COMMON WORKING STORAGE. 4F15910
DRSYM SYN ERASE COMMON WORKING STORAGE. 4F15914
E1TDR SYN ERASE COMMON WORKING STORAGE. 4F15915
RAXR4 SYN ERASE COMMON WORKING STORAGE. 4F15947
TETXR2 SYN ERASE ERASABLE STORAGE. 4F15961
D12 SYN ERASE+1 COMMON WORKING STORAGE. 4F15897
2E SYN ERASE+1 COMMON WORKING STORAGE. 4F15872
D12 SYN ERASE+1 COMMON WORKING STORAGE. 4F15897
E2C SYN ERASE+1 COMMON WORKING STORAGE. 4F15916
E2TDR SYN ERASE+1 COMMON WORKING STORAGE. 4F15917
EKE SYN ERASE+1 COMMON WORKING STORAGE. 4F15920
CITXR1 SYN ERASE+1 ERASABLE STORAGE. 4F15893
SR6WRK SYN ERASE+1 ERASABLE STORAGE. 4F15949
TETXR4 SYN ERASE+1 ERASABLE STORAGE. 4F15962
D3 SYN ERASE+2 COMMON WORKING STORAGE. 4F15899
3E SYN ERASE+2 COMMON WORKING STORAGE. 4F15875
D3 SYN ERASE+2 COMMON WORKING STORAGE. 4F15899
E3C SYN ERASE+2 COMMON WORKING STORAGE. 4F15918
E3TDR SYN ERASE+2 COMMON WORKING STORAGE. 4F15919
H SYN ERASE+2 COMMON WORKING STORAGE. 4F15926
CITXR2 SYN ERASE+2 ERASABLE STORAGE. 4F15894
TETWRK SYN ERASE+2 ERASABLE STORAGE. 4F15960
N SYN ERASE+3 COMMON WORKING STORAGE. 4F15943
4E SYN ERASE+3 COMMON WORKING STORAGE. 4F15877
DRCKSM SYN ERASE+3 COMMON WORKING STORAGE. 4F15911
ENOND SYN ERASE+3 COMMON WORKING STORAGE. 4F15921
ENONO SYN ERASE+3 COMMON WORKING STORAGE. 4F15921
N SYN ERASE+3 COMMON WORKING STORAGE. 4F15943
TETMQR SYN ERASE+3 ERASABLE STORAGE, 4F15959
TETMQR SYN ERASE+3 ERASABLE STORAGE. 4F15959
STCKSM SYN ERASE+4 COMMON WORKING STORAGE, 4F15952
FEOD SYN ERASE+4 COMMON WORKING STORAGE. 4F15922
STCKSM SYN ERASE+4 COMMON WORKING STORAGE. 4F15952
DRMADR SYN ERASE+4 ERASABLE STORAGE. 4F15912
使うタイミングはずれているんだろうけど、同じ番地の使いまわしが結構あった。
ERASEの実体はというとこう。
REM ALL OF THE ABOVE BUFFERS AND PARAMETERS ARE USED BY 1 PRIME. 4F10262
ORG 576 4F102625
ERASE BSS 5 COMMON WORKING STORAGE. 4F10263
1C BSS 5 COMMON NORKING STORAGE. 4F10264
1G BSS 1 COMMON NORKING STORAGE. 4F10265
2G BSS 1 COMMON WORKING STORAGE FOR STATE A.4F10266