연결됨 다시 연결 중 다시 연결 연결 실패 연결 일시 중지 복구 실패
공개 지식 로그 출처 @dimohy 리비전 v1 3개 관련 로그 2개 이전/다음 로그 0개 댓글

Sollang 웹 플레이그라운드를 제대로 확장해봤습니다

공개 로그
@dimohy 팔로우 0개 2026.07.25 7 분 7 조회관계 잇기

로그 요약

본문과 댓글은 @dimohy의 #sollang 태그, Sollang 개발기 시리즈, 리비전 v1, 2개 이전/다음 로그에 이어진 지식 로그입니다.

주요 태그 #sollang 로그 시리즈 Sollang 개발기 리비전 v1 3개 관련 로그 2개 이전/다음 로그

브라우저 언어별 UI, 영어 전체 문법 샘플 31개, 실제 stdin, Stage2 오류 진단과 예약어 강조까지 구현하고 공개 환경에서 검증한 작업 기록입니다.

안녕하세요. 디모이입니다.

이번에는 Sollang 웹 플레이그라운드를 단순한 데모 페이지가 아니라, 언어를 실제로 둘러보고 실행해볼 수 있는 공간으로 확장해봤습니다.

처음에는 stream 결과를 변수에 담아 다시 each로 흘려보내는 구조와 이벤트 스트림을 작업하고 있었는데요. 웹에서 확인하려고 보니 플레이그라운드 자체에도 손볼 부분이 꽤 많았습니다. 샘플이 적었고, 입력을 받는 예제는 실제로 동작하지 않았으며, 존재하지 않는 println2를 호출해도 오류 없이 줄을 건너뛰는 문제도 있었습니다.

우선 브라우저 언어 설정에 따라 화면이 한국어, 영어, 일본어, 중국어로 표시되도록 했습니다. 다만 샘플 소스는 어느 환경에서도 그대로 읽고 복사할 수 있도록 모두 영어로 통일했습니다.

샘플은 31개로 늘렸습니다. 기본 출력부터 변수와 타입, 조건과 반복, 함수, 문자열 보간, 배열과 컨테이너, 오류 처리, 소유권, stream과 이벤트까지 범주별로 볼 수 있습니다. 각 샘플은 단순히 목록에 존재하는 것에서 끝내지 않고 브라우저 Stage2 컴파일러로 실제 실행해 출력이 발생하는지 전부 확인했습니다.

입력도 흉내만 내지 않았습니다. readInt가 브라우저의 stdin 패널에서 줄을 소비하도록 sollang_browser_read 경로를 연결했습니다. 예제에서 12와 30을 입력하면 실제 실행 결과로 Sum = 42가 나옵니다. 소스 문자열을 바꿔치기하거나 서버에서 대신 실행하는 방식은 아닙니다.

컴파일 오류 경로도 바로잡았습니다. 이제 존재하지 않는 println2 같은 호출은 무시되지 않고, Stage2가 해당 위치와 원인을 진단합니다. 문자열 보간 경계가 모호한 경우에도 수정 힌트를 보여줍니다.

화면에서 아쉬웠던 부분도 하나 있었습니다. Sollang 문법은 count! < 8 -> while { ... }처럼 흐름 연산자 뒤에 제어문이 오는데, while이 평범한 호출처럼 보여 눈에 잘 들어오지 않았습니다. 토크나이저 우선순위를 조정해 while, if, else, when, each, fold, repeat를 제어문 예약어 색상으로 확실히 구분했습니다.

메모리 쪽에서는 브라우저 실행 시 동적 할당 시작점을 임의의 메모리 끝이 아니라 WASM의 __heap_base에서 가져오도록 했습니다. 지연 실행 stream의 장점을 살리는 것과 별개로, 브라우저 런타임에서도 불필요한 메모리 확장을 줄이기 위한 작은 정리였습니다.

최종 검증은 Stage2 고정점 7/7, 전체 회귀 785/785, 공개 브라우저 샘플 31/31, UI 언어 4개, 구문 색상 6종으로 마쳤습니다. stdin 실행, 편집 후 실행, 잘못된 호출 진단, 문자열 보간 진단도 함께 통과했습니다.

고급 네이티브 문법 중 아직 브라우저 백엔드가 직접 낮추지 못하는 일부 문법은 숨기지 않았습니다. 정확한 문법을 영어 주석으로 보여주고, 바로 옆에는 현재 브라우저에서 실행 가능한 본문을 배치했습니다. 다음 단계에서는 이 차이를 줄여 모든 네이티브 예제를 브라우저에서도 그대로 실행할 수 있게 만드는 것이 자연스러운 방향 같습니다.

직접 확인해보실 수 있습니다.

https://sollang.slogs.dev/

0 대화 흔적

이전 로그

공개 로그로그 시리즈: Sollang 개발기5 태그 0 대화 흔적 0 공감

정보 경로: @dimohy -> #sollang -> 시리즈 Sollang 개발기 -> 0 대화 흔적 / 0 공감

Sollang Stream을 변수에 담고, 마우스 이벤트까지 흘려보내기

Sollang의 Stream<T>를 무할당 지연 실행 계획으로 유지하면서 변수 저장과 라이브러리 경계를 지원하고, bounded EventStream<T>로 Windows/Linux 마우스 이벤트까지 연결한 구현 기록입니다.

@dimohy

대화 흔적 (0)

이 로그에 댓글을 남기려면 지식 로그 홈으로 돌아가야 합니다. 지식 로그로 돌아가기

아직 이어진 댓글이 없습니다. 첫 댓글을 남겨 보세요.

지식 로그 연결이 잠시 끊겼습니다. 다시 연결 ×