GitHub - iamgio/pikt: :art: Image-based poetic programming language.
요약
상세 내용
핵심 방법론 (Core Methodology):
Pikt는 이미지를 소스 코드로 사용합니다. 즉, 프로그램은 특정 색상의 픽셀 조합으로 표현됩니다. Pikt의 구문 분석기(parser)는 입력 이미지를 스캔하여 각 픽셀의 색상을 해석하고, 미리 정의된 color scheme에 따라 해당 색상을 특정 언어 구성 요소(예: 변수 선언, 함수 호출, 조건문, 연산자)에 매핑합니다. 이러한 color scheme는 사용자가 Dcolors 속성을 통해 .properties 파일 형식으로 직접 정의할 수 있습니다. 예를 들어, 특정 RGB 값의 픽셀은 변수 선언을 의미하고, 다른 RGB 값은 if 문을 의미하는 식입니다. 이러한 픽셀 시퀀스가 Pikt의 추상 구문 트리(Abstract Syntax Tree, AST)를 구성하고, 이는 다시 Kotlin 코드로 변환됩니다.
컴파일 및 실행 (Compilation and Execution):
Pikt는 Kotlin 컴파일러를 통해 실행 파일을 컴파일합니다. 따라서 JVM(Java Virtual Machine) 및 native* (현재 제한적) 타겟 모두에 대한 컴파일을 지원하며, 런타임 해석(runtime interpretation)도 가능합니다. 형식으로 실행되며, 주요 속성(-D)으로는 소스 이미지 파일(source), 출력 이름(output), color scheme 경로(colors), 컴파일 타겟(targets), JAR 라이브러리 경로(lib), Kotlin/JVM 컴파일러 경로(jvmcompiler), 프로젝트 정보 YAML 설정(project), 실행할 태스크 이름(task) 등이 있습니다.
설정 및 명령 인자 (Settings and Command Arguments):
Pikt의 동작에 영향을 미치는 설정 인자(--)는 다음과 같습니다:
* --interpret: 생성된 코드를 JVM 컴파일러를 통해 즉시 실행합니다.
* --printoutput: 생성된 Kotlin 코드를 표시합니다.
* --nocompile: 실행 파일 생성을 방지합니다.
* --pixelinfo: 출력 코드에 픽셀 좌표 정보를 주석으로 추가합니다.
* --imgoutput=path: 이미지 생성 명령의 출력 파일을 설정합니다.
* --chainoutput: 이미지 생성 명령의 출력 연결(output chaining)을 활성화합니다.
* --pl[=type]: 활성 픽셀 로거(pixel logger) 타입을 설정하여 화면에 픽셀을 출력합니다 (예: none, 16, 256, rgb, box).
코드 생성 및 컴파일과는 무관하게 특정 작업을 실행하고 종료하는 명령 인자는 다음과 같습니다:
* : Kotlin 컴파일러를 다운로드합니다.
* createscheme: 기본 값으로 새로운 color scheme을 생성합니다.
* exportscheme: 주어진 color scheme에서 색상 팔레트 이미지를 생성합니다.
* : 소스 이미지의 사본을 만들고 사용자 정의 color scheme에 맞게 조정합니다.
* standardize: 소스 이미지의 사본을 만들고 기본 scheme에 맞게 조정합니다.
* : 픽셀 사이에 공백이 없는 압축된 소스 이미지 사본을 생성합니다.
* decompact: 각 줄에 하나의 구문만 있는 비압축된 소스 이미지 사본을 생성합니다.
* : 소스 이미지의 색상을 바꿉니다.
* : 마스크 이미지에 따라 마스크된 소스 이미지 사본을 생성합니다.
* : 문자열을 Pikt가 지원하는 RGB(그레이스케일) 값 시퀀스로 변환하여 출력합니다.
* welcome: createscheme, exportscheme, 을 실행하고 Hello World 소스를 생성합니다.
로드맵 (Roadmap):
향후 개발 계획에는 변수, 상수, 함수 호출 및 정의, 조건문(If/else), 람다(코드 블록), 다양한 연산자(등호, 논리, 산술), 루프(For-each, While), Try/catch 구문, 구조체(Structs) 등 다양한 프로그래밍 구문과 함께 표준 라이브러리 및 외부 라이브러리 지원이 포함됩니다. 또한 컴파일(JVM 및 Native*), 해석, 오류 처리 및 런타임 정보 기능이 지속적으로 개선될 예정입니다.
예시로는 고성능 피보나치 수열 알고리즘, 소수 알고리즘, FizzBuzz 알고리즘, 삽입 정렬 알고리즘, 문자열 반전기 등이 있으며, 이들은 모두 사용자 정의 color schemes를 활용합니다.