강의15 - kyagrd/introCS2018spring GitHub Wiki

https://kyagrd.github.io/introCS2018spring/InterpreterAndCompiler.html

https://kyagrd.github.io/introCS2018spring/InterpreterAndCompiler.ipynb

https://github.com/kyagrd/introCS2018spring/blob/master/InterpreterAndCompiler.ipynb

아직 컴파일러는 작성되어 있지 않다

컴파일러 관련 상식

참고로 최초의 상용 컴파일러는 IBM의 메인프레임과 함께 제공되던 포트란 컴파일러이다.

함수형 언어 관련 정리

지금까지 Jupyter 환경에서 Haskell이라는 함수형 언어를 통해 함수형 프로그래밍에 대해 알아보았다.

함수형 프로그래밍의 특징

함수형 프로그래밍의 특징을 몇가지로 정리하면 다음과 같다.

  1. 초중고 산수/수학 시간에 수식을 풀어나가듯 등식의 오른쪽을 왼쪽의 내용으로 치환하여 전개하는 방식의 프로그래밍 모델
  2. 함수도 그리 특별하지 않은 값일 뿐이다
    1. 함수를 다른 함수의 인자로 넘기고 또 결과값으로 돌려주는 고차함수를 자유롭게 구사
    2. 람다계산법에서와 같이 이름없는 함수를 이름을 붙일 필요 없이 그냥 값으로 만들어 쓸 수 있다
  3. 이산수학에서 배운 증명의 구조처럼 수학적 귀납법 또는 그것을 일반화한 구조적 귀납법과 같은 방식으로 재귀함수를 사용해 프로그래밍

하스켈 이외의 함수형 언어

  • LISP 계열 언어들
    • Common Lisp
    • Scheme
    • Racket
    • Clojure
  • ML 계열 언어들
    • SML
    • OCaml
    • F#
  • Haskell 게열 언어들
    • Eta (JVM 기반 하스켈 구현)
    • Elm (자바스크립트로 컴파일되는 언어)
    • PureScript (자바스크립트로 컴파일되는 언어)
  • 기타
    • Forth
    • Scala (이건 사실 멀티패러다임 언어이다)

최근에는 사실 기존에 함수형 언어로 분류되거나 함수형 프로그래밍을 주로 지원하지 않던 언어들 중에서도 기존에 현업에서 많이 쓰던 프로그래밍 패러다임, 예컨대 객체지향 프로그래밍을 주로 지원하는 언어에서 함수형 프로그래밍을 지원하는 기능을 추가하여 멀티패러다임 언어를 표방할 정도로 이제는 함수형 프로그래밍이 대부분의 프로그래머들이 익혀야 할 소양이 되었다. 예를 들면 JavaScript도 이제는 함수형 프로그래밍을 지원하고 C#도 그렇고 또 최근에 나온 Swift 같은 언어도 객체지향과 함수형 프로그래밍을 둘 다 지원하며 혼합해서 쓰려고 만든 멀티패러다임 언어이다.

업계에서 함수형 프로그래밍 언어를 활용하는 곳

여기 말고도 크고 작은 곳에서 활용할 것이고 제가 모르는 곳들도 있을거고 하지만 생각나고 알고 있는 곳들 몇개만 예로 들었습니다.

  • 금융권
    • Standard Charters (영국, 싱가포르)에서 Haskell을 주 개발 언어로 쓰는 팀들이 있다
    • Jane Street는 회사 전체 주 개발 언어가 OCaml이다
  • Facebook
  • 암호화폐
    • 카르다노 프로젝트의 Ada 암호화폐 시스템 (Haskell로 개발됨)
  • 국내