4P by neo 2달전 | favorite | 댓글 1개

Piet 프로그래밍 언어 소개

  • Piet는 추상화된 그림처럼 보이는 프로그램을 작성하는 프로그래밍 언어
  • 기하학적 추상 예술 분야를 개척한 Piet Mondrian의 이름을 따서 명명됨

Piet 언어 설계 원칙

  • 프로그램 코드는 추상 예술의 형태를 띰

Piet에서 사용하는 색상

  • Piet는 20가지 고유한 색상을 사용
    • 색조 순환: 빨강 -> 노랑 -> 초록 -> 청록 -> 파랑 -> 자홍 -> 빨강
    • 밝기 순환: 밝음 -> 보통 -> 어두움 -> 밝음
  • 흰색과 검은색은 두 순환에 포함되지 않음
  • 추가 색상(주황, 갈색 등)은 사용할 수 있지만 효과는 구현에 따라 다름
    • 가장 단순한 경우 흰색과 동일하게 처리

Codel (코델)

  • Piet 코드의 기본 단위는 색상 블록
    • 하나 이상의 인접한 동일 색상 코델로 구성
    • 대각선으로만 인접한 색상 블록은 연속적이지 않음
    • 모양에 제한이 없고 내부에 다른 색상의 "구멍"이 있을 수 있음

스택

  • Piet는 모든 데이터 값 저장에 스택을 사용
  • 데이터 값은 정수로만 존재하지만 유니코드 문자 값으로 읽거나 출력될 수 있음
  • 스택은 개념적으로 무한히 깊지만, 구현시 유한한 최대 크기 제공 가능

프로그램 실행

  • Piet 인터프리터는 프로그램의 왼쪽 상단 코델을 포함하는 색상 블록에서 실행 시작
  • 방향 포인터(DP)와 코델 선택기(CC)를 유지하며 다음 규칙에 따라 색상 블록 이동:
    • 현재 색상 블록의 가장자리 중 DP 방향으로 가장 먼 가장자리 찾기
    • 해당 가장자리에서 CC 방향으로 가장 먼 코델 찾기
    • 해당 코델에서 DP 방향의 인접 색상 블록으로 이동
  • 프로그램이 종료될 때까지 위 과정 반복

문법 요소

숫자

  • 검은색, 흰색이 아닌 각 색상 블록은 해당 블록의 코델 수와 같은 정수 나타냄
  • 양수만 표현 가능하지만 연산자로 음수 생성 가능
  • 인터프리터가 숫자를 만나도 자동으로 스택에 푸시하지 않음

검은색 블록과 가장자리

  • 검은색 블록과 프로그램 가장자리는 프로그램 흐름 제한
  • 검은색 블록이나 가장자리로 이동하려고 하면 CC 토글되고 DP 시계방향 회전
  • 8번 시도 후에도 이동할 수 없으면 프로그램 종료

흰색 블록

  • 흰색 블록은 인터프리터가 아무런 제한 없이 통과하는 "자유" 영역
  • 흰색 코델을 DP 방향으로 "미끄러지듯" 이동하여 비흰색 블록 도달
  • 흰색 블록을 가로질러 새로운 색상으로 이동해도 명령 실행 안함
  • 흰색 블록 내에서 경로를 완전히 되짚으면 프로그램 종료

명령

  • 인터프리터가 한 색상 블록에서 다른 색상 블록으로 이동할 때 색상 변화에 의해 정의
  • 색조 순환과 밝기 순환의 단계 수에 따라 실행할 명령 결정
  • 흰색 블록을 가로질러 이동하면 명령 실행 안함
  • 주요 명령:
    • push, pop, add, subtract, multiply, divide, mod, not, greater
    • pointer, switch, duplicate, roll
    • in(number), in(char), out(number), out(char)

GN⁺의 의견

  • Piet는 시각적으로 매력적인 프로그래밍 언어로, 추상 예술과 프로그래밍의 독특한 결합을 보여줌
  • 그러나 실용성 측면에서는 한계가 있어 보임. 복잡한 프로그램 작성이 쉽지 않을 것으로 예상됨
  • 주로 프로그래밍 언어 설계에 대한 실험이나 퍼즐, 예술 작품 제작 등에 활용될 수 있을 것 같음
  • 비주얼 프로그래밍 언어로는 구글의 Blockly나 MIT의 Scratch가 좀 더 실용적인 대안이 될 수 있음
  • 아무래도 Piet가 지나치게 deep한 언어라, 실제 초보자들이 프로그래밍 학습용으로 사용하긴 어려울 것 같다는 생각이 듦
Hacker News 의견
  • Piet 언어의 예제 페이지에 있는 마지막 프로그램이 정말 놀라움. 한 사람(Piet라 불리는)이 Piet 언어를 연상시키는 작품을 보고 실행해 보았는데, 실제로 작동했음. 그래픽 아티스트가 우연히 실행 가능한 프로그램을 그린 역사상 처음 있는 일임.

  • Piet는 에소테릭 프로그래밍 언어 중에서 획기적인 실험이지만, 개발자가 의도적으로 하지 않는 한 몬드리안 그림처럼 보이게 하려는 목표 달성에는 미흡함. 언어 구조 자체가 작성된 것이 몬드리안 그림처럼 보이도록 설계되었으면 함.

  • 이는 "알고리즘이 어떻게 생겼는가?"라는 질문을 제기함. 헤르만 헤세의 소설 '유리알 유희'(Magister Ludi)와 같은 것을 현실에서 만들 수 있을까? 시각적 지향적인 사람으로서 그렇게 생각하고 싶고, 실제로 그런 도구를 사용해 보려 했으나, 모호한 답변으로 인해 시각적 표현력과 모듈성 사이의 균형을 맞추기 어려움.

  • 이런 류의 것들은 범죄 스릴러에서 주인공/수사관들을 혼란스럽게 하다가 누군가 그것이 코드라는 것을 알아채는 식으로 등장할 것 같음. 우리는 QR 코드가 유용하다고 생각했는데...

  • Piet를 발견하는 것은 경외감, 혼란, 경이로움의 특별한 순간임. 이는 CS 팟캐스트에서 친구 Oz와의 대화에 포착되어 있음.

  • 한 사람이 Piet로 퀸(Quine)을 만들었음. 이미지는 깨졌지만 CodeGolf에 복사본이 있음.

  • 대학에서 에소테릭 프로그래밍 언어에 대한 작은 과정이 있었고, 각자 언어를 선택해 가지고 놀았음. Piet를 선택했는데 재미있었지만 솔직히 작은 예제 애플리케이션은 미적으로 만족스럽지 않았음. Piet로 예술을 만들려면 전문가가 되어야 할 듯.

  • 대학 시절 이것을 접하고 밤늦게까지 간단한 프로그램을 작성했는데, 정말 재미있는 경험이었음. 사람들이 한 번쯤 시도해 보기를 추천함!

  • 예제 페이지가 놀라움. 캔버스가 점점 더 정교하고 아름답게 발전하는 것을 볼 수 있음.

  • 정말 멋짐! Piet 작품을 모아서 주어진 텍스트를 반환하는 프로그램을 만드는 것이 가능할지 궁금함. Piet 코드 생성기 같은 것 말임. 인쇄물로 멋진 선물이 될 것 같음!