11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 using LinearAlgebra torus = [[(2 + cos(v)) * cos(u), (2 + cos(v)) * sin(u), sin(v)] for i in 0:29 for u in [2pi*i/30] for j in 0:29 for v in [2pi*j/30]] Rx(t) = [1 0 0; 0 cos(t) -sin(t); 0 sin(t) cos(t)] Ry(t) = [cos(t) 0 sin(t); 0 1 0; -sin(t) 0 cos(t)] Rz(t) = [cos(t) -sin(t) 0; sin(t) cos(t) 0; 0 0 1] for frame in 1:300 t = frame * 0.03 screen, zbuf = fill(' ', 25, 80), fill(Inf, 25, 80) for v in torus r = Rz(t) * Ry(t*0.7) * Rx(t*0.5) * v z = r[3] + 5 x, y = Int(round(r[1]/z*35+40)), Int(round(r[2]/z*20+12)) if 1 <= x <= 80 && 1 <= y <= 25 && z < zbuf[y,x] screen[y,x] = ".,:;ox%#@"[min(9, max(1, Int(floor(z))))] zbuf[y,x] = z end end print("\033[H\033[J") foreach(row -> println(join(row)), eachrow(screen)) sleep(0.03) end S o u r c e ( S t r i n g ) E x p r I n t e r p r e t e r / C o m p i l e r J S . S y n t a x T r e e C o d e I n f o call-i ref 3 + 5 r = z 1 z = r[3] + 5 なんやかんや なんやかんや なんやかんや なんやかんや ⇨ なんやかんや なんやかんや なんやかんや ⇨ ※ とりうる遷移やデータ構造を正確に反映・網羅したものではないです. 省略された遷移・データ構造がたくさんあります. 【現状の Julia コンパイラでは lowering 後に正確な位置情報は保持されていない】 闇の世界 (行だけ保持) 正確に位置を保持 コンパイラフロントエンドの改善は続くよどこまでも