กลับไปหน้าบทความ

อ่าน 6 นาที

ไพพี

PyPy ( / ˈ p aɪ p aɪ / ) เป็นการใช้งาน ภาษาโปรแกรม Python [ 2 ] PyPy มักจะทำงานได้เร็วกว่า การใช้งาน CPython มาตรฐานมาก เนื่องจาก PyPy ใช้ คอมไพเลอร์ แบบ just-in-time [ 3 ] โค้ด...

ไพพี

ไพพี
ปล่อยกลางปี ​​2550 ( 2007 )
เวอร์ชันเสถียร
7.3.23 [ 1 ] แก้ไขข้อมูลนี้บนวิกิดาต้า (27 พฤษภาคม 2026 )  ( 27 พฤษภาคม 2569 )
เขียนเป็นRPython
ระบบปฏิบัติการข้ามแพลตฟอร์ม
พิมพ์ชุดเครื่องมือล่ามและคอมไพเลอร์Python
ใบอนุญาตเอ็มไอที
เว็บไซต์pypy.org แก้ไขข้อมูลนี้บนวิกิดาต้า
ที่เก็บข้อมูล
  • github.com/pypy/pypy

PyPy ( / ˈ p p / ) เป็นการใช้งานภาษาโปรแกรมPython [ 2 ] PyPy มักจะทำงานได้เร็วกว่าการใช้งานCPython มาตรฐานมาก เนื่องจาก PyPy ใช้ คอมไพเลอร์ แบบjust-in-time [ 3 ] โค้ด Python ส่วนใหญ่ทำงานได้ดีบน PyPy ยกเว้นโค้ดที่ขึ้นอยู่กับส่วนขยายของ CPython ซึ่งอาจใช้งานไม่ได้หรือเกิดโอเวอร์เฮดบางอย่างเมื่อรันใน PyPy

PyPy ถูกสร้างขึ้นโดยใช้เทคนิคที่เรียกว่าmeta-tracingซึ่งเป็นการแปลงแบบอัตโนมัติเป็นส่วนใหญ่ โดยรับตัวแปลภาษาเป็นอินพุตและสร้างคอมไพเลอร์แบบ just-in-time ที่สามารถติดตามการทำงานได้เป็นเอาต์พุต เนื่องจากโดยทั่วไปแล้วตัวแปลภาษานั้นเขียนง่ายกว่าคอมไพเลอร์ แต่ทำงานช้ากว่า เทคนิคนี้จึงช่วยให้การสร้างการ ใช้ งานภาษาโปรแกรมที่มีประสิทธิภาพทำได้ง่ายขึ้นชุดเครื่องมือ meta-tracing ของ PyPy เรียกว่าRPython

PyPy รองรับ Python 2.7 และ 3.11 อย่างเป็นทางการ[ 4 ]และมีความแตกต่างในการใช้งานเล็กน้อยเมื่อเทียบกับ CPython [ 5 ]

รายละเอียดและแรงจูงใจ

PyPy มีเป้าหมายที่จะจัดเตรียมกรอบการแปลและการสนับสนุนทั่วไปสำหรับการสร้างการใช้งานของภาษาแบบไดนามิกโดยเน้นการแยกที่ชัดเจนระหว่างข้อกำหนดของภาษาและแง่มุมการใช้งาน นอกจากนี้ยังมีเป้าหมายที่จะจัดเตรียมการใช้งานภาษาการเขียนโปรแกรม Python ที่สอดคล้อง ยืดหยุ่น และรวดเร็วโดยใช้กรอบงาน ข้างต้น เพื่อเปิดใช้งานคุณสมบัติขั้นสูงใหม่ ๆ โดยไม่ต้องเข้ารหัสรายละเอียดระดับต่ำลงไป[ 6 ] [ 7 ]

RPython

ตัวแปลภาษา PyPy นั้นเขียนขึ้นด้วยภาษา Python เวอร์ชันจำกัดที่เรียกว่า RPython (Restricted Python) [ 8 ] RPython กำหนดข้อจำกัดบางประการให้กับภาษา Python เพื่อให้สามารถ อนุมานประเภทของตัวแปร ได้ ในระหว่างการคอมไพล์[ 9 ]

