PyPy, Compiler Alternatif untuk Python

Yana Permana 30 Oktober 2015

PyPy, Compiler Alternatif untuk Python

Pernah dengar PyPy? Asing memang, karena PyPy jarang terekspos. PyPy merupakan compiler alternatif untuk Python. PyPy ada karena ingin menggantikan compiler CPython 2.7. Pengembang PyPy mengklaim kecepatan kompilasi program lebih cepat bila dibandingkan dengan CPython 2.7. Ingin melihat perbandingan kecepatannya? Kunjungi speed.pypy.org. Bagaimana? lebih cepat, bukan?

Kemarin, pengembang PyPy telah merilis versi 4.0.0 sebagai versi terbarunya. Rilis tersebut menambah dan memelihara kompatibilitas untuk arsitektur komputer Linux x86, Linux x86-64, MacOS x64 dan Windows x86. Sedangkan untuk kompatibilitas ARM yang didukung antara lain sistem operasi OpenBSD dan FreeBSD dan versi terbaru ARM lainnya seperti ARMv6, ARMv7 dengan VFPv4.

Selain kompatibilitas, apa saja yang disuguhkan oleh PyPy 4.0.0? Banyak perubahan besar pada versi 4.0.0 diantaranya:

  • Peningkatan warmup time dan memory overhead yang digunakan untuk tracing.
  • Penambahan vektorisasi untuk library python seperti NumPy.
  • Penambahan fungsionalitas untuk NumPy.
  • Refaktorisasi RPython.
Disi lain penomoran versi PyPy yang terbaru memang agak berbeda dengan versi sebelumnya. Jika kita lihat versi PyPy sebelumnya masih 2.6.x, mengapa versinya loncat jauh? Karena pengembang PyPy tidak ingin pengguna PyPy bingung dengan versi 2.7 yang telah digunakan oleh CPython.

Selanjutnya apa keunggulan vektorisasi yang menjadi andalan PyPy? Pengembang PyPy menggunakan vektorisasi sebagai trace optimizer. Artinya ketika kode yang sedang dikompilasi dapat ditracing untuk mendeteksi ketersediaan dari hardware SIMD. Dengan begitu, kita tak perlu menjadikan program bersifat executable dan apabila ada error kita bisa mendeteksinya dengan mudah.

Sedangkan untuk peningkatan warmup time dan optimasi penggunaan memori ditekan sampai 20%. Peningkatan tersebut sudah diuji dengan NumPy, mulai dari ndarray, tipe data numerik, tipe data unicode, record, dan string sudah didukung. Jangan lupa mencobanya dengan vektorisasi baru melalui opsi --jit vec=1 dalam command line.

Selain perubahan besar PyPy 4.0.0, perubahan signifikan lainnya juga telah kami rangkum sebagai berikut:

Perbaikan bug

  • Perbaikan downstream OpenBSD.
  • Perbaikan crash pada sistem operasi non-linux ketika menjalankan thread lebih dari 20.
  • Dapat menerima unicode dalam fungsi.
  • Perbaikan segfault dalam itertools.islice().
  • Penggunaan gcrootfinder=shadowstack secara default dan asmgcc untuk Linux.
  • Perbaikan ndarray.copy untuk kompatibilitas upstream ketika menyalin array yang non-cotigous.
  • Perbaikan asumsi ketika lltype.UniChar tidak ditandai.
  • Perbaikan subtle bug dengan stacklets pada shadowstack.
Fitur baru
  • Penambahan optimasi untuk vektorisasi perulangan menggunakan intrinsik SIMD x86.
  • Dukungan _stdcall untuk sistem operasi Windows dalam CFFI.
  • Peningkatan debug logging ketika menggunakan opsi PYPYLOG=.
  • Dapat berjalan di OpenSSL dengan tidak menggunakan RAND_egd()
Peningkatan performa
  • Penggunaan hashed keys dalam dict atau sets dapat digunakan kembali.
  • Refaktorisasi interal JIT untuk meningkatkan warm up time.
  • Penambahan fast path untuk zip(list, list).
  • Penghapusan attribut class dalam class RPython.
  • Garbage collector untuk extenal_malloc.
  • Optimasi minor untuk analisis output dari vmprof dan log trace.
Itulah sekilas PyPy sebagai compiler alternatif untuk bahasa pemrograman Python. Jika pembaca ingin proses kompilasi yang lebih cepat dibanding compiler default, kita bisa menggunakan PyPy. Untuk mencobanya, jangan lupa kunjungi situs resmi PyPy.

(yp/pypy)