Linia między językami "zinterpretowanymi" i "skompilowanymi" jest obecnie bardzo niewyraźna. Na przykład pierwszą rzeczą, jaką robi Python, gdy widzi kod źródłowy, jest skompilowanie go do reprezentacji kodu bajtowego, w zasadzie tego samego, co Java robi podczas kompilowania plików klas. To właśnie zawierają pliki * .pyc. Następnie środowisko wykonawcze Pythona wykonuje kod bajtowy bez odwoływania się do oryginalnego źródła. Tradycyjnie, język czysto interpretowany odnosiłby się do kodu źródłowego w sposób ciągły podczas wykonywania programu.
Budując język, dobrym podejściem jest zbudowanie solidnego fundamentu, na którym można realizować funkcje wyższego poziomu. Jeśli masz solidny i szybki system obsługi ciągów znaków, projektant języka może (i powinien) zaimplementować coś w stylu stripslashes() poza podstawowym środowiskiem wykonawczym. Odbywa się to przez co najmniej kilka powodów:
- Projektant język może pokazać, że język jest na tyle elastyczne, aby obsłużyć tego rodzaju zadania.
- Projektant języka faktycznie pisze prawdziwy kod w języku, który ma testy i dlatego pokazuje, że fundament jest solidny.
- Inne osoby mogą łatwiej czytać, pożyczać, a nawet zmieniać funkcje wyższego poziomu bez konieczności budowania, a nawet rozumienia rdzenia językowego.
Tylko dlatego, że język taki jak Python kompiluje się do kodu bajtowego i wykonuje, co nie znaczy, że jest wolny. Nie ma powodu, dla którego ktoś nie mógłby napisać kompilatora Just-In-Time (JIT) dla Pythona, zgodnie z tym, co już robią Java i .NET, aby jeszcze bardziej zwiększyć wydajność. W rzeczywistości IronPython kompiluje Pythona bezpośrednio do bajtowego kodu .NET, który następnie jest uruchamiany przy użyciu systemu .NET, w tym JIT.
Aby odpowiedzieć bezpośrednio na twoje pytanie, jedyny czas, w którym projektant języka mógłby zaimplementować funkcję w języku za środowiskiem wykonawczym (np. C w przypadku Pythona), to maksymalizacja wydajności tej funkcji. Właśnie dlatego moduły takie jak parser wyrażeń regularnych są napisane raczej w języku C niż natywnym języku Python. Z drugiej strony, moduł taki jak getopt.py jest zaimplementowany w czystym Pythonie, ponieważ wszystko można tam zrobić i nie ma żadnej korzyści z używania odpowiedniej biblioteki C.
Zamiast "wykorzystać" skompilowany język, dlaczego nie "używać" go lub "wykorzystywać" go? Nie zwiększajmy liczby słów kluczowych w języku angielskim, chyba że musimy :) – MarkJ