# ===== CodeLab: Python 3.13 新特性:自由线程(无 GIL)与 JIT 编译器 =====
# 来源: https://aoerliang.dpdns.org/articles/python-313-features
# 以下代码片段按文章出现顺序拼接, 共 5 段

# ----- 片段 1 (python) -----
import sys

# 标准构建输出 True;自由线程构建输出 False
print(sys._is_gil_enabled())

# ----- 片段 2 (python) -----
import threading

results = []

def work(n):
    total = sum(i * i for i in range(n))
    results.append(total)

threads = [threading.Thread(target=work, args=(5_000_000,)) for _ in range(4)]
for t in threads:
    t.start()
for t in threads:
    t.join()
print(sum(results))

# ----- 片段 3 (python) -----
import sys

print(sys.flags.jit)  # 1 表示 JIT 已启用(需要专门构建)

def heavy(n):
    total = 0
    for i in range(n):
        total += i
    return total

print(heavy(10_000_000))

# ----- 片段 4 (python) -----
from typing import TypeIs

def is_str_list(value: object) -> TypeIs[list[str]]:
    return isinstance(value, list) and all(
        isinstance(x, str) for x in value
    )

def handle(data: object):
    if is_str_list(data):
        print(len(data), data[0].upper())  # 此处 data 已被收窄为 list[str]
    else:
        print("不是字符串列表")

# ----- 片段 5 (bash) -----
# 标准构建(默认,带 GIL)
pyenv install 3.13.1
pyenv local 3.13.1
python3.13 -m pip install --upgrade pip
python3.13 -m venv .venv && source .venv/bin/activate

# 自由线程构建(macOS / Linux)
pyenv install 3.13.1t

# 实验性 JIT 需要从源码编译
# ./configure --enable-experimental-jit
# make -j$(nproc)
