Język skryptowy a język programowania

347

Czy ktoś może wyjaśnić różnicę między językiem skryptowym a językiem programowania?
Możesz również podać kilka przykładów dla każdego z nich. Często googlowałem, ale zawsze znajduję najlepsze odpowiedzi z Przepełnienia stosu.

Rahul Reddy
źródło

Odpowiedzi:

466

Języki skryptowe to języki programowania, które nie wymagają wyraźnego kroku kompilacji.

Na przykład, w normalnym przypadku, musisz skompilować program w C, zanim będziesz mógł go uruchomić. Ale w normalnym przypadku nie musisz kompilować programu JavaScript przed jego uruchomieniem. JavaScript jest więc czasami nazywany językiem „skryptowym”.

Linia ta staje się coraz bardziej rozmyta, ponieważ kompilacja może być tak szybka dzięki nowoczesnemu sprzętowi i nowoczesnym technikom kompilacji. Na przykład V8, silnik JavaScript w Google Chrome i używany również poza przeglądarką, faktycznie kompiluje kod JavaScript w locie do kodu maszynowego, zamiast go interpretować. (W rzeczywistości V8 to optymalizujący kompilator dwufazowy.)

Należy również pamiętać, że to, czy język jest językiem „skryptowym”, może nie dotyczyć środowiska bardziej niż języka. Nie ma powodu, dla którego nie można napisać interpretera języka C i używać go jako języka skryptowego (a ludzie go znają). Nie ma również powodu, dla którego nie można skompilować kodu JavaScript do kodu maszynowego i przechowywać go w pliku wykonywalnym (i ludzie to robią). Język Ruby jest tego dobrym przykładem: Oryginalna implementacja została całkowicie zinterpretowana (język „skryptowy”), ale obecnie istnieje wiele kompilatorów.

Niektóre przykłady języków „skryptowych” (np. Języki, które są tradycyjnie używane bez wyraźnego kroku kompilacji):

  • Lua
  • JavaScript
  • VBScript i VBA
  • Perl

I niewielka część tych tradycyjnie używanych z wyraźnym krokiem kompilacji:

  • do
  • C ++
  • re
  • Java (ale należy pamiętać, że Java jest kompilowana do kodu bajtowego, który jest następnie interpretowany i / lub rekompilowany w czasie wykonywania)
  • Pascal

... a potem masz takie rzeczy jak Python, które znajdują się w obu obozach: Python jest szeroko używany bez kroku kompilacji, ale główna implementacja (CPython) robi to, kompilując w locie kod bajtowy, a następnie uruchamiając kod bajtowy w Maszyna wirtualna może zapisać ten kod bajtowy do plików ( .pyc, .pyo) w celu użycia bez ponownej kompilacji.

To tylko bardzo niewiele, jeśli zrobić rozeznanie można znaleźć dużo więcej.

