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

유진·2023년 6월 2일
0

PL

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

5주차 - 5장 Names, Binding, and Scopes

0404

변수의 6가지 속성

  1. name
    1. case sensitive =대소문자 구분
      1. 네이밍룰 지키는 이유 → 유지보수
    2. reserved words 예약어 / keywords 키워드
      예약어가 더 큰 개념임
    • 특수 기호
      • PHP : $+변수
      • Perl : $+스칼라값 , @+array, %+hash structure
      • ruby : @+인스턴스 변수, @@+ 클래스 변수
  • 인스턴스 : 메모리에 올라온것

  • stack

  • heap

  • data

알리아싱

  1. address
    1. ㅁㄴㄹㅇ
  2. value
    1. ㅁㄴㅇㄹ

4. type

타입 = 값의 범위+할 수 있는 연산

l-value = r-value

주소 값

타입이 결정된다 = 바인딩된다

이름, 주소, 타입, lifetime이 묶인다!

type에 대한 바인딩 → static / dynamic

바인딩 타임 → 프로그램 실행 전(컴파일), 실행 후(런타임)

  1. complie time → 대부분 타입에 결정. 타입에 대한 바인딩, static하게 바인딩될때. C, JAVA

  2. load time → 대부분 주소가 결정. 프로그램 실행할때=인스턴스가 생길 때=메모리에 올라올때.

  3. run time → 타입&주소이 동적으로 결정. heap이나 static에 들어가는 변수. dynamic

바인딩

  1. static → 선언해야
  2. dynamic → 동적으로 바인딩. py. js →optimization하기 어렵다.
    1. 유연성 좋음
    2. 비용 . → 시간, 돈(메모리). 많이 듦
    3. 타입에러 탐지 어려

C#은 세모

타입 선언

  1. 명시적 explicit : 타입을 내가 명시함. C#
  2. 묵시적 implicit : var 유추 .(pearl 선언은 해줘야함)

5. lifetime

  • catrgories of variables by lifetimes

static

생성 : 프로그램 시작 → 종료 : 사라짐

주소 안바뀜. 값도 안바뀜. 접근이 빠르다.

단점. flexible 떨어짐. 리셋을 못함. recursion x

  • global → c,cpp 함수 밖에 선언. (py는 writing을 못함?)
  • static → c, cpp, java static 키워드. py는 키워드는 없지만 global 값을 안바꿔주면됨
  • 상수 named const → c 매크로, cpp const키워드 , java final 키워드, py 대문자 권장

stack-dynamic

함수 내 선언, 파라미터로 넘겨주는 애들

리커전 허용

allocation deallocation (장단점)

시간이 더 걸림 ↔ 공간을 아낄 수있음(큰 배열에서 의미있음)

히스토리 볼 수 있음.

상대주소

explicit heap-dynamic

이게 보통

동적으로. 원할때 allocate & deallocate

진짜. 특정 시점에서만 메모리를 과돠하게 쓰고자 할때

단점 : 상대적으로 가기 때문에 속도가 느림. 비효율적. allocate & deallocate 할때 오버헤드 걸림. 속도 측면에서는 최

implicit heap-dynamic

동적언어에서

리스트에 값을 넣는 순간 메모리에 할당이 된다! (new를 쓰진 않았음)

속도 느림

에러 검출 확률이 낮음(다이나밍이라서)

6. scope (영역)

어디서부터 어디까지 그 변수를 쓸 수 있느냐 [범위]

scope → 우리가 아는건 거의 다 static

  • local

  • non-local

  • global (local variable 끝까지 가면)

  • 블록구조→ 중첩도 가능

    블록 밖이랑 안에 같은 이름의 변수가 있으면 밖에 것이 하이딩된다

    stack으로 사용하는 변수들을 관리

    다른 언어들은 변수의 선언 시점 부터 쓸 수 있는데, C#은 해당 변수가 위치한 블록의 제일 처음부터 사용할 수있다

  • let 구조

    • funtional 프로그래밍언어에
    • 변수 선언과 사용을 구분
  • global scope

  • 파이썬의 전역변수

    • 함수내에서 전역변수 사용은 (당연히) 가능하지만 수정은 안됨! (왜냐하면, 수정이라고 받아드리지 않고 지역변수 생성이라고 생각함. dynamic 이라서)
    • ⇒ 그래서 global 키워드를 만듦
  • static scope을 짤떄 문제

    • 특정 변수의 접근이 몰릴 수 있음 →가급적 분상해서 코드를 짜는게 좋음
    • 똑같은 변수명을가지고 위에서도 쓰고 아래서도 쓰고 그러면 유지보수를 할떄, 코드 정확도 떨어질 수 있음
  • dynamic scope

    • 내가 갖고 있는 변수+나를 호출한
    • 편하다
    • 유지보수하기 힘들다 =리더빌러티 최악!

0406

스콥과 라이프타임은 로컬변수로 하면 같다

named constant

변수인데 값이 안바뀜

코드 유지보수 쉬움, 가독성 굿

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

0개의 댓글