목록으로
GitHub - iamgio/pikt: :art: Image-based poetic programming language.
Service2025.06.08

GitHub - iamgio/pikt: :art: Image-based poetic programming language.

요약

Pikt는 심미적인 이미지 소스에서 빠르고 가벼운 프로그램을 생성할 수 있는 pixel-based, dynamically typed, Turing complete esoteric 프로그래밍 언어입니다.
️ 이 언어는 Kotlin 컴파일러를 통해 JVM 및 Native* 타겟용 실행 파일을 컴파일하며, 모든 keyword, statement, function, operator는 색상에 연결되어 color scheme을 통해 쉽게 사용자 정의할 수 있습니다.
Pikt는 코드 생성 및 컴파일 외에도 이미지 변환, color scheme 관리, Kotlin 컴파일러 다운로드와 같은 다양한 Command arguments를 제공하며, 변수, 함수, 루프 등을 포함한 roadmap을 가지고 있습니다.

상세 내용

Pikt는 픽셀 기반의 동적으로 타입이 지정되는(dynamically typed), 튜링 완전(Turing complete)한 난해한 프로그래밍 언어(esoteric programming language)로, 심미적으로 즐거운 이미지 소스로부터 빠르고 가벼운 프로그램을 생성할 수 있습니다. Pikt의 가장 흥미로운 특징은 유연성(flexibility)입니다. 모든 키워드, 구문, 함수 및 연산자는 하나 이상의 색상에 연결되어 있으며, 이는 color schemes를 통해 쉽게 사용자 정의할 수 있습니다.

핵심 방법론 (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)도 가능합니다. javaDproperty=valuejarpikt.jarargumentsjava -Dproperty=value -jar pikt.jar -arguments 형식으로 실행되며, 주요 속성(-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).

코드 생성 및 컴파일과는 무관하게 특정 작업을 실행하고 종료하는 명령 인자는 다음과 같습니다:
* downloadcompiler=type[,version]downloadcompiler=type[,version]: Kotlin 컴파일러를 다운로드합니다.
* createscheme: 기본 값으로 새로운 color scheme을 생성합니다.
* exportscheme: 주어진 color scheme에서 색상 팔레트 이미지를 생성합니다.
* recolorize[=method]recolorize[=method]: 소스 이미지의 사본을 만들고 사용자 정의 color scheme에 맞게 조정합니다.
* standardize: 소스 이미지의 사본을 만들고 기본 scheme에 맞게 조정합니다.
* compact[=size]compact[=size]: 픽셀 사이에 공백이 없는 압축된 소스 이미지 사본을 생성합니다.
* decompact: 각 줄에 하나의 구문만 있는 비압축된 소스 이미지 사본을 생성합니다.
* colorswap=<swaps>colorswap=<swaps>: 소스 이미지의 색상을 바꿉니다.
* mask=pathmask=path: 마스크 이미지에 따라 마스크된 소스 이미지 사본을 생성합니다.
* strconvert[=string]strconvert[=string]: 문자열을 Pikt가 지원하는 RGB(그레이스케일) 값 시퀀스로 변환하여 출력합니다.
* welcome: createscheme, exportscheme, downloadcompiler=jvmdownloadcompiler=jvm을 실행하고 Hello World 소스를 생성합니다.

로드맵 (Roadmap):
향후 개발 계획에는 변수, 상수, 함수 호출 및 정의, 조건문(If/else), 람다(코드 블록), 다양한 연산자(등호, 논리, 산술), 루프(For-each, While), Try/catch 구문, 구조체(Structs) 등 다양한 프로그래밍 구문과 함께 표준 라이브러리 및 외부 라이브러리 지원이 포함됩니다. 또한 컴파일(JVM 및 Native*), 해석, 오류 처리 및 런타임 정보 기능이 지속적으로 개선될 예정입니다.

예시로는 고성능 피보나치 수열 알고리즘, 소수 알고리즘, FizzBuzz 알고리즘, 삽입 정렬 알고리즘, 문자열 반전기 등이 있으며, 이들은 모두 사용자 정의 color schemes를 활용합니다.

원본 보기
GitHub
Shared by Anonymous