惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
云风的 BLOG
云风的 BLOG
小众软件
小众软件
V
V2EX
博客园 - Franky
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
量子位
博客园 - 【当耐特】
雷峰网
雷峰网
WordPress大学
WordPress大学
Jina AI
Jina AI
Google DeepMind News
Google DeepMind News
N
Netflix TechBlog - Medium
爱范儿
爱范儿
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
阮一峰的网络日志
阮一峰的网络日志
IT之家
IT之家
Blog — PlanetScale
Blog — PlanetScale
Hugging Face - Blog
Hugging Face - Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
V
Visual Studio Blog
Microsoft Security Blog
Microsoft Security Blog

DEV Community

Authentication Security Deep Dive: From Brute Force to Salted Hashing (With Java Examples) Why AI Systems Don’t Fail — They Drift Spilling beans for how i learn for exam😁"Reinforcement Learning Cheat Sheet" I Replaced Chrome with Safari for AI Browser Automation. Here's What Broke (and What Finally Worked) How Python Borrows Other People's Work The $40 Architecture: Processing 1 Billion API Requests with 99.99% Uptime Vibe Coding: A Workflow Guide (From Zero to SaaS) Most webhook security guides protect the wrong side. The scary part is delivery. Headless CMS for TanStack Start: Build a Blog with Cosmic EU Age Verification App "Hacked in 2 Minutes" — What Actually Happened Comfy Cloud’s delete function does not actually remove files Running AI Models on GPU Cloud Servers: A Beginner Guide Event-driven media intelligence with AWS Step Functions and Bedrock I scored 500 AI prompts across 8 quality dimensions — here's what broke How to Call Google Gemini API from Next.js (Free Tier, No Backend Needed) The Portal Protocol: Reclaiming Human Connection in the Age of AI How to Fix Your Team's Scattered Knowledge Problem With a Self-Hosted Forum Intro to tc Cloud Functors: A Graph-First Mental Model for the Modern Cloud Designing Multi-Tenant Backends With Both Ownership and Team Access I Built a Neumorphic CSS Library with 77+ Components — Here's What I Learned PostgreSQL Performance Optimization: Why Connection Pooling Is Critical at Scale Cómo construí un SaaS multi-rubro para gestionar expensas en Argentina con FastAPI + Vue 3 🚀 I Built an Ethical Hacking Scanner Tool – Open Source Project I Replaced /usage and /context in Claude Code With a Single Statusline A Pythonic Way to Handle Emails (IMAP/SMTP) with Auto-Discovery and AI-Ready Design I Collected 8.9 Million Polymarket Price Points — Here's What I Found About How Markets Really Move EcoTrack AI — Carbon Footprint Tracker & Dashboard Everyone's Using AI. No One Agrees How. 5 self-hosted ebook managers worth trying in 2026 Building Your First AI Agent with LangChain: From Chatbot to Autonomous Assistant
CPython, Bytecode ve Python Virtual Machine (PVM)
Vebende Akademi · 2026-06-15 · via DEV Community

Vebende Akademi

CPython, Bytecode ve Python Virtual Machine (PVM)

Python öğrenen çoğu geliştirici şu aşamaya kadar gelir:

x = 10
y = 20
print(x + y)

Kod çalışır, sonuç gelir ve konu kapanır.

Fakat profesyonel seviyede Python geliştiren, performans optimizasyonu yapan veya Python'un iç mimarisini anlamak isteyen bir yazılımcının aşağıdaki üç kavramı çok iyi bilmesi gerekir:

  1. CPython
  2. Bytecode
  3. Python Virtual Machine (PVM)

Bu üçü Python'un çalışma motorunu oluşturur.


Büyük Resim

Bir Python programı çalıştırıldığında süreç şu şekildedir:

Python Source Code
        ↓
Tokenizer
        ↓
Parser
        ↓
AST
        ↓
Compiler
        ↓
Bytecode
        ↓
Python Virtual Machine
        ↓
CPython Runtime
        ↓
