스크립팅 언어와 일반 프로그래밍 언어의 차이점은 무엇입니까?


20

프로그래밍 언어와 스크립팅 언어의 차이점은 무엇입니까? 예를 들어, C와 Perl을 고려하십시오.

스크립팅 언어가 인터프리터 만 필요하고 컴파일 및 링크가 필요하지 않은 유일한 차이점은 무엇입니까?


4
나는 이것이 여기서 주제가 아닌 것 같습니다. 당신이 알고 싶은 것은 순전히 언어 구현의 문제입니다. 그것은 또한 항상 붉은 깃발 인 얕은 / 의견 답변 (당신의 잘못 자체가 아님)을 끌어들이는 것처럼 보입니다.
Raphael

하드웨어는 컴파일 된 언어의 "통역사"입니다. 따라서 유일한 차이점은 통역사 수입니다. 기계가 Turing과 동등한 언어이고 Turing과 동등한 언어를 사용하는 경우 컴파일 된 인터프리터 A를 해당 언어로 작성한 다음 B인터프리터 A가 실행할 수 있는 언어로 인터프리터를 작성한 후 인터프리터 가 실행할 수 C있는 언어로 된 인터프리터를 B작성할 수 있습니다. 본질적으로, 그것은 이론적 인 계산에 의한 것이 적고 실제적인 엔지니어링 문제와 관련이있는 간접적 인 문제입니다.
Patrick87

월급 (사전 운영)
Phil Lello

답변:


21

그 차이는 언어의 의도 된 사용과 더 관련이 있다고 생각합니다.

예를 들어, 파이썬은 해석되며 프롤로그와 마찬가지로 컴파일 및 링크가 필요하지 않습니다. 이 두 가지를 프로그래밍 언어로 분류합니다.

프로그래밍 언어는 소프트웨어 작성을위한 것입니다. 그들은 큰 프로젝트를 관리하도록 설계되었습니다. 아마도 프로그램을 호출하거나 파일을 읽을 수 있지만 스크립팅 언어만큼 잘하지 못할 수도 있습니다.

스크립팅 언어는 대규모 소프트웨어 개발을위한 것이 아닙니다. 구문, 기능, 라이브러리 등은 작은 작업을 빠르게 수행하는 데 더 중점을 둡니다. 이것은 그들이 프로그래밍 언어보다 때로는 더 "해키"하고 동일한 기능을 모두 가지고 있지 않을 수도 있음을 의미합니다. 이들은 많은 파일을 반복하거나 sysadmin 작업을 수행하는 것과 같이 일반적으로 수행되는 작업을 자동화하도록 설계되었습니다.

예를 들어, Bash는 산술을 잘 수행하지 않으므로 대규모 소프트웨어를 작성하는 것이 악몽 일 수 있습니다.

일종의 벤치 마크 : 아마도 가능하더라도 펄로 음악 플레이어를 쓰지 않을 것입니다. 마찬가지로 C ++을 사용하여 지정된 폴더의 모든 파일 이름을 바꾸려고 시도하지 않습니다.

이 선은 점점 더 흐려지고 있습니다. "스크립팅"언어로 정의 된 JavaScript는 점점 더 소프트웨어 영역에있는 "웹 앱"을 개발하는 데 사용됩니다. 마찬가지로, 파이썬은 처음에는 스크립팅 언어의 많은 특성에 적합하지만 파이썬을 기본 플랫폼으로 사용하여 점점 더 많은 소프트웨어를 개발하고 있습니다.


1
실제 예제의 경우 +1 : 배치 이름 바꾸기 작업을 수행하기 위해 C ++을 사용해야한다는 것을 상상할 수 없습니다!
Casey Kuball

3
개념적 차이는없고 각 사용 사례에 대한 일반적인 의견 만 제시합니다.
라파엘

3
또한 전체 트렌드 (LJ in Perl)를 촉진하는 최초의 블로그 서비스 중 하나 인 수천 명의 개발자가 쉽게 함께 작업 할 수있는 버전 제어 시스템 인 스크립트 언어 (PHP의 FB)로 세계 최대의 소셜 네트워크를 작성하지 않겠습니까 (Mercurial 파이썬에서)? 죄송하지만이 "스크립팅은 작은 작업을위한 것"입니다.
Oleg V. Volkov

