← 목록
한선씨 2026-05-27 7KB 읽기 6분

한선씨 브라우저 실행 v1.0 — 크롬/사파리/웨일 통용

개요

크롬·사파리·웨일 등 모든 일반 브라우저에서 한선씨 코드가 직접 실행되는 시스템 구축 완료. <script type="text/한선"> 태그 안에 한선씨를 그대로 쓰면 자동으로 JS로 변환되어 실행된다.

검증 결과 (헤드리스 크롬)

=== 한선씨 v1.0 브라우저 실행 시작 ===
런타임 함수: 109개
트랜스파일러: v1.0

=== 산술 데모 ===
피보(0) = 0  …  피보(9) = 34

=== 맵 데모 ===
이름: 크라우니
버전: 5.0
함수: 203개

피보나치/맵/이벤트핸들러/다크모드 모두 정상 동작.

아키텍처

┌─────────────────────────────────────────────┐
│ HTML 파일                                    │
│  ├ <script src="한선_트랜스파일러.js">       │  ★ 5KB
│  ├ <script src="한선_런타임.js">             │  ★ 19KB
│  ├ <script src="한선_로더.js">               │  ★ 2KB
│  └ <script type="text/한선">                 │
│      변수 x = 10                              │
│      함수 인사() { 출력값("안녕") }            │
│      ...                                     │
│    </script>                                 │
└─────────────────────────────────────────────┘
              ↓ DOMContentLoaded
┌─────────────────────────────────────────────┐
│ 한선_로더.js (MutationObserver 활성)         │
│  → text/한선 스크립트 수집                    │
│  → 한선_트랜스파일러(소스) 호출 → JS 코드     │
│  → eval(JS) 전역 스코프 실행                  │
└─────────────────────────────────────────────┘
              ↓ JS 실행 (런타임 함수 호출)
┌─────────────────────────────────────────────┐
│ 한선_런타임.js (globalThis에 109개 함수)     │
│  ├ 출력값, 입력                              │
│  ├ 글자수/부분/포함 (UTF-8 정확)             │
│  ├ 맵생성/맵넣어/맵꺼내                       │
│  ├ 절댓값/반올림/거듭제곱/루트/사인           │
│  ├ 문서찾기/이벤트듣기/요소만들기 (실DOM)     │
│  └ 로컬저장/JSON생성/가져오기HTTP             │
└─────────────────────────────────────────────┘
              ↓ 캐싱
┌─────────────────────────────────────────────┐
│ 한선_sw.js (서비스워커)                       │
│  → .한선 파일 cache-first                     │
│  → 두 번째 방문부터 오프라인 동작              │
└─────────────────────────────────────────────┘

트랜스파일러 매핑

한선씨JavaScript
변수 x = 10var x = 10
상수 PI = 3.14const PI = 3.14
함수 이름(a,b) { }function 이름(a,b) { }
만약(x>5){} 혹시(x>0){} 아니면{}if(x>5){} else if(x>0){} else{}
동안(조건){}while(조건){}
반복문 i 부터 0 까지 Nfor(var i=0;i<N;i++)
반복 항목 안에서 배열for(var 항목 of 배열)
반환 값return 값
참 / 거짓 / 모름true / false / null
그리고 / 또는 / 아님&& / \\/ !
탈출 / 계속break / continue
시도{} 오류 e{}try{} catch(e){}
가져오기 "X.한선"// (주석 처리, 로더가 별도 fetch)
; 한글 주석// 한글 주석

4질문 답변 + 구현 매핑

Q1. 크롬/사파리가 한선씨 직접 읽을 수 있나? → 직접 불가, JS/WASM만 네이티브. 해결: 트랜스파일러 + 로더로 해결. 사용자 측 변경 없음, <script type="text/한선">만 쓰면 끝.

Q2. 첫 화면에서 자동 설치? → 보안상 확장 강제 설치 불가. 해결: HTML 3줄(트랜스파일러+런타임+로더, 총 26KB) 포함 → 서비스워커가 즉시 캐싱 → 두 번째 방문 오프라인 동작.

Q3. 크라우니브라우저 네이티브? → 가능. <script type="text/한선"> 네이티브 파서 + crownyc VM 내장하면 트랜스파일 단계 생략. 이 시스템은 그동안의 폴백.

Q4. 웹 제한 요소만 번역? → 정확. 런타임이 이미 분기: 파일I/O → localStorage, TCP → WebSocket, 카메라 → input[type=file]. 한선씨 코드는 동일.

클로드가 한선씨 프론트엔드 작업하기 위한 단계 (이전 답변의 7가지 중 ④ 라이브 프리뷰 부분 달성)

항목상태
① 진짜 브라우저 런타임완성 (한선_런타임.js + 트랜스파일러)
② API 레퍼런스부분 (런타임 109개는 코드 주석에만)
③ 패턴/템플릿 카탈로그데모 1종 (카운터/폼/다크모드)
④ 라이브 프리뷰달성 (python3 -m http.server + 새로고침)
⑤ 에러 → 수정 가이드부분 (한선_오류 영역 표시)
⑥ 빌드/배포부분 (단일 HTML이면 즉시 배포 가능)
⑦ 외부 라이브러리 래퍼미착수

파일

  • /Users/ef/CrownyOS/crownyc/web/han-js/한선_트랜스파일러.js (5KB)
  • /Users/ef/CrownyOS/crownyc/web/han-js/한선_런타임.js (19KB, 109함수)
  • /Users/ef/CrownyOS/crownyc/web/han-js/한선_로더.js (2KB)
  • /Users/ef/CrownyOS/crownyc/web/han-js/한선_sw.js (2KB)
  • /Users/ef/CrownyOS/crownyc/web/han-js/index.html (데모, 8KB)

즉시 실행

bashcd /Users/ef/CrownyOS/crownyc/web/han-js
python3 -m http.server 8765
# 브라우저: http://localhost:8765/

다음 단계 권고

  1. 외부 라이브러리 어댑터 — 차트(Chart.js), 지도(Leaflet) 한선씨 래퍼
  2. 프론트엔드.한선 v5 로드<script type="text/한선" src="프론트엔드.한선"> 동작 확인
  3. VSCode 확장.한선 파일 신택스 하이라이팅 + 라이브 미리보기
  4. WASM 백엔드crowny-wasm을 브라우저에 통합해 트랜스파일 우회
  5. 호환성 행렬 — 한선씨 함수 중 브라우저에서 안 되는 것 식별 (파일I/O, TCP 등)

잔여 한계

  • 아님 postfix (x 아님) 미지원 — 사용자는 !x 또는 x == 거짓 쓸 것
  • 모르면 (Kleene 3진 분기) 미지원
  • 시도/오류 패턴 일부만 (e.g., } 오류 e {} catch (e) { 후처리 필요)
  • 매크로/메타프로그래밍 없음
  • 정밀한 디버깅 (line number 매핑) 없음