ProXPL 소개: 처음부터 만든 현대적인 프로그래밍 언어

발행: (2025년 12월 23일 오전 01:41 GMT+9)
15 min read
원문: Dev.to

Source: Dev.to

Proxpl 소개

처음부터 만든 최신 프로그래밍 언어

프로그래밍 언어를 설계하고 구현하는 과정은 언제나 흥미롭지만, 동시에 복잡하고 도전적인 작업입니다. Proxpl은 이러한 도전을 직접 마주하고, 현대적인 설계 원칙을 바탕으로 처음부터 만든 새로운 언어입니다. 이 글에서는 Proxpl이 왜 탄생했는지, 어떤 특징을 가지고 있는지, 그리고 간단한 예제를 통해 실제 사용 모습을 살펴보겠습니다.


왜 새로운 언어가 필요했나요?

  • 성능과 안전성: 기존 언어들은 종종 성능을 위해 안전성을 포기하거나, 반대로 안전성을 위해 성능을 희생합니다. Proxpl은 두 마리 토끼를 모두 잡기 위해 설계되었습니다.
  • 모듈성: 언어 자체가 플러그인 기반 구조를 가지고 있어, 필요에 따라 새로운 기능을 쉽게 추가하거나 제거할 수 있습니다.
  • 학습 곡선 최소화: 직관적인 문법과 풍부한 표준 라이브러리를 제공해, 초보자도 빠르게 시작할 수 있도록 했습니다.

핵심 설계 원칙

원칙설명
정적 타입컴파일 타임에 타입 검사를 수행해 런타임 오류를 최소화합니다.
소유권 모델메모리 안전성을 보장하면서도 가비지 컬렉션 오버헤드를 피합니다.
함수형·명령형 혼합순수 함수와 부수 효과를 명확히 구분해 코드 가독성을 높입니다.
플러그인 아키텍처컴파일러, 표준 라이브러리, 도구 체인 모두가 플러그인 형태로 제공됩니다.

기본 문법

변수 선언

let x: Int = 10
var y = "Hello, Proxpl!"
  • let불변 변수를, var가변 변수를 선언합니다.
  • 타입을 명시하지 않으면 컴파일러가 형 추론을 수행합니다.

함수 정의

fn add(a: Int, b: Int) -> Int {
    return a + b
}
  • fn 키워드로 함수를 정의합니다.
  • 반환 타입은 -> 뒤에 명시합니다.

제어 흐름

if x > 0 {
    println("Positive")
} else {
    println("Non‑positive")
}

“Hello, World!” 예제

fn main() {
    println("Hello, World!")
}

위 코드를 proxpl run hello.proxpl 명령으로 바로 실행할 수 있습니다.


모듈과 패키지

Proxpl은 패키지 매니저 pax를 제공해 외부 라이브러리를 손쉽게 가져올 수 있습니다.

pax add http
import http

fn fetch(url: String) -> String {
    let response = http.get(url)
    return response.body
}

컴파일러와 도구 체인

  • proxplc: 고성능 LLVM 기반 컴파일러.
  • proxplfmt: 코드 포매터, 프로젝트 전체 스타일을 자동으로 맞춰줍니다.
  • proxpl-lsp: VS Code, Neovim 등에서 사용할 수 있는 Language Server Protocol 구현체.
proxplc src/main.proxpl -o bin/app

현재 진행 상황 및 로드맵

마일스톤상태
기본 문법 구현✅ 완료
표준 라이브러리 (IO, 컬렉션)✅ 완료
LLVM 백엔드✅ 완료
패키지 매니저 pax✅ 완료
IDE 플러그인🚧 진행 중
웹Assembly 타깃📅 예정 (Q2 2026)

커뮤니티와 참여 방법

Proxpl은 오픈 소스 프로젝트이며, 누구나 기여할 수 있습니다.

버그 리포트, 기능 제안, 플러그인 개발 등 다양한 방법으로 참여해 주세요!


마무리

