나무모에 미러 (일반/밝은 화면)
최근 수정 시각 : 2025-04-25 16:06:34

숨(프로그래밍 언어)



[[프로그래밍 언어|'''프로그래밍 언어
{{{#!wiki style="font-family: Times New Roman, serif; display: inline;"
]]
{{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px"
{{{#!wiki style="display: inline-table; min-width: 40%; min-height: calc(1.5em + 5px)"
{{{#!folding [ 목록 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=royalblue><colcolor=#fff> ※ 나무위키에 등재된 프로그래밍 언어 목록
AActionScript · Ada · Agda · ALGOL · APL · awk
BBASIC · Befunge · Brainfuck
CC · C# · C++ · Carbon · Chef · Clojure · COBOL · CoffeeScript · Coq · Crystal
DD · Dart
EElixir · Elm · emojicode · Erlang · ETA
FF# · Forth · Fortran
GGNU Octave · Go · Groovy
HHaskell · HolyC · HQ9+ · HRON
I
JJava · JavaScript · Julia
KKotlin · Krait
LLean · LISP · Lua
MMalbolge · MATLAB · Max · Mojo · Moonlight
NNim · Nix
OOberon · Objective-C · OCaml · Ook!
PPascal · Perl · PHP · Processing · Prolog · Python
QQ#
RR · Racket · Raku · ReasonML · Ruby · Rust
SScala · Scheme · Scratch · sed · Shakespeare · Shell Script · Smalltalk · Swift
TTypeScript
UUdon
VVisual Basic · Visual Basic .NET · Visual Basic for Applications · vvvv
WWave · Whitespace
X
Y
ZZenScript · Zig
한글누리 · · 씨앗 · 아희 · 약속 · 엄랭 · 엔트리 · 창조}}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 40%; min-height: calc(1.5em + 5px)"
{{{#!folding [ 순위 ]
{{{#!wiki style="margin: -5px -1px -10px"
{{{#!wiki style="min-height: calc(1.5em + 5px); margin: 0 -10px -5px"
{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ IEEE Spectrum 2024 ]
{{{#!wiki style="margin: -5px -1px"
<tablewidth=100%><tablebgcolor=transparent><colbgcolor=#11a500><colcolor=#fff> 스펙트럼 부문 상위 10개 프로그래밍 언어 <colbgcolor=#ff1100><colcolor=#fff> 직업 부문 상위 10개 프로그래밍 언어
1 Python 1 SQL
2 Java 2 Python
3 JavaScript 3 Java
4 C++ 4 TypeScript
5 TypeScript 5 SAS
6 SQL 6 JavaScript
7 C# 7 C#
8 Go 8 HTML
9 C 9 Shell
10 HTML 10 C++ }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ Stack Overflow 2024 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=#ffa500><colcolor=#fff> 2024년 Stackoverflow 설문조사 상위 25개 프로그래밍 언어
1 JavaScript <colbgcolor=#ffa500><colcolor=#fff> 14 Rust
2 HTML & CSS 15 Kotlin
3 Python 16 Lua
4 SQL 17 Dart
5 TypeScript 18 어셈블리어
6 Bash 19 Ruby
7 Java 20 Swift
8 C# 21 R
9 C++ 22 Visual Basic
10 C 23 MATLAB
11 PHP 24 VBA
12 PowerShell 25 Groovy
13 Go }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ TIOBE 2025 ]
{{{#!wiki style="margin: -5px -1px"
<colbgcolor=#2777c2><colcolor=#fff> 2025년 2월 TIOBE 검색어 점유율 상위 20개 프로그래밍 언어
1 Python <colbgcolor=#2777c2><colcolor=#fff> 11 Fortran
2 C++ 12 Scratch
3 Java 13 Rust
4 C 14 PHP
5 C# 15 R
6 JavaScript 16 MATLAB
7 SQL 17 Assembly language
8 Go 18 COBOL
9 Delphi / Object Pascal 19 Ruby
10 Visual Basic 20 Prolog }}}}}}}}}{{{#!wiki style="display: inline-table; min-width: 25%; min-height: calc(1.5em + 5px)"
{{{#!folding [ PYPL 2025 ]
{{{#!wiki style="margin: -5px -1px -10px"
<colbgcolor=green><colcolor=#fff> 2025년 3월 PYPL 검색어 점유율 상위 20개 프로그래밍 언어
1 Python <colbgcolor=green><colcolor=#fff> 11 Swift
2 Java 12 Go
3 JavaScript 13 Kotlin
4 C/C++ 14 MATLAB
5 C# 15 Ada
6 R 16 Dart
7 PHP 17 Ruby
8 Rust 18 Lua
9 TypeScript 19 PowerShell
10 Objective-C 20 VBA }}}}}}}}}}}} }}}}}}}}}}}}
분류:프로그래밍 언어 · 프로그래밍 언어 목록 · 언어별 예제 · 틀:프로그래밍 언어 문법

<colcolor=#fff>
Suum
파일:숨쉬어.png
<colbgcolor=#0836CE> 종류 시각적 프로그래밍 언어
개발 만드루
유통
버전 0.25
플랫폼 Windows
ESD Steam
사이트 파일:숨쉬어.png | 파일:유튜브 아이콘.svg
상점 페이지 파일:스팀 아이콘.svg
출시 앞서 해보기: 2025년 4월 25일
정식 출시: 미정

1. 개요2. 특징
2.1. 효율적인 입력체계2.2. 자유로운 작명과 함수 수정2.3. 안전한 메모리 관리2.4. 할당자 트리 쓰레기 수집2.5. 효율적인 반복문2.6. 다중상속2.7. 직관적인 괄호
3. 문제점4. 문법

1. 개요



2025년 앞서 해보기로 출시된 시각적 프로그래밍 언어. 순서도 기반으로 프로그램을 개발하며, 목적 프로그래밍을 만들지 않고 프로그램을 바로 실행하기 때문에 인터프리터 언어에 속한다.

무료 데모가 있으며, 무료 데모에선 실행 취소 기능이 없고, 앞서 해보기에서 실행 취소와 스팀 창작마당을 지원해 다른 사람과 개발한 프로그램을 공유할 수 있다.

로고를 자세히 보면 '숨' 글자를 형상화한 것임을 알 수 있다.

2. 특징

파일:안녕,세상.png 파일:hello,world.png
Hello, World! 출력 예제

Java처럼 모든 함수를 객체 내부에 구현하는 객체 지향 프로그래밍 언어이다.

영어 라이브러리와 한글 라이브러리가 별도로 존재한다.

텍스트 입출력을 명령 프롬포트가 아닌 전체화면의 검은 창으로 실행하는데, 코드를 실행할 때 별도의 프로세스를 만들지 않아서 그렇다. 명령 프롬포트를 닫으면 이를 실행중인 프로세스가 강제로 종료되기때문.

2.1. 효율적인 입력체계

시각적 프로그래밍 언어는 기존에도 존재했지만, 단점이 워낙 크기 때문에 전문 개발자들은 이를 사용하지 않았다.

숨 언어 개발자는 가장 큰 단점이 마우스 입력이라고 지적한다. 프로그래밍 언어는 변수명이나 수 같은 것을 적기 위해 키보드를 쓸 수밖에 없는데 마우스 조작이 필수이니 매번 키보드와 마우스 사이를 오가는 비효율적인 입력을 해야 한다는 것.

따라서 숨 언어는 키보드만 사용해 개발이 가능하도록 만들어졌다. 객체를 선택하는 화면 사이에서도 키보드만으로 이동과 선택이 가능하고, 다른 프로그래밍 언어에서 예약어로 쓰는 기능은 단축키로 입력한다. 때문에 사실상 텍스트 프로그래밍 언어를 사용하는 감각으로 개발이 가능하다.

물론 초심자를 위한 마우스 UI도 제공하며 해당 UI에서 키보드 입력키도 확인할 수 있다.

2.2. 자유로운 작명과 함수 수정

프로그래밍을 하다보면 의외로 고민거리인 것이 작명 문제이다. 숨 언어에는 네임스페이스는 제공하지 않지만, 아예 중복 이름을 허용한다. 같은 영역에서 이름이 중복될 경우 자동으로 작은 숫자로 번호가 붙어 구분되고, 지역변수와 매개변수, 객체의 멤버변수같이 다른 영역이면 색상으로 구분하며 멤버변수나 함수의 상단에는 소속 객체의 이름이 표시된다. 이름이 같은 대상들은 검색기에서 골라 쓸 수 있다.

숨 언어에서 이름은 프로그래머가 변수나 함수 등을 찾기 쉽도록 만든 검색용에 불과하다. 작성하는 순간 바이트코드로 변환된다. 때문에 이미 만들어진 변수나 함수명 등의 이름을 수정하면 그 이름을 사용하는 부분은 자동으로 바뀐다.

또한 함수의 매개변수를 추가하거나 삭제했을 경우 사용하는 곳에선 자동으로 갱신되며, 함수 오버라이딩을 했을 경우 오버라이딩한 부분도 자동으로 갱신된다. 덕분에 매개변수도 쉽게 추가할 수 있다.

2.3. 안전한 메모리 관리

Kotlin처럼 포인터 참조 오류나 배열 인덱스 범위 오류 등 메모리 오류를 미리 탐지하고 오류가 있을 경우 0을 반환한다. 모든 참조에 대해 검사하기 때문에 성능 하락은 감안해야 하지만 버그가 발생하는것보단 낫다. 스택 오버플로도 탐지하고 예외를 던진다. 모든 변수에 대한 기본 초기화도 제공해 초기화 관련 오류를 겪을 일도 없다.

2.4. 할당자 트리 쓰레기 수집

메모리가 참조된 횟수를 세어 0이 되면 해제하는 참조 횟수 기반 쓰레기 수집기를 개량한 방식이다. 참조 횟수 기반 쓰레기 수집기는 참조가 서로를 가리키는 순환참조가 발생했을 때 참조 횟수가 0이 되지 않아 접근이 불가능해도 해제되지 않는 문제가 있다. 기존 언어에서 이를 해결하기 위해 참조를 강한 참조와 약한 참조로 나누어 강한 참조가 0이 되면 해당 객체에서 다른 메모리리로의 참조를 제거하는 방식을 쓰지만 이 경우 강한 참조끼리의 순환참조는 해결할 수 없다는 문제가 있다.

이를 해결하기 위해 숨 언어에선 강한 참조에 해당하는 할당자는 다른 할당자와 공유가 불가능하고 참조를 이동시킬수만 있게 했다. 할당자를 대입하면 원래 있던 할당자는 비워져서 한 객체를 참조하는 할당자는 한개만 존재한다. 그러면 이론상으로 할당자끼리는 트리 구조를 이루게 되며, 트리는 순환이 없는 자료구조이기 때문에 순환참조가 어느정도 방지된다.

다만 이렇게 해도 할당자끼리 순환참조가 생기는 경우는 있을 수 있는데, 전역 변수나 약한 참조에 해당하는 참조자를 통해 할당자가 전달되는 경우이다. 이를 방지하기 위해 할당된 객체에는 트리의 루트를 기록한다. 할당자가 참조자나 전역 변수를 통해 전달될 경우 전달할 객체와 객체가 할당자로 가리키는 객체들의 루트를 변경하며, 이후 객체를 구성하는 할당자로 이동할 때 해당 객체의 루트가 할당자의 루트와 동일할 경우 순환참조로 간주해 해제한다.

기존보다 오버헤드가 더 발생하는대신 순환참조를 신경쓸 필요가 없게 되었다. 또한 할당자가 많이 이어져 있는 객체를 참조자나 전역 변수로 옮기는 상황이 아니면 차이가 크진 않다.

또한 스택 메모리에서만 쓰는 등의 이유로 쓰레기 수집이 필요하지 않은 경우에 쓰기 위해 지시자라는 지역변수 전용 참조가 존재한다.

2.5. 효율적인 반복문

숨 언어는 간이 반복문과 일반 반복문으로 2가지 반복문을 제공한다. 간이 반복문은 숫자를 넣으면 0부터 시작해서 1씩 더해 해당 숫자가 올때까지 반복하고, 배열을 넣으면 해당 배열을 순회한다. 일정 횟수만큼 반복시키는 단순한 반복문을 쉽게 만들 수 있는 구문이다.

자료구조의 순회는 고차 함수를 활용할 수 있다.

일반 반복문은 상당히 특이하게 만들어져 있는데, 그 자체로는 반복문으로 기능하지 않고, 안에서 조건문을 사용하면 그 분기를 반복문의 시작이나 끝으로 연결할 수 있다. 언뜻 보기엔 goto와 비슷하다고 보일 수 있지만 실제론 기존 언어로 치면 do~while(false)의 방식이다.

반복문 자체에선 조건식을 쓸 수 없지만 단축키 하나면 조건문이든 반복문이든 만들어지니 큰 문제는 아니고, 조건문이 반복문 중간에 와야 하는 경우도 있기 때문에 상황에 따라서는 더 효율적이다.

그 진가는 반복문 여러개가 중첩되있을때 드러나는데, 중첩된 반복문이어도 한번에 바로 빠저나갈 수 있으며 최상단으로 돌아갈 수도 있다. 게다가 어느 반복문으로 이동할지가 화살표로 표시되기 때문에 직관적이며, 반복문 내부에서만 연결할 수 있기 때문에 스파게티 코드가 잘 만들어지지 않는다.

2.6. 다중상속

객체의 다중상속을 지원한다. 다중상속엔 문제점이 하나 있는데, 같은 부모를 상속하는 두 객체를 상속받았을 때 부모 객체의 함수를 두 객체가 오버라이딩 했을 경우 해당 함수 호출시 어느 함수를 호출해야 할지 모호해지는 문제가 발생하며 이를 '죽음의 다이아몬드'라 한다. 기존 언어들은 해결책으로 내용이 없는 추상 함수만으로 만들어진 객체인 인터페이스만 다중상속이 가능하도록 한 경우가 많지만, 추상 함수만으로 이뤄졌다는 특성상 같은 구현을 매번 다시 해줘야 해서 코드의 재사용성이 크게 저하되는 문제가 있다.

숨 언어에선 인터페이스 상속과 더불어 '조상 객체' 다중상속을 지원한다. 조상 객체는 인터페이스를 포함한 그 어떤 객체도 상속하지 않는 객체를 말하며, 해당하는 객체를 다중상속할 수 있는 객체로 지정할 수 있다. 죽음의 다이아몬드 구조는 부모 객체가 있는 객체를 다중상속해야 발생하므로 부모 객체가 없는 객체만 다중상속을 허용해서 죽음의 다이아몬드의 발생 자체를 막는 개념이다.

더불어서 상위 객체의 변수나 함수를 사용할 땐 검색기에서 소속 객체를 확인할 수 있고 작성하고 나면 이름 위에 소속 객체가 표기되기 때문에 단순히 이름이 같은 식별자의 구별도 용이하다.

2.7. 직관적인 괄호

괄호의 위쪽과 아래쪽이 반대쪽 괄호와 이어져 있으며 괄호 안에 괄호가 있으면 바깥쪽 괄호가 커진다. 때문에 괄호가 열리는 위치와 닫히는 위치를 파악하기 쉬워 코드를 읽기가 쉽다.

3. 문제점

앞서 해보기 프로그램이라 구현되지 않은 기능이 많다. 파일 입출력이나 스레드, 소켓 등의 라이브러리 지원도 부족하고, 복사, 붙여넣기도 없고, 주석도 없고, 디버거도 없다. 기본적인 문법들과 이미지 렌더링이나 문자 출력, 하드웨어 입력정도만 구현된 상태이다.

4. 문법

파일:상세 내용 아이콘.svg   자세한 내용은 숨(프로그래밍 언어)/문법 문서
#!if (문단 == null) == (앵커 == null)
를
#!if 문단 != null & 앵커 == null
의 [[숨(프로그래밍 언어)/문법#s-|]]번 문단을
#!if 문단 == null & 앵커 != null
의 [[숨(프로그래밍 언어)/문법#|]][[숨(프로그래밍 언어)/문법#|]] 부분을
참고하십시오.