1
@Raphael 나는 개념적 차이가 가장 희미하다고 생각합니다. 주요 차이점은 널리 사용되는 IMO입니다. 이러한 언어의 대부분은 튜링 완료되고 유사한 계산 모델을 따릅니다. 나는 공식적인 구별이나 정의를 겪어 본 적이 없지만 답변이 있으면 자유롭게 편집하십시오.
jmite

3
@Raphael 그것은 요점의 일부입니다. 개념적 차이는 없습니다. 컴파일 대 런타임에서 할 수있는 일은 주로 해석 대 컴파일의 문제이며 언어가 아닌 구현의 속성입니다 (언어 디자인은 특정 구현 모델을 어렵게 만들 수는 있지만).
Gilles 'SO- 악마 그만해'

6

스크립팅 언어에 대한 고전 기사는 John K. Ousterhout의 스크립팅 : 1998 년 컴퓨터 31 (3)에 발표 된 21 세기 고급 프로그래밍입니다 . 그는 스크립팅 언어와 시스템 프로그래밍 언어를 구분했습니다. 다른 사람.

Ousterhout은 시스템 프로그래밍 언어프로그래밍 을 위해 기계 언어를 대체하도록 진화 한 것으로 특징지었습니다 . 레지스터 할당 및 서브 루틴 호출 시퀀스와 같은 지루한 세부 사항을 숨기고 루프 및 기타 일반적인 제어 흐름 관용구 작성을위한 간단한 구성을 제공하며 타이핑 규칙을 시행합니다. 그것들은 보통 (시간 앞의) 컴파일러에 의해 구현됩니다. 이 언어는 처음부터 소프트웨어를 작성하기위한 것입니다. 예는 C, C ++ 및 Java입니다.

반대로 Ousterhout에 따르면 스크립팅 언어는 유용한 시스템이 이미 시스템 프로그래밍 언어로 작성되어 있다는 전제에서 출발합니다. Perl, Python, Tcl, Visual Basic 및 Unix 쉘과 같은 스크립팅 언어는 이러한 기존 프로그램을 새로운 프로그램으로 결합하는 도구를 제공합니다. Ousterhout은 스크립팅 언어를 "typeless"(많은 동적 타이핑을 포함하여) 및 빠른 개발을 강조하는 것으로 특징지었습니다. 그들은 일반적으로 통역사에 의해 구현됩니다.

이제 단일 저자의 개념적 모델이 권위적이라고 가정하지 않도록주의해야합니다. 비록 우리 컴퓨터 과학자들은 모든 용어에 대해 정확한 정의를 제공하는 수학자 인 것처럼 가장하지만, 실제로는 대부분의 컴퓨팅 용어가 모호하고 이질적인 의미로 사회적으로 구성되어 있습니다. 대부분의 용어에 대해 매우 높은 수준의 대략적인 합의가 있지만 세부 사항은 종종 누가 글을 쓰는지에 달려 있습니다. 따라서 그의 기사, 내 대답 및 다른 모든 대답을 큰 소금 더미로 가져 가십시오.

나는 당신이 당신의 질문에 표현할 때 "정상적인"프로그래밍 언어의 존재에 대해 개인적으로 이의를 제기 할 것입니다. 그러나, 당신이 전달하려는 개념은 대략 Ousterhout의 시스템 프로그래밍 언어와 일치한다고 생각합니다.


2

모든 스크립팅 언어는 프로그래밍 언어입니다. 대화는 사실이 아닙니다. "인터프리터 만 필요로하는"언어는 해석 된 언어입니다 ( 컴파일 된 언어 와는 대조적 으로 Java와 같은 일부 언어는 두 범주에 속함).

스크립팅 언어로 분류되는 언어 는 "접착제"언어로 유용하다는 것을 의미합니다. 스크립트는 모든 기능을 갖춘 프로그램이 아닌 다른 소프트웨어 조각 사이의 간격을 메 웁니다.

스크립트는 일반적으로 여러 프로그램을 함께 연결하거나, 멘탈 작업을 매우 빠르고 쉽게 수행하거나, 성능 및 안전 문제가 낮은 수준의 언어로 추상화 된 임베디드 환경에서 사용됩니다. 스크립팅 언어 강조는 개발 시간 단축에 중점을두기 때문에 대부분의 이유가 해석되고 수준이 높습니다.


개념적 차이는없고 각 사용 사례에 대한 일반적인 의견 만 제시합니다.
라파엘

