Przeważnie jest to zbieg okoliczności.
Języki programowania ewoluowały z biegiem czasu, a technologia kompilatorów i tłumaczy poprawiła się. Wydajność bazowego przetwarzania (tj. Czas kompilacji, koszty tłumaczenia, czas wykonania itp.) Jest również mniej ważna, ponieważ główne platformy obliczeniowe wzrosły.
Składnia języka nie mają wpływu - na przykład Pascal został bardzo starannie zaprojektowany tak, to może użyć pojedynczego przejścia kompilator - czyli jeden podaniem źródła i masz plikiem wykonywalnym kodu maszynowego. Z drugiej strony Ada nie zwracała na to uwagi, a kompilatory Ada są niezwykle trudne do napisania - większość wymaga więcej niż jednego przejścia. (Jednym z bardzo dobrych kompilatorów Ady, z których korzystałem wiele lat temu, był kompilator 8-przebiegowy. Jak można się domyślić, był bardzo powolny).
Jeśli spojrzysz na stare języki, takie jak Fortran (skompilowany) i BASIC (zinterpretowany lub skompilowany), mają one / miały bardzo ścisłe reguły składniowe i semantyczne. [W przypadku BASIC, to nie jest stary BASIC Bills, musisz wrócić wcześniej do oryginału.]
Z drugiej strony, patrząc na inne starsze rzeczy, takie jak APL (świetna zabawa), to było coś w rodzaju dynamicznego pisania. Został również ogólnie zinterpretowany, ale można go również skompilować.
Łagodna składnia jest trudna - jeśli oznacza to, że masz rzeczy opcjonalne lub można je wywnioskować, oznacza to, że język ma wystarczające bogactwo, aby można go było ubić. Z drugiej strony, BASIC miał to wiele lat temu, kiedy zdanie „LET” stało się opcjonalne!
Wiele pomysłów, które teraz widzisz (na przykład pisanie bez czcionek lub dynamiczne) jest w rzeczywistości bardzo starych - pojawiło się po raz pierwszy w latach siedemdziesiątych lub wczesnych osiemdziesiątych. Sposób ich użycia oraz języki, w których są używane te pomysły, zmieniły się i wzrosły. Zasadniczo jednak większość nowości to tak naprawdę stare rzeczy przebrane w nowe ubrania.
Oto kilka przykładów z mojej głowy:
- APL: pisanie dynamiczne. Ogólnie interpretowane. Pochodzi z lat 60. / 70.
- PODSTAWOWY: mocne lub dynamiczne pisanie. Zinterpretowany lub skompilowany. Lata 70. i wiele innych.
- Fortran: mocne pisanie. Opracowano Lata 60. lub wcześniejsze.
- Algol68: mocne pisanie. Opracowano Lata 60.
- PL / 1: mocne pisanie. Opracowano Lata 60.
- Pascal: mocne pisanie. Opracowano Lata 70. (Ale w latach 80. były kompilatory P-System bardzo podobne do kompilatorów JIT!)
- Niektóre implementacje Fortrana i inne przez DEC we wczesnych dniach zostały częściowo skompilowane, a częściowo zinterpretowane.
- Smalltalk: dynamiczne pisanie. Skompilowany do kodu bajtowego, który jest interpretowany. Lata 80.
- Prolog: więcej dziwności. Funkcjonalny. Skompilowany (Turbo Prolog, ktoś?). Lata 80.
- C: mocne pisanie (ha ha). Opracowano Lata 60. .. dziś.
- Ada: mocne pisanie. Opracowano Lata 80.
- Perl: pisanie dynamiczne. (Silna składnia). Interpretowane. Lata 90. (?).
Mógłbym kontynuować.
- Narożnik Nitpickers: Wiele interpretowanych języków jest tokenizowanych lub „kompilowanych bajtowo” w momencie, gdy źródło jest ładowane / wczytywane. To sprawia, że kolejne operacje interpretera są znacznie prostsze. Czasami możesz zapisać skompilowaną bajtowo wersję kodu. Czasami nie możesz. Nadal jest interpretowane.
Aktualizacja: Ponieważ nie byłem wystarczająco jasny.
Pisanie może się znacznie różnić.
Typowe statyczne pisanie w czasie kompilacji jest powszechne (np. C, Ada, C ++, Fortan itp.). Tutaj deklarujesz RZECZ TYPU i tak jest na zawsze.
Możliwe jest także dynamiczne pisanie, w którym rzecz wybiera typ, który jest do niej przypisany. Na przykład PHP i niektóre wczesne BASIC oraz APL, w których przypisujesz liczbę całkowitą do zmiennej i od tego czasu jest to liczba całkowita. Jeśli później przypisałeś mu ciąg, to był to typ ciągu. I tak dalej.
A potem jest luźne pisanie, na przykład PHP, w którym można robić naprawdę dziwaczne rzeczy, takie jak przypisać liczbową liczbę całkowitą (cytowaną, więc jest to ciąg znaków) do zmiennej, a następnie dodać do niej liczbę. (np. „5” + 5 spowoduje 10). To kraina dziwacznych, ale czasami bardzo, bardzo przydatnych.
JEDNAK są to funkcje zaprojektowane w języku. Wdrożenie właśnie to sprawia.