Języki rozszerzeń – kilka pytań

0

Witam

Chce Was zapytać o banalna rzecz mianowicie o co chodzi z tym, że dany język jest językiem rozszerzeń(extension language) ? Np python, lisp scheme albo implementacja scheme - guile ? Bo chce się teraz uczyć tych języków, czytam o nich i wyczytalem, że są świetnymi językami rozszerzeń lub, że świetnie się nadają do rozszerzenia programów i nie wiem jak to rozumieć i jak to działa... Do tej pory pisałem programy w C i było tak, że pisałem, skompilowalem i uruchamialem... python i guile to języki interpretowane ale przecież w nich też pisze kod i później normalnie uruchamiam, z tą różnicą tylko, ze kod programu jest czytany i wykonywany na bieżąco przez interpreter zamiast bezpośredniego czytania kodu maszynowego przez procesor jak to ma miejsce np w C. Tą różnicę rozumiem ale nie wiem o co chodzi z tym ze te języki są lub moga byc (tego tez nie wiem.) językami rozszerzeń.Ogólnie nie wiem tych paru rzeczy: 1.Te języki są definitywnie jezykami rozszerzeń czy tylko mogą być użyte jako one jeśli zajdzie taka potrzeba ? 2.Jak sie nimi rozszerza programy i jak to działa ? 3.W jaki sposób te języki są dostępne dla end-userow programu ? 4. Co ogólnie znaczy, że te języki są językami rozszerzeń lub mogą być jako one użyte oraz jak to działa ? 5.Czy jezykow kompilowanych(jak np C) też można użyć jako jezykow rozszerzeń lub czy językami kompilowanymi da się też jakoś rozszerzać programy ? Będę wam wdzięczny za doinformowanie mnie trochę :) bo bez tej wiedzy chyba nie wiem tak naprawdę czego się uczę ;p

0

https://docs.python.org/3/extending/embedding.html < tu jest opis jak odpalić interpreter pythona w programie C ale nie do końca rozumiem punk 1.3, jest tam kod w C który ma odpalić skrypt pythona i myślałem ze później się to skompiluje, odpali a on włączy ten skrypt pythona ale dalej tam jest jeszcze kod pythona i wszystko odpalone w konsoli pythona, i nic nie rozumiem... chyba tą binarke powinno się odpalić niezależnie od konsoli pythona... No i tyle kodu tam jest napisane żeby odpalić skrypt pythona, to tak dużo zajmuje ? No i dlaczego tamten przykład odpalany jest w Pythonie a nie niezależnie ?

1

1.Te języki są definitywnie jezykami rozszerzeń czy tylko mogą być użyte jako one jeśli zajdzie taka potrzeba ?

Mogą. Taki Python ma wiele zastosowań, a pisanie skryptów w Pythonie w innych programach to tylko wycinek wszystkich możliwości.

2.Jak sie nimi rozszerza programy i jak to działa ?

Na przykład: w swoim programie masz interpreter jakiegoś języka, który oprócz standardowych rzeczy dostępnych w bibliotece standardowej dorzuca jeszcze dostęp do pewnych elementów twojego programu. I od teraz możesz skryptem tego zagnieżdżonego języka wpływać na działanie swojego programu.

3.W jaki sposób te języki są dostępne dla end-userow programu ?

Nie rozumiem pytania. Różnie? Na przykład w Microsoft Office jest nieco bardziej rozbudowany edytor dla VBA.

  1. Co ogólnie znaczy, że te języki są językami rozszerzeń lub mogą być jako one użyte oraz jak to działa ?

5.Czy jezykow kompilowanych(jak np C) też można użyć jako jezykow rozszerzeń lub czy językami kompilowanymi da się też jakoś rozszerzać programy ?

Z językami kompilowanymi jest gorzej, średnio się nadają do tego. Kody, w których pracujesz wewnątrz różnych programów to najczęściej nie są jakieś rozbudowane aplikacje, a coś małego i szybkiego - do czego języki interpretowane się świetnie nadają, bo dość szybko możesz coś pozmieniać i zobaczyć jak wygląda wynik.

Oczywiście za pomocą innych języków też się da rozszerzać programy - na przykład niektóre programy pozwalają tworzyć wtyczki, w postaci bibliotek DLL.

tu jest opis jak odpalić interpreter pythona w programie C ale nie do końca rozumiem punk 1.3, jest tam kod w C który ma odpalić skrypt pythona i myślałem ze później się to skompiluje, odpali a on włączy ten skrypt pythona ale dalej tam jest jeszcze kod pythona i wszystko odpalone w konsoli pythona, i nic nie rozumiem...

Tam jest kawałek kodu, który wczytuje kod Pythona i go uruchamia, a program w C przechwytuje ten wynik. Nie widzę tam żadnej konsoli Pythona - tam jest uruchomienie programu "call", który jest w języku C.

No i tyle kodu tam jest napisane żeby odpalić skrypt pythona, to tak dużo zajmuje ?

Masz napisane: "Although the program is quite large for its functionality, most of the code is for data conversion between Python and C, and for error reporting."

0
Ktos napisał(a):

1.Te języki są definitywnie jezykami rozszerzeń czy tylko mogą być użyte jako one jeśli zajdzie taka potrzeba ?

Mogą. Taki Python ma wiele zastosowań, a pisanie skryptów w Pythonie w innych programach to tylko wycinek wszystkich możliwości.

