프로그래밍 언어론 1장 내용정리

유진·2023년 6월 2일
0

PL

목록 보기
1/6
post-custom-banner

2주차 - 1장

프로그래밍 언어 활용 분야

PL 평가 기준

PL 발전 과정 ← 영향을 미치는 요소들

Language Evaluation Criteria(언어 평가요소)

  • Readability (가독성): 코드가 쉽게 이해되고 읽히는 정도

    • 전체적으로 간단하게
    • 직교성 orthogonality
      • 가능한 한 작은 크기의 기본적인 표현 및 연산 기호의 조합을 가지고 하나의 식을 표현을 하는 것이다.이때 이 식을 표현하는 방법의 개수도 상대적으로 작아야 한다.
      • = 상대적으로 작은 원시 구조의 집합은 상대적으로 적은 수의 방법으로 결합될 수 있다
    • 사전에 정의된 데이터 유형
    • 유연한 구성
  • Writability (쓰기 용이성): 코드 작성이 얼마나 쉽고 간단한지, 유지보수 및 수정 용이성을 포함

    • 단순성 및 직교성. 소수
    • 추상화 지원
    • 표현
  • Reliability (신뢰성): 코드가 얼마나 안정적이고 예측 가능한지, 버그 및 오류 가능성이 낮은지

    • 타입 채킹을 잘 해주냐
    • 예외처리 많이 해주냐
    • Aliasing = 동일한 메모리에 두개의 참조자
    • 가독성 & 쓰기 용이성 좋을 수록 좋음
      • 알고리즘은 표현하는 자연스러 방법을 지원
  • Cost (비용): 개발 및 유지보수 비용, 퍼포먼스 및 성능에 따른 비용 등을 고려

    • 낮은 신뢰성을 높은 비용으로 이어짐
    • 유지보수 가능성
  • 그외

    • Portablility 이식성
      • 어디서나 돌아가는 자바
    • Generality 일반
      • 광범위한 애플리케이션에 대한 적용가능성
    • well-definedness 잘 정의된
      • 언어의 공식적인 정의의 완전성과 정확성

폰노이만 구조

컴퓨터의 속도는 메모리와 프로세서 간 연결 속도에 영향을 받습니다. 프로그램 명령은 종종 연결 속도보다 훨씬 빠르게 실행될 수 있으므로, 연결 속도는 병목 현상을 초래합니다. 이를 von Neumann 병목 현상이라고 합니다. 이는 컴퓨터 속도의 주요한 제한 요인입니다.

Von Neumann 아키텍처는 임퍼러티브 언어(명령형 언어)의 기초가 되며, 데이터와 프로그램은 메모리에 저장되며 메모리는 CPU와 별도로 구성됩니다. 명령어와 데이터는 메모리에서 CPU로 파이프로 전달되며, 이는 임퍼러티브 언어의 변수와 할당문을 모델링합니다. 또한 반복문은 효율적으로 실행됩니다.

  • 명령형 언어 imperative

    • 컴퓨터가 어떻게 동작하는지에 초점을 맞춤
  • 함수형 functional

    • 수학 함수를 기반
    • 변수 및 대입문이 없음. 반복문 없음.
    • recursion을 통한 반복
  • 논리형 logic

  • 컴파일 compilation →C, CPP
    – Programs are translated into machine language; includes JITsystems
    – Use: Large commercial applications

  • 인터프리터 • Pure Interpretation → py
    – Programs are interpreted by another program known as an interpreter
    – Use: Small programs or when efficiency is not an issue

  • 하이브리드 Hybrid Implementation Systems → java
    – A compromise between compilers and pure interpreters
    – Use: Small and medium systems when efficiency is not the first concern
    - vm(가상머신)에서 돌아감

이거 1장인가바..

  • 0314

하드웨어를 OS가 감싸고 있음

프로그램이 하드웨어에 들어갈 수 있는 소스코드를 줌

소스코드가 하드웨어 상에서 돌아가기 위해서는 일련의 과정이 필요

  1. 렉시컬 분석(구문 분석)
    1. 글자의 배치가 말이 되는지. 어휘 구조.
  2. 신텍스 분석 (렉시컬 분석도 포함하고 있긴함)
    1. 문법에 맞는지 분석 → 파스트리 만들기(파싱한다)
    2. 이 코드가 어떤 의미를 가지는지

→ 코드 만들어주면 됨

그 위에서 컴파일러나 인터프리터가 동작함

OS가 하드웨어를 감쌈

하드웨어

  1. 컴파일레이션 구현 방식 → C

    1. 느림
    2. 수행될 수 있는 바이너리 코드를 만들어놓기때문에 빠르게 수행할 수 있음
    3. 실행되는 이미지를 생성
    4. 실행시키면 하드웨어의 메모리에 이미지가 통째로 올라옴

    프로그래밍 언어를 해석해서 하드웨어에서 돌아가게 하는 것이 목표

    formal language(형식 언어정형 언어임) ↔ 자연어(인포머. 우리가 쓰는 언어)

    1. 랙시컬 분석. 어휘 분석 & symbol table 작성

    2. 시멘틱스 분석. 문법 분석

      1. 파이썬 세미콜론 / C 에러
      2. 유도 트리가 만들어지면 신텍스가 정상임
    3. 코드 제너레이션

      → 바이트 코드가 나옴

      컴파일러가 해석만 해주면 싸고 별거 안해줌

      최적화 알고리즘 더 빠르고 뭘 많이 해줌

      옵티마이제이션 하면 중간코드 생성 → 실제 코드

      컴파일 = 컴파일 +(링킹-라이브러리 포함해서 실행 가능한걸 보여)

  2. 하이브리드 구현방식 →java

    1. 초기에는 느렸지만 지금은 극복( 저스트 인타임)
    2. 코드가 처음 실행될때는 느리지만 계속해서 반복호출하는 모듈의 집합으로 짜기 때문에 모듈이 두번이상 호출될 때에는 별 차이 없다
  3. 인터프리테이션 구현방식 → py

    1. 실행하는 도에 해석
    2. 쉽게 트렌스레이션이 이루어지고
    3. 실행시간이 느림 → 근데 지금은 기술이 많이 발전해서 별 느리진 않음
    4. 메모리 많이 잡아먹음
    5. 시스템 효율성이 떨어짐
    6. 플랫폼에 독립적이다.

프리 프로세싱. 메크로 →C

Formal Language ↔ natural Language 자연어
자연어는 문맥상 어떠한 상황에서 하느냐에 따라 다양한 뜻을 가질 수 있음
포멀 랭귀지는 어떤 경우에도 동일한 뜻을 가짐→ 해석이 쉬움

컨텍스트가 없음
CFG (Context Free Grammar)
랙심→ 토큰

Semantics → 의미 분석

언제 실행하냐?
동적 : 인터프리션
정적 : 컴파일레이션

프로그래밍 환경 : Tool들의 모음

profile
안드로이드 학생 개발자 에디 / 유진입니다
post-custom-banner

0개의 댓글