Pascal, skompilowany program, a język php

0

Tak się właśnie zastanawiam, jak to jest przykładowo program napisany w pascalu jest nieczytelny dla systemu i musi zostać "przetłumaczony" na język maszynowy, binarny, aby był odczytywany, a jak to się ma w przypadku do php, czy otwarcie strony w php, to jest również kompilowanie kodu źródłowego php czy jak to działa ?

0

nie. php to skrypty, nie programy. skrypty są interpretowane przez serwer. to tak w największym skrócie

0

rafal to że php jest interpretowany nie znaczy że to co piszesz w nim nie jest programem. Dodatkowo jeszcze do php też istnieją kompilatory. Ale nawet jakby nie było to i tak piszesz program - to jest abstrakcyjne pojęcie.

0

Czyli krótko mówiąc, kod PHP interpretuje odpowiedni program i wykonuje odpowiednie funkcje, tak jak zostało w kodzie zapisane. No i oczywiście owy program interpretujący jest przygotowany na otrzymanie poleceń, elementów składni etc. zgodnie z dokumentacją. Tak się to ma generalnie w językach skryptowych. Można to skompilować, ale wydaje mi się że i tak coś go będzie musiało z tego bytecodu przeparsować, tak samo jak w Javie. To tylko taka prekompilacja.

0

Różnica polega na tym, że w językach kompilowanych (pascal) program w postaci tekstowej jest analizowany i tłumaczony na instrukcje procesora. Powstaje plik wykonywalny do późniejszego uruchomienia.
W językach interpretowanych (php) kod źródłowy jest tak samo analizowany, lecz nie powstaje z tego program, tylko interpreter wykonuje różne polecenia natychmiast.
To są prostsze przypadki, bo w przypadku javy mamy jeszcze kod pośredni – czyli źródło jest kompilowane do tzw. bytecode'u, który nie jest jeszcze kodem wykonywalnym procesora. Potem interpreter wykonuje instrukcje kodu pośredniego.
W przypadku C# (i od którejś wersji także Javy) do kodu pośredniego dochodzi jeszcze kompilator just-in-time, czyli kod pośredni jest w momencie ładowania programu tłumaczony na kod wykonywalny i uruchamiany. Jest więc to coś pośredniego między „pascalem” a „php”.

0

No i jeszcze jak jest pętla to interpretery często każde przejście pętli ponownie interpretują, przez co obliczenia robią się kilkadziesiąt a nawet kilkaset razy dłuższe niż kompilowane.

0
Mariusz Jędrzejowski napisał(a)

No i jeszcze jak jest pętla to interpretery często każde przejście pętli ponownie interpretują, przez co obliczenia robią się kilkadziesiąt a nawet kilkaset razy dłuższe niż kompilowane.

To chyba w twoim Delphi. W pierwszym etapie PHP parsuje "w teorii" cały skrypt, dzięki czemu nawet jak walniesz:

$ciastko = false;
if ($ciastko) {
   for($i=0; $i<3; $i++) {
      try{ catch() {}}
    }
}

To interpreter przyczepi się, że coś jest z try nie tak. Kiedy kod zostaje wykonany to wszystko jest już zamienione na jednoznaczne tokeny, więc nie ma mowy o tym że pętla która wykonuje się 100 razy jest 100 razy parsowana :O

0

Mariusz chyba pisał ogólnie o interpreterach. Prehistoryczny już interpreter języka dBase (pierwszego popularnego DBMS) działał tak jak pisze Mariusz.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0