{"slug": "cpython-bytecode-ve-python-virtual-machine-pvm", "title": "CPython, Bytecode ve Python Virtual Machine (PVM)", "summary": "A developer explains the internal architecture of CPython, the standard Python interpreter, detailing how Python source code is tokenized, parsed, compiled into bytecode, and executed by the Python Virtual Machine (PVM). The post clarifies that Python is a language specification and CPython is its most common implementation, written in C. It also describes how bytecode is stored in .pyc files for faster subsequent execution.", "body_md": "Python öğrenen çoğu geliştirici şu aşamaya kadar gelir:\n\n```\nx = 10\ny = 20\nprint(x + y)\n```\n\nKod çalışır, sonuç gelir ve konu kapanır.\n\nFakat 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:\n\nBu üçü Python'un çalışma motorunu oluşturur.\n\nBir Python programı çalıştırıldığında süreç şu şekildedir:\n\n```\nPython Source Code\n        ↓\nTokenizer\n        ↓\nParser\n        ↓\nAST\n        ↓\nCompiler\n        ↓\nBytecode\n        ↓\nPython Virtual Machine\n        ↓\nCPython Runtime\n        ↓\nOperating System\n        ↓\nCPU\n```\n\nBuradaki en kritik bölüm:\n\n```\nBytecode\n    ↓\nPVM\n```\n\nçiftidir.\n\nÖncelikle çok önemli bir yanlış anlaşılmayı düzeltelim.\n\nBirçok kişi Python'u bir dil zanneder.\n\nAslında:\n\n```\nPython = Dil Spesifikasyonu\n```\n\nCPython ise:\n\n```\nPython'un en yaygın implementasyonu\n```\n\ndur.\n\nNasıl ki:\n\n```\nC#\nJava\nJavaScript\n```\n\nbir dil tanımıysa,\n\nPython da bir dil tanımıdır.\n\nBu tanımı çalıştıran farklı motorlar vardır.\n\nÖrneğin:\n\n| Implementasyon | Dil |\n|---|---|\n| CPython | Python |\n| PyPy | Python |\n| Jython | Python |\n| IronPython | Python |\n| MicroPython | Python |\n\nHepsi Python kodu çalıştırır.\n\nAma iç yapıları farklıdır.\n\nCPython:\n\n```\nC dili ile yazılmış Python yorumlayıcısıdır.\n```\n\nPython.org üzerinden indirdiğiniz standart Python budur.\n\nÖrneğin:\n\n```\npython app.py\n```\n\nkomutu verdiğinizde çalışan şey CPython'dur.\n\nCPython'ın kaynak kodu yaklaşık:\n\n```\n500.000+ satır C\n```\n\niçerir.\n\nKaynak kodu:\n\nCPython:\n\n```\nx = 10\ny = 20\nprint(x + y)\n```\n\nkodunu alır.\n\nSonra:\n\n```\nToken\n↓\nAST\n↓\nBytecode\n↓\nPVM Execution\n```\n\nişlemlerini gerçekleştirir.\n\nBasitleştirilmiş görünüm:\n\n```\nCPython\n│\n├── Lexer\n├── Parser\n├── Compiler\n├── Bytecode Generator\n├── PVM\n├── Garbage Collector\n├── Memory Manager\n└── C API\n```\n\nPython doğrudan makine koduna çevrilmez.\n\nJava'da olduğu gibi ara bir temsil oluşturulur.\n\nBuna:\n\n```\nBytecode\n```\n\ndenir.\n\nKodumuz:\n\n```\nx = 10\ny = 20\nz = x + y\n```\n\nolsun.\n\nPython bunu aşağıdakine benzer bytecode'a dönüştürür:\n\n```\nLOAD_CONST 10\nSTORE_NAME x\n\nLOAD_CONST 20\nSTORE_NAME y\n\nLOAD_NAME x\nLOAD_NAME y\n\nBINARY_ADD\n\nSTORE_NAME z\n```\n\nPython'un şu kodu:\n\n```\nx + y\n```\n\nişlemciye doğrudan gönderilemez.\n\nÇünkü CPU şunu anlamaz:\n\n```\nx\n+\ny\n```\n\nBu nedenle Python önce bunu standart komutlara dönüştürür.\n\nPython'da:\n\n``` python\nimport dis\n\ndef test():\n    x = 10\n    y = 20\n    return x + y\n\ndis.dis(test)\n```\n\nçıktı:\n\n```\nLOAD_CONST 10\nSTORE_FAST x\n\nLOAD_CONST 20\nSTORE_FAST y\n\nLOAD_FAST x\nLOAD_FAST y\n\nBINARY_OP +\nRETURN_VALUE\n```\n\nşeklinde olur.\n\nPython bytecode'u diske de yazabilir.\n\nÖrneğin:\n\n```\nmain.py\n```\n\nçalıştırıldığında:\n\n```\n__pycache__\n```\n\noluşur.\n\nİçinde:\n\n```\nmain.cpython-313.pyc\n```\n\nbenzeri dosyalar vardır.\n\nBu dosya:\n\n```\nBytecode\n```\n\nsaklar.\n\nTekrar derleme maliyetini azaltmak için.\n\nİkinci çalıştırmada:\n\n```\n.py\n```\n\nyerine\n\n```\n.pyc\n```\n\nkullanılabilir.\n\nBu da açılış süresini azaltır.\n\nHayır.\n\nEn çok karıştırılan konu budur.\n\nBytecode:\n\n```\nLOAD_FAST\nSTORE_FAST\nBINARY_ADD\n```\n\ngibi komutlardan oluşur.\n\nCPU bunları anlayamaz.\n\nBu komutları çalıştıracak başka bir sistem gerekir.\n\nİşte burada PVM devreye girer.\n\nPVM:\n\n```\nPython Bytecode'unu çalıştıran sanal işlemcidir.\n```\n\nGerçek CPU:\n\n```\nMOV\nADD\nSUB\nMUL\n```\n\ngibi komutlar çalıştırır.\n\nPVM ise:\n\n```\nLOAD_FAST\nSTORE_FAST\nCALL_FUNCTION\nBINARY_ADD\n```\n\nçalıştırır.\n\nBytecode:\n\n```\nLOAD_FAST x\nLOAD_FAST y\nBINARY_ADD\n```\n\nüretmiştir.\n\nPVM bunu okur.\n\n```\nLOAD_FAST x\n```\n\nçalışır.\n\nStack:\n\n```\n10\nLOAD_FAST y\n```\n\nçalışır.\n\nStack:\n\n```\n20\n10\nBINARY_ADD\n```\n\nçalışır.\n\nStack:\n\n```\n30\n```\n\nBu nedenle PVM'e bazen:\n\n```\nStack Based Virtual Machine\n```\n\ndenir.\n\nÖrnek:\n\n```\n3 + 5\n```\n\nBytecode:\n\n```\nLOAD_CONST 3\nLOAD_CONST 5\nBINARY_ADD\n```\n\nPVM:\n\n```\nPUSH 3\nPUSH 5\nADD\n```\n\nmantığıyla çalışır.\n\nAslında PVM ayrı bir program değildir.\n\nCPython'ın içindedir.\n\nŞöyle düşünün:\n\n```\nCPython\n│\n├── Compiler\n├── Bytecode\n└── PVM\n```\n\nYani:\n\n```\nPVM ⊂ CPython\n```\n\nÖrneğin:\n\n```\nx = 10\n```\n\ngördüğümüzde:\n\n\"10\" doğrudan RAM'e yazılmaz.\n\nCPython şu yapıyı oluşturur:\n\n```\nPyLongObject\n```\n\nBasitleştirilmiş hali:\n\n```\nstruct {\n    reference_count;\n    type;\n    value;\n}\n```\n\nYani:\n\n```\n10\n```\n\naslında bir nesnedir.\n\nPVM:\n\n```\nBINARY_ADD\n```\n\ngördüğünde:\n\nCPython içindeki C fonksiyonlarını çağırır.\n\nÖrneğin:\n\n```\nPyNumber_Add()\n```\n\nBu fonksiyon:\n\n```\n10 + 20\n```\n\nmi?\n\n```\n\"abc\" + \"def\"\n```\n\nmi?\n\n```\nlist1 + list2\n```\n\nmi?\n\nkontrol eder.\n\nSonra uygun işlemi gerçekleştirir.\n\nCPython içinde.\n\nÖrneğin:\n\n```\nx = [1,2,3]\n```\n\noluşturuldu.\n\nDaha sonra:\n\n```\nx = None\n```\n\noldu.\n\nReferans kalmadığında:\n\n```\nReference Counting\n```\n\nve\n\n```\nGarbage Collector\n```\n\nmekanizmaları belleği temizler.\n\nPython'un C veya Rust'tan yavaş olmasının temel nedeni budur.\n\nÇünkü:\n\n```\nx + y\n```\n\nifadesi:\n\ngibi birçok katmandan geçer.\n\nC dilinde ise:\n\n```\nint z = x + y;\n```\n\ndoğrudan makine koduna çevrilir.\n\nBütün sistemi tek diyagramda özetlersek:\n\n```\nPython Source Code\n        │\n        ▼\n   CPython Parser\n        │\n        ▼\n      AST\n        │\n        ▼\n    Compiler\n        │\n        ▼\n    Bytecode\n        │\n        ▼\nPython Virtual Machine\n        │\n        ▼\n CPython Runtime (C)\n        │\n        ▼\n Operating System\n        │\n        ▼\n      CPU\n        │\n        ▼\n   Machine Code\n```\n\nÖzetle:\n\nBu üç 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.", "url": "https://wpnews.pro/news/cpython-bytecode-ve-python-virtual-machine-pvm", "canonical_source": "https://dev.to/vebendeakademi/cpython-bytecode-ve-python-virtual-machine-pvm-da9", "published_at": "2026-06-15 05:19:52+00:00", "updated_at": "2026-06-15 05:41:01.287825+00:00", "lang": "en", "topics": ["machine-learning", "developer-tools"], "entities": ["CPython", "Python", "PVM", "PyPy", "Jython", "IronPython", "MicroPython", "C"], "alternates": {"html": "https://wpnews.pro/news/cpython-bytecode-ve-python-virtual-machine-pvm", "markdown": "https://wpnews.pro/news/cpython-bytecode-ve-python-virtual-machine-pvm.md", "text": "https://wpnews.pro/news/cpython-bytecode-ve-python-virtual-machine-pvm.txt", "jsonld": "https://wpnews.pro/news/cpython-bytecode-ve-python-virtual-machine-pvm.jsonld"}}