Operating System
        ↓
CPU

Buradaki en kritik bölüm:

Bytecode
    ↓
PVM

çiftidir.


1. CPython Nedir?

Öncelikle çok önemli bir yanlış anlaşılmayı düzeltelim.

Birçok kişi Python'u bir dil zanneder.

Aslında:

Python = Dil Spesifikasyonu

CPython ise:

Python'un en yaygın implementasyonu

dur.


Python Bir Dil Tanımıdır

Nasıl ki:

C#
Java
JavaScript

bir dil tanımıysa,

Python da bir dil tanımıdır.

Bu tanımı çalıştıran farklı motorlar vardır.

Örneğin:

Implementasyon Dil
CPython Python
PyPy Python
Jython Python
IronPython Python
MicroPython Python

Hepsi Python kodu çalıştırır.

Ama iç yapıları farklıdır.


CPython Nedir?

CPython:

C dili ile yazılmış Python yorumlayıcısıdır.

Python.org üzerinden indirdiğiniz standart Python budur.

Örneğin:

python app.py

komutu verdiğinizde çalışan şey CPython'dur.

CPython'ın kaynak kodu yaklaşık:

500.000+ satır C

içerir.

Kaynak kodu:

CPython Kaynak Kodu


CPython'ın Görevi

CPython:

x = 10
y = 20
print(x + y)

kodunu alır.

Sonra:

Token
↓
AST
↓
Bytecode
↓
PVM Execution

işlemlerini gerçekleştirir.


CPython İçindeki Bileşenler

Basitleştirilmiş görünüm:

CPython
│
├── Lexer
├── Parser
├── Compiler
├── Bytecode Generator
├── PVM
├── Garbage Collector
├── Memory Manager
└── C API


2. Bytecode Nedir?

Python doğrudan makine koduna çevrilmez.

Java'da olduğu gibi ara bir temsil oluşturulur.

Buna:

Bytecode

denir.


Örnek

Kodumuz:

x = 10
y = 20
z = x + y

olsun.

Python bunu aşağıdakine benzer bytecode'a dönüştürür:

LOAD_CONST 10
STORE_NAME x

LOAD_CONST 20
STORE_NAME y

LOAD_NAME x
LOAD_NAME y

BINARY_ADD

STORE_NAME z


Bytecode'un Amacı

Python'un şu kodu:

x + y

işlemciye doğrudan gönderilemez.

Çünkü CPU şunu anlamaz:

x
+
y

Bu nedenle Python önce bunu standart komutlara dönüştürür.


Bytecode Nasıl Görülür?

Python'da:

import dis

def test():
    x = 10
    y = 20
    return x + y

dis.dis(test)

çıktı:

LOAD_CONST 10
STORE_FAST x

LOAD_CONST 20
STORE_FAST y

LOAD_FAST x
LOAD_FAST y

BINARY_OP +
RETURN_VALUE

şeklinde olur.


.pyc Dosyaları

Python bytecode'u diske de yazabilir.

Örneğin:

main.py

çalıştırıldığında:

__pycache__

oluşur.

İçinde:

main.cpython-313.pyc

benzeri dosyalar vardır.

Bu dosya:

Bytecode

saklar.


Neden Saklanır?

Tekrar derleme maliyetini azaltmak için.

İkinci çalıştırmada:

.py

yerine

.pyc

kullanılabilir.

Bu da açılış süresini azaltır.


Bytecode Makine Kodu Mudur?

Hayır.

En çok karıştırılan konu budur.

Bytecode:

LOAD_FAST
STORE_FAST
BINARY_ADD

gibi komutlardan oluşur.

CPU bunları anlayamaz.

Bu komutları çalıştıracak başka bir sistem gerekir.

İşte burada PVM devreye girer.


3. Python Virtual Machine (PVM)

PVM:

Python Bytecode'unu çalıştıran sanal işlemcidir.


Gerçek CPU ile Karşılaştırma

Gerçek CPU:

