ときどきの雑記帖 RE* (新南口)
The Outer Limits
Zガンダム@テレ玉
「白い闇を抜けて」
- アッシマーが!
次回「ホンコン・シティ」
時は未来。所は宇宙。
その先の記憶が曖昧だったので試しにググってみたらこんなの見つかった
「えーあい」に尋ねたらどんな答えが返ってきたかな🤔
pi
Python 3.14 is introducing a new type of interpreter… : r/programming
They should call the release “π-thon”.
ちょっとウケた
渋谷
あそこにも(歩行者デッキに上がる)階段ができるのか
WG 14
たまに眺めている。
- WG 14 Document log
- WG14 N3578 Title: Dogfooding the _Optional qualifier
- n3577 - Rename s/uimaxabs/umaxabs/
- n3576 - Relax restrictions on standard attributes
- n3575 - add a malloc(3)-based sprintf(3) variant
- n3574 - Adopt qualifier conversion rules from C++
- n3573 - Add operators _Widthof, _Minof, _Maxof
_Optionalは(まだ)よくわからん。
領域を確保してくれるsprintf的なものはGNUにあったよなと思いつつn3575を読みすすめると
Here’s an example implementation of the proposed API:
[[gnu::malloc(free)]] [[gnu::format(printf, 1, 2)]]
char *
aprintf(const char *restrict fmt, ...)
{
char *p;
va_list ap;
va_start(ap, fmt);
p = vaprintf(fmt, ap);
va_end(ap);
return p;
}
[[gnu::malloc(free)]] [[gnu::format(printf, 1, 0)]]
char *
vaprintf(const char *restrict fmt, va_list ap)
{
char *p;
size_t size, len;
len = vsnprintf(NUL, 0, fmt, ap);
if (len == -1)
return NULL;
size = len + 1;
p = MALLOC(size, char);
if (p == NULL)
return NULL;
if (vsnprintf(p, size, fmt, ap) == -1)
return NULL;
return p;
}
こんなサンプルが。
そう言えばそういう「使い方」があったわねえ>len = vsnprintf(NUL, 0, fmt, ap);
あとasprintf
ってPOSIXにあったのね
新刊近刊
考えるナメクジ
士郎正宗展で紹介されていた本の一冊。
サンダーボルト
【告知】お待たせしました!サンダーボルトも遂に最終章に突入!最終回まであと8話!ファンの皆様ぜひ最後まで見届けて下さい!222話掲載のスペリオールは明日発売!!! pic.twitter.com/VE1ztwDVgs
— 太田垣康男 (@ohtagakiyasuo) June 12, 2025
完結後、MOONLIGHT MILEの復活はあるんだろうか😓
awk
OTA
前回の定数を書き換えてしまう挙動、ちょっと追いかけてみた。
まずはawkgram.y で定数(数値リテラル)を解析したところから。
| NUMBER { $$ = celltonode($1, CCON); }
ちなみに変数だとこの辺り
varname:
VAR { $$ = celltonode($1, CVAR); }
ここで呼んでいるcelltonodeはというと parse.cにある
Node *celltonode(Cell *a, int b)
{
Node *x;
a->ctype = OCELL;
a->csub = b;
x = node1(0, (Node *) a);
x->ntype = NVALUE;
return(x);
}
ちょっと戻ってlexerが数値リテラルを検出するところ lex.c/yylex()
if (isalpha(c) || c == '_')
return word(buf);
if (isdigit(c)) {
char *cp = tostring(buf);
double result;
if (is_number(cp, & result))
yylval.cp = setsymtab(buf, cp, result, CON|NUM, symtab);
else
yylval.cp = setsymtab(buf, cp, 0.0, STR, symtab);
free(cp);
/* should this also have STR set? */
RET(NUMBER);
}
is_number
呼び出しのあとでsetsymtab
を呼び出しているのが気になる。
名前からするとテーブルに登録しそうな感じだけど
定数も登録するの?
で、そのsetsymtab()
Cell *setsymtab(const char *n, const char *s, Awkfloat f, unsigned t, Array *tp)
{
int h;
Cell *p;
if (n != NULL && (p = lookup(n, tp)) != NULL) {
DPRINTF("setsymtab found %p: n=%s s=\"%s\" f=%g t=%o\n",
(void*)p, NN(p->nval), NN(p->sval), p->fval, p->tval);
return(p);
}
p = (Cell *) malloc(sizeof(*p));
if (p == NULL)
FATAL("out of space for symbol table at %s", n);
p->nval = tostring(n);
p->sval = s ? tostring(s) : tostring("");
p->fval = f;
p->tval = t;
p->csub = CUNK;
p->ctype = OCELL;
tp->nelem++;
if (tp->nelem > FULLTAB * tp->size)
rehash(tp);
h = hash(n, tp->size);
p->cnext = tp->tab[h];
tp->tab[h] = p;
DPRINTF("setsymtab set %p: n=%s s=\"%s\" f=%g t=%o\n",
(void*)p, p->nval, p->sval, p->fval, p->tval);
return(p);
}
…してますな。登録。
「同じ」定数を参照するので、/=
を繰り返しただけ値も変わっていったと。
変数はというと、yylexから呼び出している word()という関数で
int word(char *w)
{
...(省略))
} else {
yylval.cp = setsymtab(w, "", 0.0, STR|NUM|DONTFREE, symtab);
if (c == '(') {
RET(CALL);
} else {
RET(VAR);
}
とシンボルテーブルに登録している。
FORTRAN Compiler on IBM 704
解説は後日(たぶん)
A+B+C
i | Ai | Ci | Ni | Token | C-Seq | Π |
---|---|---|---|---|---|---|
1 | 0 | 0 | 1 | +( | Λ | |
2 | 1 | 1 | 2 | +( | (0) | (0,+,1) |
3 | 2 | 2 | 3 | ++( | (0,1) | (1,*,2) |
4 | 3 | 3 | 4 | ●A | (0,1,2) | (2,**,3) |
5 | 3 | 3 | 4 | ) | (0,1,2) | (3,●,A) |
6 | 2 | 2 | 4 | ) | (0,1) | |
7 | 1 | 1 | 4 | ) | (0) | |
8 | 0 | 0 | 4 | +( | Λ | |
9 | 1 | 4 | 5 | *( | (4) | (0,+,4) |
10 | 2 | 5 | 6 | **( | (4,5) | (4,*5) |
11 | 3 | 6 | 7 | ●B | (4,5,6) | (5,**,6) |
12 | 3 | 7 | 7 | ) | (4,5,6) | (6,●,B) |
13 | 2 | 6 | 6 | ) | (4,5) | |
14 | 1 | 5 | 7 | ) | (4) | |
15 | 0 | 4 | 7 | +( | Λ | |
16 | 1 | 7 | 8 | +( | (7) | (4,+,7) |
17 | 2 | 8 | 9 | **( | (7,8) | (7,*,8) |
18 | 3 | 9 | 10 | ●C | (7,8,9) | (8,**,9) |
19 | 3 | 10 | 10 | ) | (7,8,9) | (9,●,C) |
20 | 2 | 9 | 10 | ) | (7,8) | |
21 | 1 | 8 | 10 | ) | (7) | |
22 | 0 | 7 | 10 | Λ | Λ |
A+B*C
i | Ai | Ci | Ni | Token | C-Seq | Π |
---|---|---|---|---|---|---|
1 | 0 | 0 | 1 | +( | Λ | |
2 | 1 | 1 | 2 | *( | (0) | (0,+,1) |
3 | 2 | 2 | 3 | **( | (0,1) | (1,*,2) |
4 | 3 | 3 | 4 | ●A | (0,1,2) | (2,**,3) |
5 | 3 | 3 | 4 | ) | (0,1,2) | (3,●,A) |
6 | 2 | 4 | 4 | ) | (0,1) | |
7 | 1 | 4 | 4 | ) | (0) | |
8 | 0 | 0 | 4 | +( | Λ | |
9 | 1 | 4 | 5 | *( | (4) | (0,+,4) |
10 | 2 | 5 | 6 | **( | (4,5) | (4,*5) |
11 | 3 | 6 | 7 | ●B | (4,5,6) | (5,**,6) |
12 | 3 | 7 | 7 | ) | (4,5,6) | (6,●,B) |
13 | 2 | 6 | 7 | ) | (4,5) | |
14 | 1 | 5 | 7 | *( | (4) | |
15 | 2 | 7 | 8 | **( | (4,7) | (5,*,7) |
16 | 3 | 8 | 8 | ●C | (4,7,8) | (7,**,8) |
17 | 3 | 8 | 8 | ) | (4,7,8) | (8,●,C) |
18 | 2 | 8 | 8 | ) | (4,7) | |
19 | 1 | 7 | 8 | ) | (4) | |
20 | 0 | 4 | 8 | Λ |
A*(B+C)
i | Ai | Ci | Ni | Token | C-Seq | Π |
---|---|---|---|---|---|---|
1 | 0 | 0 | 1 | +( | Λ | |
2 | 1 | 1 | 2 | *( | (0) | (0,+,1) |
3 | 2 | 2 | 3 | **( | (0,1) | (1,*,2) |
4 | 3 | 3 | 4 | ●A | (0,1,2) | (2,**,3) |
5 | 3 | 3 | 4 | ) | (0,1,2) | (3,●,A) |
6 | 2 | 4 | 4 | ) | (0,1) | |
7 | 1 | 1 | 4 | *( | (0) | |
8 | 2 | 4 | 5 | **( | (0,4) | (1,*,4) |
9 | 3 | 5 | 6 | ●( | (0,4,5) | (4,**,5) |
10 | 4 | 6 | 7 | +( | (0,4,5,6) | (5,●,6) |
11 | 5 | 7 | 8 | *( | (0,4,5,6,7) | (6,+,7) |
12 | 6 | 8 | 9 | **( | (0,4,5,6,7,8) | (7,*,8) |
13 | 7 | 9 | 10 | ●B | (0,4,5,6,7,8,9) | (8,**,9) |
14 | 7 | 9 | 10 | ) | (0,4,5,6,7,8,9) | (9,●,10) |
15 | 6 | 9 | 10 | ) | (0,4,5,6,7,8) | |
16 | 5 | 8 | 10 | ) | (0,4,5,6,7) | |
17 | 4 | 7 | 10 | +( | (0,4,5,6) | |
18 | 5 | 10 | 11 | *( | (0,4,5,6,10) | (7,+,10) |
19 | 6 | 11 | 12 | **( | (0,4,5,6,10,11) | (10,*,11) |
20 | 7 | 12 | 13 | ●C | (0,4,5,6,10,11,12) | (11,**,12) |
21 | 7 | 13 | 13 | ) | (0,4,5,6,10,11,12) | (12,●,C) |
22 | 6 | 12 | 13 | ) | (0,4,5,6,10,11) | |
23 | 5 | 11 | 13 | ) | (0,4,5,6,10) | |
24 | 4 | 10 | 13 | ) | (0,4,5,6) | |
25 | 3 | 6 | 13 | ) | (0,4,5) | |
26 | 2 | 5 | 13 | ) | (0,4) | |
27 | 1 | 4 | 13 | ) | (0) | |
28 | 0 | 0 | 13 | Λ |
MicroPython
MicroPython for #X68000 、「Pythonのクロージャとジェネレータを、ネイティブコードエミッターでm68k命令に変換して実行するとバスエラーになる」という、おそらくこれまで誰も使ったことがない機能の不具合の原因が見つかってバグが取れた。\(^^)/
— yunk (@yunkya2) June 7, 2025
後続の投稿を読んで、なぜ「バスエラー」が起きるのとか これまで見つからなかった理由(の一つ)に納得、
スカウト
まじでコーヒー吹き出した笑
— まさ (@axiomsofchoice_) June 12, 2025
就活のスカウト
○○さんのプロフィールを拝見いたしました。可換環の準素分解と代数多様体の研究は、医療DXの分野に不可欠です。
↑何言ってんだ笑
マイコン博物館
先日いったマイコン博物館のレポートをアップしました!
— えくしび@X68000愛好家%X68KBBSしすおぺ (@xbeeing) June 13, 2025
まだ1週間なのにまたいきたくなってきたwww
青梅遠いけどね!
でも、週1くらいは館長する、みたいな老後もいいかなとおもった...https://t.co/JRb1M0xeUq#マイコン博物館#青梅
行けるのはいつのことやら😓