🚥 (주절주절) Factor와 Io
Factor와 Io 모두 예전에 덕질하던 프로그래밍언어.
이번엔 추억놀음이나 포스팅해보려고.
Factor
팩터는 Functional, Concatenative programming언어인데, Forth와 같은 방식의 평가규칙을 가졌지만, Semantics은 Smalltalk이나 Lisp 같이 고수준의 추상화를 작성하기 적절했었다. 그리고 Native compilation + Image-based 시스템이어서 커먼리습이랑 비슷하게 사용도 가능해서 좋았었다.
오랬만에 "ego searching" 해봤다 😶🌫️ :
https://docs.factorcode.org/content/vocab-io.encodings.euc-kr.html 같은 문서를 어떻게 요악해서 AI이 보여주는지 잘 모르겠다, 신기할 정도다.
"Hallucination 🫥"도 좀 있긴하다. 다른 부분은 다 맞는거 같은데(ㅋㅋ), 윈도 빌드를 제공하거나 했다는 언급은, 내가 그랬었나 싶다. ㅎㅎ
다시 원래 이야기로 돌아와서, Factor + Emacs은 FUEL이란 이맥스확장이 지원되어서, 마치 커먼리습의 SLIME 혹은 Sly-처럼 편안하게 사용하기 좋았었다.
그리고 Forth, Smalltalk, Lisp처럼 DSL을 만들기도 유연하고 명확한 문법이어서 딱 그렇게 쓰려고 했던거 같다.
…위에 보이듯이 2d8+4 같은 부분들이 dice 모듈에서 제공하는 DSL.
그리고 커먼리습처럼 compile-time meta-programming이 자연스러운 언어여서, 실제로 데이터파일을 읽거나 하는걸 컴파일시점에 처리하고, 그거에 따라 코드를 미리 생성해서 런타임엔 최적화된 코드로 실행할 수 있도록 메타프로그래밍이 가능했다. (커먼리습처럼.)
재밌었고, 많은 부분이 커먼리습의 그것과 유사해서 더 좋아했던거 같다.
지금은 글쎄, package manager도 없고, 코드 컴파일속도도 오히려 커먼리습이 더 빠른거 같아서 굳이 끌리지는 않는다. ㅎㅎ 이걸 더 발전시켜서 사람들과 같이 재밌게 쓰고 싶다는 마음도 별로 들지 않는다. 나는 그렇게 하라면 할수도 있겠다,싶게 아직도 좋아는 하지만.
이후에 다른 Concatenative programming languages이 연구와 시도되는거 같지만, 대부분은 이렇게라도 성장시켜내지 못한거 같다.
사족인데, 아마 원 Slava Pestov 원래 프로젝트의 시작목적은 Java/JVM 상에서 실행될 게임을 위한 스크립팅언어로 시작했다고 한다. Forth / Stack-based 언어가 그렇게 시작하기 좋지 싶다. ㅎㅎ그런데 어느새 네이티브컴파일이 가능하고 ㅎㄷㄷ…
하옇튼 Slava Pestov의 jEdit도 한 때 정말 좋아하던 코드편집기였었었다.
만약 게임을 만들던 그 시도에 더 집중했었더라면 Minecraft처럼 Java으로 짠 성공적인 게임이 되었을까 대체역사를 상상도 해본다. ⛏️
Io
- https://iolanguage.org/
- https://en.wikipedia.org/wiki/Io_(programming_language)
- https://wiki.kldp.org/wiki.php/IoLanguage/Tutorial
또다른 추억놀음 언어는 Io. 이건 개인적으로는 코딩퍼즐을 푸는 장난감으로 쓰거나 한국어으로 튜토리얼을 번역해 공개하거나 하는 정도로 익혔던거 같다.
객체지향이지만, Lua, JavaScript와 유사한, 하지만 많이 다른 Prototype-based OO였고, Message-passing OO + Lazy evaluation이어서 정말 유연했다.
예를 들어서, 클래스-메서드 선언, Control-structure 등이 따로 Keyword이 없고 그냥 메서드로 구현되어 있거나(스몰톡처럼), 리습처럼 유연한 매크로를 만들 수 있었었다.
그 이후에 Ioke 같은 언어을 기대하긴 했지만 이것도 조용해서 ㅎㅎ
역시 마찬가지로 커뮤니티나 패키지매니저가 따로 없고, 웹프레임웍 등이 공개된게 있지만 15~17년 이상 그대로여서 다시 손에 잡을 생각이 들지는 않는다.