범용 프로그래밍 언어
General-purpose programming language컴퓨터 소프트웨어에서 GPL(General-Purpose Programming Language)은 다양한 응용 프로그램 도메인에서 다수의 하드웨어 구성 및 운영 체제에 걸쳐 소프트웨어를 구축하기 위해 사용하도록 설계된 프로그래밍 언어입니다.이론적으로 GPL 프로그램은 단일 프로세서 또는 네트워크에서 동등하게 실행될 수 있습니다.범용 프로그래밍 언어의 반대는 도메인 고유의 프로그래밍 언어로, 예를 들어 데이터베이스 쿼리 등 특정 영역 내에서 사용하도록 설계되었습니다.예를 들어 SQL은 데이터베이스 쿼리를 위해 설계되었습니다.
역사
초기 프로그래밍 언어는 컴퓨터 하드웨어와 마찬가지로 과학 컴퓨팅(숫자 계산) 또는 상용 데이터 처리를 위해 설계되었습니다.Fortran 및 Algol과 같은 과학 언어는 부동 소수점 계산과 다차원 배열을 지원했고, COBOL과 같은 비즈니스 언어는 고정 필드 파일 형식과 데이터 레코드를 지원했습니다.IPL-V 및 LISP, 문자열 조작용 COMIT, 수치 제어 머신용 APT와 같은 전문 언어가 널리 사용되지 않았습니다.포인터 조작이 필요한 시스템 프로그래밍은 일반적으로 어셈블리 언어로 이루어졌지만, JOVICAL은 일부 군사 애플리케이션에 [1]사용되었습니다.
1964년에 발표된 IBM의 System/360은 과학 및 상업 애플리케이션을 모두 지원하는 통합 하드웨어 아키텍처로 설계되었으며, IBM은 과학, 상업 및 시스템 프로그래밍을 지원하는 단일 범용 언어로 PL/I를 개발했습니다.실제로 PL/I는 Multics 운영 체제의 표준 시스템 프로그래밍 언어로 사용되었습니다.
PL/I 이후 과학용 프로그래밍 언어와 상용 프로그래밍 언어의 차이는 줄어들어 대부분의 언어가 양쪽에서 필요한 기본 기능을 지원하며 특수 파일 형식 처리의 대부분은 전문 데이터베이스 관리 시스템에 위임되었습니다.
1960년대부터 많은 전문 언어들이 개발되었습니다: 개별 이벤트 시뮬레이션을 위한 GPSS와 Simula, 프로그래밍을 가르치는 데 사용되는 MAD, BASIC, 로고 및 Pascal, 시스템 프로그래밍을 위한 C, [1]대화형 프로그래밍을 위한 JOSS와 APL\360.
GPL과 DSL의 비교
범용 프로그래밍 언어와 도메인별 프로그래밍 언어의 구별이 항상 [2]명확한 것은 아닙니다.프로그래밍 언어는 특정 태스크를 위해 생성될 수 있지만 원래 영역을 넘어 사용되므로 범용 프로그래밍 언어로 간주됩니다.예를 들어 COBOL, Fortran 및 Lisp는 DSL로 생성되었지만(각각 비즈니스 처리, 수치 계산 및 심볼릭 처리를 위해 생성됨), 시간이 지남에 따라 GPL의 것이 되었습니다.반대로 언어는 일반적인 용도로 설계될 수 있지만 실제로는 [3]특정 영역에만 적용됩니다.범용 언어든 DSL이든 문제에 적합한 프로그래밍 언어는 문제 [4]영역 내에서 충분한 표현력을 유지하면서 필요한 세부 수준을 최소화해야 합니다.이름에서 알 수 있듯이 범용 언어는 도메인 고유의 표기법을 지원할 수 없는 반면 DSL은 이 [4]문제를 처리하기 위해 다양한 문제 영역에서 설계될 수 있습니다.DSL 대신 범용 언어가 선호됩니다.특히 애플리케이션 도메인이 자신의 언어를 보증할 만큼 잘 이해되지 않을 때는 더욱 그렇습니다.이 경우 도메인에 적합한 데이터 유형 및 기능의 라이브러리를 갖춘 범용 언어를 [5]대신 사용할 수 있습니다.DSL은 추상표기의 범위가 작다는 점에서 보통 GPL보다 작은 반면, 일부 DSL은 실제로 하위 언어로서 GPL 전체를 포함합니다.이러한 경우 DSL은 GPL의 [6]표현력과 함께 도메인 고유의 표현력을 제공할 수 있습니다.
범용 프로그래밍 언어는 모두 튜링 완전하며, 이는 이론적으로 어떤 계산상의 문제도 해결할 수 있다는 것을 의미합니다.도메인 고유의 언어들은 종종 비슷하게 튜링 완성이지만 전적으로 그렇지 않다.
장점과 단점
범용 프로그래밍 언어는 프로그래머에 의해 더 일반적으로 사용됩니다.연구에 따르면 2021년에 C, Python, Java가 각각 [7]가장 일반적으로 사용된 프로그래밍 언어였다.도메인 고유의 언어보다 범용 프로그래밍 언어를 사용하는 것에 찬성하는 한 가지 주장은 새로운 언어를 배울 필요성을 극복하고 더 많은 사람들이 이러한 언어에 익숙해질 것이라는 것이다.
또한 많은 작업(즉, 통계 분석, 기계 학습 등)에 대해 광범위하게 테스트되고 최적화되는 라이브러리가 있다.이론적으로 이러한 라이브러리의 존재는 범용 언어와 도메인 고유의 [4]언어 사이의 격차를 해소해야 한다.
2010년의 실증적 연구는 GPL(C#)에 익숙하고 DSL(XAML)에 익숙하지 않은 사용자에게 문제를 제시함으로써 GPL과 CSL 사이의 문제 해결과 생산성을 측정하려고 했다.궁극적으로 이 특정 도메인 고유의 언어를 사용하는 사용자는 GPL에 대해 더 잘 알고 있음에도 불구하고 15% 더 나은 성능을 보였습니다.[4]
예
C
C의 전신인 B는 주로 시스템 [8]프로그래밍이라는 특정 목적을 위해 개발되었습니다.반면 C는 운영체제, 디바이스 드라이버, 애플리케이션 소프트웨어, 임베디드 시스템 등 다양한 계산 도메인에서 사용되고 있습니다.
C는 범용성이 있기 때문에 다양한 영역에서 사용하기에 적합합니다.표현식, 흐름 제어, 데이터 구조 및 풍부한 연산자 집합의 경제성을 제공하지만 사용자가 하나의 [9]컨텍스트에서 사용하도록 제한하지는 않습니다.그 결과, Unix 운영 [10]체제의 커널을 재작성하기 위해 개발자에 의해 처음 사용되었지만, 애플리케이션 개발, 임베디드 시스템(마이크로프로세서 프로그래밍), 비디오 게임(Doom 등) 등에 사용하기 위해 쉽게 조정되었습니다.오늘날 C는 가장 인기 있고 널리 사용되는 프로그래밍 [11]언어 중 하나로 남아 있습니다.
C++
C에 대한 확장으로 간주된 C++는 참조, 연산자 오버로드 및 기본 인수와 같은 기타 편의 기능과 더불어 객체 지향 기능을 도입했습니다.C와 마찬가지로 C++의 범용성으로 인해 다양한 영역에서 사용할 수 있게 되었습니다.C++ 어플리케이션의 핵심 영역은 시스템 프로그래밍이지만(C++는 낮은 수준의 [12]아키텍처에 대한 접근을 허용하는 기능을 갖추고 있기 때문에), 데스크톱 애플리케이션, 비디오 게임, 데이터베이스, 금융 시스템 등을 구축하는 데 광범위하게 사용되고 있습니다.[13]Microsoft, Apple, Bloomberg, Morgan Stanley와 같은 주요 소프트웨어 및 금융 회사는 여전히 사내 [13]및 외부 애플리케이션에서 C++를 널리 사용하고 있습니다.
파이썬
Python은 코드 가독성과 [14][15]확장성을 강조하는 언어로 생각되었습니다.전자는 소프트웨어 엔지니어가 아닌 엔지니어가 컴퓨터 프로그램을 쉽게 학습하고 작성할 수 있도록 했고, 후자는 도메인 전문가가 자신의 사용 사례에 맞는 라이브러리를 쉽게 만들 수 있도록 했습니다.이러한 이유로 Python은 다양한 도메인에서 사용되고 있습니다.
다음은 Python이 [16]사용되는 영역 중 일부입니다.
- 웹 개발: Django와 Flask와 같은 프레임워크는 웹 개발자들이 더 넓은 Python 생태계를 활용할 수 있는 강력한 웹 서버를 만들 수 있게 해 주었다.
- 과학 및 학계:SciPy와 Panda와 같은 과학 및 데이터 라이브러리는 Python을 과학 [17]연구에 사용할 수 있게 해 주었습니다.
- 기계학습: Scikit-learn 및 Tensorflow와 같은 라이브러리는 [18]개발자들에게 기계학습의 접근성을 증가시켰습니다.
- 일반적인 소프트웨어 개발: 사용자 애플리케이션, 웹 스크랩 프로그램, 게임 및 기타 일반적인 소프트웨어 개발
목록.
다음은 범용 프로그래밍 언어입니다.
메모들
- ^ a b Jean E. Sammet, "프로그래밍 언어:역사와 미래", ACM 15:7:601-610(1972년 7월) doi:10.1145/361454.361485
- ^ "Domain-Specific Languages: An Annotated Bibliography*". webcache.googleusercontent.com. Retrieved 2022-06-03.
- ^ Berry, Gerard (May 2006). "Real time programming : special purpose or general purpose languages". HAL Open Science.
- ^ a b c d Kosar, Tomaz (May 2010). "Comparing General-Purpose and Domain-Specific Languages: An Empirical Study" (PDF). Computer Science and Information Systems. 7 (2): 247–264. doi:10.2298/CSIS1002247K.
- ^ van Deursen, Arie (December 1998). "Little languages: little maintenance?". Journal of Software Maintenance: Research and Practice. 10 (2): 75–92. doi:10.1002/(SICI)1096-908X(199803/04)10:2<75::AID-SMR168>3.0.CO;2-5.
- ^ van Deursen, Arie; Klint, Paul; Visser, Joost (June 2000). "Domain-specific languages: an annotated bibliography". ACM SIGPLAN Notices. 35 (6): 26–36. doi:10.1145/352029.352035. ISSN 0362-1340. S2CID 1049872.
- ^ "The Most Popular Programming Languages - 1965/2021 - New Update - Statistics and Data". statisticsanddata.org. Retrieved 2022-06-03.
- ^ "Wayback Machine" (PDF). Archived from the original (PDF) on 2015-06-11. Retrieved 2022-06-03.
- ^ W., Kernighan, Brian (2016). The C programming language. Prentice Hall. ISBN 978-0-13-110370-2. OCLC 1004153413.
- ^ Ritchie, Dennis (April 1993). "The development of the C language" (PDF). ACM SIGPLAN Notices. 28 (3): 201–208. doi:10.1145/155360.155580.
- ^ "TIOBE Index". TIOBE. Retrieved 2022-06-03.
- ^ Stroustrup, Bjarne (1995). The C++ Programming Language. Addison-Wesley.
- ^ a b "C++ Applications". www.stroustrup.com. Retrieved 2022-06-03.
- ^ "artima - The Making of Python". www.artima.com. Retrieved 2022-06-03.
- ^ "General Python FAQ — Python 3.10.4 documentation". docs.python.org. Retrieved 2022-06-03.
- ^ "Applications for Python". Python.org. Retrieved 2022-06-03.
- ^ "Programming Languages Popularity in 12,086 Research Papers – Quantifying Health". Retrieved 2022-06-03.
- ^ Pedregosa, Fabian (2011). "Scikit-learn: Machine learning in Python" (PDF). The Journal of Machine Learning Research. arXiv:1201.0490.