โครงการ PyPy ได้พัฒนาชุดเครื่องมือที่วิเคราะห์โค้ด RPython และแปลงเป็นไบต์โค้ดซึ่งสามารถแปลงเป็นภาษาCได้ ก่อนหน้านี้เคยมีแบ็กเอนด์ อื่นๆ นอกเหนือจากC ( Java , C#และJavaScript ) แต่เนื่องจากเสื่อมสภาพและถูกลบออกไปแล้ว ดังนั้น โลโก้ แบบวนซ้ำของ PyPy จึงเป็นงูที่กำลังกลืนตัวเองเนื่องจาก RPython ถูกแปลโดยตัวแปล ภาษา Python นอกจากนี้ยังสามารถรันโค้ดโดยไม่ต้องแปลเพื่อทดสอบและวิเคราะห์ ซึ่งเป็นพื้นฐาน ที่ดี สำหรับการวิจัยเกี่ยวกับภาษาแบบไดนามิก

อนุญาตให้ใช้ตัวเก็บขยะ แบบเสียบปลั๊กได้ รวมถึงการเปิดใช้งาน คุณสมบัติ Stackless Python ได้ตามต้องการ สุดท้ายนี้ ยังมี ตัวสร้างแบบทันที (JIT) ที่สร้างคอมไพเลอร์แบบทันทีลงในตัวแปลภาษา โดยอาศัยคำอธิบายประกอบบางส่วนในซอร์สโค้ดของตัวแปลภาษา คอมไพเลอร์ JIT ที่สร้างขึ้นเป็นJIT แบบติดตาม[ 10 ]

ปัจจุบัน RPython ยังถูกใช้เพื่อเขียนการใช้งานภาษาที่ไม่ใช่ Python เช่นPixie อีก ด้วย [ 11 ]

สถานะโครงการ

PyPy เวอร์ชัน 7.3.17 เข้ากันได้กับCPython สอง เวอร์ชัน ได้แก่ 2.7 และ 3.10 [ 12 ] [ 13 ] PyPy เวอร์ชันแรกที่เข้ากันได้กับ CPython v3 คือ PyPy v2.3.1 (2014) [ 14 ]ตัวแปล PyPy ที่เข้ากันได้กับ CPython v3 เรียกอีกอย่างว่า PyPy3

PyPy รองรับ การคอมไพล์ JIT บน โปรเซสเซอร์x86 32 บิต/64 บิต และโปรเซสเซอร์ ARM 32 บิต/64 บิต[ 15 ]มีการทดสอบทุกคืนบน Windows, Linux, OpenBSD และ Mac OS X PyPy สามารถรันซอฟต์แวร์ Python บริสุทธิ์ที่ไม่พึ่งพาคุณสมบัติเฉพาะการใช้งาน[ 16 ]

มีเลเยอร์ความเข้ากันได้สำหรับส่วนขยาย CPython C API ที่เรียกว่า CPyExt แต่ยังไม่สมบูรณ์และอยู่ในขั้นตอนทดลอง วิธีที่แนะนำในการเชื่อมต่อกับไลบรารีที่ใช้ร่วมกันของภาษา C คือผ่านทาง อินเทอร์เฟซฟังก์ชันภายนอกของภาษา C (CFFI) หรือไลบรารี ctypesที่มีอยู่แล้วในตัว

ประวัติศาสตร์

PyPy เป็นโครงการ ต่อยอดจาก Psyco ซึ่ง เป็นคอมไพเลอร์แบบjust-in-time สำหรับ Python ที่พัฒนาโดย Armin Rigo ระหว่างปี 2002 ถึง 2010 จุดมุ่งหมายของ PyPy คือการมีคอมไพเลอร์แบบ just-in-time ที่มีขอบเขตการทำงานที่กว้างขึ้น ซึ่ง Psyco ไม่มี ในช่วงแรก RPython สามารถคอมไพล์เป็นJava bytecode , CILและJavaScript ได้ด้วย แต่ส่วนแบ็กเอนด์เหล่านี้ถูกลบออกไปเนื่องจากขาดความสนใจ

PyPy เริ่มต้นจากการเป็นโครงการวิจัยและพัฒนา จนกระทั่งพัฒนาจนถึงขั้นสมบูรณ์และมีการเปิดตัวเวอร์ชัน 1.0 อย่างเป็นทางการในช่วงกลางปี ​​2550 เป้าหมายต่อไปคือการพัฒนาเวอร์ชันที่พร้อมใช้งานจริงและเข้ากันได้กับ CPython มากขึ้น การเปลี่ยนแปลงหลายอย่างของ PyPy เกิดขึ้นระหว่างการเขียนโค้ดแบบเร่งด่วน (coding sprints )

  • ใน เดือนสิงหาคม พ.ศ. 2551 PyPy สามารถเรียกใช้ไลบรารี Python ยอดนิยมบางไลบรารีเช่นPylons [ 17 ] Pyglet [ 18 ] Nevow [ 19 ]และDjango [ 20 ]
  • เมื่อวันที่ 12 มีนาคม พ.ศ. 2553 PyPy 1.2 ได้รับการเผยแพร่ โดยเน้นที่ความเร็ว ซึ่งรวมถึงคอมไพเลอร์แบบ just-in-time ที่ใช้งานได้ แม้ว่าจะยังไม่เสถียรก็ตาม[ 21 ]
  • เมื่อวันที่ 30 เมษายน 2554 PyPy เวอร์ชัน 1.5 ได้รับการเผยแพร่ ซึ่งรองรับ CPython 2.7 [ 22 ]
  • เมื่อวันที่ 9 พฤษภาคม 2556 PyPy 2.0 ได้รับการเผยแพร่ ซึ่งได้แนะนำการสนับสนุนคุณภาพอัลฟ่าสำหรับการคอมไพล์ JIT บน ARMv6 และ ARMv7 JIT และรวม CFFI ไว้ในไลบรารีมาตรฐาน[ 23 ] [ 24 ]
  • เมื่อวันที่ 20 มิถุนายน 2014 PyPy3 ได้รับการประกาศให้เสถียร[ 14 ]และแนะนำความเข้ากันได้กับ Python 3 ที่ทันสมัยกว่า โดยได้รับการเผยแพร่พร้อมกับ PyPy 2.3.1 และมีหมายเลขเวอร์ชันเดียวกัน
  • เมื่อวันที่ 21 มีนาคม 2017 โครงการ PyPy ได้เผยแพร่เวอร์ชัน 5.7 ของทั้ง PyPy และ PyPy3 โดยเวอร์ชันหลังได้แนะนำการสนับสนุนคุณภาพเบต้าสำหรับ Python 3.5 [ 25 ]
  • เมื่อวันที่ 26 เมษายน 2561 ได้มีการปล่อยเวอร์ชัน 6.0 ออกมา โดยรองรับ Python 2.7 และ 3.5 (ซึ่งยังอยู่ในช่วงเบต้าบน Windows) [ 26 ]
  • เมื่อวันที่ 11 กุมภาพันธ์ 2019 ได้มีการปล่อยเวอร์ชัน 7.0 ออกมา โดยรองรับ Python 2.7 และ 3.5 [ 27 ]
  • เมื่อวันที่ 14 ตุลาคม พ.ศ. 2562 ได้มีการปล่อยเวอร์ชัน 7.2 ออกมา โดยรองรับ Python 3.6.9 [ 28 ]
  • เมื่อวันที่ 24 ธันวาคม พ.ศ. 2562 ได้มีการปล่อยเวอร์ชัน 7.3 ออกมา โดยรองรับ Python 3.6.9 [ 29 ]
  • เมื่อวันที่ 16 กุมภาพันธ์ 2020 ทีม PyPy ประกาศการย้ายการโฮสต์ซอร์สโค้ดจากBitbucketไปยัง heptapod.net พร้อมกับที่เก็บข้อมูลของโครงการ CFFI (C Foreign Function Interface ) นอกจากนี้ยังมีการเผยแพร่โลโก้และเว็บไซต์ดีไซน์ใหม่ด้วย อย่างไรก็ตาม ผู้เขียนและลิขสิทธิ์ของโลโก้ใหม่ยังไม่เป็นที่ทราบแน่ชัด[ 30 ]
  • เมื่อวันที่ 29 ธันวาคม 2023 PyPy ประกาศว่าการโฮสต์ได้ย้ายไปที่GitHubและการพัฒนาจะถูกติดตามด้วยgit [ 31 ]

เงินทุน

PyPy ได้รับทุนสนับสนุนจากสหภาพยุโรปในฐานะโครงการวิจัยเฉพาะเจาะจง[ 32 ]ระหว่างเดือนธันวาคม 2547 ถึงมีนาคม 2550 ในเดือนมิถุนายน 2551 PyPy ประกาศรับทุนสนับสนุนซึ่งเป็นส่วนหนึ่งของ โครงการโอเพนซอร์ส ของ Googleและตกลงที่จะมุ่งเน้นไปที่การทำให้ PyPy เข้ากันได้กับCPython มากขึ้น ในปี 2552 Eurostars ซึ่งเป็นหน่วยงานให้ทุนของสหภาพยุโรป ที่มุ่งเน้นSMEs เป็นพิเศษ [ 33 ]ยอมรับข้อเสนอจากสมาชิกโครงการ PyPy ในชื่อ "PYJIT – ชุดเครื่องมือที่รวดเร็วและยืดหยุ่นสำหรับภาษาการเขียนโปรแกรมแบบไดนามิกบนพื้นฐานของ PyPy" การให้ทุนสนับสนุนจาก Eurostars มีระยะเวลาจนถึงเดือนสิงหาคม 2554 [ 34 ] ในงาน PyCon US 2011 มูลนิธิซอฟต์แวร์ Pythonได้มอบทุนสนับสนุน 10,000 ดอลลาร์สหรัฐฯ ให้กับ PyPy เพื่อดำเนินการต่อในด้านประสิทธิภาพและความเข้ากันได้กับภาษาเวอร์ชันใหม่กว่า[ 35 ] การพอร์ตไปยังสถาปัตยกรรม ARM ได้รับการ สนับสนุน บางส่วนจากมูลนิธิ Raspberry Pi [ 23 ]

โครงการ PyPy ยังรับเงินบริจาคผ่านหน้าบล็อกสถานะอีกด้วย[ 36 ]ณ ปี 2013 โครงการย่อยต่างๆ ได้รับเงินทุนสนับสนุน ได้แก่ ความเข้ากันได้กับเวอร์ชัน Python 3 การสนับสนุน NumPy ที่ได้รับการปรับให้เหมาะสม สำหรับการคำนวณเชิงตัวเลข และ การสนับสนุน หน่วยความจำธุรกรรมซอฟต์แวร์เพื่อให้สามารถทำงานแบบขนานได้ดียิ่งขึ้น[ 23 ]

ดูเพิ่มเติม

หมายเหตุ

  1. ^ "PyPy เวอร์ชัน 7.3.23 "
  2. "สัมภาษณ์ มาเซียจ ฟิจาลคอฟสกี้ พีปี" . 29 พฤศจิกายน 2558.
  3. ^ "ความเร็วของ PyPy" . speed.pypy.org . สืบค้นเมื่อ2019-12-01 .
  4. ^ "PyPy" . 30 ธันวาคม 2024.
  5. "ความแตกต่างระหว่าง PyPy และ CPython — เอกสาร PyPy " 30 ธันวาคม 2567.
  6. ^ Samuele Pedroni (มีนาคม 2007). "PyPy – เป้าหมายและภาพรวมสถาปัตยกรรม" . เก็บถาวรจากต้นฉบับเมื่อ 14 มิถุนายน 2012.
  7. ^ "PyPy – ภาพรวมเป้าหมายและสถาปัตยกรรม – พันธกิจ" สืบค้นเมื่อ 11 ตุลาคม 2556
  8. ^ตัวแปลภาษารันไทม์ของเราคือ "RPython"คู่มือการเขียนโค้ด – เอกสารประกอบ PyPy
  9. ^ "เป็นส่วนย่อยที่เหมาะสมของ Python ซึ่งถูกจำกัดในลักษณะที่ช่วยให้วิเคราะห์ได้ง่ายและสร้างโค้ดได้อย่างมีประสิทธิภาพ" Ancona และคณะ, 2007
  10. ^ Bolz, Carl; Cuni, Antonio; Fijalkowski, Maciej; Rigo, Armin. การติดตามระดับเมตา: คอมไพเลอร์ JIT การติดตามของ PyPy . ICOOOLPS '09. doi : 10.1145/1565824.1565827 .
  11. ^บทสัมภาษณ์ทิโมธี บัลริดจ์
  12. ^ "PyPy – ความเข้ากันได้ของ Python" . pypy.org . 28 ธันวาคม 2019 . สืบค้นเมื่อ15 ธันวาคม 2020 .
  13. ^ "PyPy v7.3.7: เวอร์ชันแก้ไขข้อบกพร่องของ 3.7, 3.8" . pypy.org . 25 ตุลาคม 2021 . สืบค้นเมื่อ2021-11-10 .
  14. ^ a bทีม PyPy (20 มิถุนายน 2014). "PyPy3 2.3.1 – Fulcrum" . บล็อก PyPy.
  15. ^ "PyPy v7.2.0: การเปิดตัวเวอร์ชัน 2.7 และ 3.6" . pypy.org . 16 ตุลาคม 2019.
  16. ^ "ความเข้ากันได้ของ PyPy กับ Python" 28 ธันวาคม 2019
  17. ^ "การสร้างเสาไฟฟ้าบน PyPy" 10 มิถุนายน 2551
  18. ^ "การใช้งาน Pyglet บน PyPy" . 20 กุมภาพันธ์ 2551.
  19. ^ "การใช้งาน Nevow บน PyPy" . 20 มิถุนายน 2551.
  20. ^ "PyPy สามารถรัน Django 1.0 เบต้า โดยไม่ต้องแก้ไขใดๆ" 19 สิงหาคม 2551
  21. ^ "ขอแนะนำ PyPy เวอร์ชัน 1.2" 30 เมษายน 2554
  22. ^ "PyPy 1.5 เปิดตัวแล้ว: ตามให้ทัน" 12 มีนาคม 2010
  23. ^ a b c Jake Edge (15 พฤษภาคม 2013). "ภาพรวมของการเปิดตัว PyPy 2.0" . LWN.net .
  24. "PyPy 2.0 – แซนด์วิชไอน์สไตน์ " 9 พฤษภาคม 2556
  25. ^ "PyPy2.7 และ PyPy3.5 v5.7 – การเปิดตัวสองเวอร์ชันในหนึ่งเดียว" 21 มีนาคม 2017
  26. ^ "การเปิดตัว PyPy2.7 และ PyPy3.5 v6.0 พร้อมกัน" 26 เมษายน 2561
  27. คูนี, อันโตนิโอ (11-02-02019) "บล็อกสถานะ PyPy: PyPy v7.0.0: การเปิดตัวสามเท่าของ 2.7, 3.5 และ 3.6-alpha " บล็อกสถานะPyPy สืบค้นเมื่อ2020-08-17 .
  28. แมตทิป (14-10-2019) "บล็อกสถานะ PyPy: เปิดตัว PyPy v7.2 " บล็อกสถานะPyPy สืบค้นเมื่อ2020-08-17 .
  29. แมตทิป (24-12-2019) "บล็อกสถานะ PyPy: เปิดตัว PyPy v7.3.0 " บล็อกสถานะ PyPy
  30. ^ "PyPy และ CFFI ย้ายไปใช้ Heptapod แล้ว" 16 กุมภาพันธ์ 2020
  31. ^ "PyPy ย้ายไปใช้ Git แล้ว บน GitHub" 29 ธันวาคม 2023
  32. ^ "รายการบริการข้อมูลการวิจัยและพัฒนาชุมชนสหภาพยุโรป "
  33. ^ "ยูโรสตาร์ – มุ่งสู่เป้าหมายที่สูงขึ้น "
  34. ^ "หน้าโครงการบน Eureka Network" . เก็บถาวรจากต้นฉบับเมื่อ 2012-04-03 . เรียกดูเมื่อ2011-10-17 .
  35. ^ "คำขอบคุณถึง PSF" 22 มีนาคม 2554
  36. ^ "บล็อกสถานะ PyPy: อ้อ และอีกอย่าง: PyPy ได้รับเงินทุนผ่านทาง "Eurostars"10ธันวาคม 2553
  • เว็บไซต์อย่างเป็นทางการแก้ไขข้อมูลนี้ได้ที่วิกิดาต้า
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=PyPy&oldid=1355917381#RPython "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ไพพี

PyPy ( / ˈ p aɪ p aɪ / ) เป็นการใช้งาน ภาษาโปรแกรม Python [ 2 ] PyPy มักจะทำงานได้เร็วกว่า การใช้งาน CPython มาตรฐานมาก เนื่องจาก PyPy ใช้ คอมไพเลอร์ แบบ just-in-time [ 3 ] โค้ด...

รายละเอียดและแรงจูงใจ

PyPy มีเป้าหมายที่จะจัดเตรียมกรอบการแปลและการสนับสนุนทั่วไปสำหรับการสร้างการใช้งานของ ภาษาแบบไดนามิก โดยเน้นการแยกที่ชัดเจนระหว่าง ข้อกำหนดของภาษา และแง่มุมการใช้งาน นอกจากนี้ยังมีเป้าหมายที่จะจัดเตรียมการใช้งานภาษาการเขียนโปรแกรม Python ที่สอดคล้อง ยืดหยุ่น...

RPython

ตัวแปลภาษา PyPy นั้นเขียนขึ้นด้วยภาษา Python เวอร์ชันจำกัดที่เรียกว่า RPython (Restricted Python) [ 8 ] RPython กำหนดข้อจำกัดบางประการให้กับภาษา Python เพื่อให้สามารถ อนุมาน ประเภทของตัวแปร ได้ ในระหว่างการคอมไพล์ [ 9 ]

สถานะโครงการ

PyPy เวอร์ชัน 7.3.17 เข้ากันได้กับ CPython สอง เวอร์ชัน ได้แก่ 2.7 และ 3.10 [ 12 ] [ 13 ] PyPy เวอร์ชันแรกที่เข้ากันได้กับ CPython v3 คือ PyPy v2.3.1 (2014) [ 14 ] ตัวแปล PyPy ที่เข้ากันได้กับ CPython v3 เรียกอีกอย่างว่า PyPy3