Języki skryptowe

0

Lua, Pythony i inne dziwa - jak to właściwie działa? W jaki sposób program "komunikuje się" ze skryptem lub odwrotnie? Aplikacja, do której piszę skrypty nimi kontroluje? Kod skryptu musi być jakoś przecież tłumaczony na instrukcje zrozumiałe przez program.
Jeśli dobrze zrozumiałem to, co czytałem na ten temat, to przed użyciem skrypt jest zamieniany na ciąg bajtów, odpowiadających konkretnym instrukcjom. Czyli po prostu program odpala w pewnym momencie skrypt (skrypty), które coś tam sobie robią, liczą, np. przy starcie programu? A więc skrypty są rozszerzeniem aplikacji przydatnym tylko w czasie wykonywania pewnej konkretnej instrukcji?
Czy może skrypt leci sobie gdzieś oddzielnie, niezależnie od aplikacji, mimo, że jest przez nią zapuszczony?

0

Wszystko zalezy od jezyka, bo metod wykonywania skryptow jest wiele. Dla jednych jest to prosta interpretacja, czyli kod nie jest kompilowany a jedynie steruje przebiegiem operacji wykonywanych przez aplikacje - interpretera: skrypt jest zatem rozumialy dla aplikacji, ale nie procesora czy systemu operacyjnego. Dla innych jest to kompilacja JIT (Just-In-Time), czyli wlasciwie sa one blizej jezykow klasycznie zamienianych na kod maszynowy z ta roznica, ze nie dysponuja jezykiem posrednim ani postacia binarna, dostepnymi do dystrybucji, a sam kod zrodlowy, nie jego skompilowana wersja, stanowi biblioteke dla aplikacji owy skrypt obslugujaca.

Pierwsze podejscie jest stosowane, gdy liczy sie czas miedzy kolejnymi modyfikacjami skryptu i uruchomieniami; pozwala tez na wieksza elastycznosc kodu, na przyklad generowanie czy modyfikowanie kodu przez samego siebie. Python czy PHP sa jezykami interpretowanymi.

Drugie jest dobre, kiedy uruchomienie moze trwac duzej, ale liczy sie szybkosc wykonania przy zachowaniu kodu w postaci na przyklad tekstowej. Ta grupa jezykow dominuje w programach do obrobki masowych danych (n.p. renderowanie czy obrobka obrazu wideo, obliczenia inzynierskie). Jesli kod nie ulegl zmianie, nie wymaga rekompilacji; jest kompilowany tylko, gdy zachodzi potrzeba jego wykonania, a nie jest jeszcze w pamieci podrecznej aplikacji.

Dopisane:
Tak jeszcze dodam, ze jezyki skryptowe klasy JIT leza na plynnej granicy:
jezyki interpretowane -> maszyny wirtualne -> jezyki z kompilatorem JIT -> jezyki kompilowane

W tym momencie ocena, czy rozpowszechnianie "aplikacji" w postaci kodu tekstowego, wystarczy do nazwania jezyka skryptowym, staje sie dyskusyjna i dalece subiektywna.

0

Rekursywny eval, bo jak?

0

Tu masz przykład jak Lua komunikuje się z C++ http://viable.pl/tutorial/123/preview/ , oraz bardzo zbliżony tekst po angielsku http://www.gamedev.net/reference/articles/article1932.asp.

Piszę o Lua, bo mnie ten język ostatnio zainteresował :)

Warto też dodać, że uruchomiony skrypt może działać na różne sposoby. Możne np. odpalić go w oddzielnym wątku lub pozwolić vm na wykonanie z góry określonej liczbie poleceń (widziałem to w przypadku skryptów własnego autorstwa). Są też mikrowątki, ale tego tematu jeszcze nie zgłębiłem :)

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