pkpy เป็นล่าม Python 3.x น้ำหนักเบา (~ 15K LOC) สำหรับการเขียนสคริปต์เกม เขียนด้วยภาษา C11
โดยมีเป้าหมายที่จะเป็นทางเลือกแทน lua สำหรับการเขียนสคริปต์เกม ด้วยไวยากรณ์ที่สวยงาม ฟีเจอร์อันทรงพลัง และประสิทธิภาพที่แข่งขันได้ pkpy นั้นง่ายมากที่จะฝังผ่านไฟล์ส่วนหัวเดียว pocketpy.h
โดยไม่ต้องพึ่งพาภายนอก
โปรดดู https://pocketpy.dev สำหรับรายละเอียดและลองใช้แหล่งข้อมูลต่อไปนี้
pkpy ควรทำงานบนแพลตฟอร์มใดก็ได้ที่มีคอมไพเลอร์ C11 แพลตฟอร์มเหล่านี้ได้รับการทดสอบอย่างเป็นทางการ
คุณมีสองตัวเลือกในการรวม pkpy เข้ากับโปรเจ็กต์ของคุณ
ดาวน์โหลด pocketpy.h
และ pocketpy.c
บนหน้าเผยแพร่ GitHub ของเรา และ #include
ไว้ในโครงการของคุณ
โคลนพื้นที่เก็บข้อมูลทั้งหมดเป็นโมดูลย่อยในโปรเจ็กต์ของคุณ ใน CMakelists.txt ให้เพิ่มบรรทัดต่อไปนี้:
add_subdirectory (pocketpy)
target_link_libraries ( pocketpy)
ดู CMakeLists.txt สำหรับรายละเอียด
ปลอดภัยที่จะใช้สาขา main
ในการผลิตหากป้าย CI เป็นสีเขียว
หากต้องการคอมไพล์กับโปรเจ็กต์ของคุณ ต้องตั้งค่าแฟล็กเหล่านี้:
--std=c11
จะต้องตั้งค่าสถานะ/utf-8
NDEBUG
สำหรับรุ่น release ไม่เช่นนั้นคุณจะได้รับประสิทธิภาพต่ำ สำหรับบิลด์แบบรวม ให้รัน python amalgamate.py
เพื่อสร้าง pocketpy.c
และ pocketpy.h
ในไดเร็กทอรี amalgamated/
#include "pocketpy.h"
#include
static bool int_add ( int argc , py_Ref argv ) {
PY_CHECK_ARGC ( 2 );
PY_CHECK_ARG_TYPE ( 0 , tp_int );
PY_CHECK_ARG_TYPE ( 1 , tp_int );
py_i64 a = py_toint ( py_arg ( 0 ));
py_i64 b = py_toint ( py_arg ( 1 ));
py_newint ( py_retval (), a + b );
return true;
}
int main () {
// Initialize pocketpy
py_initialize ();
// Hello world!
bool ok = py_exec ( "print('Hello world!')" , "" , EXEC_MODE , NULL );
if (! ok ) goto __ERROR;
// Create a list: [1, 2, 3]
py_Ref r0 = py_getreg ( 0 );
py_newlistn ( r0 , 3 );
py_newint ( py_list_getitem ( r0 , 0 ), 1 );
py_newint ( py_list_getitem ( r0 , 1 ), 2 );
py_newint ( py_list_getitem ( r0 , 2 ), 3 );
// Eval the sum of the list
py_Ref f_sum = py_getbuiltin ( py_name ( "sum" ));
py_push ( f_sum );
py_pushnil ();
py_push ( r0 );
ok = py_vectorcall ( 1 , 0 );
if (! ok ) goto __ERROR;
printf ( "Sum of the list: %dn" , ( int ) py_toint ( py_retval ())); // 6
// Bind native `int_add` as a global variable
py_newnativefunc ( r0 , int_add );
py_setglobal ( py_name ( "add" ), r0 );
// Call `add` in python
ok = py_exec ( "add(3, 7)" , "" , EVAL_MODE , NULL );
if (! ok ) goto __ERROR;
py_i64 res = py_toint ( py_retval ());
printf ( "Sum of 2 variables: %dn" , ( int ) res ); // 10
py_finalize ();
return 0 ;
__ERROR:
py_printexc ();
py_finalize ();
return 1 ;
}
ชื่อ | ตัวอย่าง | รองรับ |
---|---|---|
ถ้าเป็นอย่างอื่น | if..else..elif | |
วนซ้ำ | for/while/break/continue | |
การทำงาน | def f(x,*args,y=1): | |
คลาสย่อย | class A(B): | |
รายการ | [1, 2, 'a'] | |
รายการคอม | [i for i in range(5)] | |
ชิ้น | a[1:2], a[:2], a[1:] | |
ทูเพิล | (1, 2, 'a') | |
คำพูด | {'a': 1, 'b': 2} | |
F-สตริง | f'value is {x}' | |
กำลังแกะกล่อง | a, b = 1, 2 | |
การแกะกล่องดาว | a, *b = [1, 2, 3] | |
ข้อยกเว้น | raise/try..catch..finally | |
รหัสแบบไดนามิก | eval()/exec() | |
การสะท้อนกลับ | hasattr()/getattr()/setattr() | |
นำเข้า | import/from..import | |
บล็อกบริบท | with | |
พิมพ์คำอธิบายประกอบ | def f(a:int, b:float=1) | |
เครื่องกำเนิดไฟฟ้า | yield i | |
มัณฑนากร | @cache |
ปัจจุบัน pkpy เร็วเท่ากับ cpython 3.9 ผลลัพธ์ประสิทธิภาพสำหรับ cpython 3.9 สามารถใช้ได้กับ pkpy
ดู https://pocketpy.dev/Performance/ สำหรับรายละเอียด
และนี่คือผลลัพธ์ของเกณฑ์มาตรฐานเฉพาะบน Intel i5-12400F, WSL (Ubuntu 20.04 LTS) ซึ่งสะท้อนถึงประสิทธิภาพ โดยประมาณ ของ c++, lua, pkpy และ cpython
ชื่อ | รุ่น | เวลา | ไฟล์ |
---|---|---|---|
ค++ | กนู++11 | 0.104s ■□□□□□□□□□□□□□□□ | มาตรฐาน/primes.cpp |
ลัวะ | 5.3.3 | 1.576s ■■■■■■■■■□□□□□□□ | มาตรฐาน/primes.lua |
pkpy | 1.2.7 | 2.385s ■■■■■■■■■■■■■□□□ | มาตรฐาน/primes.py |
หลาม | 3.8.10 | 2.871s ■■■■■■■■■■■■■■■■ | มาตรฐาน/primes.py |
คำอธิบาย | |
---|---|
TIC-80 | TIC-80 คือคอมพิวเตอร์แฟนตาซีสำหรับการสร้าง เล่น และแบ่งปันเกมเล็กๆ |
py-js | Python3 ภายนอกสำหรับ Max / MSP |
เสี้ยว | Crescent เป็นเกมต่อสู้และเอาชนะแบบ 2 มิติข้ามแพลตฟอร์ม |
ออร์เอ็กซ์ปี้ | ส่วนขยาย Python สำหรับเอ็นจิ้น orx |
สามารถopenTerm | เครื่องมือซอฟต์แวร์โอเพ่นซอร์สสำหรับเครือข่ายและอุปกรณ์ CANopen CC |
ส่งคำขอดึงเพื่อเพิ่มโครงการของคุณที่นี่
ยินดีรับการสนับสนุนทุกประเภท
หากคุณพบว่า pkpy มีประโยชน์ ลองติดดาวพื้นที่เก็บข้อมูลนี้ (●'◡'●)
คุณสามารถสนับสนุนโครงการนี้ได้ด้วยวิธีเหล่านี้
การสนับสนุนของคุณจะช่วยให้เราพัฒนา pkpy อย่างต่อเนื่อง
หลาม
การใช้งานภาษาโปรแกรม Python อย่างเป็นทางการ
ไบต์รัน
สื่อการเรียนรู้ที่ยอดเยี่ยม มันแสดงให้เห็นว่าเครื่องเสมือนของ Python ทำงานอย่างไร
ใบอนุญาตเอ็มไอที