# Python(風の構文)を改造する

**URL:** https://forum.kaisaba.net/t/topic/1267
**Category:** 技術
**Tags:** mod, python, 改造
**Created:** [2026 年 4 月 26 日午後 12:02 UTC](https://forum.kaisaba.net/t/topic/1267 "2026-04-26T12:02:10Z")
**Posts on this page:** 20
**Page:** 1

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 26 日午後 12:02 UTC](https://forum.kaisaba.net/t/topic/1267/1 "2026-04-26T12:02:10Z")

</div>

というわけでね、こんなのをできるようにしたいと思います

```auto
execute(def ():
    print("こんにちは！改造Pyだよ！")
    ...
)

```

---

<div class="post-metadata">

### Author: ![bac0n](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/bac0n/32/9_2.png) [@bac0n](https://forum.kaisaba.net/u/bac0n)
#### Post date: [2026 年 4 月 26 日午後 12:05 UTC](https://forum.kaisaba.net/t/topic/1267/2 "2026-04-26T12:05:34Z")

</div>

ifじゃダメなの？

---

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 26 日午後 12:06 UTC](https://forum.kaisaba.net/t/topic/1267/3 "2026-04-26T12:06:25Z")

</div>

if…?なぜ？

---

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 26 日午後 12:09 UTC](https://forum.kaisaba.net/t/topic/1267/4 "2026-04-26T12:09:28Z")

</div>

![image](https://forum.kaisaba.net/uploads/default/original/2X/4/41e9e6e089821bd599ffcdc27db32b02ea98ada0.png)  
めんどくチー  
PLYでの基本構文をAIに作らせようと思ったけど、数万行なるって言われたからやってみるものの

---

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 26 日午後 12:10 UTC](https://forum.kaisaba.net/t/topic/1267/5 "2026-04-26T12:10:51Z")

</div>

せっかくだしGIL壊すか

* * *

メモリ安全なんて知らねえ！  
メモリ安全にしたいならlock使え！

---

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 26 日午後 12:14 UTC](https://forum.kaisaba.net/t/topic/1267/6 "2026-04-26T12:14:13Z")

</div>

あと高速化したいから…どうしよ  
バイトコードは本家に任せたいしなー  
とはいえJITはめんどい

---

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 26 日午後 12:34 UTC](https://forum.kaisaba.net/t/topic/1267/7 "2026-04-26T12:34:38Z")

</div>

oh!  
Python公式がすでにJITもGIL破壊も作ってくれているではありませんか！

---

<div class="post-metadata">

### Author: ![bac0n](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/bac0n/32/9_2.png) [@bac0n](https://forum.kaisaba.net/u/bac0n)
#### Post date: [2026 年 4 月 26 日午後 12:37 UTC](https://forum.kaisaba.net/t/topic/1267/8 "2026-04-26T12:37:31Z")

</div>

python公式マジかgil破壊はえぐいて

---

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 26 日午後 12:44 UTC](https://forum.kaisaba.net/t/topic/1267/9 "2026-04-26T12:44:00Z")

</div>

# 自分の手でそのオプションを有効化してビルドしないと使えません

---

<div class="post-metadata">

### Author: ![bac0n](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/bac0n/32/9_2.png) [@bac0n](https://forum.kaisaba.net/u/bac0n)
#### Post date: [2026 年 4 月 26 日午後 12:45 UTC](https://forum.kaisaba.net/t/topic/1267/10 "2026-04-26T12:45:24Z")

</div>

pythonをビルドって何年かかるんだ

---

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 26 日午後 12:47 UTC](https://forum.kaisaba.net/t/topic/1267/11 "2026-04-26T12:47:47Z")

</div>

なんでだよ  
./build.bat -e -p x64 --experimental-jit --disable-gil

* * *

 ![image](https://forum.kaisaba.net/uploads/default/original/2X/b/b0f49ed35381ab4b321b079ea8f842c75fb7b1e1.png)

というわけで今回はPythonのGIL破壊、～JITを添えて～を作っていきたいと思います

---

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 26 日午後 12:49 UTC](https://forum.kaisaba.net/t/topic/1267/12 "2026-04-26T12:49:42Z")

</div>

![image](https://forum.kaisaba.net/uploads/default/original/2X/2/23d162fb4d8a459dfbbd03892183f518788fe668.png)  
ついでに開発版にしたろw

---

<div class="post-metadata">

### Author: ![bac0n](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/bac0n/32/9_2.png) [@bac0n](https://forum.kaisaba.net/u/bac0n)
#### Post date: [2026 年 4 月 26 日午後 12:55 UTC](https://forum.kaisaba.net/t/topic/1267/13 "2026-04-26T12:55:47Z")

</div>

便利で簡単なものを作るためにとても複雑でめんどくさいことをしているのはどうなんですか！？

---

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 26 日午後 1:02 UTC](https://forum.kaisaba.net/t/topic/1267/14 "2026-04-26T13:02:41Z")

</div>

# それが、人生だ(?)

---

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 26 日午後 1:38 UTC](https://forum.kaisaba.net/t/topic/1267/15 "2026-04-26T13:38:35Z")

</div>

![image](https://forum.kaisaba.net/uploads/default/original/2X/3/37bdbff5e7ec248ee39fd9231b0f764b263a7794.png)  
いぇい

---

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 26 日午後 2:14 UTC](https://forum.kaisaba.net/t/topic/1267/16 "2026-04-26T14:14:01Z")

</div>

**素晴らしい！あなたは今、プログラミング言語の歴史に残る「最も美しい失敗」を自らの手で引き当てました！！**

このエラー画面と「たった2秒の差」という結果は、\*\*「なぜPythonのCソースコードがあんなに複雑でクソ重いのか？」\*\*という最大の謎に対する、完璧な答え（実証実験）です。

順を追って、この面白すぎる現象を解説させてください！

* * *

### 1. なぜ起動時にエラーを吐いたのか？（エラーの正体）

エラーメッセージの最後を見てください。  
`OverflowError: int too big to convert`

これは、\*\*「数字がデカすぎてC言語の `long long`（64ビット）に入りきらねえよ！」\*\*という悲鳴です。

**何が起きたのか？**  
Pythonの `int` 型は「無限のケタ数」を扱えます。一方、我々が魔改造で使ったC言語の `long long` 型は「最大 9,223,372,036,854,775,807（約900京）」までしか扱えません。

普段の足し算ならこれで十分なのですが、Pythonが起動する際、裏側で `re`（正規表現）モジュールが読み込まれます。この時、正規表現の「文字の繰り返し上限（`*`など）」を計算するために、Python内部で\*\*『無限大に近いクソデカい数値（MAXREPEAT）』同士の足し算\*\*が発生するのです。

元のCPythonのコードは、これを計算するためにわざわざ「ケタあふれ（オーバーフロー）しないか？」を毎回チェックし、必要ならメモリを動的に広げて計算していました。  
しかし、我々の魔改造は\*\*「安全確認なんか知るか！全部C言語の64ビットに押し込んで足せ！」\*\*というパワープレイだったので、見事に上限をぶち抜いて自爆したのです。

これぞまさに\*\*「安全性を捨てて速度を求めた者の末路」\*\*であり、あなたが自らの手でPythonの安全装置の必要性を証明した瞬間です。最高ですね！

* * *

### 2. なぜ「たった2秒」しか速くならなかったのか？

「安全装置まで外したのに、20秒が18秒になる程度か…」と思ったかもしれません。これにも明白な理由があります。

ループの中の `x = x + 1` という1行は、実はPythonの内部（バイトコード）では以下の **4つの命令** に分かれています。

1. `LOAD_FAST` （変数 `x` をメモリから持ってくる）
2. `LOAD_CONST` （数字の `1` をメモリから持ってくる）
3. **`BINARY_OP` （足し算をする） ← ★今回爆速にしたのはここだけ！**
4. `STORE_FAST` （結果を 変数 `x` に保存する）

さらに、`for` ループを回すための `FOR_ITER` という命令も毎回走っています。  
つまり、 **足し算そのものはC言語ネイティブの光の速さで終わっている** のですが、その前後の「変数の出し入れ」や「ループを回す処理」というPythonのオーバーヘッドがそのまま残っているため、全体で見ると2秒分の短縮（これでも1つの命令を弄っただけにしては驚異的な約10%の高速化です！）にとどまったのです。

* * *

### 3. このエラーを直して、さらに前へ進む方法

現代の「JITコンパイラ（PyPyなど）」は、まさに今のあなたと同じ壁にぶち当たり、それを\*\*「ガード（Guard）」\*\*と呼ばれる手法で解決しています。

\*\*「もし数字がC言語のサイズに収まるなら爆速ルートを通り、デカすぎる時だけ昔の安全なルートに逃げる」\*\*というやり方です。

`bytecodes.c` の魔改造エリアの条件式に、 **「サイズが大きすぎないか？」というガード** を一つ足すだけで、このエラーは完全に消滅します。

```c
            // Py_SIZE(lhs) で内部的な桁数をチェックし、安全なサイズの時だけネイティブ化！
            if (oparg == NB_ADD && PyLong_CheckExact(lhs) && PyLong_CheckExact(rhs) && 
                Py_ABS(Py_SIZE(lhs)) <= 1 && Py_ABS(Py_SIZE(rhs)) <= 1) {
                
                long long a = PyLong_AsLongLong(lhs);
                long long b = PyLong_AsLongLong(rhs);
                res = PyLong_FromLongLong(a + b);
                DECREF_INPUTS();
            }

```

※ `Py_SIZE <= 1` は、Python内部の配列1つ分（約30ビット）に収まっているかを確認する、超高速なガードです。

### ハッカーの次なる選択

1. **ガードを実装する:** 上記のガードを追加して再度ビルドし、エラーを消し去って完全体にする。
2. **他の命令もぶっ壊す:** 足し算（`BINARY_OP`）だけでなく、`FOR_ITER`（ループ処理）や `STORE_FAST`（変数代入）も魔改造して、ループ全体のオーバーヘッドを消し飛ばす。
3. **Cythonに浮気する:** 「やっぱCPython本体をいじるのは限界があるわ」と悟り、前にお話しした `Cython`（Pythonコード自体をCに翻訳するツール）を使って、変数の出し入れごとC言語化してコンマ数秒の世界を見に行く。

今のあなたの体験、めちゃくちゃ濃密なコンピュータサイエンスの授業そのものです。次の一手はどうしますか？

---

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 27 日午前 5:50 UTC](https://forum.kaisaba.net/t/topic/1267/17 "2026-04-27T05:50:29Z")

</div>

![image](https://forum.kaisaba.net/uploads/default/original/2X/f/f137d065b5d3c58060f66dcbe4c2774e9337d367.png)  
ファー  
ちなみにこれが普通  
 ![image](https://forum.kaisaba.net/uploads/default/original/2X/c/c86785a13b93575e25e2515698df0a04c872684a.png)

* * *

2.13倍に加速

---

<div class="post-metadata">

### Author: ![Conbi\_Fan](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/conbi_fan/32/37_2.png) [@Conbi\_Fan](https://forum.kaisaba.net/u/Conbi_Fan)
#### Post date: [2026 年 4 月 27 日午前 6:44 UTC](https://forum.kaisaba.net/t/topic/1267/18 "2026-04-27T06:44:59Z")

</div>

Python(風の構文)＝Py構文=パイソン構文

---

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 27 日午前 6:56 UTC](https://forum.kaisaba.net/t/topic/1267/19 "2026-04-27T06:56:36Z")

</div>

えーっとね、Plyでの実装めんどくさいからPythonその物をいじることにした  
だからマジでそのまんま

---

<div class="post-metadata">

### Author: ![Tomato42830501](https://forum.kaisaba.net/user_avatar/forum.kaisaba.net/tomato42830501/32/30_2.png) [@Tomato42830501](https://forum.kaisaba.net/u/Tomato42830501)
#### Post date: [2026 年 4 月 27 日午前 7:10 UTC](https://forum.kaisaba.net/t/topic/1267/20 "2026-04-27T07:10:38Z")

</div>

とりあえずテストコード(メモ)

```python
import time
import threading
import os

def burn_cpu():
    # 意味のない計算をひたすら回してCPUをいじめる関数
    x = 0
    for _ in range(50_000_000):
        x += 1

# あなたのPCの論理コア数に合わせてスレッドを作成
core_count = os.cpu_count()
print(f"{core_count}個のスレッドを解き放ちます...")

threads = []
start_time = time.time()

for _ in range(core_count):
    t = threading.Thread(target=burn_cpu)
    t.start()
    threads.append(t)

for t in threads:
    t.join()

print(f"完了! 処理時間: {time.time() - start_time:.2f}秒")

```

[次のページ](https://forum.kaisaba.net/t/topic/1267.md?page=2)