1

세트 '스크립트 언어'는 세트 '프로그래밍 언어'의 서브 세트입니다. C와 Perl의 차이점은 시스템 프로그래밍 언어와 응용 프로그램 언어, 그리고 해석 된 언어와 컴파일 된 언어의 차이입니다.

시스템 프로그래밍 언어는 저수준이며 메모리 관리, 예측 가능한 IO 등을 지향합니다. 응용 프로그램 언어는 '파일에서 읽기 설정, 소켓 열기 및 설정에 따른 프로세스 요청'과 같은 고급 문제의 빠른 해결을 지향합니다.

따라서 응용 프로그램 언어는 시스템 언어 수준이 훨씬 높은 경향이 있습니다. 즉, 많은 양의 내장 추상화 및 도우미 기능을 제공하며 종종 자동 메모리 관리 기능을 추가합니다.

컴파일 된 언어의 프로그램은 프로그램 실행 전에 일부 코드로 완전히 처리됩니다. 스크립팅 언어는 실행 과정에서 동적으로 변환되며 종종 동적 코드 생성을위한 기능과 소스 코드가있는 파일을 포함합니다.

따라서 모든 스크립팅 언어는 응용 프로그램 언어이지만 그 반대는 아닙니다. 스크립팅 언어에는 일반적으로 언어 자체 측면에서 구현하기에는 실용적이지 않은 기능이 포함되어 있으므로 시스템 언어는 항상 컴파일 된 언어입니다. 그러나 스크립팅 (해석) / 컴파일 된 차이점은 구현에 대한 것입니다. 일부 언어의 경우 haskell과 같이 두 가지 유형의 구현이 존재할 수 있습니다.


이 해석 / 컴파일 된 이분법을 그리는 것은 잘못이라고 생각합니다. 또한 하위 집합 관계라고 생각하지는 않지만 세트에는 빈 교차가 없습니다. 마찬가지로, 높은 수준과 낮은 수준은 구별을 정확하게 설명하지 못합니다. 프롤로그는 매우 높은 수준이지만 bash 또는 java 스크립트와 같은 스크립팅 언어는 아닙니다.
jmite

1

다른 사람들은 스크립팅 언어 및 비 스크립팅 언어와 관련된 경향이있는 속성을 다루었습니다. 그것은 사람들이 "스크립트 언어"라는 용어를 사용할 때의 의미에 대한 느낌을 얻는 데 도움이되지만, 명확하게 정의 된 경계가 없다는 것을 이해하는 것이 더 중요하다고 생각합니다 . 두 명의 지식이있는 사람들이 특정 언어 X가 스크립팅 언어. 그럼에도 불구하고 "스크립팅 언어"라는 용어는 경계 내부 또는 외부에있는 언어에 대한 광범위한 동의가 있기 때문에 유용성이 있습니다.

"가족 자동차"와 "스포츠카"또는 "잡지"와 "신문"을 비교하십시오. 나는 모든 가족 용 자동차를 일반화 할 수있는 모든 스포츠카 (차별적으로 각 카테고리의 모든 기존 자동차를 열거하는 데 그다지 중요하지 않음)와 적어도 잠재적 인 목표 ( 그것은 모든 사람이 받아 들일 수 있음을 의미합니다). 그러나 이러한 용어는 실제로 결정하기 어려운 경우가 많지만 많은 자동차가 한 범주에 속하고 다른 범주에 속하지 않기 때문에 여전히 유용합니다.


0

아직 언급하지 않은 차이점은 의도 한대로 사용하면 대부분의 스크립트의 실행 시간이 "매크로 스코픽 (macroscopic)"작업에 의해 좌우되며 미세한 작업의 성능은 전체 실행 시간에 큰 영향을 미치지 않습니다. 예를 들어, 레이트 레이싱 애니메이션 프로그램에 "렌더 이미지"문이 포함 된 스크립팅 언어가 포함 된 경우 240 프레임의 애니메이션을 생성하는 스크립트는 "렌더 이미지"문에 4 시간이 소요되고 총 4 초가 소요될 수 있습니다. 다른 모든 것. 렌더링 엔진 외부의 모든 속도를 백만 배나 높여도 렌더링 엔진 속도를 0.1 % 향상시키는 것보다 전체 성능에 미치는 영향이 줄어 듭니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.