ときどきの雑記帖 RE* (新南口)
遥かなるオーガスタ
スプリガン
一週遅れで先週(9/1深夜)放送分を観たのだけど 朧の声を聴いて自分が勝手に持っていたイメージと 全然違ったのでびっくりした。
ノイエのキルヒアイスも驚いたけど 朧の方が衝撃は大きかったかも (どちらも否定はしない)。
新500円硬貨
初遭遇。 自販機使ったらおつりで出てきた。
新刊近刊
告知:新著9月11日発売。タイトルは『生成AIの核心: 「新しい知」といかに向き合うか』。 ChatGPTの使い方やLLMの細かな違いでなく、生成AIとどう向き合いどう付き合っていけばいいのか……的な話を、取材した内容からまとめました。 電子書籍も同日発売、予約開始。 https://t.co/SDfyZwIYJU
— Munechika Nishida (@mnishi41) September 7, 2023
西田さんの本ならチェックしておかなければだわ
return
Cのreturn文にカッコが必須だった話。
legacy-cc
The earliest versions of the very first c compiler known to exist in the wild written by the late legend himself dmr.
この時代のCにはプリプロセッサーがなかった(らしい)ので
legacy-cc/c00.c
init("return", 11);
この11を手がかり探してみると
legacy-cc/last1120c/c02.c at master · mortdeus/legacy-cc
/* return */
case 11:
if((peeksym=symbol())==6) /* ( */
rcexpr(pexpr(), regtab);
retseq();
goto semi;
legacy-cc/last1120c/c02.c at 936e12cfc756773cb14c56a935a53220b883c429 · mortdeus/legacy-cc
pexpr()
{
auto o, t;
if ((o=symbol())!=6) /* ( */
goto syntax;
t = tree();
if ((o=symbol())!=7) /* ) */
goto syntax;
return(t);
syntax:
error("Statement syntax");
errflush(o);
return(0);
}
と、確かに値を返すときはカッコ必須でした。
ところでこのC
main(argc, argv)
int argv[]; {
extern init, flush;
extern extdef, eof, open, creat;
extern fout, fin, error, exit, nerror, tmpfil;
if(argc<4) {
error("Arg count");
exit(1);
}
if((fin=open(argv[1],0))<0) {
error("Can't find %s", argv[1]);
exit(1);
}
if((fout=creat(argv[2], 017))<0) {
error("Can't create %s", argv[2]);
exit(1);
}
tmpfil = argv[3];
init("int", 0);
//以下略
argvの型が char **
でないんですな。
v7
v7のcc
v7unix/v7/usr/src/cmd/c/c02.c at master · v7unix/v7unix v7/c02.c
case RETURN:
doret();
goto semi;
case IF:
np = pexpr();
o2 = 0;
if ((o1=symbol())==KEYW) switch (cval) {
case GOTO:
if (o2=simplegoto())
goto simpif;
cbranch(np, o2=isn++, 0);
dogoto();
label(o2);
goto hardif;
case RETURN:
if (nextchar()==';') {
o2 = retlab;
goto simpif;
}
cbranch(np, o1=isn++, 0);
doret();
label(o1);
o2++;
goto hardif;
v7unix/v7/usr/src/cmd/c/c04.c at master · v7unix/v7unix
doret()
{
register struct tnode *t;
if (nextchar() != ';') {
t = tree();
*cp++ = &funcblk;
*cp++ = t;
build(ASSIGN);
cp[-1] = cp[-1]->tr2;
if (funcblk.type==CHAR)
cp[-1] = block(ITOC, INT, NULL, NULL, cp[-1]);
build(RFORCE);
rcexpr(*--cp);
}
branch(retlab);
}
tree() の実装を見るのは省略するけど、 こいつはカッコ必須ではない(たぶん)。
pcc
IanHarvey/pcc: Portable C Compiler sources
ということで(?)pccは省略。
C72
ついでにx86用に変更されたC72の vegesm/c72: The first C compiler ported to x86 から。
Differences to modern C
This version of C is from around 1972. While the general syntax is pretty much the same as today, there are tons of missing features:
- no preprocessor, no for loops
- bitwise NOT and XOR is not implemented
- no short-circuiting AND and OR
- even though there is a keyword for float and double, floating point calculations are not implemented, you can not even write a floating point literal
- the type system is very weak: pointers, chars, ints can be freely converted into one another
- types of the function parameters are not checked, anything can be passed to any function
- compound assignment operators are reversed, they are =+, =*
- only integer global variables can be defined, and the syntax is strange:
/* defines globalvar to have the value of 2 */ globalvar 2; /* equivalent to int globalarr[]={1, 2, 3}; */ globalarr[] 1, 2, 3;
returnのあとのカッコについては書かれていないけど なかなかに興味深い違いですな。 プリプロセッサーがないという話は先にも出てきたけど for文もないと。 それじゃあとコンパイラーのソースコードで検索してみたら確かに見つからなかった (正確には元々のコンパイラーの実装には関係ない部分にはあった)。
c72/src at master - vegesm/c72 - GitHub
化
別の SNS でちょっと話題になったのだけど、「暗号化」ってすごいモヤモヤする。「暗号」+「化」ってなんやねん。「難読化」は分かる。「復号化」はまぁわかる。
— mattn (@mattn_jp) September 8, 2023
〜化を「〜にする」と捉えてるので
— yoh2 (@yoh2_sdj) September 8, 2023
暗号化 →そのままでは読めない信号にする
復号化→信号を元に戻すにする
のような感覚になって逆の所感を持ってる。
それにしても、暗号と復号は対称的な文字の並びなのに暗号は読めなくした信号そのものを表して、復号は元に戻すことを表すのがややこしい。
塩化 → 塩 (えん) になる
— yoh2 (@yoh2_sdj) September 8, 2023
液状化 → 液状になる
問題化 → 問題になる
変化 → 変になる
……🤔
自分はmattnさんとは逆で、 「復号化」にもやもやするがなあ。 細かい解釈はたぶんyoh2さんと同じ。
化がついた言葉に対する違和感と言えば カプセル化とかボックス化とか以下略
宇都宮LRT
宇都宮LRT、地元の人が(用もないのに)めちゃめちゃ始発〜終点を往復しているし、乗っていると手を振られるし、普通のマンションとか幼稚園にすら「祝 宇都宮LRT開業」みたいな横断幕が掲げられており、歓迎ぶりがすごい
— みゅーもり (@myuuuuun) September 8, 2023
しばらく待った方がよさげ(笑)
音引き
サーバーをサーバと書く←わかる
— くまぎ (@kumagi) September 8, 2023
ベクターをベクタと書く←わかる
テンサ―をテンサと書く←わかるけど何だこの違和感
「ピッチャ投げた、バッタ打った、これは大きい」-erのカタカナ表記で音引きを抜くのは日本語を壊していたのです
— ake (@ake_____) September 8, 2023
そう言えば中学のときの技術の先生が「ブザー」を「ブザ」と書く人で、 初めて板書でそれを見たときに教室がざわついた記憶。
あと作家の森博嗣さんは最後の音引きをまったく書かないですね。
理系と称される要因の1つとして、「外来語のカタカナ表記において音引きを省略する」という原則を徹底していることが挙げられる。 これは理系分野においては一般的に外国語の単語をカタカナに直す際に長音を省くことが多いためであるが、森の場合、 日常語においても音引きを略すのが特徴的である。かつて日本工業規格(JIS Z 8301)において 「その言葉が3音以上の場合には、語尾に長音符号をつけない」という規定があった[注 14]。 「コンピュータ」など一部の語のみ長音記号を省略する小説家はいたが、これを徹底して小説に持ち込んだ。
HKT
なのでまぁ大抵のケースにおいてHKTくらい普通に使える型システムの言語使った方がおすすめですよ(?
— がくぞ (@gakuzzzz) September 8, 2023
HKTとは?と調べると Higher Kinded Types - herp-technote らしい。
型を受け取って型を返す型 (
* → *
)。高階型、Higher Rank Typesとも。HKTと略される。
ああ、これか(ちょっと知ったか混じり)。
TypeScriptとHigher Kinded Type(高階型) | k.dev
ボスコニアン
#アケアカ
— 深海四畳半 (@aMwutOwlbygyaSv) August 23, 2023
ブラーストオウフ
ギュインギュイーンギュイーン
ガンガン ガンガンガン ガンガン
アラーイアラーイ!キュルルル
…一言で言って最高だぜ😆ウチュウガマルゴトヤッテキタぜコレ pic.twitter.com/4ZPXJlW416
やっぱりあれ、 「アラーイアラーイ」って聴こえるよねえ😄 あと「タイヘンタイヘン」とかも。