Létezik olyan programnyelv amelyik képes futási idő alatt megváltoztatni a forráskódot?
A Java-t tudom említeni.* A Reflection API-val lehet varázsolni hasonlókat, például dinamikusan betölteni lib-eket, osztályokat. Ha ezt megspékeled azzal, hogy melléraksz egy javac-ot (vagy annak megfelelő lib-et), akkor megteheted azt, hogy: 1) kiírsz egy .java fájlt, 2) lefordítod, 3) betöltöd Reflection-el és 4) meghívod a benne levő metódust.
*: Biztosan megoldható más nyelvvel is hasonló működés.
> úgy is megvalósítható,hogy a program egy másik megnyitott Visual Studio ablakban[...]
Hát ja, ez is egy megoldás... csak nem elegáns és nem felhasználóbarát.
> bocsi java-hoz semmi közöm(sajnos)
Semmi baj, nem haragszunk. :D A "semmi közöm(sajnos)" ellen pedig csak te tehetsz. :)
Minden Turing teljes programozási nyelv képes erre. (Fájl írására és olvasására nem feltétlenül, de ez nem is volt kitétel).
Így vannak a fordítóprogramok, interpreterek, virtuális Turing-teljes gépek, stb. Megvalósítva. Ugyanis a Turing teljességből az is következik, hogy képes szimulálni (nemtriviális módon is) Turing gépet.
Egyébként sok dinamikus nyelvben alapképesség az hogy a program a saját "forráskódját" meg tudja változtatni. Itt a nagy varázslat persze nem a forráskód megváltoztatása, hanem a memóriában lévő, futtatott adatszerkezet megváltoztatása. Ez történhet sokféle módon.
Az egyik ilyen nyelv a Python. A Python nyelvben véges függvénykompozíció sorozattal, vagyis ebből következően egyetlen függvénnyel is átvihető bármilyen, a Python nyelvben létező objektum bármilyen másik, a Python nyelvben létező objektumba.
Vagyis, lehet egy olyan függvényed, ami mondjuk egy függvényt vár paraméterül, majd pedig az átalakítja, kiegészíti a működését, stb. És visszaadja az eredményt.
Ez nem csak elméleti koncepció, hanem egy gyakran használt megvalósítás is a Python nyelvben.
Hát mi annó mind ilyennel kezdtük a gépi kódú programozást, naná, hogy nem bírtuk kihagyni.
Önmagában egyébként bármelyik compileres programnyelv is megváltoztathatja a saját forráskódját, mert az már nincs zárolva futáskor, csak megadod neki, hol a forrás, és úgy átírja neked, mint a sicc. Csak éppen az nem lesz hatással az éppen futó programra, de ezt nem is kérdezted. :-) Kb. annyira hasznos, mint építeni egy házat, amelyik felrobbantja saját magát.
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!