TJ Crowder
źródło
1
Doskonałe wyjaśnienie!
Gladiator
48
@ mg30rg: Heh - skryptowanie może być całkowicie „prawdziwym” programowaniem. (Nie uwierzyłbyś w niektóre skrypty bash, które widziałem ...) Myślę, że najprostszym sposobem, aby to zdefiniować (i znowu, to nie jest kwestia języka, to kwestia środowiska) to: Czy środowisko wykonawcze widzisz kod źródłowy? Jeśli tak, nazwałbym to „skryptowaniem”; jeśli nie, nie zrobiłbym tego. W tym sensie JavaScript oparty na przeglądarce jest „skryptowy”, ponieważ nawet jeśli silniki takie jak V8 kompilują go „w locie”, źródło nadal jest dostarczane do środowiska wykonawczego. Podobnie chroni skrypty. Tradycyjne źródło programu C nie jest dostarczane do środowiska wykonawczego.
TJ Crowder
2
@ mg30rg: Ale znowu, linie te stają się coraz bardziej rozmyte. :-) Rozważ kod bajtowy Java. Nie można go uruchomić bez JVM, ale nie jest to kod źródłowy. (Zwykle może zostać przekształcony z powrotem w rozsądnie wyglądający kod źródłowy przez dekompilator, ale ...) Nie myślę (zdalnie) o Javie w tradycyjnym środowisku jako języku skryptowym. Ale też nie spędzam dużo czasu na myśleniu o kategoriach. :-)
TJ Crowder
2
@ CME64: Nie, główna implementacja (CPython) kompiluje się w locie do kodu bajtowego i uruchamia kod bajtowy na maszynie wirtualnej. Chociaż istnieją narzędzia Python-to-C (Cython i Pyrex), nie jest to zwykle sposób uruchamiania Pythona.
TJ Crowder
2
W obronie @ Vityata VBScript jest zapisywany w Notatniku i interpretowany jako wprowadzanie tekstu, podczas gdy kod VBA jest kompilowany do kodu P podczas pisania go w edytorze , tj. Kodu źródłowego wyświetlanego w edytorze po zmodyfikowaniu linii kodu, nie jest kodem, który wpisałeś, ale interpretacją bazowego kodu P przez VBE : mechanizmy VBA kontra VBScript są całkowicie i całkowicie różne, a zrzucenie ich razem na tej liście po prostu nie wydaje się właściwe. VBA jest znacznie bliższy VB6 niż VBScript; jest to tylko wyraźne ograniczenie, które uniemożliwia zbudowanie samodzielnego pliku wykonywalnego.
Mathieu Guindon,
103

Aby zrozumieć różnicę między językiem skryptowym a językiem programowania, należy zrozumieć, dlaczego narodziły się języki skryptowe.

Początkowo istniały języki programowania, które zostały napisane w celu tworzenia programów takich jak Excel, Word, przeglądarki, gry itp. Programy te były budowane w językach takich jak C i Java. Z czasem programy te potrzebowały sposobu na tworzenie nowych funkcji, dlatego musieli udostępnić interfejs do swojego kodu bajtowego i stąd narodziły się języki skryptowe.

Język skryptowy zwykle nie jest kompilowany, więc może działać, gdy tylko napiszesz coś znaczącego. W związku z tym program Excel można budować przy użyciu C ++, ale udostępnia on język skryptowy o nazwie VBA, umożliwiający użytkownikom zdefiniowanie funkcjonalności. Podobnie przeglądarki mogą być budowane w C ++ / Java, ale ujawniają język skryptowy o nazwie javascript (niezwiązany w żaden sposób z java). Gry są zwykle budowane w C ++, ale udostępniają język o nazwie Lua, aby użytkownicy mogli definiować niestandardowe funkcje.

Język skryptowy zwykle stoi za jakimś językiem programowania. Języki skryptowe mają zwykle mniejszy dostęp do natywnych umiejętności komputerów, ponieważ działają na podzbiorze oryginalnego języka programowania. Przykładem tutaj jest to, że Javascript nie będzie miał dostępu do twojego systemu plików. Języki skryptowe są zwykle wolniejsze niż języki programowania.

Chociaż języki skryptowe mogą mieć mniejszy dostęp i są wolniejsze, mogą być bardzo potężnymi narzędziami. Jednym z czynników przyczyniających się do sukcesu języków skryptowych jest łatwość aktualizacji. Czy pamiętasz dni, w których aplety Java były dostępne w Internecie, jest to przykład uruchomienia języka programowania (Java) w porównaniu do języka skryptowego (javascript). W tym czasie komputery nie były tak potężne, a javascript nie był tak dojrzały, więc aplety Java zdominowały sceny. Ale aplety Java były denerwujące, wymagały od użytkownika załadowania i skompilowania języka. Wracając do dzisiejszych czasów, aplety Java prawie wyginęły, a JavaScript dominuje na scenie. JavaScript jest bardzo szybko ładowany, ponieważ większość składników przeglądarki została już zainstalowana.

Wreszcie, języki skryptowe są również uważane za języki programowania (chociaż niektórzy nie chcą tego zaakceptować) - termin, którego powinniśmy tutaj używać, to języki skryptowe a języki skompilowane.

