요약
Folders는 빈 폴더의 개수와 중첩 구조만으로 프로그램을 짜는 난해한 프로그래밍 언어입니다.
난해한 언어(esolang, 실용보다 발상을 실험하는 언어)를 여럿 만든 대니얼 템킨이 2015년에 내놓은 언어입니다. 공백 문자만으로 코드를 쓰는 Whitespace에서 영감을 받아, 글자가 전혀 없는 코드를 목표로 했습니다.
왜 중요한가
- 코드가 꼭 글자여야 한다는 전제를 버리고, 폴더의 포함 관계와 순서만으로도 프로그램이 성립함을 보여 줍니다.
- 쓸모없는 잡동사니로 여겨지고 Git도 무시하는 빈 폴더를 소스 코드이자 저장 공간으로 바꿔 놓았습니다.
핵심 내용
- 폴더 이름은 무시되고, 이름순 정렬로 정해지는 순서와 포함 관계만 코드로 읽힙니다.
- 명령 폴더의 첫째 하위 폴더에 든 폴더 개수가 명령을 정하며, 0개는 if, 4개는 print입니다.
- 둘째·셋째 하위 폴더에는 인자가 들어가고, 사칙연산·비교 같은 식과 자료형도 같은 방식으로 표현합니다.
- 윈도에서는 폴더가 디스크 용량을 차지하지 않는다며, 폴더 35만 2,449개가 0바이트로 표시되는 예를 들었습니다.
- 원래 구현은 GitHub에 있고, 페이지에서 바로 돌려 보는 자바스크립트 에뮬레이터와 등고선·가계도 모양 시각화도 있습니다.
HN 반응
- 0바이트 표시는 착시라는 지적에, 미리 잡아 둔 MFT(NTFS의 파일 정보 표)를 쓴 것이라는 설명과 그래도 공간이라는 반론이 나왔습니다.
- 대체로 "미쳤지만 아름답다"는 반응이었고, Malbolge처럼 더 악명 높은 난해한 언어를 소개한 이용자도 있었습니다.
"윈도에서 폴더는 비어 있음을 훨씬 더 극단적으로 보여 주는 척도입니다. 디스크 공간을 전혀 차지하지 않거든요. 증거가 필요하다면 폴더를 352,449개 만들고 속성을 확인해 보세요."
농담인데 제가 너무 진지하게 받아들이는 거겠지만, 이게 "증명"하는 건 윈도가 거짓말을 한다는 것뿐이에요 ㅋㅋ 그 정보가 어딘가에 저장되어 있는 건 분명하잖아요.
NTFS에는 모든 메타데이터를 저장하는 MFT(Master File Table)가 있고, 단편화를 피하려고 미리 할당해 둡니다. 그래서 미리 할당된 MFT가 다 찰 때까지는 공간을 더 차지하는 것처럼 보이지 않습니다.
이런 방식을 쓰는 다른 파일 시스템도 있습니다. 다만 NTFS는 레코드가 1024바이트로 꽤 커서, 작은 파일은 MFT 안에 통째로 들어갈 수도 있습니다.
> 그 정보가 어딘가에 저장되어 있는 건 분명하잖아요.
맞습니다. 하지만 그 "어딘가"는 미리 할당된 곳(MFT의 일부)이라서, 디렉터리가 정말 커지거나 MFT를 쓰는 항목이 많아 확장해야 하기 전까지는 추가 공간을 차지하지 않습니다. 제 기억이 맞다면 이런 실험에서는 디렉터리 하나당 MFT의 1KB 블록 하나를 쓰고, 이들을 담고 있는 상위 디렉터리가 기술해야 할 내용이 늘어 블록을 조금 더 쓰게 됩니다.
아주 짧은 파일을 많이 만들어도 일반적인 리눅스 파일 시스템에서는 처음에는 공간을 전혀 차지하지 않을 수 있는 것과 비슷합니다. 미리 할당된 아이노드만 쓰니까요.
예약된 공간을 쓰는 것도 공간을 쓰는 겁니다. 폴더를 만들면 예약된 공간의 일부를 쓰게 되고, 그게 모자라면 확장하면서 디스크의 여유 공간을 더 차지하게 됩니다. 그 예약 공간을 미리 할당해 뒀다고 해서 폴더가 공간을 차지하지 않는 게 되지는 않습니다. 제가 바탕화면에 파일을 하나 만들었을 때, 아직 파티션을 키우거나 디스크를 하나 더 달지 않았다고 해서 공간을 안 차지하는 건 아니잖아요?
감히 Folders 프로그래밍 언어를 만든 분이 진지하지 않다고 하시다니요!
맞네요, 조금이라도 장난기가 있을 거라고 말한 제가 부끄럽습니다.
저자분께 깊이 사과드립니다.
이제 보니 누가 접었네요.
폴더를 알파벳 순서로 평가한다고 적혀 있지만, 실제로는 자연 정렬(natural sort)[1][2]로 평가하고 있습니다. 윈도도 폴더를 자연 정렬 순서로 보여 주니 그럴 만합니다.
[1] https://github.com/rottytooth/Folders/blob/015cf65c15ab681f56d59e912e5ad1b8b7672237/Rottytooth.Esolang.Folders/DirInfoExtensions.cs#L22
[2] https://en.wikipedia.org/wiki/Natural_sort_order
파일 시스템 구조를 이용해 Smalltalk을 만든 사례(Smalltix)입니다. https://programmingmadecomplicated.wordpress.com/2025/01/21/the-unix-binary-wants-to-be-a-smalltalk-method-not-an-object/ (이어서 나온 글은 https://dl.acm.org/doi/10.1145/3759429.3762633 )
정말 미쳤고 쓸모도 없네요... 마음에 들어요!
AI는 절대 생각해 내지 못할 종류의 물건이에요 :)
… 최근 오픈 API 관련 '탈출' 사건 중에, 에이전트들이 경로 이름을 일종의 가짜 게시판처럼 써서 '기억'을 유지하며 서로 작업을 조율한 게 있지 않았나요?
(물론 그쪽엔 '목적'이 있었지만요)
감탄해야 할지 화내야 할지 모르겠어요.
그래도 날아다니는 테슬라보다는 쓸모 있어 보이네요.
튜링 머신은 이 언어의 [비]실용적인 짝입니다. 평평한 파일 하나, 직렬화된 데이터 상태 하나, 파일 위치 하나뿐이니까요.
튜링이 폴더를 예견했더라면 좋았을 텐데요!
윈도 서버의 공간이 왜 부족해지는지 원인을 찾다가, 운영 환경 소프트웨어를 정의하는 데 쓰인 빈 폴더 2,300만 개를 발견하는 담당자가 되었다고 상상해 보세요.
지금까지 본 에소랭 중에서 "너 대체 뭐가 문제냐" 소리가 가장 절로 나오는 언어입니다. 문법 부분에 이르러 문장 하나를 쓰는 데 드는 노력을 상상하니 본능적으로 몸이 움츠러들었어요.
그게 마음에 드셨다면 WORST와 Malbolge의 불쾌함을 소개해 드리죠.
https://esolangs.org/wiki/WORST https://esolangs.org/wiki/Malbolge
둘 다 끝을 알 수 없는 무기력의 구렁텅이입니다.
뻔뻔함이 대단하네요.
오, 잘됐네요. 이름 짓기가 제일 어려우니까요!
아, 몇 년 전 CTF에서 본 기억이 나요. 정말 웃겼어요!
이건... 아름답네요.
제목을 읽자마자 러스트가 떠올랐어요.
맞습니다, 파일 시스템 메타데이터는 공간을 차지합니다. 이건 정말 말도 안 되게 비효율적이에요.
상용 수준의 S3 클라이언트 라이브러리도 안 보이네요. 다음 분 오세요.
그래도 아이디어는 정말 좋네요.
완전히 제정신이 아니네요, 마음에 들어요.
s/directories/folders !
s/folders/directories 라고 쓰려던 거 아니에요?
아, 맞아요! s/mypost/yourpost
첫인상은 아름답고 인상적이라는 거였어요.