1940년대 말 폰 노이만(von Neumann)에 의해 세계 최초로 프로그램 내장
방식의 컴퓨터가 등장
일반적으로 말하는 프로그래밍 언어는 프로그램 내장 방식 컴퓨터에 대한 계산 과정을 기술할 수 있을 때부터 시작
시기에 따른 프로그래밍 언어의 특징과 언어의 종류
💡 프로그래밍 언어의 변천사
1950년대 이전
1945년 : 폰 노이만(von Neumann) 개념
프로그램 내장 방식
메모리에 프로그램을 저장하고 프로그램 명령어들을 차례대로 실행
현재 대부분의 컴퓨터들이 이 방식을 적용
조건 제어 전이(conditional control transfer)
정해진 순서대로만 수행하도록 만들어진 하나의 프로그램이 아니라 어떠한 순서로도 이동하여 실행될 수 있는 코드의 소모임인 서브루틴 개념
1943년 : Plankalkül (Plan Calculus)
체스에 적용
궁극적인 개발 목적은 2진 산술연산에 사용된 Konrad Z 시리즈 컴퓨터를 위함
단일 비트를 제공하고 정수 타입과 부동소수점 수치 타입을 지원
배열과 레코드도 제공하는데 다른 레코드를 레코드의 원소로 포함 가능
이 언어는 실제로 구현되지 않음
1950년대
1950년대 : 어셈블리 언어
어려운 기계어의 코드를 move, jump, branch 등과 같은 쉬운 명령어로 나타냄
기계어와 어셈블리 언어 : 저급 언어(low level language)
1952년 : Autocode
MarkI컴퓨터에서 사용
저장이 가능하였으며, 사용할 때는 불러다 쓰면 됨
서브루틴이라는 개념도 이때 생겨남
1957년 : FLOW-MATIC과 최초의 컴파일러
1951년 A-0이라 불리는 최초의 컴파일러
1957년에는 공동 개발한 A-0 컴파일러의 새 버전을 발표 : Math-Matic이라 불려지는 최초의 영문 데이터 처리 컴파일러
Flow-Matic : 데이터 이름을 이용, 명령에 영어 단어를 이용
1957년 : FORTRAN I의 개발
최초의 대중 컴퓨터 언어
FORmula TRANslating System의 약자
과학 계산 목적으로 IBM에서 설계
구성요소는매우단순,데이터형식
호환성
1957년 : APL
간결한 체계와 특수한 비 ASCII 성질을 가진 수학적인 언어
수학과 행렬
데이터 집합에 대한 복잡한 연산을 하나의 기호를 사용하여 수행
제어 구조가 없고, 특별한 단말기에만 존재하는 그리스 기호를 사용하므로 문자를
이해하기 어렵다는 단점
1958년 : FORTRAN II
FORTRAN I 컴파일러에 포함된 버그를 수정해서 개발
서브루틴을 분리해서 컴파일
1959년 : LISP
인공지능분야
함수형 언어로 지식이나 규칙을 절차적으로 기술
예
OR(x,y) ⋯ LISP에서 사용되는 형식
x OR y ⋯불논리의기준
1960년대
1960년 : ALGOL 60
FORTRAN의 많은 특징을 포함
블록 구조 개념의 도입과 재귀호출 기능의 도입
구문은 Backus-Naur 형식(약어로 BNF) 표기법으로 기술
1960년 : COBOL
사무 처리용
데이터타입은숫자와문자열이며,데이터를찾기쉽고잘정리할수있도록열과
레코드로 분류
식별부(identification), 표지부(environment), 데이터부(data), 절차부(procedure)의
4부분으로 구성
1962년 : FORTRAN IV
FORTRAN II의 COMMON과 EQUIVALENCE 실행의 향상
변수의 명시적 타입 선언, 논리 IF문, 부프로그램을 매개변수로 다른 부프로그램에
전달할 수 있는 기능
1963년 : SNOBOL
문자열 처리
FASBOL, SNOBOL 컴파일러, SPITBOL 개발의 효시
1964년 : PL/I
크고 복잡한 블록 구조 언어
다음과 같은 기능들을 포함
함수와 프로시저, 수치 데이터형, 배열과 레코드 데이터 타입, 재귀호출 및 제어 구조, 문자열, COBOL 스타일 ‘그림’ 포맷, 스트림, 레코드, 입출력 기능, 비트 문자열, 제너릭(generic), 인터럽트, 동적 메모리 관리, 다중처리
1964년 : BASIC
간단한문법구조로이루어짐
제어 구조는 GOTO 문, GOSUB 문, 반복문
수치, 문자열, 배열 데이터 타입을 제공
프로그램 이식성이 부족하며 작성된 프로그램의 구조가 빈약하다는 것이 단점
1966년 : BCPL
초기의 블록 구조 절차 언어와 같았고 규모가 작은 애플리케이션 프로그램 개발에 이용
B와 C 프로그래밍 언어에 영향을 미침
1967년 : Logo
아이들에게 프로그래밍과 문제 해결 원리를 가르치기 위해 고안된 교육용 프로그래밍 언어
간단한 문법과 그래픽 지향적 특징
1970년대
1970년 : Forth
간단한 문법을 지닌 스택기반 언어
효율성과 단순성을 목적으로 고안
데이터 조작은 데이터 스택에서 발생
1971년 : Pascal
성공한 언어
교육용
사용자가 복합적인 구조의 데이터 구조를 정의 가능
별명(aliasing), 포인터 등의 특징
배열 및 가변 레코드와 정수의 부분집합을 새로운 타입으로 정의 할 수 있는 특징
1971년 : C
초기에는 시스템 프로그래밍을 위해 설계
풍부한 제어문, 간단한 데이터 구조, 풍부한 연산자
함수, 포인터, 간단하면서도 유용하게 사용할 수 있는 입출력 장치, 강력한 매크로
선행처리기
장치 드라이버들을 기록하기에 충분한 저급 언어면서 GUI 라이브러리를 기록하기에 충분한 고급 언어이기도 함
1972년 : Smalltalk
순수한 객체지향 언어
객체는 지역 데이터와 연산들의 모임을 캡슐화하는 구조
애플리케이션 프로그래밍이나 객체지향 프로그래밍 이론을 가르치기 위해 사용
멀티윈도우와 그래픽 기능을 활용한 사용자 중심의 인터페이스를 지원하는 최초의
언어
1973년 : Prolog
프랑스어인 PROgrammation en LOGique의 약어
매우 짧은 양의 코드로도 효율성을 지니는 논리 기반 프로그래밍 언어
1975년 : Scheme
LISP 언어의 일종
지원하는 데이터 타입
심볼, 다양한 계수 타입, 캐릭터와 스트링, 리스트, 벡터, 비트 스트링,
레코드, 관련 리스트와 해시 테이블, 다양한 함수/람다 형
1975년 : CLU
자료 추상화와 제어 추상화, 예외 처리 방식 등의 추상화 메커니즘으로 이루어 짐
1978년 : Awk
컴파일 없이 수행되는 언어
입력 파일을 스캔한 후 미리 지정된 레코드 분리자 단위로 읽어 필드 분리자로 필드마다 규칙적인 명칭을 붙임
단순한 구조로 되어 있으며, 데이터 검사, 변환, 여러 포맷으로의 출력, 데이터베이스
구축 등에 활용
1980년대
1981년 : Modula 2
병행처리와 동적 메모리 관리는 Pascal보다 뛰어남
애플리케이션 프로그램, 교육용 언어, 산업 응용 분야에서도 사용
주요 특징은 모듈(module)
추상 데이터 타입은 허용하지만 상속은 지원하지 않음
1983년 : Ada
대규모 프로그래밍과 소프트웨어 신뢰성을 장려하려는 미국 정부에 의해 발표
객체지향 프로그래밍의 특징을 지닌 블록 구조 언어
중첩 프로시저, 중첩 패키지, 엄격한 데이터 검사, 멀티태스킹, 타입의 안정성,
컬렉션, 제너릭, 예외처리, 그리고 추상 데이터 타입
1983년 : C++
C로부터 파생된 객체지향 언어
클래스, 상속 그리고 객체지향 특징
다중 상속, 엄격한 타입 검사, 동적 메모리 관리, 템플릿, 다형성, 오버로딩과 예외
처리 등의 객체지향 프로그래밍 특징을 지님
병행 처리, 연속성, 쓰레기 수집(garbage collection) 등의 기능은 지원하지 않음
1986년 : Perl
블록 구조의 언어로 객체지향 프로그래밍
특징
데이터 타입 : 문자열, 숫자, 리스트, 연상 배열, 참조, 데이터 타입 : 객체, 전통적인 수학과 산술 함수들, 서브루틴, 가비지 컬렉션의 동적 메모리, 파일의 입출력 기능, 인터페이스 지원 확장 시스템, 정규식 데이터 매칭과 서브루틴, 다양한 루프, 객체 정의와 상속, 네임스페이스, 오류 처리
1988년 : Oberon
절차적이며, 객체지향 특징을 지닌 블록 구조의 언어
컴퓨터 공학 교육용, 다용도 애플리케이션 개발
엄격한 데이터 타입 체크, 분리 컴파일이 가능한 모듈,쓰레기수집,동적메모리
관리, 문자열, 배열 데이터 타입, 동적 모듈 로딩
1989년 : Python
객체지향적 언어
높은 효율, 쉬운 사용법, 확장성
정수, 부동소수점, 복합 문자열, 리스트 등의 데이터 타입과 독립 모듈, 서브루틴, 오브젝트 클래스를 지원
표준 라이브러리가 HTTP, CGI, 윈도우에서 지원하는 라이브러리, 액티브 X 스크립팅도 지원
1990년대
1990년 : Eiffel
객체지향 언어
프로그램 안정성과 순차적 소프트웨어 개발을 목적으로 개발
객체지향 프로그래밍 속성인 상속, 추상 데이터 타입, 동적 바인딩, 예외처리 등을 지원
1991년 : Visual Basic
통합 개발 환경을 위하여 시각적 편리함을 추구하여 Basic을 GUI적으로 발전시킨 것
구성 요소로는 대화상자, 윈도우 인터페이스, 메뉴 등
정수, 실수, 스트링, 불린, 병행처리, 개체 참조 등을 지원, 확장이 가능
1992년 : Dylan
절차적인 함수의 특징과 함께 동적인 객체지향 언어
애플리케이션 개발, 시스템 프로그래밍도 지원
상속, 다형성, 쓰레기 수집, 매크로, 모듈, 반환, 오류 검출, 다중 메소드, 그리고 확장성을 지원
데이터 타입은 숫자, 스트링, 심볼, 시퀀스, 배열, 벡터와 해시 테이블을 지원
1993년 : Ruby
교육용 언어를 목적으로 탄생한 스크립트 언어
객체지향적이고 확장 가능성이 뛰어남
1995년 : Java
단순하고 편리한 객체지향적 언어
처음에는 가전제품의 소프트웨어를 개발하기 위한 언어로 만들어짐
객체지향적이고, 강력하고 편하며 보안성이 뛰어나는 등 여러 가지 장점을 지닌 언어
기본적인 구성 요소는 클래스
상속, 엄격한 데이터 타입 검사, 모듈방식, 예외처리, 다형성, 문자열 처리, 쓰레기 수집 등의 특징
포인터, 다중 상속, 연산자 오버로딩, 매크로 전처리기를 지원하지 않음
2000년대
2000년 : C#
C++와 Visual Basic의 편의성을 결합하여 만든 객체지향 프로그래밍 언어
컴포넌트 기반의 소프트웨어 개발 패러다임
웹을 통해 정보와 서비스를 교환하고, 개발자들이 이식성 높은 애플리케이션을 만들어 낼 수 있게 고안
미래
💡 요약
프로그래밍 언어의 역사는 1940년대 디지털 컴퓨터의 발전과 함께 시작된다고 할 수 있다. 1940년대 말 폰 노이만(John von Neumann)에 의해 최초로 프로그램 내장 방식의 컴퓨터가 등장한 이후, 프로그래밍 언어의 역사는 급속도로 발전하였다.
폰 노이만(John von Neumann)은 컴퓨터 프로그램의 언어 발전과 과정에 직접적으로 영향을 주는 두 개의 중요한 개념인 프로그램 내장 방식과 조건 제어 전이를 제안하였다.
어셈블리 언어는 어려운 기계어의 명령어를 move, jump, branch 등과 같은 쉬운 기호로 나타낸 것이다. 기계어와 어셈블리 언어는 기계 의존적이며 자연 언어와는 차이가 큰 구문을 사용했기에‘저급(low-level) 언어’라 불린다.
1957년 개발된 FORTRAN은 과학 계산 목적으로 IBM에서 설계되었다.
MIT의 매카시(John McCarthy)는 LISP 언어를 만들었는데, 인공지능 조사를 위해 고안되었고, LISP 등장 이전에는 볼 수 없었던 체계를 가지게 되었다.
1960년에 과학적 이용을 위해 만들어진 ALGOL 60은 최초로 등장한 블록 구조 언어다.
1960년 사무용 공통 프로그램 언어인 COBOL이 등장하였다.
PL/I는 1963년에 IBM에 의해 발명되고, 1964년에 IBM System/360 시스템과 동시에 출시된 크고 복잡한 블록 구조 언어이다.
BASIC은 간단한 문법 구조로 이루어져 있으며, 제어 구조는 GOTO 문과 GOSUB 문으로 구성되었다. 또한 반복문이 가능하며 수치, 문자열, 배열 데이터 타입을 제공했다.
Logo는 처음에 아이들에게 프로그래밍과 문제 해결 원리를 가르치기 위해 고안된 언어이다. 이는 단순한 체계와 그래픽 지향적 특징을 가진 LISP와 관련된 기능적인 언어이다.
BCPL은 초기의 블록 구조 절차 언어였고, 규모가 작은 애플리케이션에 이용되었다. 그것은 1970년대 발명된 B와 C 언어에 영향을 미쳤다.
Pascal은 컴퓨터 과학 교육을 위해 개발된 간단한 블록 구조 언어다.
1970년 후반에서 1990년 초기까지 C는 특히 연구소와 산업체에서 대중화되었다. 오늘날 여전히 많은 개발자들에게 애용되고 있는 언어이다.
Smalltalk는 순수한 객체지향 언어이다. 객체는 지역 데이터와 연산들의 모임을 캡슐화한다.
Prolog는 대표적인 논리 프로그래밍으로, 매우 짧은 양의 코드로도 효율성을 지닌다. Prolog는 규모는 작지만 효율적이며, 숫자, 문자열, 심볼, 리스트 등의 풍부하고 다양한 데이터를 제공한다.
Modula 2는 Pascal의 후속 언어로 애플리케이션 체계를 구축하기 위해 개발되었다.
Ada는 객체지향 프로그래밍의 특징을 지닌 블록 구조 언어로 중첩 프로시저, 중첩 패키지, 엄격한 데이터 검사, 멀티태스킹, 형식의 안정성, 예외처리, 그리고 추상 데이터 타입 등의 특징을 갖는다.
C++는 C로부터 파생된 복잡한 객체지향 언어이다. C++의 체계는 클래스, 상속 그리고 다른
객체들에 필요한 다양한 확장명과 여분의 키워드를 가지고 있는 점이 C와 많이 닮아있다.
Perl은 기본적으로 블록 구조이며 또한 객체지향 프로그래밍을 지원한다.
Python은 객체지향적 언어이며, 높은 효율, 쉬운 사용법, 확장성을 가지고 있다.
Visual Basic은 효율적인 개발 과정을 위해 Basic의 구조를 발전시킨 언어다.
Sun Microsystems의 직원에 의해 개발된 Java는 간단하고 편리한 객체지향적 언어이다.