Ale czy istnieją ograniczenia techniczne lub funkcje językowe, które uniemożliwiają działanie mojego skryptu Python tak szybko, jak równoważnego programu w C ++?
Nie. To tylko kwestia pieniędzy i zasobów włożonych w szybkie uruchomienie C ++ w porównaniu z pieniędzmi i zasobami włożonymi w szybkie uruchomienie Pythona.
Na przykład, kiedy pojawiła się Self VM, był to nie tylko najszybszy dynamiczny język OO, to był najszybszy okres języka OO. Pomimo tego, że jest niezwykle dynamicznym językiem (znacznie bardziej niż na przykład Python, Ruby, PHP czy JavaScript), był szybszy niż większość dostępnych implementacji C ++.
Ale potem Sun anulował projekt Self (dojrzały język OO ogólnego przeznaczenia do tworzenia dużych systemów), aby skupić się na małym języku skryptowym dla animowanych menu w dekoderach telewizyjnych (być może słyszałeś o tym, nazywa się Java), nie było więcej funduszy. Jednocześnie Intel, IBM, Microsoft, Sun, Metrowerks, HP i in. wydał ogromne ilości pieniędzy i zasobów, dzięki czemu C ++ jest szybki. Producenci procesorów dodali funkcje do swoich układów, aby C ++ był szybki. Systemy operacyjne zostały napisane lub zmodyfikowane, aby uczynić C ++ szybkim. C ++ jest więc szybki.
Nie znam się zbytnio na Pythonie, jestem raczej Ruby, więc dam przykład z Ruby: Hash
klasa (równoważna pod względem funkcji i ważności dict
w Pythonie) w implementacji Rubinius Ruby jest napisana w 100% czystym Ruby; jednak konkuruje korzystnie, a czasem nawet lepiej niż Hash
klasa w YARV, która jest napisana ręcznie zoptymalizowanym C. W porównaniu z niektórymi komercyjnymi systemami Lisp lub Smalltalk (lub wyżej wspomnianą Self VM), kompilator Rubiniusa nie jest nawet tak sprytny .
W Pythonie nie ma nic nieodłącznego, co spowalnia działanie. W dzisiejszych procesorach i systemach operacyjnych są funkcje, które szkodzą Pythonowi (np. Wiadomo, że pamięć wirtualna ma ogromny wpływ na wydajność czyszczenia pamięci). Istnieją funkcje, które pomagają C ++, ale nie pomagają Pythonowi (współczesne procesory próbują unikać błędów pamięci podręcznej, ponieważ są one tak drogie. Niestety unikanie błędów pamięci podręcznej jest trudne, gdy masz OO i polimorfizm. Zamiast tego należy zmniejszyć koszt pamięci podręcznej tęskni. Procesor Azul Vega, który został zaprojektowany dla Javy, robi to.)
Jeśli wydajesz tyle pieniędzy, badań i zasobów na szybkie tworzenie Pythona, jak to zrobiono w C ++, i wydajesz tyle pieniędzy, badań i zasobów na tworzenie systemów operacyjnych, które sprawiają, że programy Python działają szybko, jak w przypadku C ++ i wydajesz dużo pieniędzy, badań i zasobów na tworzenie procesorów, które sprawiają, że programy Pythona działają szybko, jak to zrobiono dla C ++, więc nie mam wątpliwości, że Python mógłby osiągnąć wydajność porównywalną do C ++.
Z ECMAScript widzieliśmy, co może się stać, jeśli tylko jeden gracz poważnie podchodzi do wydajności. W ciągu roku mieliśmy zasadniczo 10-krotny wzrost wydajności dla wszystkich głównych dostawców.