Pyston 2 - implementace Pythonu s kompilátorem JIT

Po tříleté přestávce ve vývoji bylo zveřejněno zahájení projektu Pyston 2, co jsem vyvinulk vysoce výkonné implementaci jazyka Python s využitím vývoje projektu LLVM.

Implementace vyniká využitím moderních kompilačních technologií JIT a jeho cílem je dosáhnout vysokého výkonu podobného tradičním systémovým jazykům, jako je C ++.

Kód z předchozích verzí od Pystona byl distribuován pod licencí Apache, ale kód Pyston 2 ještě není k dispozici a pro Ubuntu 18.04 a 20.04 jsou vydávány pouze sestavení připravená k použití (soubor s kódem je k dispozici ke stažení, ale existuje pouze útržek s informacemi, že projekt je stále uzavřen).

Publikování kódu je součástí plánů vývojářůale to se stane po dokončení formování obchodního modelu nové společnosti a bylo rozhodnuto pokračovat ve vývoji Pystonu bez finanční podpory Dropboxu.

O společnosti Pyston 2

Na rozdíl od předchozích verzí Pyston 2 je označen jako stabilní a ne jako zkušební verze. Bylo provedeno mnoho práce na optimalizaci výkonu a Pyston 2 je nyní při předávání testovací sady python-macrobenchmarks rychlejší než původní Python 3.8 o přibližně 20%.

Nejvýznamnější zvýšení výkonu se projevují v inherentních úlohách webových aplikací. V samostatných testech, jako jsou chaos.py a nbody.py, Pyston 2 překonává Python 3.8 o faktor 2. Náklady na používání JIT znamenají mírné zvýšení spotřeby paměti.

Jsme velmi rádi, že můžeme vydat Pyston v2, rychlejší a vysoce kompatibilní implementaci programovacího jazyka Python. Verze 2 je o 20% rychlejší než standardní Python 3.8 v našich makrobenchmarkech. Ještě důležitější je, že ve vašem kódu je pravděpodobně rychlejší. Pyston v2 může snížit náklady na server, snížit latenci uživatelů a zlepšit produktivitu vývojářů.

Pyston v2 se snadno implementuje, takže pokud hledáte lepší výkon Pythonu, doporučujeme vám věnovat pět minut a vyzkoušet Pyston. To je jeden z nejjednodušších způsobů, jak projekt urychlit.

Pokud jde o kompatibilitu s nativním Pythonem, projektem Pyston je nabízen jako nejkompatibilnější alternativní implementace pro CPython, protože Pyston je vidličkou hlavní kódové základny CPython.

píst podporuje všechny funkce CPython, včetně C API pro vývoj rozšíření C. Pyston byl původně vyvinut společností Dropbox, která se v roce 2017 rozhodla ukončit interní vývoj. Začátkem roku 2020 založili svou společnost přední vývojáři společnosti Pyston, zcela znovuobjevili projekt a začali pracovat v Pystonu na plný úvazek.

Technické podrobnosti o polstrování Pyston 2 ještě nejsou poskytnuty, jsou zmíněny pouze DynASM JIT, vložené ukládání do mezipaměti a obecné optimalizace CPython. Předchozí verze Pystonu používala jednu metodu JIT, podobnou JIT v moderních motorech JavaScriptu.

V JIT byl kód Pythonu analyzován a přeložen na mezilehlou reprezentaci LLVM (IR, mezilehlá reprezentace). Dále byla IR reprezentace zpracována v optimalizátoru LLVM a předána k provedení LLVM JIT motoru, který převedl IR reprezentaci do strojového kódu.

K získání informací o typech proměnných pro programy v dynamickém jazyce Python byla použita technika pravděpodobnostní predikce typů objektů, následovaná objasněním správné volby typu během provádění.

Proto Pyston neustále měnil provádění mezi dvěma větvemi: rychlou, když jsou potvrzeny předpokládané rychlosti, a pomalou, která se používá v případě nesouladu typů.

Úlohu lze provést v režimu s více vlákny, umožňující paralelní provádění několika podprocesů kódu v jazyce Python a bez globálního zámku tlumočníka (GIL)

Konečně pokud o tom chcete vědět víc, můžete zkontrolovat podrobnosti v následující odkaz.


Zanechte svůj komentář

Vaše e-mailová adresa nebude zveřejněna. Povinné položky jsou označeny *

*

*

  1. Odpovědný za údaje: Miguel Ángel Gatón
  2. Účel údajů: Ovládací SPAM, správa komentářů.
  3. Legitimace: Váš souhlas
  4. Sdělování údajů: Údaje nebudou sděleny třetím osobám, s výjimkou zákonných povinností.
  5. Úložiště dat: Databáze hostovaná společností Occentus Networks (EU)
  6. Práva: Vaše údaje můžete kdykoli omezit, obnovit a odstranit.