Jak to "pisanie skryptów w Pythonie" ? Chyba wszystko co jest napisanie w jakimś języku programowania jest programem, a więc o co chodzi że tu byłoby skryptem a nie programem ?

To znaczy chodzi mi głównie o przypadek z powłoką bash, w języku sh pisze się "skrypty" - dlaczego mowi sie ze to sa skrypty a nie programy ?

0

@żytkownik: tu mamy 2 koncepty, ogólnie "skryptami" nazywa się rzeczy napisane w językach, które nie są kompilowane, tylko interpretowane. Ogólnie to też nie do końca tak działa, bo część z tych języków jest JITowana, ale można przyjąć, że jeśli "wynikiem" pracy jest pojedynczy plik, który nie wymaga kompilacji przed uruchomieniem, to można to nazwać skryptem.

Co do Basha, a dokładniej w tym przypadku czystego sh bez bashismów, to jest to czysto język skryptowy/powłoki bo samo sh nie jest językiem programowania. Sam z siebie język nie pozwala na żadne obliczenia i musi się posiłkować zewnętrznymi programami napisanymi już w innych językach. Więc ciężko nazwać to "programem" skoro to jest tylko sekwencja uruchomień innych programów.

0

1.Dlaczego w tym przypadku chodzi o czyste sh ?
2.rzecież skrypty sh/bash to nie sekwencja uruchomień innych programów tylko kod z poleceniami powłoki.
3.Poczytałem troche o skryptach i dowiedziałem się tego(jeśli się pomylę to poprawcie): Skrypt to program który rozszerza inny program, np jeśli w program wkompilowany jest interpretator jakiegoś języka to wtedy ten język jest językiem skryptowym tego programu, więc rozumiem to tak: Python wtedy jest używany jako język skryptowy a jego kody są skryptami wtedy jak rozszerzają jakiś program, natomiast jeśli używany jest niezależnie wtedy nie jest skryptowy.Chociaż właściwie można powiedzieć, że cały czas jest skryptowy bo język pythona jest zdefiniowany w programie interpretatora który jest programem C tak samo jak bash bo język basha obsługuję powłokę która jest skompilowanym programem, tak samo język pythona obsługuję interpretator/konsole pythona która jest skompilowanym programem.

0

No właśnie czytam ta wiki i troche jestem zagubiony, bo tam jest tez napisane ze termin jezyk skryptowy jest "też" uzywany w odniesieniu do takich jezykow jak np python. Ale wedlug tego co piszecie i co pisze wiki to Python jest czysto skryptowym jezykiem, bo jest interpretowany, ma swoja konsole i mozna wykonywac w niej zadania jeden po jednym wpisujac je... To w koncu teraz nie wiem czy python jest calkowicie skryptowy, troche skryptowy czy tez czasami moze byc skryptowy a czasami nie... Ktore z powyzszych twierdzen to prawda ? I prosilbym o uzasadnienie.

1

Po pierwsze i najwazniejsze: co to kurcze za roznica?

0

@żytkownik: chodzi o to, że Bash ma wiele rozszerzeń, które czynią samego Basha kompletnym w sensie Turinga, natomiast czyste SH nie pozwala Ci nawet stwierdzić prawdy lub fałszu bez użycia zewnętrznych programów (true i false to też programy w sh, tak samo jak [). Więc to zupełnie inna liga programów względem Pythona czy czegokolwiek innego.

A co do zasadniczej różnicy między "skryptem" a "programem" to w 99% przypadków nie ma zbytnio różnicy. Czasami można się spotkać z określeniem "skrypt C" opisującym kod źródłowy programu.

0

Najprościej mówiąc: Języki skryptowe mają zastosowanie tam, gdzie trzeba coś robić w locie "on fly" bez rekompilacji, ani restartu np. servera gry.

Masz np. grę, która ma tam dużo jakichś misji, NPC czy innych rzeczy, więc przecież nie chcesz kompilować całej gry za każdym razem gdy poprawisz literówkę w tekście NPC czy dodasz kolejną z setek misji.

Z takich bardziej tobie znajomych rzeczy, to języki skryptowe mają również zastosowanie w botach do gier, gdzie bot jest po prostu (nie wiem czy można to tak nazwać) platformą, która udostępnia narzędzia/API, a użytkownicy piszą swoje skrypty.

0
Ktos napisał(a):

2.Jak sie nimi rozszerza programy i jak to działa ?

Na przykład: w swoim programie masz interpreter jakiegoś języka, który oprócz standardowych rzeczy dostępnych w bibliotece standardowej dorzuca jeszcze dostęp do pewnych elementów twojego programu. I od teraz możesz skryptem tego zagnieżdżonego języka wpływać na działanie swojego programu.

1.Jak to w moim programie mam interpreter ? Jak go tam umieszczam ?
2."który prócz standardowych rzeczy dostępnych w bibliotece standardowej dorzuca jeszcze dostęp do pewnych elementów twojego programu" - Chodzi o standardowe rzeczy dostępne np w bibliotece standardowej pythona czy tego języka w którym mam napisany program ?
3.W jaki sposób ten interpreter dorzuca dostęp do pewnych elementów mojego programu ?
4.W jaki sposób skryptem zagnieżdżonego jezyka moge wpływać na mój program ?

Moglibyście to wytłumaczyć i może pokazać jakiś przykład ? Bardzo bym prosił.

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