Impossible Machines: 물리적 세계를 위한 선언적 프로그래밍 프로토타입 (Show HN)
Impossible Machines는 물리적 세계에 선언적 프로그래밍을 적용한 브라우저 프로토타입입니다. 사용자는 메커니즘이 생성해야 할 동작을 설명하고, 시스템은 그 동작을 생성하는 메커니즘을 생성합니다. 이 프로젝트는 @bhaprayan이 Show HN 게시물로 Hacker News에 제출했으며, 이 페이지가 스크랩된 시점에 36점과 9개의 댓글을 받았습니다.
Impossible Machines가 실제로 하는 일
Impossible Machines는 원하는 물리적 결과를 먼저 지정하고 기계 설계가 그로부터 파생되는 디자인 캔버스입니다. 프로토타입의 자체 설명은 전제를 직접적으로 명시합니다:
물리적 세계를 위한 선언적 프로그래밍이 어떻게 보일지에 대한 프로토타입. 시스템에 원하는 것을 보여주면 메커니즘이 나타나는 것을 지켜보세요. 싱크대를 옮기고, 장애물을 놓고, 모양을 바꾸세요. 세상을 있는 그대로가 아니라 원하는 대로 묘사하세요.
같은 페이지는 이 작업을 "@bhaprayan의 사고 실험"으로 설명합니다.
세계의 어휘: 소스, 수정자, 장애물, 싱크대 및 대상
인터페이스는 코드 편집기보다는 부품 및 대상 어휘를 노출합니다. 스크랩된 페이지 스냅샷에 표시된 레이블은 다음과 같습니다:
- 소스 및 이동 부품: 크랭크, 무게
- 수정자 및 제약 조건: 블록, 브레이크, 가이드
- 환경: 장애물, 싱크대
- 대상: 종, 문
원하는 동작은 대상 객체를 선택하고 무엇을 할지 지시함으로써 선언됩니다. 페이지는 사용자에게 "종을 탭하여 원하는 것을 보여주세요"라고 지시하고 "종 울리기"를 선택 가능한 목표로 제공합니다. 목표가 설정된 후 페이지는 "작동 설계"와 "다른 설계" 아래의 대안 세트를 제시합니다.
이것이 프로토타입의 핵심 관찰 가능한 동작입니다: 사용자가 객체에 의도를 설정하고, 그 의도를 충족시키기 위해 여러 후보 메커니즘이 제공됩니다. 스크랩된 페이지는 각 개별 부품의 의미를 문서화하지 않으므로, 크랭크 대 무게 또는 가이드 대 블록의 정확한 역할은 사용 가능한 소스 자료에 명시되어 있지 않습니다.
도전 과제와 자유형 벤치
Impossible Machines는 세 가지 명명된 도전 과제와 개방형 샌드박스를 제공합니다. 도전 과제는 다음과 같이 나열됩니다:
- 우회로 만들기
- 브레이크 이기기
- 안내된 회전
그 옆에는 도전 목표 없이 구축할 수 있는 "자유형 벤치"가 있습니다. 도전 과제 프레임은 시스템이 전문 CAD 도구보다는 탐색 가능한 퍼즐 공간으로 포지셔닝되고 있음을 시사합니다: 각 도전 과제는 사용자가 목표를 설명하고 생성된 설계를 수락하거나 거부함으로써 달성해야 하는 특정 메커니즘 동작을 분리합니다.
인터페이스는 가로 방향을 요청합니다
사이트는 제한 사항과 함께 세로 방향으로 렌더링됩니다. 방향 알림은 다음과 같습니다:
Impossible Machines는 메커니즘을 탐색할 공간이 있는 가로 방향에서 가장 잘 작동합니다.
"세로로 계속" 옵션이 제공되며, 이는 레이아웃이 메커니즘 부품, 장애물 및 싱크대를 나란히 배치하고 검사할 수 있는 넓은 캔버스를 중심으로 설계되었음을 의미합니다.
"선언적"이 흥미로운 주장인 이유
선언적 프로그래밍은 사용자가 그것을 어떻게 사실로 만들지보다는 무엇이 사실이어야 하는지를 명시하는 것을 의미합니다. Impossible Machines는 그 프레임을 이동 부품에 적용합니다: 링키지를 손으로 끌어서 배치하는 대신, 사용자는 결과를 선언합니다 — 종을 울리고, 싱크대에 도달하고, 장애물을 피하고 — 결과는 기계적 배열로 변환됩니다.
스크랩된 페이지는 기본 방법을 설명하지 않으며, 스크랩 시점에 Hacker News 스레드에 기술 문서 링크가 없었습니다. 관찰 가능한 것은 도구가 기본 "작동 설계"와 추가 "다른 설계"를 제시한다는 것이며, 이는 퍼즐당 단일 하드코딩 솔루션보다는 후보 메커니즘에 대한 검색과 일치합니다. 이 구분은 프로토타입을 평가하는 모든 사람에게 중요합니다. 여러 유효한 설계를 생성하는 것은 하나를 해결하는 것보다 훨씬 어려운 문제이기 때문입니다.
Hacker News 댓글 작성자들이 비교한 것
스레드의 가장 실질적인 기여는 프로토타입을 이전 작업의 계보에 위치시킨 것입니다. 댓글 작성자들은 세 가지 참조점을 식별했습니다.
The Incredible Machine. 댓글 작성자 @pshc는 가장 짧고 가장 인식 가능한 비교를 제공했습니다:
The Incredible Machine 느낌.
The Incredible Machine은 플레이어가 부품으로 루브 골드버그 스타일의 장치를 조립하는 1990년대 퍼즐 시리즈였습니다. 이 비교는 Impossible Machines를 역 제안으로 프레임합니다: 기계를 조립하고 무슨 일이 일어나는지 지켜보는 대신, 결과를 명시하고 기계가 당신을 위해 조립됩니다.
Disney Research 링키지 합성. 댓글 작성자 @mcphage는 그려진 경로를 추적하는 링키지 생성에 대한 학술 작업을 지적했습니다:
Disney의 연구소는 몇 년 전에 점이 경로를 따라가도록 만드는 것과 유사한 작업을 했습니다. 경로를 그리면 그 경로를 최대한 가깝게 일치시키는 데 필요한 링키지를 생성합니다. 그 이후로 많은 후속 작업이 있었지만, 이 비디오가 기억납니다: https://youtu.be/DfznnKUwywQ?si=F-5NZxKu4hP_mand
이것은 스레드에서 제기된 가장 가까운 기술적 선례입니다. 대상 경로를 그리고 시스템이 그것을 근사하는 링키지를 해결하게 하는 것은 Impossible Machines가 종 울리기 및 싱크대 도달 목표에 적용하는 설계 워크플로우의 동일한 역전이며, @mcphage는 그 작업 라인이 계속되었다고 언급합니다.
Microsoft Research 모션 작업. 댓글 작성자 @jdw64는 Microsoft Research 간행물을 인용하며, 그들에게 영감을 준 과거 프로젝트가 "또한 유사한 구현을 가졌다"고 쓰고 URL이 "motion-"으로 시작하는 Microsoft Research 간행물 페이지에 링크했습니다. 스크랩된 댓글의 URL이 잘려서 특정 논문은 사용 가능한 소스에서 확인할 수 없습니다.
종합하면, 스레드의 입장은 선언적 또는 역 메커니즘 설계가 새로운 연구는 아니지만, 브라우저 기반의 즉시 플레이 가능한 프레젠테이션이 이 프로토타입을 구별짓는 것이라는 것입니다.
가장 강력한 구체적 기능 요청: 시간에 따른 동작
가장 실행 가능한 비판은 @skinfaxi에서 나왔으며, 현재 세계 모델이 순간적이고 이진적인 목표만 지원한다고 관찰했습니다:
멋지네요! 세계의 언어를 확장하는 것이 흥미로울 것 같습니다. 지금은 종이나 문과의 상호작용이 제한적입니다 (기본적으로 이진). 이진이더라도 종을 세 번 울리거나 shave and a haircut을 연주하라고 말할 수 있다면 그 주파수를 생성할 수 있는 기계 장치가 생성될 수 있을 것입니다 (예를 들어 단순한 방법은 종을 울릴 때마다 하나를 건너뛰는 것입니다). 아마도 세계/객체가 특정 기록 기간 동안의 상호작용을 고려해야 할 것입니다.
이것은 미용상의 요청이 아니라 의미 있는 아키텍처 지점입니다. "종 울리기"와 같은 목표는 종료 상태입니다: 메커니즘은 그것에 도달하거나 도달하지 않습니다. "종을 세 번 울리기"와 같은 목표는 시간적 시퀀스이며, 이를 충족하려면 시스템이 단일 종료 상태가 아니라 기록 창에 걸친 상호작용의 이력을 추론해야 합니다. @skinfaxi가 언급했듯이, 교대 울림에 대한 예제 솔루션 — 매 다른 울림을 게이팅 — 은 기계적으로 간단하지만, 목표 자체를 표현하려면 세계 모델이 시간을 일급 차원으로 나타내야 합니다.
즉, 현재 프로토타입의 선언적 언어는 사물이 어디에 끝나야 하는지를 다룹니다. 시간이 지남에 따라 사물이 어떻게 전개되어야 하는지를 다루도록 확장하는 것이 자연스러운 다음 단계이며, 시스템이 검색할 수 있는 메커니즘의 종류를 바꿀 것입니다.
스레드에서 제기된 열린 질문
구현 세부 사항은 공개되지 않았습니다. 스레드의 최상위 질문은 @donalddominko에서 나왔으며, 데모를 플레이하고 소스를 요청했습니다:
이것은 실제로 매우 흥미로운 아이디어입니다. 데모를 보고 플레이했으며 저장소 링크를 찾고 있습니다 — 시스템이 결과를 달성하는 방법을 구현했는지 알고 싶습니다.
스크랩된 스레드에는 저장소 링크가 나타나지 않으며, 작성자의 답변도 댓글 세트에 없습니다.
참여 신호는 희박했습니다. 제출은 36점과 9개의 댓글에 도달했지만, 스크랩된 스레드의 모든 보이는 댓글은 0점을 받았고, 한 댓글은 플래그가 지정되어 표시되지 않았습니다. 따라서 스레드는 광범위한 합의보다는 소수의 정보에 기반한 비교와 하나의 강력한 기능 요청으로 읽는 것이 가장 좋습니다.
결론
Impossible Machines는 특정 질문을 묻는 프로토타입입니다: 세상을 있는 그대로가 아니라 원하는 대로 묘사한다면 물리적 메커니즘을 위한 프로그래밍 언어는 어떻게 보일까요? 그 답은 소스, 수정자, 장애물, 싱크대 및 대상의 캔버스이며, 결과를 선택하면 — 예를 들어 종에게 울리라고 지시하면 — 작동 설계와 대안을 반환합니다. Hacker News 댓글 작성자들은 The Incredible Machine에서 Disney Research의 경로 추적 링키지 합성에 이르는 계보에 그것을 위치시켰고, 가장 날카로운 비판은 그 언어가 현재 종료 상태를 처리하지만 시퀀스를 처리하지 않아 "종을 세 번 울리기"와 같은 목표가 세계 모델이 표현할 수 있는 범위 밖에 있다는 것입니다.