Proxpl은 성능, 안전성, 확장성을 동시에 만족시키는 현대적인 언어를 목표로 합니다. 아직 초기 단계이지만, 이미 많은 개발자들이 관심을 가지고 테스트하고 있습니다. 여러분도 직접 체험해보고, 함께 성장하는 언어를 만들어 가는 여정에 동참해 보세요.

“코드가 곧 설계다.” – Proxpl 팀


Source:

ProXPL이란?

ProXPL은 명확성, 성능, 학습 용이성을 위해 설계된 현대적인 정적 타입 일반 목적 프로그래밍 언어입니다. 주요 특징은 다음과 같습니다:

  • 커스텀 렉서와 파서
  • 의미 분석 및 타입 검사
  • 바이트코드 컴파일러
  • 스택 기반 가상 머신(VM)
  • 명령줄 인터페이스(CLI) 도구
  • PRM이라는 패키지 매니저
  • 지속적으로 성장하는 표준 라이브러리
  • 명확한 로드맵과 모듈식 아키텍처

ProXPL은 소프트웨어를 구축하기 위해 설계되었을 뿐만 아니라, 개발자들이 프로그래밍 언어가 내부적으로 어떻게 동작하는지를 깊이 이해하도록 돕는 것을 목표로 합니다.

왜 ProXPL이 존재하는가

대부분의 개발자는 매일 강력한 프로그래밍 언어를 사용하지만, 그 이면에서 무슨 일이 일어나는지는 거의 알지 못합니다. 다음과 같은 질문들입니다:

  • 컴파일러가 실제로 코드를 명령어로 어떻게 변환할까?
  • 언어가 타입과 규칙을 어떻게 강제할까?
  • 가상 머신은 어떤 역할을 할까?
  • 실행 전에 오류를 어떻게 감지할까?

ProXPL은 이러한 질문에 실용적으로 답하기 위해 존재합니다 — 소스 코드에서 실행까지 전체 파이프라인을 직접 구축함으로써.

목표는 Python, C++, Java, 혹은 Go 를 대체하는 것이 아니라,
기본 원리를 처음부터 재현함으로써 이들을 이해하는 것입니다.

핵심 설계 철학

ProXPL은 몇 가지 명확한 원칙에 따라 설계됩니다:

  1. Clarity Over Cleverness – 구문은 읽기 쉽고, 예측 가능하며, 이해하기 쉬워야 합니다.
  2. Explicit Structure – 코드는 숨겨진 혹은 마법 같은 동작 없이 의도를 명확히 표현해야 합니다.
  3. Performance Awareness – 이 언어는 바이트코드로 컴파일되고 VM에서 실행되어 효율성과 이식성을 제공합니다.
  4. Learnability – 내부 아키텍처가 의도적으로 투명하게 설계되어, ProXPL은 컴파일러와 VM 설계를 배우기에 훌륭한 프로젝트가 됩니다.

언어 기능 개요

  • 추론을 지원하는 정적 타입 변수
  • 정의된 스코프 규칙을 가진 함수
  • 조건 논리 및 제어 흐름
  • 모듈식 임포트
  • 내장 입출력 유틸리티
  • 표준 라이브러리 도우미 (문자열, 수학, 컬렉션 등)
  • 명령줄 실행
  • PRM을 사용한 패키지 관리

언어는 정확성이 중요한 경우에는 엄격하고, 생산성이 중요한 경우에는 유연합니다.


간단한 ProXPL 예제

func main() {
    print("Welcome to ProXPL!");
    let name = input("Enter your name: ");
    print("Hello, " + name + "!");
}
main();

CLI를 사용하여 프로그램을 실행합니다:

prox run hello.prox

구문은 친숙하도록 의도했으며, 동시에 강력하게 구조화되어 있습니다.


컴파일러 및 런타임 아키텍처

ProXPL은 전문적이고 전통적인 컴파일러 파이프라인을 따릅니다:

Source Code

Lexer (Tokenization)

Parser (AST Generation)

Semantic Analysis & Type Checking

Compiler (Bytecode Generation)

Virtual Machine Execution

