(PL) 1. 개론

장펄씨·2023년 9월 17일
0

프로그래밍 언어?


언어는 정보 교류를 위한 도구고, 컴퓨팅 영역에서는 위에서 보이듯 단계별로 다른 언어가 존재하고, 이 수업에서는 실현 레벨에서의 언어인 프로그래밍 설계 언어를 다룬다.

프로그래밍 언어는 字符集+规则集, 즉 문자와 규칙들로 이루어져 있다. 알고리즘과 자료를 묘사하는데 쓰이는 부호 시스템은 모두 프로그래밍 설계 언어라고 할 수 있다.

프로그래밍 설계 언어의 기본 특징

  • 독립적 이해 가능: 유저는 기계어의 이해가 없는 상태에서도, 특정한 언어를 공부한 후에 특정한 기계어에 상관 없이 언어 사용이 가능하다.
  • 기계 독립성: 언어는 어느 정도 큰 정도의 기계 독립성이 필요하다. 뭔뜻이냐 하면, 서로 다른 기계어를 가진 두대의 컴퓨터 위에서 완전히 다시 쓸 필요없이 소스 코드가 실행 가능해야 한다.
  • 명령 복잡성: 프로그램이 기계어로 번역될 때, 매 실행 단원별로 여러개의 기계 명령이 있어야 한다.
  • 표현 자연성: 기계어보단 표현하고자 하는 바가 더욱 명확하게 보여야 한다. A=A+B가 같은 작업을 수행하는 기계어보단 직관적인것 처럼 말이다.

프로그래밍 언어의 평가

언어를 평가하는 몇가지 척도를 알아보자.

  • 가독성: 유지보수에도 가장 큰 영향을 미치는 요소중에 하나고, 언어를 평가하는데도 가장 중요한 요소다.
  • 可写性: 주어진 문제에 대해 프로그램을 쓸때 쓰기 쉬운지의 여부를 확인하는 표준이다. 가독성이 보통 이 요소도 영향을 미친다.
  • 可靠性: 프로그램이 모든 조건 하에서도 임무 수행이 가능하다면, 프로그램이 可靠하다고 볼 수 있다.
  • 대가: 프로그램의 실행, 번역, 유지보수 등에 생기는 대가들을 포함한다.

좋은 프로그래밍 언어의 특징

  • 깔끔함, 일치성: 프로그래밍 언어는 알고리즘을 표현하는 도구이기 떄문에, 당연히 간결할수록 좋고, 개념의 수가 적고, 조합 규칙이 최대한 간단하고 규범적일수록 좋다.

  • 정교성: 언어의 내부에서 모든 조합들은 의미가 있어야 하며, 쓰기 쉽고 너무 많은 예외들이나 특수 상황을 기억할 필요가 없어야 한다. 다만 너무 정교성이 강하면 逻辑上不协调하거나 극단적으로 효율 낮은 조합들이 컴파일러에게 씹힐수도 있다. 이때문에 정교성은 논란이 많은 속성이다.

  • 운용의 자연성: 제대로된 문법으로 작성만 했다면, 프로그램의 구조는 알고리즘의 로직 구조를 제대로 반영해야 한다.

  • 추상에 대한 지원: 문제 해결을 위해 필요한 추상 자료구조/명령들과 언어의 기본 데이터 구조, 명령들에는 어느정도 차이가 있고, 프로그래머들은 문제 해결을 위해 문제 해결을 위한 적절한 추상을 설계한 후 이 기본적인 특성들로 그 추상을 구현하는것이 중요하다.

  • 검증 용이성: 프로그램이 요구하는 기능을 올바르게 수행하였음을 검증할 수 있어야한다.

  • 프로그래밍 환경: 적절한 환경이 있다면 약점 보완이 가능하고, 신뢰할 수 있고 문서화된 언어 구현이 환경의 요소 중 하나이다.

  • 이식 용이성: 개발한 컴퓨터와 다른 컴퓨터로 투명하게 프로그램이 이식될수 있는지의 여부다.

  • 사용 대가: 대가의 척도에는 여러가지가 있다. 초기에는 실행 대가가 주요 척도였고, 현재는 속도가 주요 고려 사항은 아니다. 쉬운 진단, 제어, 유지 보수등도 고려대어야 하며 이가 편리하다면 10~20%정도의 실행시간 증가도 용인 가능하다. 번역 대가, 생성, 테스트, 사용, 유지 보수에 의한 대가가 이에 포함된다.

프로그래밍 언어의 패러다임

명령식 언어

Procedural, 명령어 기반, 구문 지향적인 언어라고도 한다. 기본 개념은 기계의 상태이며, 언어의 목표는 기계의 상태를 이해하는데 있다. 프로그램은 기본적으로 일련의 어구로 구성되며, 각 어구가 실행되면 인터프리터가 기기 일부 저장위치의 값을 변경하고, 새로운 상태로 들어간다.

위 그림처럼 메모리가 상자들로 구성되어 있다면, 문장의 실행은 각 위치에 액세스 하는것으로 표현될 수 있고, 이 값들이 결합되어 새 위치에 결과가 저장된다. 연속적인 기계 상태를 설정하여 결과를 얻는 방식으로, 대부분 전통적인 언어들이 이 모델을 채택하여 순차적으로 명령을 수행한다.

응용형 (함수형) 언어

이번엔 프로그램 실행에 따른 기계 상태의 변화보단 프로그램이 표현하는 기능에 집중하는 방식이다. 이 방식에선 사용 가능한 데이터 대신 원하는 결과만을 관찰한다. 이때 언어의 목표는 답이 나오는 함수를 이해하는 것이 된다. 기존 함수를 기반으로 새로운 복잡한 함수를 개발하여 최종 함수가 원하는 결과를 만들어낼 수 있게 된다.

규칙 기반 언어 (논리형 언어)

조건을 확인하고 충족되면 해당 동작을 수행하는 언어다. 조건의 활성화가 실행 순서를 변경한다.

객체 지향 언어

현재 가장 주류다. 복잡한 데이터 객체를 만들고, 동작을 만들어 캡슐화할 수 있다. 복합 객체는 단순 객체의 확장이며 단순 객체의 특성을 상속하고, 명령형과 함수형 언어가 짬뽕된 형식이다.

profile
Survived@PKU EECS;

0개의 댓글

관련 채용 정보