GN⁺ 2024-01-15 | parent | ★ favorite | on: 배열 언어로 사고하기(github.com/razetime)
Hacker News 의견
  • 배열 언어의 유용성과 이해 가능성에 대해 여러 사람들이 의문을 제기하고 있음.

    • 배열 언어는 모든 문제에 적합하지 않음.
    • 많은 유형의 문제에 대해 놀라울 정도로 유능함.
    • 배열 언어 사용자들은 대체로 매우 똑똑함.
    • 배열 언어의 작동 방식을 배우는 것은 큰 도전임.
    • 배열 언어에서 "절차적" 코드를 작성하는 것은 매우 나쁜 일임.
    • 암시적 프로그래밍(tacit programming)의 이해는 정신을 확장시키는 멋진 경험임.
    • 동사 연쇄(verb trains)를 내면화할 때의 경험.
    • 배열 기반 언어가 모든 차원의 배열을 다루는 방식의 이해.
    • "under"의 작동 방식 이해.
    • 함수 지수(function exponents) 작동 방식 이해.
  • 배열 언어의 놀라운 측면이 많으며, 위의 목록은 그중 일부에 불과함.

    • Aaron Hsu가 병렬 APL 컴파일러를 개발하는 과정을 보며 배열 언어의 실제 잠재력을 확신하게 됨.
    • APL 코드의 "의미 밀도(semantic density)"에 대한 논의.
  • 배열 프로그래밍에 대해 들어본 적이 없고 소개를 원한다면 "The Array Cast" 추천.

  • 70년대에 APL/APL2를 발견하고 반했지만, 함수를 구성하는 능력에 더 매력을 느낌.

    • Haskell은 순수하고 타입화되어 있어 APL보다 더 재미있고 강력함.
    • APL의 "사고의 도구로서의 표기법"은 과도한 간결함을 정당화하는 논리로 보임.
  • 배열 언어 사용에서 가장 중요한 깨달음:

    • 동사는 알고리즘임.
    • 동사(또는 부사)의 연속은 사용해본 가장 직접적인 구성 방식임.
    • 프로그램은 문장과 표현의 집합이 아니라 알고리즘의 구성임.
    • 배열, 맵, 함수에 걸쳐 도메인과 범위를 일관되게 다루는 개념.
    • 코드를 읽을 때 눈이 "뛰어다닐" 필요가 없는 왼쪽에서 오른쪽으로의 평가.
    • 데이터에 코드를 보내는 것이 가능하며 선호됨.
    • K 언어의 추가 이점: 뷰(즉, 의존성)를 직접 구현할 수 있고, 인터프리터를 통한 핫 코드 로딩이 가능함.
  • 배열 언어에 대한 질문: "N보다 작은 숫자 중에서 조건 P가 참인 모든 숫자를 찾기"와 같은 작업을 어떻게 수행하는가?

    • 배열 언어에서는 일반적으로 1부터 N까지의 배열을 생성하고, 배열에 대해 조건을 테스트한 후, 조건이 참인 요소만 얻기 위해 마스크를 적용함.
    • N이 크고 조건이 자주 참이 아닐 경우, 불필요하게 많은 임시 배열을 생성하는 것은 메모리와 자원 낭비로 보임.
    • 배열 언어의 구현은 이러한 문제를 최적화하거나, 게으른 평가(lazy evaluation)와 같은 기법을 사용하여 해결할 수 있음.
  • J 언어에 대한 경험: 배열 언어의 패러다임이 편향되어 있으며, 모든 문제를 배열의 중첩으로 생각하는 것이 도움이 되는지 확신할 수 없음.

    • 문제를 단순화할 수 있는 데이터 구조를 자유롭게 생성하는 것이 알고리즘 부분을 크게 단순화할 수 있음.
    • APL/J/K를 사용하기 위해서는 이러한 편향 때문에 더 똑똑해야 함.
  • K 언어 문제를 풀면서 얻은 인상: K 언어는 의도적으로 난해함.

    • 퍼즐과 영리한 해결책에 적합한 언어지만, Python에서 numpy 배열로 작업하는 것이 배열 언어를 배우고 배열로 생각하는 방법을 가르쳐줌.
  • 배열 언어 J의 예시: dot =: +/ . *를 사용하여 P와 Q의 점곱(dot product)을 계산함.

  • K 언어의 문법이 더 짧지만, K 언어의 작동 방식에 대한 많은 내장된 맥락을 머릿속에 유지해야 함.