각 단계가 명확히 구분되어 있어 시스템이 모듈화되고, 테스트 가능하며, 확장성을 가집니다. 이 아키텍처는 프로덕션 급 프로그래밍 언어가 설계되는 방식을 그대로 반영합니다.

가상 머신 (VM)

ProXPL은 맞춤형 스택 기반 가상 머신을 사용합니다. VM은 다음을 담당합니다:

  • 바이트코드 명령 실행
  • 실행 스택 관리
  • 함수 호출 처리
  • 프로그램 흐름 제어

VM을 사용함으로써 얻는 이점:

  • 플랫폼 독립성
  • 제어된 실행 환경
  • 보다 쉬운 최적화 경로
  • 언어와 하드웨어 간 명확한 분리

이 설계는 JIT 컴파일 및 네이티브 확장과 같은 미래 기능을 추가하기에 용이합니다.

프로젝트 구조

리포지토리는 실제 컴파일러 프로젝트를 반영하도록 구성되어 있습니다:

ProXPL/
├── src/        # Compiler and VM implementation
├── include/    # Core interfaces and headers
├── cli/        # Command‑line tools and PRM
├── docs/       # Language documentation
├── examples/   # Example ProXPL programs
└── tests/      # Unit and integration tests

이 구조는 기여자와 학습자 모두에게 ProXPL을 쉽게 접근할 수 있게 합니다.

패키지 매니저: PRM

ProXPL은 자체 패키지 매니저인 PRM을 포함하고 있습니다. PRM은 다음을 목표로 설계되었습니다:

  • 의존성 관리
  • 프로젝트 레이아웃 표준화
  • 향후 패키지 레지스트리 지원 가능화

이로써 ProXPL은 단순한 언어를 넘어 진행 중인 생태계가 됩니다.


로드맵 및 향후 비전

ProXPL은 활발히 진화하고 있습니다. 예정된 마일스톤은 다음과 같습니다:

  • 클래스 기반 객체‑지향 프로그래밍
  • 향상된 오류 진단 및 도구
  • 외부 함수 인터페이스 (FFI)
  • async / await 지원
  • 성능 최적화
  • 확장된 표준 라이브러리
  • 안정적인 v1.0 릴리스

커뮤니티 피드백은 향후 개발을 형성하는 데 중요한 역할을 할 것입니다.


오픈 소스 및 커뮤니티

ProXPL은 완전 오픈소스입니다. 누구나 할 수 있습니다:

  • 컴파일러와 VM 코드를 탐색하기
  • 프로그래밍 언어가 어떻게 구축되는지 배우기
  • 문서 개선하기
  • 기능이나 버그 수정을 기여하기

컴파일러 전문가일 필요는 없습니다 — 호기심과 꾸준함이면 충분합니다.

GitHub:


ProXPL이 중요한 이유

모든 프로그래밍 언어가 대규모 채택을 필요로 하는 것은 아니다. 일부 언어는 다음을 위해 존재한다:

  • 깊은 기술 개념을 가르치기
  • 기존 사고방식을 도전하기
  • 구축을 통한 학습 장려
  • 미래 창작자를 고무하기

ProXPL은 이러한 이유로 존재한다.


최종 생각

ProXPL을 만드는 것은 “다음 큰 언어”를 만드는 것이 아니었습니다.
이는 소프트웨어를 더 깊이 이해하고, 프로그래밍 언어가 어떻게 작동하는지를 근본부터 탐구하고자 하는 모든 사람에게 플랫폼을 제공하는 것이었습니다.

그 핵심은 — 순수 텍스트에서 실행된 명령으로 변환되는 과정입니다.

이 프로젝트가 여러분에게 영감을 준다면:

  • 컴파일러 설계 배우기
  • 자신만의 도구 만들기
  • 언어 내부 구조 탐구
  • 오픈소스에 기여하기

그러면 ProXPL은 이미 목표를 달성한 것입니다.

읽어 주셔서 감사합니다.

Back to Blog

관련 글

더 보기 »

Swift의 도래

번역하려는 텍스트를 제공해 주시겠어요? 텍스트를 주시면 한국어로 번역해 드리겠습니다.