MOV
ADD
SUB
MUL

gibi komutlar çalıştırır.

PVM ise:

LOAD_FAST
STORE_FAST
CALL_FUNCTION
BINARY_ADD

çalıştırır.


Mantık

Bytecode:

LOAD_FAST x
LOAD_FAST y
BINARY_ADD

üretmiştir.

PVM bunu okur.


Adım 1

LOAD_FAST x

çalışır.

Stack:

10


Adım 2

LOAD_FAST y

çalışır.

Stack:

20
10


Adım 3

BINARY_ADD

çalışır.

Stack:

30


Bu nedenle PVM'e bazen:

Stack Based Virtual Machine

denir.


Stack Mantığı

Örnek:

3 + 5

Bytecode:

LOAD_CONST 3
LOAD_CONST 5
BINARY_ADD

PVM:

PUSH 3
PUSH 5
ADD

mantığıyla çalışır.


PVM Nerede Çalışır?

Aslında PVM ayrı bir program değildir.

CPython'ın içindedir.

Şöyle düşünün:

CPython
│
├── Compiler
├── Bytecode
└── PVM

Yani:

PVM ⊂ CPython


Python Nesneleri PVM İçinde Nasıl Temsil Edilir?

Örneğin:

x = 10

gördüğümüzde:

"10" doğrudan RAM'e yazılmaz.

CPython şu yapıyı oluşturur:

PyLongObject

Basitleştirilmiş hali:

struct {
    reference_count;
    type;
    value;
}

Yani:

10

aslında bir nesnedir.


BINARY_ADD Gerçekte Ne Yapar?

PVM:

BINARY_ADD

gördüğünde:

CPython içindeki C fonksiyonlarını çağırır.

Örneğin:

PyNumber_Add()


Bu fonksiyon:

10 + 20

mi?

"abc" + "def"

mi?

list1 + list2

mi?

kontrol eder.

Sonra uygun işlemi gerçekleştirir.


Garbage Collector Nerede Devreye Girer?

CPython içinde.

Örneğin:

x = [1,2,3]

oluşturuldu.

Daha sonra:

x = None

oldu.

Referans kalmadığında:

Reference Counting

ve

Garbage Collector

mekanizmaları belleği temizler.


Performans Neden Düşük?

Python'un C veya Rust'tan yavaş olmasının temel nedeni budur.

Çünkü:

x + y

ifadesi:

  1. Nesne kontrolü
  2. Tip kontrolü
  3. Referans yönetimi
  4. Bytecode yürütme
  5. PVM yorumlama

gibi birçok katmandan geçer.

C dilinde ise:

int z = x + y;

doğrudan makine koduna çevrilir.


CPython, Bytecode ve PVM İlişkisi

Bütün sistemi tek diyagramda özetlersek:

Python Source Code
        │
        ▼
   CPython Parser
        │
        ▼
      AST
        │
        ▼
    Compiler
        │
        ▼
    Bytecode
        │
        ▼
Python Virtual Machine
        │
        ▼
 CPython Runtime (C)
        │
        ▼
 Operating System
        │
        ▼
      CPU
        │
        ▼
   Machine Code

Özetle:

  • CPython, Python'un C ile yazılmış resmi ve en yaygın yorumlayıcısıdır.
  • Bytecode, Python kaynak kodunun CPU'dan önceki ara temsilidir.
  • PVM (Python Virtual Machine), bytecode'u yorumlayıp çalıştıran sanal işlemcidir.
  • PVM, CPython'ın içinde yer alır ve stack tabanlı çalışır.
  • Son aşamada CPython'ın C kodları işletim sistemi ve işlemci üzerinden gerçek makine komutlarını yürütür.

Bu üç yapıyı anladığınızda Python artık yalnızca bir programlama dili değil; derleyici teorisi, sanal makineler, işletim sistemleri ve bilgisayar mimarisinin kesişim noktasında çalışan çok katmanlı bir yürütme platformu olarak görünmeye başlar.