Yang Li
źródło
4
Czy nie uważasz, że miałeś na myśli: „języki interpretowane a języki skompilowane” zamiast „języki skryptowe a języki skompilowane” ??
bitsapien
6
„Przykładem tutaj jest to, że Javascript nie będzie miał dostępu do twojego systemu plików”, Nodejs mówi cześć
Mohammad
@Mohammad NodeJS to środowisko wykonawcze, które pozwala programistom używać Javascript jako „języka” do kodowania. NodeJS nie jest w 100% Javascript.
JeffNhan
65

Wszystkie języki skryptowe są językami programowania.

Języki nie są klasyfikowane jako skrypty lub nie - zależy to całkowicie od środowiska wykonywania.

Jeśli środowisko jest interpretowane, jest to powszechnie nazywane środowiskiem skryptowym.

Oded
źródło
18

Różnice stają się coraz mniej ważne. Tradycyjnie języki skryptowe rozszerzają istniejące programy ... Myślę, że to główna definicja „skryptów” polega na tym, że odnosi się do napisania zestawu instrukcji dla istniejącej jednostki do wykonania. Jednak tam, gdzie języki skryptowe zaczęły się od zastrzeżonej i potocznej składni, większość popularnych obecnie zawdzięcza pewien związek C.

Myślę, że rozróżnienie „interpretowany a skompilowany” jest raczej objawem rozszerzenia istniejącego programu (z wbudowanym interpreterem), a nie istotną różnicą. To, na czym bardziej martwią się programiści i świeccy, to „co robi programista?”. Fakt, że jeden program jest interpretowany, a drugi jest kompilowany, w bardzo niewielkim stopniu określa różnicę w aktywności twórcy. Nie oceniasz dramatopisarza na podstawie tego, czy jego sztuki są częściej czytane na głos, czy wykonywane na scenie, prawda?

Eric Barker
źródło
12

Język programowania: jest kompilowany do kodu maszynowego i działa na sprzęcie podstawowego systemu operacyjnego.

Język skryptowy: jest niestrukturalnym podzbiorem języka programowania. Jest ogólnie interpretowane. w zasadzie „skryptuje” inne rzeczy do zrobienia. Głównym celem nie jest przede wszystkim tworzenie własnych aplikacji, ale sprawienie, aby istniejąca aplikacja działała tak, jak chcesz, np. JavaScript dla przeglądarek, TCL itp.,

*** Ale zdarzają się sytuacje, w których język programowania jest konwertowany na interpreter i vice-verse-use używa interpretera C, w którym można wykonać skrypt „C”. Skrypty są zwykle pisane w celu kontrolowania zachowania aplikacji, gdy jako język programowania służy do tworzenia aplikacji. Ale uważaj, że rozgraniczenie zamazuje się z dnia na dzień jako przykład Pythona, zależy to od tego, jak używa się języka.

saikumarm
źródło
10

Języki skryptowe to podzbiór języków programowania.

  1. Języki skryptowe nie są kompilowane przez użytkownika do kodu maszynowego (python, perl, shell itp.). Raczej inny program (zwany tłumaczem, uruchamia program i symuluje jego zachowanie)
  2. Niektóre języki programowania, które nie są skryptami (C, C ++, Haskell i inne „skompilowane” języki), są kompilowane do kodu maszynowego, a następnie uruchamiane.
jh314
źródło
5

Myślę, że to, co nazywacie „różnicą”, jest w rzeczywistości konsekwencją prawdziwej różnicy.

Rzeczywista różnica jest celem napisanego kodu. Kto będzie uruchamiał ten kod.

Język skryptowy służy do pisania kodu, który będzie kierowany na system oprogramowania. Zautomatyzuje operacje na tym systemie oprogramowania. Skrypt będzie sekwencją instrukcji dla docelowego systemu oprogramowania.

Język programowania jest przeznaczony dla systemu komputerowego, którym może być maszyna rzeczywista lub wirtualna. Instrukcje są wykonywane przez maszynę.

Oczywiście prawdziwa maszyna rozumie tylko kod binarny, więc musisz skompilować kod języka programowania. Jest to jednak konsekwencja celowania w maszynę zamiast w program.

Z drugiej strony docelowy system oprogramowania skryptu może skompilować kod lub zinterpretować go. To zależy od systemu oprogramowania.

