[PL] OCaml Overview

👑 OCaml 이란?

OCaml (Objective Caml)ML 언어 계열에 속하는 Caml 프로그래밍 언어에

객체 지향 개념을 추가한 언어이다.

OCaml의 특징은 다음과 같다.

- 함수형 언어이다.
- 모든 변수 및 표현식의 타입이 컴파일 시에 결정된다.
- 타입 시스템이 변수 및 표현식의 타입을 추론한다.
- `Module system` : 프로그램을 여러 모듈로 나누어 구현한다.
- 명시적 main 함수가 없어 소스코드를 위에서부터 순차적으로 실행한다.
- 소스코드 확장자 : `.ml`
- ocaml 컴파일러 : `ocamlc`
- ocaml build system : `dune`


👑 OCaml Value

대부분의 함수형 언어처럼 OCaml 역시 expression-oriented 프로그래밍 언어이다.

OCaml에서는 거의 모든 것이 expression이며, expression의 수행으로 값을 생성한다.


💡 Primitive types

OCaml 이 제공하는 자료형은 다음과 같다.

  • unit

    ”()” 로 나타내는 "아무것도 없음"을 나타내는 값으로, 다른 언어에서의 'void' 타입과 유사한 역할을 한다. 예를 들어 문자열을 출력하는 함수의 경우에 값을 반환할 필요 없이 화면에 문자열을 출력하기만 하면 된다. 이때 함수가 unit을 반환하면 함수가 실행되며 반환 값은 없는 것이다.


  • int

    모든 정수의 집합이며 다음의 연산자들을 가지고 있다.

      • 단항 연산자 : '-' (부호 반전)
      • 이항 연산자 : +, -, *, /, mod
      • 단항 비트연산자 : lnot (비트 반전)
      • 이항 비트연산자 : lsl, lsr, asl, asr, land, lor, lxor
    


  • float

    OCaml에서는 암시적 형변환이 허용되지 않는다. 그러므로 intfloat 간의 연산도 허용되지 않는다. 연산자 또한 int와 다른데, 연산자들에 접미사 . 가 붙어야 한다.

    image


  • char

    모든 문자의 집합을 가리키며, single quotes 사용

    char

      Escape sequence
    
      • \\ : backslash    • \' : single quote     • \" : double quote
      • \t : tab          • \r : carriage return  • \n : line feed
      • \b : backspace    • \space : space
      • \ddd : char with ASCII code ddd in decimal
      • \xhh : char with ASCII code hh in hexadecimal
      • \o000 : char with ASCII code 000 in octal
    


  • string

    모든 문자열의 집합이며, double quotes 사용
    ^ 연산자를 통해 string 끼리의 접합이 가능하며, .[n] 으로 인덱스에 접근 가능하다.

    String 라이브러리 모듈을 사용하면 다양한 문자열 관련 함수를 사용할 수 있다.
    - String.length str : 문자열 str의 길이 반환
    - String.sub str start len : 문자열 str의 start 인덱스부터 len만큼의 부분 문자열 반환

    image image


  • bool

    true와 false로 이루어진 집합.
    and&&으로, or||으로 표현
    short-circuited 방식으로 동작 : 논리 연산 중 불필요한 조건 확인은 건너뜀

      foo() || bar()
    

    위 코드에서 foo()가 참이라면 bar()의 참, 거짓에 관계없이 식은 항상 참이다.
    쇼트 서킷을 지원하는 경우 bar()를 확인하지 않고 바로 참을 반환한다. 만약 bar()에 다른 기능이 있을 경우를 주의해야 한다.

      Bool operator
    
      • x < y     • x > y     • x <= y    • x >= y
      • x = y (structural equality : 두 값이 같은지를 확인)
      • x == y (physical equality : 같은 메모리 위치에 저장되어 있는지 확인)
          (OCaml에서 거의 안 씀)
      • x != y
    


👑 Statement vs Expression

프로그래밍 언어에서 statement (구문)expression (표현식)은 서로 다른 용도를 가진다.

  • Statement : 실행 시 프로그램의 상태전이를 수행하는 언어의 구성요소

    상태 전이란, 메모리 상태를 변경하는 것
    값 반환 X

      int x = 0;
      int x = 3; // 메모리 상태를 바꿈
    
  • Expression : 실행 시 값으로 계산되는 언어의 구성요소

    표현식의 실행 결과는 항상 "값"을 도출
    상태전이를 수행하지 X

      cout << x + 5; // 메모리 상태를 바꾸지 않는다.
    


순수 함수형 언어 (pure functional language)는 오직 expression으로만 구성된다.
상태전이를 수행하는 statement가 존재하지 않기 때문에 expression 실행 전과 실행 후의
메모리 상태가 동일하다 -> side-effect가 X (immutability)
별개로 모듈선언, value, type, exception에 이름을 붙일 수 있는 definition이 존재

OCaml 은 순수 함수형 언어는 아니기에 메모리 상태를 변경하는 expression이 존재하기는 한다.

Categories:

Updated:

Leave a comment