01. Intro

Jimin Lim·2021년 10월 20일
0

Programming Language

목록 보기
1/9
post-thumbnail

1.0 Introduction

Programming in Old Days

  • 초창기 컴퓨터는 monstrous devices(크고, 전력 많이 차지)
  • Programmers were cheap
  • 기계어로 프로그래밍 함 0, 1로 이루어진 코드

The next step was writing in assembly language

  • 비트로 표현하는 것보다 가독성이 좋아짐
  • mnemonic: add와 같이 기억하기 쉽도록 단어로 표현
    • mnemoni ↔ machine language 1:1 매핑을 통해서 어셈블러가 해석함
  • 어셈블러 (어셈블리 언어 → 기계어)에 따라 어셈블리 언어 달라짐
  • CPU 달라짐 → 어셈블러 달라짐 (System-specific)

→ 기계어 사용보단 나아졌지만 이식성이 좋지 않음

High Level Language

  • Fortan: machine-neutral programming languages에 대해 효율 높이기 위해 나옴
  • Lisp, Algol 등장
  • 컴파일러: 고급언어를 어셈블리어 or 기계어로 변환시켜줌
  • 효율성(인건비 > 하드웨어)을 위해서 고급언어 사용하게 됨

1.1 The Art of Language Design

Why are there so many programming languages?

  • Evolution(진화): 시간이 지날수록 쉽게, 잘 할수 있는 방법을 찾길 원함
    • 어셈블리 → goto-based control flow(Fortan, Cobol, Basic)
    • structured(구조화 프로그래밍) → goto 보다는 반복문, case 사용
    • Object Oriented Programming (Smalltalk, C++, Eiffel, Java, C#)
    • 스크립트 언어: 빠른 개발에 사용하기 쉬운, 컴파일 언어 대신
  • Special Purpose: 특별한 목적
    • Lisp dialects: Symbolic data & complex data
    • Icon and Awk: character 조작
    • C-low-level: low 레벨 → 포인터, 하드웨어 건드리기 쉬움
    • Prolog: 데이터 간의 논리적인 관계
  • Personal Preference: 개인 기호
    • Recursion or Iteration
    • 포인터 유무

What makes a language successful?

  • Expressive Power: 표현력
    • 간단, 명확, 유지보수 기능 제공
  • Ease of use for the novice: 초보자를 위한 언어
    • Basic, Pascal
  • Ease of Implementation: 구현의 용이성
    • Basic, Forth, Squeak, pascal
  • Standardization: 표준화
    • 플랫폼에 대해서 호환성
    • 표준 pascal, ANSI C
  • Open Source
    • 쉽게 접근 가능
    • 대부분 프로그래밍 언어는 최소 한개의 컴파일러 or 인터프리터 오픈 소스 가짐
    • C ←UNIX
  • Excellent Compilers
    • Fortran(계산) and Common Lisp → 속도 올라감
  • Economics, Patronage and Inertia: 경제성, 지원, 관성
    • 기술적으로 좋은 것보다 성공에 영향을 미치는 요소
    • powerful sponsor
    • 어쩔 수 없이 사용해야 함 (cobol)
  • No one factor determines whether a language is "good"
  • 프로그래머 ↔ 언어 구현 관점 모두 생각해야함
    • features vs cost

1.2 The Programming Language Spectrum

The top-level division of programming languages

Declarative

  • 무엇을 하는지
  • 실행 순서가 구체적으로 명시 되어 있지 않음

  • Functional Language
    • 재귀 호출에 기초를 둠
    • 입력이 있으면 출력이 있어야 함 → 또 다른 함수에 전달
    • List, ML, Haskell
    • 람다
    • 반복, 변수 개념 없음
  • Dataflow Language
    • 데이터 흐름
  • Logic or constraint-based language
    • 규칙을 만들어 둠
    • Prolog

Imperative: 절차적

  • 어떻게 처리해야 하는지
  • 액션의 흐름

  • von Neuman
    • input → func → output
    • 상태 변경으로 다른 값을 출력할 수 있음 (side effect)
  • Object-oriented language
    • C++, java
    • 언어들이 비슷해지고 있음
  • Scripting
    • 폰 노이만 언어의 부분 집합
    • 컴포넌트를 묶어서 좀 더 간단하게 만들어줌
    • 특정 목적을 가지고 개발됨
    • python, perl, ruby

GCD algorithms

  • Imperative: 절차 지향

  • Functional 언어 → if 문 자체도 지원 안할수도 (재귀 사용)

  • Logic Language (prolog)

  • 언어간의 구분은 명확하지 않음
    • 폰 노이만, 객체 지향, 스크립트 언어
profile
💻 ☕️ 🏝 🍑 🍹 🏊‍♀️

0개의 댓글