Jeśli mówimy, że prawdziwa różnica polega na tym, czy jest ona kompilowana, czy nie, mamy problem, ponieważ kiedy JavaScript działa w V8, jest kompilowane, a gdy działa w Rhino, nie jest.

Robi się coraz bardziej mylące, odkąd języki skryptowe ewoluowały i stają się bardzo potężne. Aby nie ograniczać się do tworzenia małych skryptów do automatyzacji operacji na innym systemie oprogramowania, możesz tworzyć z nimi dowolne bogate aplikacje.

Kod w Pythonie jest skierowany do interpretera, więc możemy powiedzieć, że „skryptuje” operacje na tym tłumaczu. Ale kiedy piszesz kod Python, nie widzisz go jako skryptu interpretera, widzisz go jako tworzenie aplikacji. Interpreter jest po to, aby między innymi kodować na wyższym poziomie. Więc dla mnie Python jest bardziej językiem programowania niż językiem skryptowym.

Damian Jose
źródło
5

W czasach, gdy świat był młody, aw świecie komputerów osobistych wybieranych z .exe lub .bat, nakreślenie było proste. Systemy uniksowe zawsze miały skrypty powłoki (/ bin / sh, / bin / csh, / bin / ksh itp.) I języki skompilowane (C / C ++ / Fortran).

Aby rozróżnić role i obowiązki, skompilowane języki (często nazywane językami 3. generacji) były postrzegane jako języki „programowania”, a języki „skryptowe” były postrzegane jako te, które wywoływały tłumacza (często nazywane językami 4. generacji). Języki skryptowe były często używane jako „klej” do łączenia wielu poleceń / kompilowanych programów, dzięki czemu użytkownik nie musiał się martwić o zestaw kroków w celu wykonania swojego zadania - opracował jeden plik, który określał, jakie kroki należy wykonać chcieli to osiągnąć, a stało się to „scenariuszem” dla każdego, do naśladowania.

Różne osoby / grupy napisały nowych tłumaczy, aby rozwiązać konkretny problem. awk jest jednym z bardziej znanych i był używany głównie do dopasowywania wzorców i stosowania szeregu transformacji danych na wejściu. Działał dobrze, ale miał ograniczoną domenę problemów. Rozszerzenie tej domeny było prawie niemożliwe, ponieważ kod źródłowy był niedostępny. Skrypty narzędziowe Perla (Larry Wall, główny autor / architekt) na wyższy poziom - i opracowali interpreter, który nie tylko pozwolił użytkownikowi uruchamiać polecenia systemowe, manipulować danymi wejściowymi i wyjściowymi, obsługiwał zmienne bez typu, ale także uzyskiwać dostęp do interfejsów API na poziomie systemu Unix jako funkcje z poziomu samych skryptów. Był to prawdopodobnie jeden z pierwszych powszechnie używanych języków skryptowych wysokiego poziomu.

Twoje pytanie dotyczyło konkretnie Pythona. Ponieważ interpreter języka Python działa na pliku tekstowym zawierającym kod języka Python, a kod języka Python może działać wszędzie tam, gdzie istnieje interpreter języka Python, powiedziałbym, że jest to język skryptowy (w tym samym stylu co Perl). Nie trzeba ponownie kompilować pliku komend python użytkownika dla każdej architektury systemu OS / CPU (tak jak w przypadku C / C ++ / Fortran), co czyni go znacznie bardziej przenośnym i łatwiejszym w użyciu.

