그것은 "왜 수학 분야가 많은가? 우리는 대수학을 가지고 왜 기하학, 미적분학 및 유체 역학이 필요합니까?"라고 묻는 것과 비슷합니다. 모든 프로그래밍 언어는 특정 문제를 해결하는 것을 목표로합니다. 하나 이상의 언어가 동일한 문제를 해결할 수 있지만 각각 다른 방식으로 접근합니다.
다음은 프로그래밍 언어의 주요 차이점 중 일부입니다.
가독성 및 유지 보수성
일부 언어는 사람이 읽기 쉽기 때문에 한 프로그래머가 다른 프로그래머 코드에서보다 쉽게 공동 작업 할 수 있습니다. 예를 들어, Python은 읽기 쉽다는 평판을 얻고 있습니다. 코드 블록을 정의하기 위해 라인을 엄격하게 들여 쓰기하므로 프로그램을 한눈에 파악하고 구조를 쉽게 파악할 수 있습니다. 다른 언어들에서도 들여 쓰기가 가능하지만, 요구 사항이 아닌 문체 선택이 가능합니다.
반대로 Perl은 프로그래머가 여러 가지 방법으로 동일한 프로그램을 작성할 수있는 언어이지만 프로그램의 목적이 다른 독자에게 즉시 명확하지 않을 수 있습니다. 그러한 프로그램은 쓰기가 편리 할 수 있지만, 다른 사람이 이해하고 편집하기는 어렵습니다.
공연
일부 언어는 해석되고 일부는 컴파일됩니다. 컴파일 된 프로그램은 전 처리기, 컴파일러 및 링커에서 처리해야 컴퓨터에서 실행될 수 있습니다. 이 전문 중간 소프트웨어는 어휘 분석을 수행하여 프로그램을 기계어로 번역합니다. 또한 결과 지침을 최적화하여 프로그램 실행 속도를 높이는 영리한 방법을 모색 할 수도 있습니다.
컴파일 된 프로그램은 일반적으로 해석 된 프로그램보다 잘 수행됩니다. 예를 들어, C, C ++ 및 Objective-C는 일반적으로 매우 빠른 기계 코드로 컴파일되는 언어입니다. 비디오 게임 및 시스템 소프트웨어는 종종 이러한 언어로 작성되어 CPU의 모든 성능을 압박합니다.
반면, 인터프리터 언어 프로그램은 인터프리터라는 소프트웨어로 실행되며, 인터프리터는 컴퓨터 코드로 컴파일하지 않고 프로그램의 명령을 실행합니다. 인터프리터가 때때로 프로그램을 중간 언어로 구문 분석하여 일부 최적화가 이루어 지지만 성능은 컴파일 된 기계 코드만큼 빠르지 않습니다.
인터프리터 언어의 주요 이점 중 하나는 인터랙티브 개발 가능성입니다. 전체 프로그램을 실행하기 전에 컴파일 할 필요가 없으므로 코드를 대화식으로 실행할 수 있습니다. 운영 체제의 명령 줄을 사용한 적이 있다면 익숙합니다. 명령을 입력하고 결과를 볼 수 있습니다. 이러한 인터페이스를 REPL 또는 "read-eval-print-loop"라고합니다. REPL을 사용하면 명령 (또는 명령 블록)을 개별적으로 실행하고 결과를 볼 수 있습니다. Lisp, Perl, Python, NodeJS, Ruby 및 JavaScript는 REPL에서 실행할 수있는 해석 된 언어의 예입니다.
Windows 명령 프롬프트 및 bash와 같은 대화 형 명령 인터페이스는 해석 된 언어로도 적합합니다. 이러한 "언어"의 프로그램을 배치 파일 또는 셸 스크립트라고합니다.
특정 사용 사례
종종 언어는 특정 유형의 프로그램을 작성할 때 특히 유용합니다. 예를 들어, NodeJS는 웹용 단일 스레드 응용 프로그램을 작성하도록 설계되었습니다. 비 차단 파일 I / O는 필요한 데이터가 전송되기를 기다리는 동안 프로그램이 계속 작동 ( "차단되지 않음")하도록 허용합니다.
또 다른 예는 통계적 분석을 전문으로하는 R 프로그래밍 언어입니다. R로 작성된 프로그램은 내장 된 분석 테스트 및 모델과 방대한 양의 데이터를 효율적으로 조작 할 수있는 도구를 활용할 수 있습니다.
손쉬운 프로토 타이핑
일부 언어는 신속한 프로토 타이핑을 허용합니다. 프로그래머는 프로그램 작성이 완료 될 때까지 구성 요소에 구성 요소를 작성하고 "쓰기 시작"할 수 있습니다.
예를 들어, Reddit 웹 사이트는 원래 Lisp로 작성되었습니다. Reddit이 출시 된 후 기술 사이트와 물류 사이트 모두에서 파이썬으로 전체 사이트가 재 작성되었습니다. 모든 코드를 리팩토링하는 것이 주요 사업 이었지만 사이트 소유자는 아무런 후회도 표명하지 않았습니다. 2005 년 블로그 포스트에서 그들은 Lisp이 무엇이 될 것인지 정확히 알지 못하고 무언가를 만들 수 있다고 말했습니다.
사용 가능한 라이브러리
일반적으로 새 프로그래밍 프로젝트를 시작할 때 휠을 다시 발명하고 싶지는 않습니다. 즉, 제곱근을 계산하거나 문자열에서 첫 번째 문자가 나오는 것과 같은 일반적인 작업을위한 함수를 작성하고 싶지는 않습니다. 이러한 이유로 거의 모든 프로그래밍 언어는 공통 기능에 대한 일련의 표준 라이브러리를 제공합니다. 프로그래머는 제공하는 라이브러리 때문에 언어를 선호 할 수 있습니다.
예를 들어, C 표준 라이브러리는 많은 저수준 시스템 작업에 대해 높은 성능을 제공합니다. Perl은 많은 견고한 라이브러리를 제공하고 모듈에 대한 CPAN 저장소를 다운로드하여 프로그램에 사용합니다. 파이썬은 햇빛 아래 모든 것을 담은 다양한 내장 함수와 모듈을 제공합니다. JVM에서 실행되는 Lisp 언어 인 Clojure는 Java 객체 및 메소드의 광범위한 기존 라이브러리에서 코드를 실행할 수있는 기능을 제공합니다.
보안
모든 언어가 안전한 코드 작성에 도움이되는 것은 아닙니다. 예를 들어, C 프로그래밍 언어는 널 포인터 역 참조 (null pointer dereferencing)와 같은 파괴적인 취약성을 초래할 수있는 기능 (또는 그 부족)을 가지고있는 것으로 유명합니다. 다른 언어는 더 엄격한 규칙으로 이러한 문제를 해결하려고합니다.
예를 들어, 일부 언어는 다양한 유형의 데이터에서 수행 할 수있는 작업을 제한합니다. 가장 엄격한 언어는 때로는 "강력한 유형"이라고 불리며 소프트웨어 개발의 보안 및 안정성 우선 순위를 결정하는 프로그래머에게 안심할 수 있습니다. 강력한 유형의 언어로는 Rust, Nim, Ocaml 및 Haskell이 있습니다.
또한 언어는 상태를 변경하는 데이터 객체의 "가변성"에 제한을 둘 수 있습니다. 값이 덮어 쓰여지는 객체 대신이 언어는 명시 적 예외없이 변경 될 수없는 메모리의 값인 "변경 불가능한"객체를 선호합니다. 불변 객체는 멀티 코어 CPU가 널리 보급됨에 따라 "스레드 안전성"을 촉진하려는 경향 때문에 관심을 끌고 있습니다. 스레드 안전 프로그램에서 두 개 이상의 프로세서가 오류 위험이 크게 감소 된 한 세트의 데이터에서 작동 할 수 있습니다. 변경 불가능한 개체의 우선 순위를 지정하는 언어로는 Rust 및 Clojure가 있습니다.
지역 사회 지원
새로운 언어로 프로그램을 작성할 때 적극적으로 사용하고 서로의 작업에 기여하는 적극적이고 열정적 인 개발자 커뮤니티에 액세스하는 것이 도움이됩니다. 프로그래밍 언어를 선택하기 전에 해당 언어 커뮤니티에 대해 자세히 알아보십시오. 일부 언어에는 흥미롭고 역동적이며 활기찬 사용자 기반이 있으며, 다른 언어에는 커뮤니티가 거의 없거나 전혀 없을 수도 있습니다.
표현력
프로그램을 작성할 때 프로그래머의 생각과 문제 해결 능력은 해당 언어를 통해 "말하기"합니다. 결과적으로 프로그래머는 자신을 표현하는 데 익숙한 언어를 선호하는 경향이 있습니다. 그러나 언어와 프로그래머가 잘 작동하게 만드는 것은 정의하기 어렵습니다. 궁극적으로 당신이 편안하게 느끼는 언어를 알 수있는 유일한 방법은 다른 프로젝트에 대해 서로 다른 언어를 사용하고 직접 비교하는 것입니다.