0905강의02 - kyagrd/PL2018Fall GitHub Wiki

함수형 언어는 왜 배울까요?

단지 인터프리터/컴파일러 작성하기 좋은 언어라서 배우는 것만은 아니다.

  • 어... 어디선가 돈냄새가 Why you should learn functional language :)

  • 최근 함수형 언어가 아닌 다른 언어들에도 영향을 미치고 있다.

    • parametric polymorphism 도입 (C++, C#, Java, ...)
    • lambda expression 관련 기능을 언어에 추가
      • C++ 11 이후로 추가
      • Java 8 이후로 추가
      • C# 3.0 이후로 추가
      • JavaScript ES6 이후로 추가
      • ... 즉 함수형 언어보다 더 많이 쓰이는 언어에서도 함수형 프로그래밍의 장점을 도입하기 위해 필요한 기능을 추가하는 추세
  • 함수형 언어 커뮤니티에서 발전시키거나 프로그래밍에 도입한 활용사례들을 다른 언어에도 이식시켜 큰 성공을 거둔 사례들

    참고로 위 둘의 창시자인 Erik Meijer의 다음과 같은 강연 유투브 영상을 보고 최근 프로그래밍 기술에 대한 동향을 깊이있게 파악하며 따라가려면 영어듣기 능력도 물론 어느 정도 필요하지만 함수형 프로그래밍 언어 및 함수형 프로그래밍에 대한 배경지식이 없이는 내용을 제대로 파악하기 어려울 것이다

  • 과거에는 프로그래밍 언어에 대한 학문적으로 깊이있는 이해를 하고 싶다거나 앞으로 프로그래밍의 발전 방향/추세를 가늠해 보기 위해 함수형 언어를 배우고자 접근하는 경향이 강했다면 이제는 현업에서도 필수적 스킬로서 갖춰야 하는 프로그래밍 일반 상식/소양에 가까워지고 있다

  • 그러니까 이제 컴싸이/컴공 등 컴퓨팅 관련 전공자라면 필수요소라는 말 (쌓여있는 레거시 코드 유지보수만 하는 업무만 평생 하려는 게 아닌 이상은 ...)

정리하자면 소위 함수형 언어로 분류되는 언어를 졸업하고 나서 현업에서 직접 사용하지 않더라도 함수형 언어 커뮤니티를 중심으로 발전해 온 함수형 프로그래밍 패러다임에 대해 알아야 되는 시대가 드디어 오고야 말았다.

어제 하던 하스켈 관련 수업을 하기 전에 지난 시간 끝나고 나갈때 질문에 대한 보충 답변 수업시간에 하기

질문 내용은

리스트 데이타 타입에서 Cons 같은 거 앞에다 쓰는데, 그거 메모리가 추가로 더 드나요?

이 질문을 한 학생은 C의 구조체로 리스트나 트리를 정의할 때 매모리 레이아웃이 어떻게 이루지는지 감을 잘 잡고 있는 것 같습니다. 그리고 하스켈과 같은 언어의 경우에는 메모리를 어떻게 다룰까 하는 질문이었던 것 같습니다.

이 수업은 특정 테마를 중심으로 일관되고 통합적인 방법으로 접근하고 있어서 다른 언어와의 사례 비교 같은 것에는 좀 덜 집중하게 될 것 같지만 사실 이런 질문도 프로그래밍 언어 과목에서 다루면 유익한 주제입니다. 지금 계획하고 있는 것이 시간이 빠듯할 거 같아 이런 주제에 대해서는 준비해서 다룰 것 같지 못하기 때문에 이런 의문이 있을 경우 질문해 주시면 수업시간 또는 온라인을 통해 설명하고 같이 생각해 볼 수 있으면 좋습니다. 주교재가 백과사전적으로 이런 종류의 주제를 여러모로 다루고 있기 때문에 그런 보완적인 측면에서 주교재로 선정한 것입니다. 대신 주교재의 단점은 너무 여러가지를 다루어서 각각에 대한 설명은 간단한 예 하나만 들거나 하고 설명은 배경지식이 좀 있는 사람이 아니고서는 이해하기가 솔직히 주교재만 읽어봐선 어려운 경우가 많을 거 같고 교과서에서 이런 걸 이런 용어로 부르는구나 하고 다른 곳에서 그 용어에 대한 더 자세한 내용을 검색해 보기 위한 참고도서로 활용하면 좋을 것 같습니다.

어제 하던 거 이어서

Polymorphism과 MoreOnNatAndList 노트북으로 진행

주교재 읽기 자율과제

그래도 주교재 1장과 2장(CD에 있는 2.4 포함) 읽기가 자율과제입니다. 특히 2장에 정규식과 유한 오토마타 관련 내용은 앞으로 하스켈로 실습을 직접 해볼 내용이 포함됩니다.