Podziękowania za tę odpowiedź należą się do Jerrolda (Jerry'ego) Heymana. Oryginalny wątek: https://www.researchgate.net/post/Is_Python_a_Programming_language_or_Scripting_Language

Kartik Chauhan
źródło
4

Nie zgadzam się z tym, że języki używające tłumaczy są językami skryptowymi, a ten, który się kompiluje, to języki programowania. Możemy opracować tłumacza lub kompilatora dla dowolnego języka. Zinterpretowane środowisko lepiej pasuje do skryptów internetowych i ułatwia to, dlatego go mamy.

Cóż, wydaje mi się, że nie ma różnicy między językiem skryptowym a językiem programowania. Chodzi o wykonanie pracy. Jeśli chodzi o zadania związane z siecią, nazywamy je skryptami sieciowymi, biorąc pod uwagę małe zadanie, w ten sposób możemy również wywoływać zadania związane z systemem jako skrypty na poziomie systemu lub systemu operacyjnego oraz język programowania, którego używamy do realizacji tych zadań, jako języki skryptów systemowych.

Nie jest też tak, że nie można pisać kodu na poziomie systemu w Pythonie i skryptach WWW w języku C (zdecydowanie można to zrobić, jeśli uda nam się ustanowić wymaganą platformę i środowisko). Ale to wszystko wymaga zbyt dużego wysiłku, który może wpłynąć na ograniczenie czasowe szybkiego rozwoju, a niewielkie opóźnienie nie przyniesie nam wiele korzyści w skryptach sieciowych. Ale mądre versa nie jest prawdą, jeśli wykonujemy zadania na poziomie systemu w Pythonie.

Konkluzja: wybór języka zależy od charakteru wykonywanego zadania i dyskryminacji języka, ponieważ język skryptowy jest mitem.

paritosh mishra
źródło
4

Języki skryptowe

Języki skryptowe są interpretowane w innym programie. JavaScript jest osadzony w przeglądarce i interpretowany przez tę przeglądarkę.

Przykłady języków skryptowych

  1. JavaScript
  2. Perl
  3. Pyton

Zalety języków skryptowych:

  1. Prosty - języki skryptowe są łatwiejsze do pisania niż język programowania.

  2. Mniej linii kodu (LOC)

Języki zaprogramowane

Języki programowania, takie jak Java, są kompilowane i nie są interpretowane przez inną aplikację w ten sam sposób.

Przykłady języków programowania

  1. do
  2. C ++ i
  3. Jawa

Więcej szczegółów

manisha mulchandani
źródło
Oskryptowane językami języki programowania. Ponadto Java jest interpretowana przez inną aplikację o nazwie JVM.
bfontaine,
4

W językach skryptowych, takich jak (JavaScript i stare wersje PHP), wykorzystujemy istniejące podstawowe funkcje i metody do wykonywania naszej pracy. Weźmy przykład, JavaScriptktórego możemy użyć ajaxlub web-socketstylko wtedy, gdy są one obsługiwane przez przeglądarkę lub istnieją metody lub są one dostępne w przeglądarce. Ale w językach takich jak C lub C ++ Java możemy napisać tę funkcję od zera, nawet jeśli jakakolwiek biblioteka dla tej funkcji nie jest dostępna, ale nie możemy tego zrobić w JavaScript.

czy możesz obsługiwać gniazda sieciowe w Internet Explorerze 8 lub wcześniejszym za pomocą JavaScript Ale możesz napisać wtyczkę w C, C ++ lub Javie, która może dodać funkcję gniazda sieciowego do Internet Explorera 8.

Zasadniczo w językach skryptowych piszemy kod w sekwencji, która wykonuje istniejące metody w sekwencji, aby zakończyć nasze zadanie. Wprowadzanie liczb i formuł w kalkulatorze cyfrowym w celu wykonania operacji jest również bardzo dobrym przykładem języka skryptowego. Należy pamiętać, że kompilator / środowisko wykonawcze każdego języka skryptowego jest zawsze napisane w języku programowania, w którym możemy dodać więcej funkcji oraz metody i może pisać nowe biblioteki.

PHP Jest to język, który jest nieco czarno-biały programowania i skryptów. Możemy dodawać nowe metody, dodając skompilowane rozszerzenia napisane w innym języku wysokiego poziomu. Nie możemy dodawać wysokiego poziomu funkcji sieciowych ani tworzenia bibliotek przetwarzania obrazu bezpośrednio w PHP.

PS Naprawdę przepraszam, że obracam moją odpowiedź tylko wokół PHP JavaScript, ale używam tych dwóch, ponieważ mam duże doświadczenie w tych dwóch.

Ravinder Payal
źródło
3

Oprócz różnicy, że język skryptowy jest interpretowany, a język programowania jest kompilowany, jest jeszcze jedna różnica, jak poniżej, która, jak sądzę, została pominięta.

Język skryptowy jest językiem programowania służącym do manipulowania, dostosowywania i automatyzacji udogodnień istniejącego systemu. W takich systemach użyteczna funkcjonalność jest już dostępna za pośrednictwem interfejsu użytkownika, a język skryptowy jest mechanizmem umożliwiającym kontrolę tej funkcji.

Podczas gdy język programowania jest ogólnie używany do kodowania systemu od zera.

src ECMA

Sukrit Gupta
źródło
2

Jeśli widzimy logicznie język programowania i język skryptowy, więc jest to 99,09% takie samo. ponieważ używamy tej samej koncepcji jak pętla, warunek kontrolny, zmienna i wszystko, więc możemy powiedzieć tak, obie są takie same, ale jest tylko jedna rzecz różniąca się między nimi, która jest w C / C ++ i innym języku programowania, który kompilujemy kod przed wykonaniem. ale w PHP, JavaScript i innym języku skryptowym nie musimy się kompilować, wykonujemy bezpośrednio w przeglądarce.

Dzięki Nitish K. Jha

NITISH KUMAR Jha
źródło
2

Języki skryptowe to języki programowania, które ludzie uważają za języki skryptowe. Jest to sztuczna kategoria bez wyraźnej granicy, w której każda proponowana reguła ma wyjątek.

Klasyczne reguły mówiące, że język jest językiem skryptowym, charakteryzują, a nie definiują. Jeśli język spełnia wiele zasad, istnieje duża szansa, że ​​jest uważany za język skryptowy. Jeśli nie, istnieje duża szansa, że ​​nie. Reguły zwykle obejmują:

  • Jest przeznaczony dla małych „skryptów”, a nie dużych programów.
  • Jest osadzony w innej aplikacji, służącej do drobnych modyfikacji tej aplikacji.
  • Jest raczej interpretowany niż kompilowany.
  • Jest przeznaczony dla początkujących programistów, a nie profesjonalistów.
  • Jego nazwa kończy się na „skrypt”.

Dodałbym:

  • Język skryptowy to język programowania, w którym prawie wszystkie błędy są wykrywane w czasie wykonywania.

Oznacza to, że może to być język interpretowany.

Jeśli język programowania ma znaczące zachowanie w czasie kompilacji, w którym analizuje kod i zgłasza błędy bez uruchamiania programu, takie jak błędy literowe z C, Java lub C #, najprawdopodobniej nie jest uważany za język skryptowy.

Tradycyjnie wiele języków skryptowych było interpretowanych bezpośrednio ze źródła, ale bardziej popularne z nich otrzymały bardziej wydajne implementacje, które prekompilują kod, takie jak .pycpliki Pythona , lub optymalizują silniki JavaScript, które kompilują się do kodu natywnego przed uruchomieniem.

Jeśli język może zostać zaimplementowany przez interpretera, który patrzy tylko na kod źródłowy podczas jego działania, prawdopodobnie jest to język skryptowy. To, czy faktycznie jest zaimplementowane w ten sposób, nie jest ważne, ale jeśli tak, to nie może również wymagać obszernego sprawdzania błędów podczas kompilacji kodu.

Jeśli język zapewnia przydatną semantykę statyczną, która pomaga wykrywać błędy (inne niż błędy składniowe) bez konieczności uruchamiania programu, prawdopodobnie nie jest to język skryptowy.

Zawsze są wyjątki, zwykle oparte na tradycji wokół języka bardziej niż jakakolwiek rzeczywista reguła. BASIC zwykle nie jest uważany za „język skryptowy”, mimo że spełnia prawie wszystkie kryteria, które ktoś kiedykolwiek zastosował. Właśnie dlatego Visual Basic Script musiał dodać „skrypt” do nazwy, aby odróżnić się od Visual Basic, „prawdziwego” języka programowania przeznaczonego dla większych programów.

BASIC jest także starym językiem programowania, takim jak COBOL i Fortran, zanim ludzie spodziewali się analizy statycznej języka, a właściwie zanim „języki skryptowe” były czymś.

lrn
źródło