A Perlt és a Pythont mire lehet használni?
Lényegében a Python is ezt csinálja, csak "röptében".
Attól tekintik interpreteresnek, hogy nem az operációs rendszerből közvetlenül futtatható önálló programot állít elő.
Tulajdonképpen definiálni kéne egy harmadik csoportot,de az általános felosztás az interpreter vs compiler.
@ Bárcsak eljönne a nap, hogy inkompetens idióták nem trógerkodnának itt. A Java nem interpreter nyelv, hanem bájtkódra fordul a forráskód, ami a JVM-ből képes futni.
xD bájtkódnak mióta kell JVM?
Pl. C-ból linux alatt:
> $ gcc -o file file.c
paranccsal tudsz bytekódot csinálni, ami futtatható azonnal a
> $ ./file
parancsal. Itt nincs "tolmács" vagy futtató környezet, hanem közvetlenül fordul.
Nos. Mivel a Java-t igen le kell fordítani, így:
> $ javac File.java
aminek outputja File.class, de ez nem bájtkód. Ezt olvassa be a JVM
> $ java File
ami futtatja. DE! JVM nélkül a .class-al semmire se mész.
Ellentétben a C/C++ bájtkóddal, mert az segédprogram nélkül futtatható.
Tehát: JAVA interpreteres
Ebből kifolyólag: Nincs 3. típus, mint azt felettem említik...
Kedves utolsó. Először is kérlek nézz utána a bájtkód jelentésének mert úgy tűnik kevered a gépikóddal. A javac igen is forráskódból bájtkódot készít, amit a JVM tud értelmezni, ellenben a C/C++-al ami gépikódot készít.
Másodszor pedig nézz utána annak is hogy mit is jelent a compiler és az interpreter nyelv. Nem attól lesz egy nyelv compileres mert külső program nélkül is futtatható, illetve interpreteres mert kell hozzá egy külső program ami futtatja. Kíváncsi lennék hogy a logikád alapján mit mondanál egy natívan futtatható befagyasztott Python kódra? A különbség ott dől el, hogy a futás közben értelmezi és fordítja át a kódot az interpreter valós időben, vagy futás előtt a futtatandó kód már előre lefordított állapotban van futásra készen. Ezt a JVM ismerete nélkül nem fogod tudni megmondani.
Anélkül hogy mélyebben belemennék a JVM és a JIT működésébe, szeretnék rámutatni arra hogy a válasz az hogy a JVM fordít is és interpretál is bizonyos feltételek mellett és optimalizálásoktól függően, azaz a JVM elindulásakor vannak előre, natív gépikódra lefordított metódusok is és vannak olyanok is amik csak valós időben a meghívásukkor fordulnak le. Ez persze változhat Java verziótól függően, nem érdemes ilyeneken vitatkozni, de érdemes ismerni a különbséget.
Bővebben a JIT-ről:
Ennek amúgy semmi köze a javac compilerhez, ez is össze szokta zavarni az embereket.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!