본문 바로가기
C.W.K.
Stream
Lesson 02 of 04 · published

코어는 임베드, 다시 쓰지 마

~12 min · swiftterm, embed, pin, vt, core

Level 0불씨
0 XP0/36 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete

불만은 파서가 아니었어

VT 에뮬레이터는 몇십 년치 예외야. 글리프 대체, 결합 문자, 이미지 프로토콜, 괄호 붙여넣기, 한국어 IME 가 아직 조합 중일 때 표시하는 방식. 그 일은 진짜고, 아빠가 시킨 일이 아니야. 마찰은 객체처럼 안 느껴지는 탭, 창이랑 같이 죽는 세션, 두드리지 못하는 형제, 주인이 되지 않고는 볼 수 없는 폰. 그건 코어 에 있어.

그래서 Smolder 는 코어를 임베드하고 버전을 고정해. SwiftTerm, 정확한 버전, 판마다 터미널 뷰 하나. 코어는 글꼴, 색, 스크롤백, Option 을 Meta 로, 벨까지 설정해. 패치하진 않아. 키보드 규칙이 필요하면 에뮬레이터 포크가 아니라 앱 수준 이벤트 모니터가 태워.

범위가 아니라 핀인 이유

떠다니는 버전은 화요일에 렌더러가 바뀌고 수요일에 하네스 넷 창이 다르게 느껴지는데, 네가 가리킬 커밋이 나무에 없는 길이야. 정확한 핀은 코어를 고른 벽돌로 만들어. 옮기는 건 기록된 결정이지, 습관적인 up 이 아니야.

핀을 고른 그날, 다른 코어도 읽고 테이블에 남겨 뒀어. 더 빠른데 API 가 아직 흔들리고, 버전이라고 부를 버전이 없는 쪽. 하네스 넷의 지연을 재서 요구할 때만 다시 봐. 코어를 임베드한다고 성능이 증명되진 않아. 잘못된 층을 다시 쓰기를 멈췄다는 게 증명될 뿐이야.

표면 둘, 코어 하나

맥 호스트는 AppKit 이야. 폰은 SwiftUI 가 UIKit 터미널 뷰를 감싸. 둘 다 SwiftTerm 을 붙여. 우연이 아니고 언어 수업 예고도 아니야. 언어 수업은 아직 없는 형제 퀘스트야. 제품의 사실은 이거야. 에뮬레이터는 양쪽 표면이 공유하는 의존성이라, 글리프 버그는 핀 하나지 포크 둘이 아니야. 네 코드는 배치, 부착, 리스, 크롬에 남아.

코어는 설정해. 패치하지 마. 에뮬레이터에 로컬 diff 를 들고 있는 순간, 다시 안 쓴다고 했던 터미널 코어를 소유하게 돼. 그 선 위에서 표현 못 하는 가족 기능은 거절할 기능이거나, 코어를 공개적으로 바꿀 때가 됐다는 측정이야.

Code

핀이 결정이고, 컴파일러가 보이는 자리에 적혀·swift
// swift-tools-version: 6.2
import PackageDescription

let package = Package(
    name: "Smolder",
    platforms: [
        .macOS(.v14), .iOS(.v17)  // shared package; iOS Xcode project links SmolderRemoteWire
    ],
    dependencies: [
        // Exact, not from:..to. The core does not move by accident.
        .package(
            url: "https://github.com/migueldeicaza/SwiftTerm.git",
            exact: "1.20.0"
        )
    ],
    targets: [
        // One view per pane. The daemon owns the PTY; this draws.
        .executableTarget(
            name: "SmolderApp",
            dependencies: [
                .product(name: "SwiftTerm", package: "SwiftTerm")
            ]
        )
        // iOS is a separate Xcode project with the same exact SwiftTerm 1.20.0 pin.
        // The shared wire target compiles without AppKit and without SwiftTerm.
    ]
)

External links

Exercise

에뮬레이터에서 "그냥 고치고 싶은" 터미널 동작 하나를 골라. 키 코드, 글리프, 붙여넣기 모드. 두 칸을 써. (1) 설정이나 앱 수준 모니터로 살 수 있나? (2) 코어에 로컬 패치를 치면, 소유하고 싶지 않았던 파서의 주인이 되나? 2가 예이고 1이 아니면, 그건 패치가 아니야. 코어를 바꾸는 결정이고, 공개적으로 해야 해.
Hint
IME 조합 표시랑 이미지 프로토콜은 남의 몇 년을 산 이유야. 가족 키 코드는 이벤트 모니터가 있는 이유야. 그걸 섞는 게 포크가 태어나는 길이야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.