변경 기록
NME의 중요한 변경 사항을 이 문서에 기록합니다.
미출시 (Unreleased)
0.9.1
- 컴파일이 2.9배 빨라졌고, 만들어 내는 파이썬은 글자 하나까지 같습니다. 함께
들어 있는 가장 큰 예제
examples/peace.ko.nme(4,337줄)가 2,254ms에서 780ms가 되었습니다. 함께 들어 있는 예제 68개를 고치기 전과 뒤에 모두 컴파일해 바이트까지 견주었고 68개 전부 같습니다. 시험 786개도 그대로입니다. 언어는 한 군데도 바뀌지 않았습니다.- 이 컴파일러가 사이트가 실제로 돌리는 것입니다 — 브라우저 안에서 WebAssembly로, 글을 치는 동안. 2.2초짜리 컴파일은 그 크기의 프로그램에서 한 글자마다 탭을 4초씩 얼렸고, 휴대폰에서는 쓸 수 없었습니다. 여기서 속도는 덤이 아니라 그 쪽이 되느냐 마느냐입니다.
- 오타를 고칠 것이 있는지 보기 전에 힙을 잡지 않습니다.
one_typo_away가 두 낱말의 길이를 보기도 전에 둘 다Vec<char>로 모으고 있었습니다 — 그 파일 하나에 530만 번 불리니 힙 할당이 1,050만 번이고, 전체 시간의 21%였습니다. 이제 글자를 걸어가며 보고 아무것도 잡지 않습니다.action_typo_away는 글자 자리마다 벡터를 통째로 복제했고 그것도 두 번씩, 710만 번이었습니다. 이제 짧아진 낱말을 만들지 않고 빠뜨릴 자리를 건너뛰며 읽습니다. - 후보에 따라 달라지지 않는 질문은 표당 한 번만 묻습니다. 쓴 낱말이 애초에 고칠 수 있는 것인지(길이 · 컴파일러가 이미 아는 낱말인지 · 흔한 영어 낱말인지)와 그 낱말의 소문자꼴을, 항목이 수백 개인 표에서 항목마다 다시 구하고 있었습니다.
- 같은 질문을 여섯 번씩 되묻지 않습니다. 그 파일에서 낱말 맞춰보기 질문
913,265번이 실제로는 서로 다른 148,289개입니다. 매처 마흔이 같은 줄을 걷고,
그중 몇은 세 번 네 번 다시 계산되기 때문입니다.
best_action_rank는 낱말과 표와 방식만으로 답이 정해지는 함수이므로, 그 답을 한 번의 파싱 동안만 기억했다가 끝나면 버립니다. 표는 그것이 놓인 자리로 이름 붙이는데, 자리가 이름이 될 수 있는 이유는 타입이'static이기 때문입니다 — 임시로 만든 목록은 애초에 그 자리에 들어가지 못합니다. - 제곱 하나를 없앴습니다.
count_remaining_ends가 줄마다 남은 파일 전체를 다시 훑고 있었습니다. 4,000줄에서는 대수롭지 않지만 32,000줄에서는 3.5초였고, 이제 한 번의 역방향 훑기가 모든 줄의 답을 한꺼번에 냅니다.
0.9.0
- 참이 될 수 없는 비교를 컴파일하지 않고 알려 줍니다(
E0606). 위에서 값을 담아 둔 이름과 같은 낱말은 그 값으로 읽힙니다. 그래서수호룬은 거짓을 적어 둔 프로그램에서선택을 물어봐 수호룬, 폭약다음의만약에 선택이 수호룬과 같으면은 사람이 친 글을거짓과 견주게 되고, 그 가지는 어떤 입력에도 실행되지 않습니다. 컴파일도 실행도 아무 말을 하지 않아 프로그램이 조용히 틀린 채로 돌았습니다. 이제 두 쪽이 절대 같아질 수 없는 종류이면 그 자리에서 멈추고, 두 쪽에 무엇이 담겼는지 말합니다.물어봐로 받은 대답을 숫자와 견주는 것도 같은 자리에서 걸립니다.답을 물어봐 숫자를 대세요다음의만약에 답이 7과 같으면이 그것입니다. 이때는숫자로 물어봐를 함께 알려 줍니다.- 일 이름이 선택지 낱말이기도 한 경우도 걸립니다.
공격이라는 일:을 적어 둔 프로그램에서만약에 행동이 공격과 같으면은 사람이 친 글을 일 자체와 견줍니다. - 목록에서 찾는 문장도 봅니다.
검은 거짓아래만약에 가방에 검이 있으면은 글만 담긴 목록에서 참/거짓을 찾으므로 언제나 거짓입니다. 목록을 한 줄에 통째로 적었고 그 뒤로 아무것도 넣지 않은 경우에만 봅니다. - 조건을 파이썬으로 적은 초급 표기도 같은 검사를 받습니다.
만약 선택 == 수호룬:이 그것입니다.이름 == 값한 모양만 읽고, 괄호·셈·부름이 섞이면 파이썬에 맡깁니다. - 걸리는 짝은 글·숫자·참/거짓·목록·표·일 사이에서 서로 만날 수 없는 것뿐입니다.
숫자와 참/거짓은 걸리지 않습니다 — 파이썬이
True == 1을 참이라고 답하므로 그 둘은 실제로 같아질 수 있습니다. - 이름에 무엇이 담기는지는 프로그램 전체를 읽어 정합니다. 한 이름에 서로 다른 종류가 담기거나, 파이썬으로 적은 줄이 그 이름을 한 번이라도 건드리면 그 이름은 검사에서 빠집니다. 확실할 때만 말하기 위해서입니다.
- NME와 함께 오는 예제 158개와 문서 안 프로그램 1,011개 가운데 이 검사에 걸리는 것은 한 곳도 없습니다.
- ⚠지금 잡는 범위: 이름의 종류를
이름은 값과물어봐두 문장에서만 읽습니다. 그래서점수에 1 더해가 한 줄이라도 있으면점수는 그 파일에서 검사 대상에서 빠집니다. 실전에서 숫자 이름은 대개더해를 쓰므로, 이번 판이 잡는 것은 한 번 담고 그대로 두는 이름이 대부분입니다. 값을 바꿔도 종류는 그대로라는 것(숫자에 더해도 숫자, 글에 더해도 글)까지 읽게 하면 범위가 크게 넓어지는데, 이번 판에는 규칙을 하나만 담아 내보내려고 넣지 않았습니다. - ⚠반복 조건은
아니면을 가질 수 없으므로, 반복 조건이 무엇을 넣어도 참인 것은 알리지 않습니다.그만으로만 빠져나오는 반복은 정상이기 때문입니다.
- 가이드 31(은행)의 한국어판이 잘못된 출력을 가르치고 있었습니다.
잔액은 50아래의잔액이 모자랍니다 말해줘는잔액이 이미 이름이라50이 모자랍니다를 찍었는데, 가이드는잔액이 모자랍니다가 나온다고 적어 두었습니다. 문장을돈이 모자랍니다로 바꿨습니다. 영어판은 처음부터show there is not enough라 이 자리가 없었습니다. - 문법 안내(한국어)의 물음 예제가 앞의 대답을 물음에 끼워 넣고 있었습니다.
이름을 물어봐 …바로 아래의물어봐 이름, 이름이 뭐예요?는이름이 이미 있으므로 방금 친 대답을 물음에 붙여 보여 주었습니다. 두 번째 줄을물어봐 별명, 별명이 뭐예요?로 바꿨습니다. - 출력 검사가 이런 것을 못 보고 있었습니다.
check-guide-output.py는 「프로그램 안에도 나오는 글은 출력 약속이 아니라 코드 인용이다」로 걸러 냈는데,말해줘가 붙은 줄에서는 그 글이 바로 출력입니다. 그 줄에서는 거르지 않도록 고쳤고, 그 즉시 위의 은행 가이드가 빨간불이 됐습니다. - 일이 값을 돌려줄 수 있습니다. 일 안에서
결과로 <값> 돌려줘(또는 그냥<값> 돌려줘), 받는 쪽에서답은 5에게 두배 한 결과. 영어는give back <값>·answer with <값>과the result of double with 5입니다. 전에는 일이 알아낸 것을 밖으로 꺼낼 방법이 바깥 목록을 일부러 고치는 것뿐이었습니다 — 값 하나를 받으려고 목록을 만들고, 넣고, 다시 꺼내야 했습니다.돌려줘와give back은 일 안에서만 그 뜻입니다. 일 바깥의그 책 돌려줘는 그대로 글로 나옵니다.한 결과도 그 프로그램이 이미 만든 일 이름 뒤에서만 답을 뜻하므로,회의 한 결과 말해줘는 문장 그대로입니다.- 값이라서 출력·저장·조건 어디에나 쓸 수 있고, 여섯 칸 전부에서 같은 것을 씁니다.
0.8.0
- 이름 끝에 우연히 들어간
면이 더는 대입을 삼키지 않습니다.적이름은 황금가면 도적왕 레마르는if (적이름 == "황금가"): print("도적왕 레마르")가 되었습니다. 대입이 사라지고 이름은 만들어지지 않았는데, 컴파일도 검사도 정리도 아무 말을 하지 않았습니다. 한국어 이름은장면·측면·수면처럼 그 음절로 끝나는 일이 흔하므로, 낱말 안에서만 찾아낸면은 이제 비교의 근거로 가장 약한 것으로 다룹니다.- 뒤에 할 일이 없으면 비교가 아닙니다. 블록으로 쓴
이름이 철수면은 아래 줄에 할 일이 있으므로 그대로 비교입니다. - 뒤에 할 일이 있어도 줄이
은·는으로 열리면 대입이 이깁니다.은·는은 한국어가 「이 이름에 이 값을 준다」를 적는 방식이고, 비교는 주어에이·가를 씁니다. 다만 왼쪽이 숫자이거나 이미 만들어 둔 이름이면 그대로 비교합니다 —나이는 20이면 어른 말해줘는 전과 같이 읽힙니다.
- 뒤에 할 일이 없으면 비교가 아닙니다. 블록으로 쓴
- 문장문법으로 정수 몫을 구할 수 있습니다.
줄수는 점수를 인원으로 나눈 몫(영어set rows to the whole number of score divided by people).나눠는 파이썬의/라서 답이 소수가 되고, 소수는 목록의 몇 번째·반복 횟수·저장할 점수 자리에 넣을 수 없어 그 자리에서 프로그램이 멈춥니다. 그래서 지금까지는 빼기를 되풀이해 세는 수밖에 없었습니다 — 한 가지를 말하는 데 반복문이 필요했습니다.나눈 나머지와 짝입니다. - 글자로 적힌 숫자를 숫자로 되읽을 수 있습니다.
레벨은 레벨글을 숫자로 바꾼 것(영어set level to levelText as a number).숫자로 물어봐는 사람이 치는 순간에만 숫자로 읽습니다. 프로그램이 이미 들고 있는 글 — 저장한 줄에서 잘라 낸 조각, 목록에서 꺼낸 항목, 파일에서 읽은 줄 — 을 숫자로 바꿀 방법은 없었습니다. 숫자가 아닌 글은 0인 척하지 않고 그 자리에서 멈춥니다. - 이어 붙인 결과를 이름에 담을 수 있습니다.
한줄은 친구들을 쉼표로 이은 것.쉼표로 이어 말해줘는 화면에 내보내기만 했고, 같은 것을 이름에 담는 문장이 문서에 없었습니다.친구들을 쉼표로 이어가 이미 되고 있었으므로 문서에 함께 적었습니다. - 정돈기가 한국어 조사를 낱말에 붙여 씁니다.
친구들 개수 가·인원 로처럼 한 칸 띄어 내놓던 것을친구들 개수가·인원으로로 씁니다. 문법표가 보여 주는 모양이자 한국어를 쓰는 사람이 실제로 쓰는 모양입니다. - 일이 읽는 이름이 아래에 있으면 글자로 굳는다는 것을 문법표에 적었습니다.
docs/syntax.ko.md§23. 컴파일은 통과하고 실행할 때에 가서야 멈추므로, 되풀이해 겪기 전에는 알아채기 어렵습니다.
0.7.1
- 고를 것이 두 낱말 이상이어도 하나로 셉니다.
pick from stone golem or black knight가 낱말 하나씩 쪼개져 네 갈래가 되었고, 아무 말도 하지 않았습니다 — 프로그램은 어떤 판에는 golem과, 어떤 판에는 stone과 싸웠습니다. 이제 갈라 놓는 말과 말 사이는 몇 낱말이든 하나로 셉니다. 목록이 이미목록 돌 골렘, 검은 기사를 둘로 읽는 것과 같습니다.
0.7.0
- 정돈기가 여섯 칸 중 어디에서 온 프로그램이든 같은 자리에 놓습니다.
문장문법·초급·고급, 한국어·영어 어느 쪽으로 쓴 파일이든 나머지 다섯 칸으로
바꾸면 그 칸이 쓰는 방식대로 나옵니다. 전에는 「고급 → 문장」이 거의 아무것도
바꾸지 못했습니다. 변환기는 파이썬 모양을 열 몇 가지만 알았고 정돈기는 문장
백쉰다섯 개를 알았는데, 두 쪽이 한 번도 이어져 있지 않았습니다. 이제 파이썬
한 줄을 「그 줄을 썼을 문장」으로 되읽고, 그 낱말은 원래 NME였던 줄이 쓰는
낱말과 같은 곳에서 옵니다.
- 짐작하지 않습니다. 되읽은 것은 다시 파이썬으로 낮춰 보아 들어온 줄과 글자까지 같을 때만 받아들이고, 파일 전체를 한 번 더 변환해 확인합니다.
- 한 문장이 표기를 여럿 내놓습니다 — 같은 줄을 더 수수하게 쓴 것, 다른 층으로
쓴 것 — 그리고 파일이 받아들일 수 있는 가장 좋은 것을 씁니다.
Hello가 이름이기도 한 곳의show Hello는 영어로 남지 않고말해 "Hello"가 됩니다. - 블록은 닫는 방식을 그대로 지킵니다.
끝으로 닫는 블록의 머리말에:를 붙이면 그끝이 닫을 것이 없어지므로, 글쓴이가 쓴 표시를 그대로 돌려줍니다. 30% 확률로:와아니면:도 읽습니다.말해줘: 안녕이 이미 그랬듯이.- 한국어 조사가 그 낱말에 맞는 쪽으로 붙습니다. 한 글자 이름도 마찬가지입니다
(
p은이 아니라p는). 그래서 정돈은 조사도 고르게 맞춥니다. scripts/check-tidy-parity.py가 이것을 증명합니다. 여섯 칸의 모든 방향, 문법 문서의 모든 기능, 3225번의 변환입니다.
- 한국어에서 출력 낱말로 끝나는 줄은 무언가를 말하는 줄입니다.
foeName goes down 말해줘가 거절되었습니다.down을 숫자를 빼는 낱말로 읽었기 때문입니다. 한국어는 동사를 끝에 두므로 출력 낱말 앞은 전부 그 줄이 말하는 내용입니다. - 질문이 제 이름을 지킵니다.
ask number age 몇 살이에요?가age 몇 살이에요?라고 물었습니다. 한국어 질문 형태가 바로 앞 낱말을 답이 들어갈 이름으로 읽어서, 글쓴이가 이미 적어 둔 이름을 삼켰습니다. 한국어 질문은 한국어 낱말에 대한 것이므로, 그 앞의 로마자 이름은 글쓴이가 정한 이름입니다. 저장 친구들 ["민수", "지안"]도 목록을 만듭니다. 전에는 문장문법 표기만 목록으로 쳐서, 초급으로 적은 줄 아래의친구들에 보 넣어가 「만든 적 없는 목록」이라며 거절되었습니다.- 띄어쓰기가 빠진 낱말이 갈라져 읽힙니다.
sayhello,showhello,안녕말하기,setscore to 0,점수는0,wait3 seconds,2초대기해,점수에1더해,3번반복해서 안녕 말해줘가 모두 적힌 대로 동작합니다. NME는 전부터 띄어쓰기가 어디에 들어가는지 알아내고 있었고 — 예전 오류 문구가 바로 그것을 알려 주었습니다 — 이제는 알려 주는 대신 띄어쓰기를 되돌려 놓고 그 줄을 읽습니다. 갈라진 조각 가운데 하나가 NME가 아는 낱말이고 전체가 문장으로 읽힐 때만 갈라 놓으므로,story of a small town doctor·Nearly finished·a story worth telling은 그대로 문장이고wait3 apples는 그대로 짚어 줍니다. - 표에 넣는 것과 읽는 것을 값의 모양으로 가릅니다.
set Mina to 90 in ages와set best to Mina in ages는 같은 여섯 낱말이 같은 차례로 놓인 것인데 뜻이 반대입니다. 앞의 것은 90을 민수 밑에 적어 두려는 문장인데Mina = ages[90]이 되어 실행할 때 죽었습니다. 이제to뒤에 오는 것이 가릅니다 — 숫자나 따옴표 안의 글자는 써 넣는 값, 낱말은 읽어 오는 이름입니다. 둘 다 살아 있고, 숫자를 이름으로 삼은 표도 숫자를 이름에 먼저 담으면 그대로 읽힙니다. - 말끝에 동작 낱말을 쓴 문장에서도 마침표가 문장부호로 읽힙니다.
안녕. 잘가는 이미 글로 읽혔지만안녕. 잘가 말해줘는 파이썬의 점 연산으로 넘어가, 브라우저에서는 아무 말 없이 컴파일된 뒤 실행할 때 죽었습니다. 동작 낱말을 말끝에 쓰는 것이 한국어의 보통 어순이라, 마침표 하나 차이로 한국어 프로그램 전체가 여기에 걸릴 수 있었습니다. - 첫 가이드가
#으로 시작하는 줄을 설명합니다. 초보자는 예제 맨 위의 주석을 프로그램의 일부로 읽습니다. 그것이 사람에게 남기는 쪽지이고 전부 지워도 결과가 같다는 것을 한 단계로 보여 줍니다.
0.6.0
- 한 칸 들여 쓴 프로그램을 읽고, 나온 파이썬에서는 그 여백을 뗍니다.
안녕 말해줘는 문서에서 복사한 글이 흔히 갖는 모습이고, CPython은 이것을 읽기도 전에 들여쓰기 오류로 거절합니다. 파일의 첫 줄은 그 위에 아무것도 없으므로 그 들여쓰기는 잘못이 아니라 파일 자체의 왼쪽 여백입니다. 모든 줄이 함께 가진 공백만 떼므로 프로그램 안의 층은 그대로이고, 삼중 따옴표 글자가 들어 있는 프로그램은 손대지 않습니다. 아래쪽에서 블록 없이 들여 쓴 줄은 여전히 짚어 줍니다. - 파이썬 자리에 적은
:를 읽고 넘어갑니다.say: hello,말해줘: 안녕,3번 반복해:,if score is greater than 10: show won,만약에 점수가 10보다 크면: 성공 말해줘가 모두 됩니다. 파이썬 설명은 머리글 끝에 늘 이 기호를 붙이므로 그것을 본 사람은 따라 적습니다. NME에는 필요 없지만, 적었다고 해서 줄을 거절하지는 않습니다. 이야기 블록이 쓰는:와 파이썬의 이름 메모(x: int = 5)는 그대로이고,안녕 말해줘:는 그 기호를 출력하지 않습니다. - 기호로 적은 비교는 그 기호의 값에서 끝납니다.
만약 점수 > 10 성공 말해줘와if score > 10 show won은 본문이 시작되기 전에 비교에 필요한 것을 이미 다 말했습니다. 그래서 값 뒤에 오는 말은 무엇을 할지가 됩니다. 기호로 적었을 때만 그렇습니다. 낱말로 견주는 표기는 자기 이음말을 따로 가지므로if name is Mina Lee는 두 이름을 그대로 지킵니다. - NME에 없는 동작 낱말을 그 자리에 맞는 낱말로 읽습니다.
log hello,2초 멈춰줘,출력하기 안녕,3번 돌려서 안녕 말해줘,이름을 입력해 이름이 뭐예요?,친구들에 민수 집어넣어가 모두 됩니다. 이런 줄은 「이 자리에는 이 낱말을 적으세요」라는 안내가 나오기 전에 이미 명령으로 판정된 줄이었습니다. 그래서 이제는 안내만 하지 않고 그 낱말로 읽습니다. 고쳐 넣어도 문장이 되지 않으면 안내가 그대로 나옵니다 —wait3 seconds는wait seconds가 되는데 얼마를 기다릴지가 없습니다. 보통 글은 그대로입니다:그는 이렇게 말합니다,조금만 기다립니다,log the miles you walked this week,output of the factory fell again은 여전히 그 줄을 그대로 출력합니다. - 무엇에 쓸지 없는 모듈 도구에 제 코드 E0410을 주었습니다. E0406을 빌려 쓰고 있었는데, 그 코드의 제목은 「읽지 못한 모듈 줄」이라서 찾아본 설명이 읽고 있던 문구와 다른 이야기를 했습니다.
점수은 빈 목록이 아니라점수는 빈 목록입니다. E0240의 도움말이 한국어 주제 조사를 이름에서 고르지 않고 손으로 적고 있었습니다.어제·2일 전·3일 뒤가 문장이 되었습니다. 영어로는yesterday·2 days ago·3 days from now입니다. 위에날짜 사용 최신이 있을 때만 날짜가 됩니다. 그 줄이 이 표기가 바뀌어 들어갈 이름을 묶기 때문입니다. 그래서약속은 3일 전이었습니다와3 days ago I saw her는 그대로 출력되는 평범한 문장입니다. 33편은 이제 처음부터 끝까지 문장으로 쓰여 있습니다.
0.5.0
- 문장형 AI 프롬프트에 날짜 도구 상자를 넣었습니다. 문장 프로그램이
사용줄 없이 말할 수 없는 것은 이것 하나인데 33·36편이 이것을 쓰므로, 그 프롬프트를 받은 AI는 두 편을 쓸 수 없었습니다. 오늘 말해줘가 오늘 날짜를 보여 줍니다. 날짜 모듈은오늘·요일·올해와 영어 짝을 함수로 묶습니다. 그래서 괄호 없이 쓴 줄은<function <lambda>>를 출력했습니다. 돌아가기는 하는데 아무도 원하지 않은 것을 말하고, 왜 그런지도 말해 주지 않는 프로그램이었습니다. 이제 이 여섯 이름은 혼자 서 있을 때 답을 내놓으며, 덕분에 33·36편을 문장으로 쓸 수 있게 되었습니다. 뒤에 무엇을 적어야 하는 이름(며칠뒤·개수)은 그대로입니다.- 무엇에 쓸지 없이 적은 모듈 도구를 짚어 줍니다.
개수 말해줘와show count는print(<function <lambda>>)가 되었습니다. 새 문구는 어느 이름이 도구인지와 이 줄에 무엇에 쓸지가 없다는 것을 말해 줍니다.원주율·pi·판번호 문자열처럼 고정된 값은 그대로 보여 줍니다. 이름은 물어봐가 답을이름에 저장합니다. 주제를 나타내는은이 이름의 일부로 남아서이름은이라는 이름이 만들어졌고, 그 뒤에이름이라고 쓴 줄은 모두 만든 적 없는 것을 가리켰습니다.이름님 안녕하세요가이름자리에 답을 넣습니다.님은 조사가 아니지만 조사처럼 붙여 쓰고, 인사하는 프로그램이 가장 먼저 찾는 말입니다.씨는 일부러 넣지 않았습니다.날이라는 이름이 있는 프로그램에서날씨가 쪼개집니다.for eachfriend in friends가friend로 돕니다. 띄어쓰기를 빠뜨리면eachfriend라는 이름이 만들어지고, 그 아래에서friend라고 쓴 줄은 낱말을 그대로 출력했습니다.- 정돈하면 원래 쓰던 언어를 그대로 지킵니다.
nme tidy로 한국어 프로그램을 정돈하면 영어로 돌려주었는데, 이는 아무도 요청하지 않은 번역입니다. 이제--language를 적지 않으면 프로그램이 쓰인 언어를 그대로 씁니다. 판단은 프로그램을 이루는 낱말로 하며, 따옴표 안의 글과 주석은 세지 않습니다. 그래서print("안녕")은 영어 프로그램으로 남습니다. - 글 한 덩어리를 보여 주는 한국어 줄은 동사를 끝에 둡니다.
보여줘 "안녕하세요"가 아니라"안녕하세요" 말해줘입니다. 정돈기와 파이썬 변환기가 둘 다 앞의 형태로 적어서, 정돈한 한국어 프로그램의 한 줄만 영어 어순이 되곤 했습니다. 계산이 들어간 줄은보여줘 1 + 2처럼 동사가 앞에 그대로 있습니다.
0.4.0
- 「같은 것을 적는 여러 방법」 말뭉치가 두 배 넘게 커졌습니다. 열두 가지
의도를 재던 것이 스물여섯 가지가 되었습니다. 값 바꾸기, 기다리기, 목록에서
하나 빼기, 표에 이름 붙여 넣기, 목록 하나씩 돌기,
아니면,동안을 두 언어로 모두 넣었습니다. 재는 표기가 103개에서 211개가 되었고, 아래 항목은 그렇게 재어서 찾은 것입니다. - 목록이 아닌 이름에 무엇을 넣으면 실행 전에 짚어 줍니다.
점수는 0뒤에점수에 1 추가해라고 쓰면점수.append(1)이 되어, 잘 읽히는 줄이 실행 중에AttributeError로 죽었습니다. 새 코드 E0240이 어느 이름인지와 그 안에 무엇이 들어 있는지를 말해 줍니다. 친구들에서 민수를 빼줘가민수를이 아니라민수를 뺍니다. 목적격 조사가 낱말에 붙어 있어서, 넣은 적 없는 것을 빼려다 실패하던 줄입니다.- 목록에서 하나 빼는 표기가 네 가지 늘었습니다. 영어는
delete·erase·drop, 한국어는삭제해·제거해·지워·없애입니다. 모두 일상 동사라서, 프로그램이 이미 목록으로 만든 이름일 때만 문장으로 읽습니다.delete the file과기록을 지워 주세요는 그대로 글로 남습니다. - 표에 이름 붙여 넣는 표기가 네 가지 늘었습니다.
store Mina as 90 in ages·save Mina as 90 in ages·record Mina as 90 in ages·add Mina at 90 to ages, 그리고 한국어나이표에 민수를 90으로 저장해·기억해·적어·넣기입니다.set X to Y in R은 일부러 그대로 두었습니다. 그 표기는 이미R에서Y를 꺼낸다는 뜻입니다. - 기다리는 표기가 여섯 가지 늘었습니다. 영어는
hold·delay·rest, 한국어는대기해·대기입니다. - Python 쪽 오류 설명 열다섯 개를 평이한 말로 다시 썼습니다(E0106~E0120).
NME가 자신을
I라고 부르던 두 곳도NME로 바꿨습니다. - 같은 것을 적는 방법 스물다섯 가지가 더 통합니다. 211가지 표기를 재는
말뭉치에서 처음 재었을 때 163개가 되던 것이 203개가 되었고, 그대로 글로
출력되는 것은 하나도 없습니다. 예를 들어
for name in names·for each name of names, 반복할 줄을 아래에 쓰는이름들의 이름마다와이름들의 각 이름마다,otherwise·or else·그렇지 않으면·안 그러면·그 외에는·아니라면,as long as n < 3·repeat while n < 3·keep going while n < 3과 띄어쓰기를 뺀수가 3보다 작은동안,민수를 90으로 나이표에 넣어와나이표에 민수 90 넣어,in ages put Mina at 90과put Mina 90 in ages,민수를 친구들에서 빼,take Mina out of friends,grow·bump·up score by 1입니다. 점수에 1 추가해가 점수에 1을 더합니다. 이 낱말은 목록에 항목을 넣는 말이기도 해서, 어느 쪽인지는 이름이 정합니다. 목록에는 항목이 들어가고 숫자에는 셈이 됩니다. 프로그램이 만든 적 없는 것은 짐작하지 않고 거절합니다.- 여덟 가지 표기는 일부러 계속 거절합니다. 이유를 말뭉치 옆에 적어
두었습니다.
name is 5는 Python에서 비교하는 줄이고,set Mina to 90 in ages는 이미 값을 꺼낸다는 뜻이며,한과계속은 한국어에서 너무 흔해서 가져가면 잃는 것이 더 많습니다. - 밑줄이 좁아졌습니다. 값을 바꾸는 줄은 줄 전체가 아니라 「얼마인지」에,
목록에 넣는 줄은 넣을 것에, 목록을 도는 줄은 읽지 못한 부분에 밑줄이 갑니다.
빠진 낱말이
in일 때는 그렇게 말해 줍니다.
0.3.0
- 같은 것을 적는 방법 다섯 가지가 더 통합니다. 103가지 표기를 재는
말뭉치에서 96개가 되던 것이 102개가 되었습니다.
5를 이름에 저장해처럼 값을 먼저 쓰거나,이름을 5로 두어처럼 일상 동사를 쓰거나,친구들에 민수 넣기처럼 이름꼴로 적거나,do it 3 times·그거 3번 반복해처럼 반복할 것을 소리 내어 말하거나,수가 3보다 클 때처럼 조건을때로 닫거나, 영어의ask for name을 쓸 수 있습니다.name is 5는 계속 거절합니다. Python에서 그 줄은 비교이고, 저장으로 읽으면 올바른 Python의 뜻이 달라지기 때문입니다. 사진을 폴더에 저장해가사진 = "폴더에"가 되지 않습니다. 한국어는 무엇이 들어가는 자리를에로 표시하므로 저장되는 이름은 그쪽입니다. 값이 값이 아닌 줄은 저장에 대한 문장이므로 그대로 출력됩니다.
0.2.0
- 오류가 무엇이 어디서 왜 틀렸는지 말합니다. 처음 배우는 사람이 가장 자주
만나는 문구 스무 개를 다시 썼습니다. 「
echo가 무슨 말인지 모르겠습니다」는 이제 그 낱말이 동작을 적는 자리에 있다고 말하고, 도움말은 그 줄을 고쳐서 통째로 보여 줍니다. 다만 그 줄을 실제로 컴파일해 보고 되는 것만 보여 주므로, 도움말대로 적었다가 다시 막히지 않습니다. 닫히지 않은 블록은 파일 끝이 아니라 블록을 연 줄을 짚고, 닫히지 않은 따옴표는 줄 끝 너머가 아니라 열린 따옴표를 짚으며, 읽지 못한 줄은 읽지 못한 부분을 그대로 인용합니다. - 말없이 다른 프로그램이 되던 여덟 가지를 짚어 줍니다.
set x.count to 3은.count to 3이라는 글자를x에 저장했고,show a; show b는a; show b라는 한 줄짜리 문장이 되었으며,item -1 of friends와wait -3 seconds는 실행 중에야 죽었습니다. 표에put Mina in ages라고 적으면 그대로 출력되었고, 같은 모듈을 두 번 부르면 이름 열 개가 부딪힌다고 답했습니다. 이제 모두 그 줄을 짚어 거절합니다. - 세미콜론은 글의 문장 부호입니다.
그는 웃었다; 나는 울었다가 뜻이 다른 저장문이 되던 것과,It was late; nobody spoke가 Python 오류로 가던 것이 함께 고쳐졌습니다. 둘 다 이제 그대로 출력됩니다. do는 반복만이 아니라 일을 실행하는 낱말이기도 합니다.do greet with Mina가 「몇 번 반복할지 없습니다」라는 답을 받았습니다. 이제 일이 받는 것의 개수가 맞지 않으면 그렇게 말하고,do the washing up같은 보통 문장은 그대로 출력됩니다.- 파일·모듈 문제 다섯에 각자의 코드가 생겼습니다 —
E0238·E0239·E0407·E0408. 여기에 같은 모듈을 두 번 부르는E0409가 더해졌습니다. 코드를 찾아봐도 다른 이야기가 나오지 않습니다. - 도움말이 그 언어의 예시만 듭니다. 영어 도움말이 한국어 줄을 옮겨 적으라고
하거나 그 반대이던 자리를 정리했고, 여러분이 만든 이름이 들어가는 예시는 그
프로그램이 쓰는 표기로 적습니다. 조사도 이름에 맞춥니다. 정돈한 프로그램에서도
score는,name을,table은처럼 나옵니다. - CPython이 낸 오류를 평이한 말로 먼저 알려 줍니다. 몇 번째 줄이 왜 문제인지 두 언어로 먼저 말하고, 원래의 보고는 그 아래에 증거로 남겨 둡니다.
- 읽기가 문장 속에 설 수 있습니다.
개수·합·가장 큰 것과 영어 짝은 줄 전체일 때만 읽혔습니다. 그래서가방 개수 개를 들고 있습니다 말해줘가 목록을 통째로 문장 한가운데에 찍었습니다. 이제 개수를 넣습니다. 쓴 사람이 적은 낱말은 그대로 두므로, 프로그램을 다른 언어로 정돈해도 문장이 하던 말은 그대로입니다.
0.1.0
영어에 이미 있는 낱말은 오타로 읽지 않습니다. NME는 한 글자 오타를 고쳐 읽는데, 짧은 낱말끼리는 한 글자 차이인 것이 대부분입니다. 그래서
shop milk가milk만,well done이done만,bell rings가rings만 찍혔습니다. 이제 NME의 영어 낱말에서 한 글자 떨어진 실제 영어 낱말 3,030개를 컴파일러가 들고 있습니다. 시스템 맞춤법 사전에서scripts/build-common-english-words.py가 만들어 내고 빌드마다 검사합니다. 고쳐 읽기는 원래 하려던 일을 그대로 합니다 —shwo·tel·sya·pirnt는 영어에 없는 철자입니다.출력하는 낱말로 끝나는 문장이 동사를 잃지 않습니다. 영어는 메시지를 먼저 쓰는 순서(
Hello world show)도 받아들이는데, 그것 때문에 그 낱말로 끝나는 모든 문장이 마지막 낱말을 빼앗겼습니다.time will tell은time will을,what did she say는what did she를 찍었습니다. 앞에 주어·조동사·to· 접속사가 서면 그것은 그 문장의 동사입니다.in·is·and·or·as로 시작하는 줄은 문장입니다. 파이썬에 넘기고 있었기 때문에in the beginning there was light가 CPython의SyntaxError로 돌아왔습니다. 이 다섯은 파이썬 문장을 열 수 없는 낱말이라, 그것으로 시작하는 줄은 잘못 쓴 파이썬일 수가 없습니다.사과는사와과가 아닙니다. 한국어는 앞 음절 받침에 따라 잇는 조사를 가려 씁니다 — 받침이 있으면과, 없으면와. 끝의과를 무조건 「그리고」로 읽어서가방은 목록 사과가사하나만 든 가방이 됐습니다.감과 배는 그대로 둘로 나뉩니다.점수에 1이 점수를 세고, 지우지 않습니다.에는 「어디로」,에서는 「어디서」를 가리키므로, 조사가 방향을 이미 말할 때 한국어는 동사를 뺍니다. 저장으로 읽혀점수 = 1이 되면서 세던 점수가 사라졌고, 화면에는 아무 표시도 없었습니다.목록에 수를 더하면 목록에 들어갑니다.
add 1 to bag이bag = bag + 1이 됐는데, 파이썬에서 목록에 수를 더하는 것은 언제나 TypeError입니다. 목록끼리는 그대로 이어 붙습니다.score+1은 거절합니다. 파이썬은 답을 계산해서 버리므로, 프로그램은 돌고 아무것도 찍히지 않고score도 그대로였습니다. 아무 일도 안 하는 것과 잘 되는 것이 구별되지 않는 유일한 모양입니다. 이제E0604로 짚고점수에 1 더해를 알려 줍니다.일 안에서 바깥의 수를 셀 수 있습니다. 파이썬은 이름이 그 함수의 것인지를 함수 전체에 대해 한 번에 정합니다. 그래서
세기라는 일: 총합에 1 더해 끝은 아직 없는총합을 읽는 함수가 되어UnboundLocalError로 죽었습니다. 한 번도 본 적 없는 말이 멀쩡해 보이는 줄에서 나온 것입니다. 이제 선언을 바꾸는 줄과 같은 물리 줄에 붙입니다. NME는 한 문장이 한 줄이고, 따로 한 줄을 넣으면 그 아래 모든 줄 번호가 밀리기 때문입니다. 바꾸기 전에 먼저 읽는 것은 아예 쓸 수 없고,E0236이 이유를 말합니다.save entry to the file "diary.txt"가 파일을 씁니다.save는 NME의 저장하는 낱말이면서 영어로 파일을 쓸 때 쓰는 말이라, 둘이 조용히 부딪쳐서 일기는 쓰이지 않고entry에diary.txt라는 글자가 들어갔습니다.file이라고 적으면 갈립니다 — 한국어가파일에로 가리는 것과 같습니다. 맨save entry to "diary.txt"는 그대로 이름에 파일 이름을 넣습니다. 실제로 하는 일이기 때문입니다.머리글과 그 아래 한 줄 사이의 이음말은 메시지가 아닙니다.
repeat 3 times after that show Again은after that show Again을,3번 반복: 다시 말해줘는: 다시를,만약에 점수가 1보다 크면, 좋아 말해줘는, 좋아를 찍었습니다. 남은 것이 명령으로 읽힐 때만 건너뛰므로repeat 3 times next week는 그대로next week를 말합니다.한 줄로 쓴 한국어 반복이 반복합니다.
점수가 5보다 작은 동안 안녕 말해줘를 조건 매처가 먼저 집어가서작은으로 끝나는 조건을 못 읽었습니다.동안에로 쓰면if가 되고 메시지가동안에로 시작했습니다. 출력하는 낱말 뒤의동안은 예전처럼 하는 말의 일부입니다(커서가 깜빡이는 동안 말해줘).두 낱말로 쓴 이름을 짚어 줍니다.
set full name to Mina는full이라는 이름에name to Mina라는 글자를 넣었고, 출력하면 그것이 다 나왔습니다. 뒤에 연결어가 서 있다는 것이 증거라서 이제E0230이 뜨고full_name을 알려 줍니다. 연결어가 아예 없는set greeting Hello world는 그대로 저장합니다.언어 자신이 쓰는 이름은 거절합니다(
E0237).점수들의 합은 파이썬의sum(...),친구들 몇 개는len(...)이라서set sum to 3한 줄이 그 뒤의 모든 줄에서 그 표현을 빼앗았습니다. 게다가 오류는 그 뒷줄에서'int' object is not callable로 났습니다. 직접 쓴 파이썬sum = 0은 그대로 둡니다. 파이썬으로 쓴 사람은 자기가 무엇을 하는지 말한 것입니다.이번은 낱말이지 「2 + 번」이 아닙니다.이번 달 예산 말해줘가 두 번 반복하면서달 예산만 찍었습니다. 쓴 사람의 첫 낱말이 사라진 것입니다.두번·3번은 그대로 횟수입니다.나누는 수가 이름이어도 나머지를 구합니다.
총점을 인원으로 나눈 나머지가 글이 됐습니다. 숫자만 읽고 있었기 때문인데, 숫자는5로가 둘로 잘리고 이름은인원으로가 한 덩어리라 토큰 수가 다릅니다.docs/syntax.ko.md§15는 둘 다 된다고 적어 두었습니다.불러온 모듈의 이름을 빼앗을 수 없습니다.
날짜 사용다음에오늘은 월요일을 쓰면 모듈의오늘이 사라져서오늘() 말해줘가'str' object is not callable로 죽었습니다. 반대 순서는 처음부터 막고 있었고, 이것은 그 규칙의 나머지 반쪽입니다. 마지막 낱말이 우연히 그 이름인 질문은 그대로 질문입니다 — 모듈을 부르는 것이 줄의 뜻을 바꾸면 안 되기 때문입니다.show Today is today()는 문장입니다. 파이썬으로 보면is비교라서 올바른 식이고, 만든 적 없는Today에서 죽은 뒤 낱말을 그대로 찍었습니다.is는 파이썬의 동일성 검사보다 영어 동사인 경우가 훨씬 많습니다.같은 뜻을 적는 갈래를 더 받습니다.
rep 3 times·go round 2 times·run through 2 times,should n be greater than 3·whenever·incase, 그리고 한국어친구들마다 반복해—친구들을 돌면서 하나씩친구라고 부릅니다.날짜 모듈.
날짜 사용 최신(use date latest) 한 줄이면오늘()·지금()·올해()·이번달()·오늘일자()·요일()·며칠뒤(7)이 생깁니다. 일곱 번째 묶음 도구이고, 일기·기록·습관·보고 가이드가 여태from datetime import date부터 시작하던 자리를 대신합니다. 사이트에서도 돕니다 — 시계 중에monotonic계열만 브라우저 실행기를 죽이고datetime은 멀쩡하다는 것을 실제 실행기로 확인했습니다. 브라우저 시계는 UTC입니다.요일 이름만은 두 언어가 다릅니다.
weekday()는Wednesday를,요일()은수요일을 돌려줍니다. 다른 모든 도구는 이름 둘이 같은 값을 가리키는데, 요일은 값이 낱말이라 어느 말로 답할지 정해야 합니다. 묶음 도구를 통틀어 적어 낸 이름이 답의 언어를 정하는 유일한 자리입니다.날짜·date라는 이름은 묶어 두지 않습니다. 사람들이 자기 값에 가장 많이 쓰는 이름이라, 묶으면 정작 쓰고 싶은 프로그램에서 충돌이 납니다.날짜는 5라고 써 둔 다음날짜 사용 최신을 써도 둘 다 살아 있습니다.수리 날짜가 정해지지 않았습니다같은 문장이 다시 그대로 나옵니다.date·list처럼 평범한 낱말인 모듈 이름이 줄 어디에 있든 잘못 적은 모듈 줄로 되살리려 해서,No date has been set for the repairs.가E0305로 거절당했습니다. 이제 그 이름이사용·use옆에 설 때만 셉니다. 이 결함은 이번 회차 전부터 있었고No list has been set.도 같았습니다.일의 묶음을 들여써도 됩니다.
인사하기라는 일:아래를 들여쓰고끝으로 닫는 것은 이 저장소의 모든 가이드가 가르치는 모양인데, 그 모양만E0101로 거절당했습니다. 잘못된 곳으로 머리글을 가리키면서요. 이제 일도3번 반복해나이야기:와 똑같이, 들여쓴 묶음은 들여쓰기가 끝나는 곳에서 닫히고 평평한 묶음은끝을 기다립니다.나눌 수에 붙은 조사를 뗍니다.
결과를 둘째수로 나눠가결과 = 결과 / 둘째수로가 되어 실행할 때NameError로 죽었습니다.둘째수로도 Python으로는 멀쩡한 이름이라 「Python으로 읽히는가」만으로는 갈리지 않습니다. 그래서 프로그램이 실제로 만든 이름이 어느 쪽인지를 먼저 봅니다. 숫자로 적은2로 나눠는 그대로입니다.표인 이름에 목록 문장을 쓰면 거절합니다.
표에 사과 넣어와append apple to ages가표.append("사과")가 되어, 멀쩡해 보이는 줄에서AttributeError: 'dict' object has no attribute 'append'로 죽었습니다. 반대 방향(E0234)은 처음부터 막혀 있었는데 이쪽이 비어 있었습니다. 이제 「어느 이름에 넣을지 적어 주세요」라고 알려 줍니다.표 — 이름 하나에 이름 붙은 값을 여럿.
나이표는 빈 표(set ages to an empty record), 그다음나이표에 민수를 90으로 넣어(put Mina at 90 in ages),나이표의 민수 말해줘(show Mina in ages),나이표에서 민수 빼(remove Mina from ages)입니다. 마지막 것은 Python의del이 됩니다. 사전에는.remove가 없기 때문입니다. Python에서는 사전 (dictionary)이라고 부르고, 2부 가이드 스무 편이 여든일곱 번 씁니다. 지금까지는 아예 적을 방법이 없었습니다.이름이 표를 담고 있으면 목록 표기가 표의 뜻이 됩니다.
개수/how many,…에 …가 있으면/contains,…마다 반복해/for each,빼/remove는 두 그릇에 같은 낱말이고, 어느 쪽 뜻인지는 그 이름이 무엇을 담고 있는지로만 갈립니다. 낱말로는 절대 갈리지 않습니다. 읽는 사람이 어느 표기가 어느 그릇의 것인지 외우지 않아도 되어야 한다는 것이 이렇게 만든 이유 전부입니다. 표를 반복하면 Python과 똑같이 이름이 하나씩 나오므로, 값은 반복문 안에서나이표의 이름처럼 다시 읽습니다.목록인 이름에 표 문장을 쓰면 거절합니다 (
E0234). 그대로 두면친구들에 민수를 90으로 넣어가민수를 90전체를 글 한 덩어리로 목록에 넣었고, 그 프로그램은 돌아가고 멀쩡해 보이면서 아무도 쓰지 않은 것이 됩니다.합·가장 큰 것·첫 번째·정렬해는 목록 전용으로 남습니다. 표에는 순서도 없고 더할 것도 없으며, 거절이 그 사실을 알려 줍니다.표는 값을 저장하는 자리에서만 표입니다. 그 밖에서는
표·record·table이 그냥 쓴 사람이 쓴 낱말이라서,표는 두 장 남았습니다와I keep a record of everything I read는 그대로 나옵니다. Python으로나이표 = {}라고 쓴 이름도 이 문장들에서 표로 봅니다.{1, 2}같은 집합은 표가 아닙니다.이름 붙인 일 — 이름이 있는 프로그램 한 조각.
인사하기라는 일:(to greet:)로 열고 묶음을 쓴 뒤끝으로 닫고,인사하기 해줘(do greet)로 실행합니다. 평범한def가 됩니다.일·하기·해줘·to·do는 두 언어에서 가장 흔한 낱말 축에 듭니다. 그래서 낱말이 아니라 모양으로 알아봅니다. 이름 뒤의라는과 그 뒤의일(영어라면 앞의to), 줄 끝의 콜론, 그리고 그 아래에 오는 묶음이 모두 있어야 합니다. 묶음이 없으면 일이 아니라서오늘의 할 일:,To do:,to be honest는 그냥 그 줄 그대로 나옵니다. 한 줄로 붙여 쓰는 형태도 없어서 문장 가운데의 콜론이 일을 여는 일도 없습니다.일을 실행하는 줄은 그 일이 있을 때만 실행이 됩니다.
해줘와do는 그 자체로는 아무것도 정하지 못하고, 그 이름이 이 프로그램이 이미 만든 일이어야 합니다. 받는 값이 없는 Pythondef도 여기에 들어가서 세 단계가 섞입니다. 일 안에서 저장한 이름은 일 안에만 있고, 안에 쓴 Pythonreturn도 받아들입니다. 본문이 진짜 함수 범위이기 때문입니다.일은 하나를 받을 수 있습니다.
이름에게 인사하기라는 일:(to greet someone:)로 열고민수에게 인사하기 해줘(do greet with Mina)로 건넵니다. 일이 몇 개를 받는지는 이름과 함께 기억하므로, 반대로 실행하면E0235로 거절합니다. 그대로 두면 실행할 때 PythonTypeError가 나고, 그 줄은 멀쩡해 보입니다.아직 없는 것: 둘 이상을 받는 일과 값을 돌려주는 일. 둘 중 하나가 필요하면 Python
def를 그대로 씁니다. 고급 단계는 평범한 Python입니다.고쳐 읽은 목록 낱말이 그릇 이름까지 지어내지 않습니다.
너에게 하고 싶은 말이 있어가너.append("하고 싶은 말이")가 되었습니다.있어가넣어와 한 글자 차이이기 때문입니다.창고에 상자를 세로로 두어도 같았습니다. 동사를 추측했으면 그 물건을 넣을 이름까지 지어내서는 안 되므로, 고쳐 읽은 목록 낱말은 이제 프로그램이 이미 만든 이름을 요구합니다. 정확히 적은 표기는 그대로입니다.그릇에 설탕을 한 스푼으로 넣어가 다시 그대로 나옵니다. 이름과 값을 함께 표시한 한국어 줄은 표의 모양인데, 그 그릇이 프로그램이 만든 적 없는 것일 때 목록 문장이설탕을 한 스푼으로전체를 글 한 덩어리로 넣어 버렸습니다. 이제 요리하는 사람은 자기 문장을 그대로 돌려받습니다.글을 목록으로 나눌 수 있습니다.
이름들은 메모를 줄마다 나눈 것(set names to memo split by line), 그리고쉼표로·빈칸으로·줄바꿈으로도 같습니다. 이어 붙이기는 2회차에 들어왔는데 그 반대가 없었고, 3부 전체가 거기서 멈춰 있었습니다. 파일을 읽으면 글 한 덩어리가 나오고, 그다음 단계는 늘 목록이기 때문입니다.줄마다는 Python의splitlines()입니다. 쉼표는 나눌 때",", 이을 때", "이며, 이 차이는 일부러 그렇게 두었습니다. 파일에서 읽어 온 줄은민수,지안처럼 적혀 있어서", "로 찾으면 아무것도 나오지 않습니다. 나눈 결과는 목록이라 바로이름들 개수를 쓸 수 있습니다. 이미 저장한 이름에만 쓰이므로이야기를 둘로 나눈 것이 좋겠습니다나The vote split by party.는 그대로 문장입니다.사이에 아무것도 넣지 않고 이어 붙이기.
친구들을 붙여,친구들을 그대로 이어,show friends joined together,friends joined by nothing. 별을 한 줄로 그리려면 필요한데 말할 방법이 없었습니다.무엇으로 이을지 없는 이어 붙이기는 거절합니다(
E0233).별들을 이어 말해줘는별들을 이어를 출력했고show stars joined는stars joined를 출력했습니다. 둘 다 성공처럼 보입니다. 이 거절은 목록 이름이 있고 그 줄에 다른 낱말이 남지 않을 때만 나오므로별들을 이어 갔습니다나friends join us at noon은 그대로 출력됩니다.friends joined with comma도 이제 됩니다.with는 Python 예약어라서 안내서에 적힌 대로 동작한 적이 없었습니다.글 하나를 여러 번 이어 붙이기.
막대는 별표를 5개 붙인 것(set bar to star repeated 5 times). 그림 문자, 진행 막대, 막대 그래프가 모두 이것으로 그려집니다. 앞선 회차에서 빠졌던 것은별표를 5번 이어를 세는 반복문과 구별할 수 없었기 때문입니다. 이제 안전한 이유는 이것이 명령이 아니라 이름꼴이기 때문입니다. 저장한 이름, 개수, 세는 낱말, 그리고붙인 것으로 끝나며 반복문은 그렇게 끝나지 않습니다. 그래서5번이라고 적어도 됩니다. 글은 먼저str(...)로 감싸므로3이 든 이름은"33333"이 되고15가 되지 않습니다.몇 번째인지 아는 목록 반복문.
친구들의 친구마다 순서와 함께 반복해(for each friend in friends with place)는for 순서, 친구 in enumerate(친구들, 1):이 됩니다. 세기는 1부터입니다.친구들 3번째가 이미 세 번째를 뜻하기 때문입니다. 이름은 쓰는 사람이 정합니다.와 함께앞의 낱말, 영어에서는with뒤의 낱말입니다. 목록 두 개를 자리마다 맞춰 보는 것이 숫자야구와 오목의 전부인데, 자리를 담을 방법이 아예 없었습니다.내장 모듈 세 가지가 늘었습니다:
목록 사용,글자 사용,수학 사용. 한 줄이면 모든 이름이 한국어와 영어 두 가지로 함께 준비됩니다.말해 개수(친구들)와say count(friends)는 같은 프로그램입니다.목록은개수/count,정렬/sort,뒤집기/reverse,빼기/remove,첫번째/first,마지막/last,합계/sum,최대/largest,최소/smallest를,글자는대문자/upper,소문자/lower,공백없애기/trim,나누기/split,합치기/join,바꾸기/replace,로시작/starts_with,길이/length를,수학은제곱근/root,반올림/round_to,원주율/pi,거듭제곱/power,절댓값/absolute,내림/floor,올림/ceil을 만듭니다. 버전 표기도랜덤 사용과 같습니다:목록 사용 최신,use list version "0.0.1". 안에 든 것은 전부 평범한 Python 기본 기능이거나math호출 하나라서, 이 이름들을 쓴 프로그램은 브라우저에서도 그대로 돕니다.목록·글자·수학은 그냥 낱말일 때 그대로 출력됩니다. 두 언어 모두에서 평범한 낱말이기도 한 첫 모듈 이름들이라,사용/use바로 옆에 있고 그 줄에 다른 낱말이 남지 않을 때만 모듈로 읽습니다.장 볼 목록을 사용해 보세요,get the list of names,I use text messages every day는 문장이고 그대로 출력됩니다. 오타 복구도 하지 않습니다.list는last와 한 글자 차이이고math는path와 한 글자 차이이기 때문입니다.내장 모듈이 만든 이름은 문장 안에서 값으로 보여 주지 않습니다. 문장은 프로그램이 만든 이름의 값을 보여 줍니다. 그것이 글 형식의 목적입니다. 그런데 쓴 사람은
길이나floor를 적은 적이 없고 그런 이름이 있는 줄도 대개 모릅니다.수학 사용뒤에the floor is cold는the <built-in function floor> is cold를 출력했고,글자 사용뒤에길이가 조금 짧습니다는 길이 대신 함수를 보여 주었습니다.랜덤 사용도 마찬가지였고(shuffle the cards), 이제 모든 내장 모듈에서 한꺼번에 고쳤습니다. 값으로 쓰는 것은 그대로입니다:말해줘 원주율,show pi,말해 개수(friends).목록 사용의정렬·뒤집기·빼기는 새 목록을 돌려줍니다. 원래 목록 자체를 바꾸는 것은 문장형친구들 정렬해쪽입니다. 둘 다 사람들이 실제로 뜻하는 것이라서 둘 다 있습니다. 도우미가None을 돌려주면서 이름 순서를 몰래 바꿔 놓는 쪽이 더 나쁜 놀라움이기 때문입니다.평범한 한국어 문장이 훨씬 자주 그대로 출력됩니다. 사람이 실제로 쓰는 문장 353개(이야기 한 줄, 스스로에게 남긴 메모, 게임 속 대사)로 재어 보니 294개가 글자 그대로 출력되고 38개는 다른 프로그램이 되었습니다. 지금은 350개와 3개입니다. 측정 도구는
scripts/mistake-probes/korean_prose.py이고, 이제 검사에 걸리는 수치입니다.… 주세요로 끝나는 부탁이 다시 문장이 됩니다. 스물세 개가 모두 틀렸습니다.물 좀 주세요는물만 출력했고,설탕을 조금만 넣어 주세요는설탕을 조금만 넣어까지만 출력했으며,물어봐 주셔서 감사합니다는 아무도 쓰지 않은 질문에서 프로그램을 세웠습니다.주세요는 어떤 동사에도 붙는 말이라 이제 출력 낱말로 고쳐 읽지 않고, 앞 낱말과 붙여 읽는 것은 그 앞 낱말이 이미 동작 낱말일 때뿐입니다.말해 주세요,보여 주세요,2초 기다려 주세요는 그대로입니다.한국어 문장의 끝맺음으로 끝나는 줄은 제 뜻을 지킵니다.
이유는 저도 잘 모릅니다는이유 = "저도 잘 모릅니다"가 되어 실행해도 아무 말이 없었고,3층에서 내리면 됩니다는 낱말 가운데가 잘린 비교가 되었으며,1번 출구에서 만납시다는 반복문이 되었고,카드를 잘 섞어 나눠 주세요는 저장한 적 없는 이름으로 나누는 나눗셈이 되었습니다. 문장을 끝맺는 어미 목록에-ㅂ니다계열(모릅니다,나옵니다)과-ㅂ시다,-니까,-요어미가 들어갔고, 대입·반복·비교·값 변경이 모두 이 목록을 확인합니다. 전에는은/는뒤에서만 확인했습니다.정답은 7입니다는 그대로 숫자 7을 저장하고,인사는 안녕하세요는 그대로 인사말을 저장합니다.동작 낱말 뒤에 붙은 보조 동사는 그 동사의 일부입니다.
말해 봐야 소용없는 일이었습니다는 뒷부분만 출력했고,저장해 둔 사진을 다시 봤습니다는둔이라는 값을 만들었습니다.말해줘 비가 쏟아졌습니다는 그대로 비 소식을 출력합니다.질문 안에 들어 있는 보조 동사는 질문의 것입니다. 바로 위 규칙이 한 줄 더 멀리 닿았습니다.
주문을 물어봐 마법의 주문을 말해 보세요는 무엇을 묻는지 먼저 적고 나서 묻기 때문에,물어봐뒤는 전부 기다리는 동안 보여 줄 글이고말해 보세요도 그 글의 일부입니다. 이것을 문장으로 읽는 바람에 그 줄은 묻지 않고 자기 자신을 출력했고, 사이트ko/password예제에서 그 줄을 감싼 반복문은 대답을 받지 못해 끝나지 않았습니다.물어봐 주셔서 감사합니다는 그대로 감사 인사입니다. 그 줄에는 묻는 낱말 앞에 이름이 없어서 보조 동사가 그 줄 자신의 것입니다.붙임표·빗금·물결표·괄호가 섞인 한국어 문장이 출력됩니다.
K-POP을 좋아합니다,A/S 센터에 맡겼습니다,오전 9시~오후 6시까지 문을 엽니다,(괄호 안은 나중에 지우겠습니다)는 Python으로 넘어갔고, 한국어 문장에 영어SyntaxError가 한글 글자 가운데를 가리키며 돌아왔습니다. 올바른 Python이 이기는 규칙은 그대로이고, 이 판단은 Python이 이미 거절한 줄에만 묻습니다.한국어로 쓴 프로그램은 한국어로 설명합니다. 오류 메시지가 명령 표기를 따랐기 때문에 한글 파일에
nme build를 쓰면 영어로만 답했습니다. 이제 프로그램 자체에 한국어가 들어 있으면 한국어 설명을 함께 출력하고, 영어 설명도 그대로 남습니다.평범한 영어 문장이 훨씬 자주 그대로 출력됩니다. 사람이 실제로 쓰는 문장 302개(이야기 한 줄, 누군가에게 남긴 쪽지, 게임 속 대사)로 재어 보니 184개가 글자 그대로 출력되고 44개는 다른 프로그램이 되었습니다. 지금은 249개와 12개입니다. 측정 도구는
scripts/mistake-probes/english_prose.py이고, 이제 검사에 걸리는 수치입니다.한 글자 차이 나는 낱말이 들어 있다는 이유로 문장을 명령으로 읽지 않습니다.
Today is a good day는say때문에 마지막 낱말을 잃었고,Clear a path through the snow.는show때문에snow를 잃었으며,end of the road는road가load와 한 글자 차이라는 이유로 모듈 버전을 고르라는 답을 받았습니다. 이제 오타로 고쳐 읽은 영어 출력 낱말은 낱말 하나만 메시지로 가져가고(실제 오타는shwo hello,hello sya처럼 생겼습니다), 모듈 문장은 반드시 모듈 이름을 적어야 하며,let처럼 NME가 이미 거절하고 설명하는 낱말은 그 동작으로 고쳐 읽지 않습니다.문장 속 숫자가 문장 읽기를 끄지 않습니다.
The soup needs cream.은 출력되고The soup needs 250 ml of cream.은 거절되었습니다. 값·나이·시각· 날짜·방 번호·장 번호가 이제 쓰인 문장 안에 그대로 남습니다. 명령 낱말 바로 옆에 적힌 숫자는 여전히 명령이라서wait 3 seconds와set score to 0은 그대로입니다.낱말 하나뿐인 줄은 그 낱말을 출력합니다.
Hello만 있는 줄은 Python 이름 그대로 남아서, 프로그램이 아무 말도 하지 않다가 엉뚱한 줄을 가리키는NameError로 끝났습니다. 앞에서 값을 저장한 이름과 NME가 직접 쓰는 낱말(say,end,skip,목록)은 Python 뜻을 지킵니다.줄 맨 앞의 명령 낱말이 나머지 줄 전체를 제 인자로 삼지 않습니다.
set the table for four people은the라는 값을 만들고 아무것도 출력하지 않았고,ask me anything you like는 아무도 쓰지 않은 질문에서 프로그램을 세웠으며,List the ingredients on the back.은 Python 목록 괄호에 갇혔습니다. 셋 다 문장이라 이제 출력됩니다.set then to 1,ask your "hi",list of Mina, Ada는 그대로입니다.to나 따옴표나 쉼표가 이름·목록을 뜻한다고 말해 주기 때문입니다.무작위 선택은 후보를 서로 구분해 적어야 합니다.
마음에 드는 것을 골라 보세요는 실행할 때마다 제 낱말 하나를 무작위로 출력했는데, 그 줄 어디에도 후보를 적은 적이 없었습니다.여러 개 중에서 뽑아와pick a flower from the garden도 마찬가지였습니다. 이제 후보 사이에또는/or나 쉼표가 있어야 합니다. 문서에 적힌색은 빨강 또는 초록 중에서 골라와set color to pick from red or green은 그대로 동작합니다.낱말은 낱말로만 쪼갭니다.
doctor를do ctor로,finished를finish ed로,friend를fri end로,telling을tell ing로 읽는 바람에story of a small town doctor가 손쓸 수 없는 제안과 함께 거절되었습니다. 정말로 빠뜨린 띄어쓰기는 여전히 짚어 줍니다(sayhello,안녕말해줘).목록을 만들고 읽는 일을 전부 문장으로 할 수 있습니다. 빈 목록 (
친구들은 빈 목록/set friends to an empty list), 몇 개인지 (친구들 개수 말해줘/show how many friends), 몇 번째 항목인지 (친구들 첫 번째·친구들 마지막·친구들 3번째/the first of friends·the last of friends·item 3 of friends), 합·최댓값·최솟값 (점수들 합/the total of scores), 순서 바꾸기 (친구들 정렬해·친구들 거꾸로 해·친구들 섞어/sort friends·reverse friends·shuffle friends), 항목 빼기 (친구들에서 민수 빼/remove Mina from friends), 한 줄로 잇기 (친구들을 쉼표로 이어 말해줘/show friends joined by comma), 들어 있는지와 비었는지 묻기(만약에 친구들에 민수가 있으면·만약에 친구들이 비었으면/if friends contains Mina·if friends is empty)를 더했습니다.몇 번째인지는 1부터 셉니다.
친구들 첫 번째가 곧친구들 1번째이고 둘 다친구들[0]이 됩니다.친구들 0번째는 맨 뒤를 조용히 돌려주지 않고E0229로 거절합니다.⭐
친구들에서 민수 빼가친구들 = 친구들 - 민수가 되던 것을 고쳤습니다. 그 줄은 멀쩡히 통과한 뒤 실행할 때 죽었습니다. 목록으로 만든 이름에서 빼는 것은 이제 뜻 그대로 항목 빼기가 되고, 목록이 아닌 이름에서 저장한 적 없는 낱말을 빼려고 하면 이유를 붙여 거절합니다.목록 문장은 모두 이미 목록으로 만든 이름에만 걸립니다. 그래서
친구들 이야기를 들었습니다나sort out your things,the first of many,count me in은 그대로 글로 남아 출력됩니다. 목록이 아닌 이름에 쓰면 넘겨짚지 않고E0231로 알려 줍니다.횟수 없는 반복을 더했습니다.
계속 반복해/repeat forever이고,끝/end으로 닫으며멈춰/break로 빠져나옵니다.글자에도 길이와 대소문자가 생겼습니다.
이름 길이/the length of name,이름 대문자로/name in capitals,이름 소문자로/name in small letters. 셋 다 저장한 이름이면 읽으며 값이므로 출력·저장·조건 어디에나 쓸 수 있습니다.⭐ 없던 영어 영지식 문장 표기 다섯 개를 더했습니다.
challenge different zero knowledge challenge make,nonce secret challenge zero knowledge response make,public commitment challenge response zero knowledge verify,zero knowledge simulated response make,public challenge response zero knowledge simulated commitment make. 지금까지는 이렇게 적으면 문장으로 저장되었습니다.set ok to p c e z zero knowledge verify가 글이 되어 프로그램은 아무것도 검증하지 않고 아무 말도 하지 않았습니다.⭐ 들여쓴
3번:블록 안에서건너뛰어와멈춰가 동작합니다. 그 자리에서 그냥 Python 이름으로 남아 컴파일은 되고 실행할 때NameError가 났습니다. 같은 자리에서 Python의continue는break와 달리 거절당했는데, 그것도 고쳤습니다.들여쓴 블록 안에서
아니면:과아니면 만약에 …:이 동작합니다. 영어는 Python이else:와elif …:를 같은 철자로 쓰기 때문에 그냥 되던 것이었고, 한국어에는 방법이 없었습니다.else if …:도 이제 그 자리에서 됩니다.다른
.nme프로그램을 두 언어 모두 문장으로 가져옵니다."helper.nme"에서 greet 가져와/use greet from "helper.nme"..nme로 끝나는 따옴표 경로가 그 줄을 가져오기로 만들기 때문에랜덤 사용은 그대로 내장 모듈을 불러옵니다.⭐ 물어보기 뒤에 질문만 적어도 됩니다.
물어봐 이름이 뭐예요?,물어봐 몇 살이에요?,ask what is your name,ask how old are you가 그 질문이 답하는 이름(이름·나이·name·age)에 저장합니다. 한국어는 조사까지 이름에 넣어이름이에 저장하거나몇에 저장하고 있었습니다.ask who is there처럼 담을 이름이 없는 질문은 여전히 거절합니다.⭐
할 일은 목록을 출력하지 않고 거절합니다. 이름은 한 낱말이라할 일은 두 낱말이고, 그래서 그 줄이 조용히 자기 문장이 되어 버렸습니다. 가이드 05가 바로 그렇게 가르치고 있었습니다. 거절할 때 되는 철자(할일)를 알려 줍니다.실수 측정표가 587개에서 723개로 늘었습니다. 목록·글자 문법, 이번에 메운 짝 맞춤 구멍, 그리고 새 낱말이 들어간 평범한 문장들을 넣었습니다. 중요한 숫자인 「통과했지만 쓴 뜻과 다른 프로그램이 된 것」은 그대로 11개이고, 평범한 문장 30개도 여전히 30개 다 그대로 출력됩니다.
나누고 남는 수에 표기가 생겼습니다.
쌓인돌을 4로 나눈 나머지/the remainder of pile divided by 4. 값이라서 출력·저장·조건 어디에나 쓸 수 있고, 님(Nim) 같은 수 세기 놀이의 승부가 이것으로 갈립니다.⭐
set left to score divided by 4가set = set / 4가 되던 것을 고쳤습니다. 저장하는 낱말로 시작하는 줄은 저장이지,set이라는 이름에 대한 계산이 아닙니다.아무것도 없는 이야기를 열면 그렇다고 말합니다.
이야기:만 있으면 몸통 없는if True:가 되어, 읽는 사람은 만들어진 Python을 가리키는 CPython의SyntaxError를 만났습니다.얘기: 그만하자는 올바른 Python 주석 표기라서 통과하고, 아무 일도 하지 않고, 아무 말도 하지 않았습니다. 이제 둘 다 무엇을 뜻할 수 있는지 알려 주며 거절합니다.⭐
목록을 보여 주세요가[]를 찍던 것을 고쳤습니다. 홀로 쓴목록/list가 빈 목록이 되는 자리는 이름에 값을 저장할 때뿐입니다. 보여 주는 낱말에 건네면 그 말은 쓴 사람이 적은 낱말이므로목록 보여줘는목록을,show list는list를 출력합니다.친구들은 목록·친구들은 빈 목록·set friends to an empty list는 그대로입니다.⭐ 평범한 낱말 두 개가 오타로 읽히던 것을 고쳤습니다.
가장은저장과 한 글자 차이라서가장 좋은 하루였습니다가 조용히좋 = "하루였습니다"가 되었고,how는show에서s를 뺀 모양이라how are you가are you를 출력했습니다. 문장 문법이 스스로 쓰는 낱말은 다른 낱말의 오타로 읽지 않습니다.초보자가 실제로 쓰는 문장을 훨씬 넓게 받아들이고, 못 알아들으면 조용히 넘어가지 않고 말합니다. 실수 566가지를 모은 측정표(
scripts/mistake-probes/)로 재 보니, 통과했지만 쓴 뜻과 다른 프로그램이 되던 것이 141개에서 11개로 줄었습니다. CPython 문법 오류를 그대로 보여 주던 것은 27개에서 2개가 되었고, 평범한 문장 30개는 30개 다 그대로 출력됩니다.⭐ 평범한 한국어 문장이 조용히 변수 대입이 되던 것을 고쳤습니다.
좋은 아침입니다가좋 = "아침입니다"가 되고 아무 말도 하지 않았습니다. 조사 뒤 값이입니다·습니다같은 문장 어미로 끝나고 그 어미를 뗀 나머지가 숫자가 아니면 글로 읽습니다.이름은 민수·점수는 0·점수는 0이다는 그대로입니다.기다리기·목록 넣기·멈춤·건너뛰기·목록 반복에도 한 글자 오타 복구가 붙었습니다. 수사(
세 번·일초·three times)와 단위(번·회·차례·times)를 알아듣고,점수를 0으로처럼 한국어 저장 표기가 넓어졌으며, 어순을 바꿔 써도 (1을 점수에 더해) 됩니다. 군말(좀·please)은 줄 어디에 있어도 무시합니다.반복 제어 동의어(
그만해·멈춰줘·정지해·계속해·finish·done·종료·마침)를 받아들입니다.add 민수 to 친구들은 목록이면append가 되고, 목록이 아니면append를 가리키며 거절합니다.뜻을 모르는 낱말이 반복 횟수 자리에 오면
range(그 낱말)을 만들지 않고 그 낱말을 짚어 거절합니다.output hello처럼 산문에는 쓰지 않는 낱말로 시작한 줄은 가까운 동작어를 알려 주며 거절하고, 평범한 산문은 그대로 출력합니다.짝 없는
끝은 그끝이 아니라 읽지 못한 머리줄을 가리킵니다.가운뎃점·em 대시·전각 부호·이모지는 문장 글자로 받습니다. 둥근 따옴표만은 거절하고 곧은 따옴표로 바꾸라고 알려 줍니다.
무작위 고르기는 오타 복구를 쓰지 않습니다.
강을 따라 집으로 갑니다가 무작위 선택으로 컴파일되던 사고를 막습니다.문장형에 이야기·화면·시간 문장을 넣었습니다.
천천히 말해줘(글자를 하나씩),아주 천천히 말해줘,0.2초씩 천천히 말해줘,화면 지워,줄 그어,상자로 말해줘,가운데 말해줘,시간 재기 시작해와 값잰시간, 그리고 이름을 붙이는 쿨타임(공격 쿨타임 3초 걸어·공격 쿨타임이 남았으면·공격 쿨타임 끝날때까지 기다려)입니다. 영어에도 같은 문장이 모두 있습니다. 문장 하나가 Python 한 줄이라는 규칙은 그대로입니다.시계를 켜지 않고
잰시간을 읽으면 컴파일할 때E0226으로 막습니다.상자와 가운데 맞춤은 한글 한 글자를 두 칸으로 세어 폭을 맞춥니다.
가이드 세 편을 더했습니다. 차례를 새로 짜면서 03(천천히 나오는 이야기), 14(화면), 15(시간)이 되었고 셋 다 1부에 들어갑니다.
가이드 차례를 초보자 기준으로 전부 새로 짰습니다. 여덟 부로 나누고 88편의 번호와 이름을 모두 바꿨습니다. 파일이 13번, 암호화폐가 17번, 이야기가 86번에 있던 기존 순서는 저장소 README를 그대로 옮긴 것이었습니다. 가이드끼리 걸린 링크·제목·선수 지식을 전부 새 번호로 고쳤고, 앞으로 가리키던 선수 지식이 없어졌습니다. 1부(01~16)는 문장문법만 쓰고, 코드 296줄에 따옴표·괄호·등호가 한 번도 나오지 않습니다.
가이드 두 편을 새로 썼습니다: 02(이야기 묶음), 13(확률). 모두 90편입니다.
1부 가이드가 더 이상 설치를 전제하지 않습니다. 「빈 폴더에 파일을 만들고
nme 실행 hello」로 시작하던 것을 needmoreeasy.com의 쓰는 칸에서 시작하도록 바꿨습니다. 설치한 사람을 위한 명령은 「지금은 안 읽어도 됩니다」 표시와 함께 01번과 16번 맨 아래에 두었습니다. 5분 시작·학습 과정도 같습니다.05번이 가르치던 목록 예제가 실제로는 글이 되고 있었습니다. 이름에 띄어쓰기를 쓸 수 없어서
할 일은 목록이 그대로 출력됩니다.할일로 고치고 그 사실을 적었습니다.새 검사 셋을 넣었습니다.
scripts/check-guide-silent.py는 명령으로 쓴 줄이 조용히 글이 되는 것을 가이드 전체에서 잡고,scripts/report-guide-tier.py는 부마다 문장문법 비율을 재며,scripts/check-tier-parity.py는 능력 80가지의 480칸(문장·초급·고급 × 영어·한국어)을 실제로 컴파일해 비교하고 오류 코드가 두 언어에서 같은지도 봅니다.AI에게 주는 프롬프트 세 개에 이야기 묶음과 확률을 넣고 다시 만들었습니다.
시작 안내와 학습 과정의 앞부분에서 초급 문법과 Python 예제를 걷어내고, 목록·기다리기를 문장형으로 배우는 프로젝트를 하나 넣었습니다.
문장형에 이야기 블록을 넣었습니다.
이야기:/story:로 열면 그 안의 모든 줄이 글이라서, 소설처럼 여러 줄을 쓸 때 줄마다말해줘를 붙이지 않아도 됩니다. 안에서는 아무것도 명령이 아닙니다.3초 기다려도 그 글자 그대로 출력되고만약에 준비가 있으면도 마찬가지입니다. 이야기 한 줄이 조용히 명령으로 바뀌는 것이 이 컴파일러가 저지를 수 있는 가장 나쁜 잘못이기 때문입니다. 빈 줄은 빈 줄 하나를 출력하고, 앞에서 저장한 이름은 글 안에서 값으로 바뀝니다.천천히 이야기:·아주 천천히 이야기:·0.2초씩 천천히 이야기:는 블록 전체를 한 글자씩 들려줍니다. 블록은끝/end으로 닫거나 들여쓰기가 끝나는 곳에서 닫힙니다. 콜론은 한글 자판이 내는 전각:도 받습니다.문장형에 퍼센트 확률을 넣었습니다.
30% 확률로 말해줘 당첨/30% chance show You win처럼 한 줄로 쓰거나, 같은 말만 적어 블록을 열 수 있고,운은 30% 확률/luck is a 30% chance로 참·거짓 값을 저장해만약에 운이 있으면처럼 물어볼 수 있습니다.30%의 확률로,확률 30%로,30퍼센트 확률로,30 프로 확률로,with a 30% chance,a 30% chance,30 percent chance,30% of the time이 모두 같은 뜻입니다.확률은 천분율 정수로 셉니다.
30.5%는 정확히 1000분의 305이고, 거의 같은 소수 둘을 비교해서 결과가 갈리는 일이 없습니다. 소수점은 첫째 자리까지만 쓸 수 있습니다.30.25%는 반올림하지 않고E0227로 거절합니다. 쓴 사람이 적지 않은 뜻으로 프로그램이 돌아가서는 안 되기 때문입니다.0%부터100%를 벗어나면E0228입니다.퍼센트가 있다고 확률이 되지는 않고, 이야기를 말하는 문장은 그대로 문장입니다.
100% 확신합니다,전체의 30%가 왔습니다,옛날 이야기,이야기를 들려줘,story time은 달라지지 않았습니다.⭐ 퍼센트가 들어간 문장도 문장입니다.
%는 Python의 나머지 연산자이고 한국어 낱말은 올바른 Python 이름이라서,100% 확신합니다는 정말로 올바른 Python 식이었습니다. 그래서 Python에 그대로 넘어갔고 실행할 때NameError가 났습니다.전체의 30%가 왔습니다는 CPython 문법 오류로 갔고,나는 100% 동의합니다는 조용히나라는 이름에 저장됐습니다. 이제 셋 다 그대로 출력됩니다. 한국어 문장 어미 목록에합니다와됩니다를 넣었습니다.⭐ 확률 뒤에 오는 말은 명령이어야 합니다.
확률 30%는 낮습니다와a 30% chance of rain이 자기 뒷말을 열 번에 세 번 출력하던 것을 막았고,a 20% chance remains가if …: remains가 되던 것도 막았습니다.확률을 앞에 쓰는 표기는 조사가 있어야 합니다(확률 30%로). 그 조사가 명령과 퍼센트에 대한 서술을 가르는 유일한 표시입니다.라벨과 그 뒤의 말은 출력됩니다.
재미있는 이야기: 시작은 첫 낱말이 조사는으로 끝난다는 이유로재미있이라는 이름에 저장되고 있었습니다. NME가 읽지 못하는 값에 콜론이 들어 있으면 그것은 값이 아니라 글입니다. Python이 읽는 콜론(사전·슬라이스·람다)은 그대로 값입니다.⭐ 숫자 뒤에 단위가 붙으면 값이 아니라 문장입니다.
할인율은 30%입니다가할인율 = 30%입니다로 저장되고 있었습니다. Python은 이것을30 % 입니다, 즉 아무도 만든 적 없는 이름에 대한 나머지 연산으로 읽습니다. 그래서 컴파일은 되고 실행할 때NameError가 났습니다.점수는 30점입니다,가격은 1000원입니다,거리는 3km입니다도 같은 이유로 출력됩니다. 숫자만 있으면 그대로 저장합니다.정답은 7입니다는 문장처럼 말한 숫자 7입니다.파일 읽기 낱말과 한 글자 차이인 한국어 명사(
경고·참고·보고)가 든 줄이 컴파일러를 그대로 죽이던 것을 고쳤습니다. 그런 줄은 평범한 글이므로 그대로 출력됩니다.scripts/check-prose-blocks.py는 문서에 실린 줄을 그 줄이 들어 있는 이야기 블록과 함께 컴파일합니다. 문서가 실제로 보여 주는 프로그램이 그것이기 때문입니다. 실수 측정표에는 퍼센트·라벨·단위에 관한 스물한 줄을 더했습니다 (566 → 587). 쓴 뜻과 다른 프로그램이 되는 것은 11개로 그대로입니다.
0.0.1-beta.160 — 2026-08-12
- 변경한 Rust 파일을 검사하기 전에 pull request의 부모 커밋도 가져와 얕은 CI checkout에서도 플랫폼 Format 작업이 범위가 지정된 rustfmt 검사를 실행할 수 있도록 합니다.
0.0.1-beta.159 — 2026-08-12
- 브랜치 push에서는 전체 파일 형식 검사를 유지하고, pull request에서는 변경한 Rust 파일만 검사해 기준 브랜치에 이미 있던 형식 차이 때문에 작업이 막히지 않도록 합니다.
0.0.1-beta.158 — 2026-08-12
- 앞선 세미콜론 구분 문장 뒤의 별표 import와
except*제어 흐름도 찾아 한 줄 Python 본문에서 공유E0114와E0115진단을 유지합니다.
0.0.1-beta.157 — 2026-08-12
- 한 줄 Python 본문에서 앞선 세미콜론 구분 문장 뒤의
return,break,continue도 찾아 공유 범위 진단으로 표시합니다.
0.0.1-beta.156 — 2026-08-12
- 한 줄 Python 함수·클래스 본문에도 제어 흐름 진단을 적용해
return,break,continue가 잘못된 바깥 문맥을 물려받지 않도록 합니다.
0.0.1-beta.155 — 2026-08-12
- 한 줄 Python 함수·클래스 본문에도 공유 Python 범위 진단을 적용해
global·nonlocal충돌, annotation 대상,nonlocal위치, 별표 import를 안정적인 진단으로 표시합니다.
0.0.1-beta.154 — 2026-08-12
- 한 줄 Python 함수 본문의 올바른 문맥 키워드를 보존하고, 그 안의 비동기
제너레이터 값 반환도 공유
E0118진단으로 표시합니다.
0.0.1-beta.153 — 2026-08-12
- Python 주석식(annotation)에서 사용한 이름을
E0119이 정확히 처리하도록 고치고, f-string 검증은 CPython 백엔드에 계속 맡깁니다.
0.0.1-beta.152 — 2026-08-12
- 앞선 사용과 충돌하는
global·nonlocal선언에 공유 이중 언어E0119/E0120진단을 추가하고, 올바른 선행 선언은 보존합니다.
0.0.1-beta.151 — 2026-08-12
- 비동기 제너레이터 안의 반환값에 공유 이중 언어
E0118진단을 추가하고, 값 없는 반환과 중첩 함수 범위는 보존합니다.
0.0.1-beta.150 — 2026-08-12
async def함수 밖의 비동기 컴프리헨션에 공유 이중 언어E0117진단을 추가하고, 올바른 비동기 컴프리헨션 본문은 보존합니다.
0.0.1-beta.149 — 2026-08-12
- Python 컴프리헨션 안의
yield에 공유 이중 언어E0116진단을 추가하고, Python이 허용하는 일반yield표현식과 제너레이터 람다는 보존합니다.
0.0.1-beta.148 — 2026-08-12
- Python
except*블록 안의break,continue,return에 공유 이중 언어E0115진단을 추가합니다. 중첩 함수 본문과 핸들러 뒤의 제어 흐름은 그대로 보존합니다.
0.0.1-beta.147 — 2026-08-12
- Python 함수와 클래스 안의
from ... import *에 공유 이중 언어E0114진단을 추가하고, 올바른 모듈 수준 별표 import는 보존합니다.
0.0.1-beta.146 — 2026-08-12
- 바깥 함수가 없는 Python
nonlocal에 공유 이중 언어E0113진단을 추가합니다. 올바른 중첩 함수·클래스 사용은 보존하고, 바깥 함수에 해당 이름이 실제로 바인딩됐는지는 CPython 검사에 맡깁니다.
0.0.1-beta.145 — 2026-08-12
async def밖의async for와async with에 공유 이중 언어E0111/E0112진단을 추가합니다.
0.0.1-beta.144 — 2026-08-12
- Python 문맥 진단이 제너레이터 람다 자체의 함수 문맥을 검사하도록 하여
바이트 단위로 보존하고,
async def안의 일반 람다도 올바르게 처리합니다.
0.0.1-beta.143 — 2026-08-12
async def안의yield from을 공유 이중 언어E0110으로 진단하고, 일반 제너레이터 함수 안에서는 이를 그대로 보존합니다.
0.0.1-beta.142 — 2026-08-12
- 함수 밖의
yield와async def밖의await에 공유 이중 언어E0108/E0109진단을 추가하고, 중첩 클래스 본문에서 바깥 함수 문맥을return/yield가 잘못 물려받지 않게 합니다.
0.0.1-beta.141 — 2026-08-12
- 공유 인라인 분기
E0103보호를 문장형 반복 본문에도 적용하고, 한국어 반복 형태가 주어 우선 조건 복구보다 먼저 처리되도록 합니다.
0.0.1-beta.140 — 2026-08-12
- 열린 조건이 없는 인라인
else/elif본문을 잘못된 Python으로 낮추지 않고 공유 이중 언어E0103진단으로 거부합니다.
0.0.1-beta.139 — 2026-08-12
- 최상위 또는 인라인 Python
continue가 반복문 밖에 있을 때 공유 파서가 이중 언어E0107으로 진단하고, 올바른 반복문 본문은 그대로 보존합니다.
0.0.1-beta.138 — 2026-08-12
- Python 함수 밖의 최상위·인라인
return을 공유 파서가 이중 언어E0106으로 진단하고, 올바른 함수 본문은 그대로 보존합니다.
0.0.1-beta.137 — 2026-08-12
- 이중 언어
E0102복구 안내가 NMErepeat와 올바른 Python 반복문도 NMEwhile와 함께 설명하도록 명확히 합니다.
0.0.1-beta.136 — 2026-08-12
- 한 줄
break가 반복문 밖에 있을 때 공유 파서가 안정적인 이중 언어E0102진단을 보고하고, 올바른 Python 반복문 본문은 유지합니다.
0.0.1-beta.135 — 2026-08-12
- 문서 패리티 검사가 Markdown 대상뿐 아니라 로컬 예제와 디렉터리 링크도 확인하도록 확장합니다.
0.0.1-beta.134 — 2026-08-12
- 한 줄
else if분기가break로 끝나는 네이티브 동작을 여섯 표면 회귀 검사로 추가합니다.
0.0.1-beta.133 — 2026-08-12
- 한 줄
while본문이break로 끝나는 네이티브 동작을 여섯 표면 회귀 검사로 추가하고 문서에 적습니다.
0.0.1-beta.132 — 2026-08-12
- 공유 파서에서 문장형 반복의
break here/여기서 멈춰본문을 인식하고, 네이티브 백엔드의 여섯 표면break검사로 회귀를 확인합니다.
0.0.1-beta.131 — 2026-08-12
- 반복문 안의 네이티브 한 줄
break본문을 지원하고, 여섯 표면과 반복문 밖의 이중 언어 거부 진단을 회귀 검사로 확인합니다.
0.0.1-beta.130 — 2026-08-12
times:/번:반복과 함께 문장형 반복의 한 줄 NME 출력 본문도 네이티브 문서에 기록하고, 여섯 표면의 지원·경계 회귀 검사를 추가합니다.
0.0.1-beta.129 — 2026-08-12
- 기존
show·말해표기와 함께 한 줄say출력 본문도 영어·한국어 문장형·초급·고급 네이티브 여섯 표면에서 확인하는 회귀 검사를 추가합니다.
0.0.1-beta.128 — 2026-08-12
- 올바른 한국어 Python 호출 형태인
만약 (준비)를 Python 우선 규칙으로 보존하는 회귀 검사를 추가합니다. - 한국어 동작어 이름이 바인딩된 때 NME 블록으로 명시하는 방법을 영어·한국어 문법, 네이티브 레퍼런스, AI 안내에 설명합니다.
0.0.1-beta.127 — 2026-08-12
- 영어·한국어 문장형·초급·고급 문법의 네이티브 한 줄 NME
else if/else본문을 모두 확인하는 회귀 검사를 추가합니다. - 두 분기 결과를 모두 실행하고 고급 한국어 조건에서는 Python 우선 경계를 명시적으로 지킵니다.
0.0.1-beta.126 — 2026-08-12
- 영어·한국어 문장형·초급·고급 문법의 네이티브 한 줄 NME
while출력 본문을 모두 확인하는 회귀 검사를 추가합니다. - 말하는 한국어 비교 끝말과 기호·자연어 영어 조건을 함께 사용해 같은 네이티브 경로를 여섯 표면에서 실행합니다.
0.0.1-beta.125 — 2026-08-12
- 영어·한국어 네이티브 학습 안내에 네이티브 한 줄 NME 출력 본문과 CPython으로 가야 하는 경계를 예제로 설명합니다.
0.0.1-beta.124 — 2026-08-12
- 백엔드 설계 문서에도 beta123의 네이티브 한 줄 NME 제어문 본문을 기록해 아키텍처 설명과 구현된 부분집합을 일치시킵니다.
0.0.1-beta.123 — 2026-08-12
- 네이티브 백엔드가
if/while과 분기 사슬에서then/그러면뒤의 한 줄 NMEsay/show/말해본문을 하강하도록 확장합니다. - 인라인
elif/else본문에서도 네이티브 분기 흐름을 보존하며, 지원하지 않는 Python 인라인 문장은 계속 거부합니다.
0.0.1-beta.122 — 2026-08-12
- 괄호 안에서 한국어 비교 끝말이 영어
and/or연결어보다 앞에 오는 혼합 표기를 공통 파서와 네이티브 회귀 검사로 확인합니다.
0.0.1-beta.121 — 2026-08-12
- 괄호 안의 한국어
while조건에서 비교 끝말이 안쪽and/그리고또는or/또는연결어보다 앞에 올 때 올바르게 처리합니다. - 말로 하는
동안끝말을 공통 조건 트리에 남기고 괄호 뒤의 실제 반복 본문 경계를 보존합니다.
0.0.1-beta.120 — 2026-08-12
- 괄호 안의 한국어 비교 끝말이
또는/or연결어보다 앞에 오는 경우를 코어와 네이티브 회귀 검사로 명시적으로 확인합니다.
0.0.1-beta.119 — 2026-08-12
- 괄호 안의 한국어 논리 조건에서 비교 끝말이 안쪽
and/그리고또는or/또는연결어보다 앞에 올 때도 올바르게 처리합니다. - 괄호로 완전히 감싼 조건은 실제 논리 깊이에서 검사하고, 피연산자 안쪽 괄호는 그대로 불투명하게 유지하며 코어·네이티브 회귀 검사로 확인합니다.
0.0.1-beta.118 — 2026-08-12
- 괄호 안의 한국어 비교 끝말을 쓰는
elif조건에 코어 정확한 하강과 네이티브 실행 회귀 검사를 추가합니다. if와while에서 사용하는 공통 조건 범위 경로를 그대로 사용하며, 영어·한국어를 별도 구현으로 나누지 않습니다.
0.0.1-beta.117 — 2026-08-12
- 한국어 문장형 비교 끝말이 괄호 안에 들어간
if/elif/while조건에서 닫는 괄호와 본문 경계를 보존합니다. - 공통 영어·한국어 조건 경로를 유지하면서 코어 하강과 네이티브 실행에서 수정된 표기를 확인합니다.
0.0.1-beta.116 — 2026-08-12
- 자연스러운 조건 끝말이 괄호 안에 들어간 한국어 문장형
while/동안헤더가 닫는 괄호와 실제 본문 범위를 올바르게 유지하도록 고칩니다. - 영어·한국어 문장형·초급·고급 네이티브 표면에서 괄호를 쓴 논리
while조건을 모두 확인합니다. - 공통 조건 문법과 올바른 Python 경계를 두 언어의 문법·네이티브 레퍼런스와 AI 안내에 함께 기록합니다.
0.0.1-beta.115 — 2026-08-12
if (ready and score > 2)처럼 콜론 없는 NME 논리 조건 전체를 괄호로 감싸는 표기를 추가하고, 영어·한국어가 같은 공통 조건 트리를 사용하게 합니다.when(ready and score > 2)같은 올바른 Python 호출은 NME 헤더로 바꾸지 않고 바이트 단위로 그대로 보존합니다.- 네이티브 영어·한국어 문장형·초급·고급 행렬로 확인하고 문법 안내, 네이티브 레퍼런스, AI 안내를 함께 맞춥니다.
0.0.1-beta.114 — 2026-08-12
- 네이티브 논리 조건 회귀 범위를 영어·한국어 문장형·초급·고급
while블록까지 넓힙니다. - 네이티브 레퍼런스가
if와while두 제어 흐름의 논리 조건을 모두 다룬다고 문서화합니다.
0.0.1-beta.113 — 2026-08-12
- 네이티브 백엔드 상태 요약을 구현된 논리
and/or조건 지원과 Python 우선순위·단락 평가 동작에 맞춥니다. - 영어·한국어 백엔드 개요 배너가 상세 네이티브 기능 목록과 함께 유지되도록 맞춥니다.
0.0.1-beta.112 — 2026-08-12
- 네이티브 논리 조건에
and/or와 한국어 표기그리고/또는을 추가하고 Python 우선순위와 단락 평가를 유지합니다. - 공통 조건 트리를 재귀적으로 하강하되 제한된 부분집합 밖의 Python 콜론 조건과 지원하지 않는 네이티브 피연산자는 계속 명확히 거부합니다.
- 영어·한국어 문장형·초급·고급 여섯 표면을 단락 평가 회귀 테스트와 쌍으로 된 예제, 네이티브 문서로 함께 확인합니다.
0.0.1-beta.111 — 2026-08-12
- 종료되는 중첩 조건문을 네이티브 블록 뒤 흐름 분석에 반영하여, 실제로 뒤의
return에 도달할 수 있는 모든 경로에서 대입한 이름을 조건부 초기화로 잘못 거부하지 않도록 고칩니다. - 보수적인 반복문 분석과 네이티브 함수의 최상위 정수
return요구는 유지합니다. - 영어·한국어 문장형·초급·혼합 고급 네이티브 표면에서 확인하고 네이티브 레퍼런스·가이드·문법 안내를 함께 맞춥니다.
0.0.1-beta.110 — 2026-08-12
- 실제 네이티브 불리언 바인딩을 정수와 구별되는 정적 타입으로 추가합니다.
True/False와 문장형true/false/참/거짓을 대입하고 비교하고 조건에 사용하고True또는False로 출력할 수 있습니다. - C에서
int로 표현된다는 이유로 불리언 산술·값 변경·정수 전용 네이티브 함수 인자와 반환을 허용하지 않고 명확히 거부합니다. - 영어·한국어 문장형·초급·고급 표면에서 동작을 확인하고 네이티브 레퍼런스, 가이드, AI 안내, 설치·버전 문서를 함께 맞춥니다.
0.0.1-beta.109 — 2026-08-12
- 감싼 네이티브 반복문을 빠져나가는 분기를 블록 뒤로 계속되는 바인딩 분석에서 제외하여, 기존의 이른 반환 처리와 같은 흐름을 사용하게 합니다.
- 영어·한국어 문장형·초급·혼합 고급 네이티브 표면에서 공통 동작을 확인하고 네이티브 문서를 맞춥니다.
0.0.1-beta.108 — 2026-08-12
- 네이티브
if/else에서 일찍 반환하는 분기는 블록 뒤로 계속되는 바인딩 분석에서 제외하여, 그 경로에 도달하는 모든 경우에 대입한 이름을 뒤의return에서 쓸 수 있게 합니다. - 영어·한국어 문장형·초급·혼합 고급 네이티브 표면에서 이 동작을 확인하고 네이티브 레퍼런스와 가이드를 맞춥니다.
0.0.1-beta.107 — 2026-08-12
- 앞선 조건문에서 조건부가 된 바인딩도 뒤의
if/else모든 분기에서 대입하면 확실히 초기화된 것으로 올리고, 보수적인 반복문·한쪽 분기 검사는 유지합니다. - 영어·한국어 네이티브 분기 병합 회귀 테스트를 확장합니다.
0.0.1-beta.106 — 2026-08-12
if/else의 모든 분기에서 대입한 이름은 블록 뒤에 확실히 초기화된 것으로 보고, 한 분기만 대입했거나 실행되지 않을 수 있는 반복문 안의 바인딩은 조건부로 유지합니다.- 영어·한국어 네이티브 분기 병합 동작을 테스트와 레퍼런스에서 함께 확인합니다.
0.0.1-beta.105 — 2026-08-12
- 네이티브에서 문자열 이어붙이기 두 개를 비교할 때 두 번째 결과끼리 비교하지 않고 각 피연산자가 검사된 런타임 버퍼를 유지하도록 고칩니다.
- 영어·한국어 네이티브 문장형에서 고친 동작을 확인합니다.
0.0.1-beta.104 — 2026-08-12
- 네이티브 반복문 안에 중첩한
if에서break를 사용할 수 있고 반복문 밖에서만 거부된다는 백엔드 계약을 문서에 반영합니다. - 검사하는 정수·유한 실수 도우미를 사용하는 네이티브 표현식 하강 주석을 명확하게 합니다.
0.0.1-beta.103 — 2026-08-12
- 네이티브 유한 실수 산술 결과가 유한하지 않게 되면 C
double의inf를 허용하지 않고 이중 언어 런타임 오류로 중단합니다. - 문장형·초급·고급 영어와 한국어 네이티브 표면에서 이 경계를 확인합니다.
- 네이티브 레퍼런스·가이드·문법 안내·백엔드 주석을 검사하는 유한 실수 정책에 맞춥니다.
0.0.1-beta.102 — 2026-08-12
- 영어·한국어 네이티브 코어 레퍼런스를 만들고 README, 문법 안내, 네이티브 가이드와 백엔드 메모에서 연결합니다.
- 두 언어의 문장형·초급·고급 네이티브 프로그램이 같은 결과를 내는 여섯 가지 종단 간 수용 테스트를 추가합니다.
0.0.1-beta.101 — 2026-08-12
- 네이티브 백엔드의 공통 복구 안내에 유한 실수 값을 포함하고, 영어·한국어 안내를 회귀 테스트로 확인합니다.
0.0.1-beta.100 — 2026-08-12
- 네이티브 백엔드 시작 요약을 구현된 함수 부분집합과 맞춥니다. 정수 스칼라
매개변수와 모든 경로에서 정수
return을 요구합니다.
0.0.1-beta.99 — 2026-08-12
- 한국어 우선 CLI 진단의 복구 예시와 코드 설명이 한국어 명령 표기를 사용하게 하고, 영어 명령으로 시작한 출력은 영어로만 유지합니다.
0.0.1-beta.98 — 2026-08-12
- 문법 안내를 네이티브 함수 부분집합과 맞춥니다. 정수 스칼라 매개변수와 모든
경로에서 정수
return을 요구합니다.
0.0.1-beta.97 — 2026-08-12
- 네이티브 부분집합의 유한 실수 참·거짓을 문서화하고, 영어·한국어 동작을 종단 간 네이티브 회귀 테스트로 확인합니다.
0.0.1-beta.96 — 2026-08-12
- 한국어 레퍼런스·설치·네이티브 백엔드 작업 흐름을 한국어 CLI 명령에 맞추고, 의도적으로 소개하는 영어 명령 표기는 표시를 밝혔습니다.
0.0.1-beta.95 — 2026-08-12
- 한국어 예제 작성·템플릿·계산기 확인 안내를
nme 검사와nme 실행에 맞춥니다.
0.0.1-beta.94 — 2026-08-12
- 한국어 파일·프로젝트·HTTP·터미널 메뉴·네이티브 안내의 작업 흐름을 한국어 CLI 명령에 맞추고, 영어 동반 명령은 표시를 밝혀 유지합니다.
0.0.1-beta.93 — 2026-08-12
- 한국어 목록과 초보자 첫 두 가이드를 한국어 CLI 경로에 맞추고, 첫 실행부터
nme 실행과nme 검사를 사용합니다.
0.0.1-beta.92 — 2026-08-12
- 한국어 파일·JSON 안내의 작업 흐름을 한국어 CLI 명령에 맞추고, 직접 해보기 예제도 한국어 기본 경로로 제공합니다.
0.0.1-beta.91 — 2026-08-12
- 한국어 확인·빌드와 변환 안내의 명령을 한국어 CLI 경로에 맞추고, 한국어가 먼저 나오는 한영 진단 출력을 문서에 반영합니다.
0.0.1-beta.90 — 2026-08-12
- 영어와 한국어 조건·랜덤 안내 예제를 각 언어 경로에 맞추고, 명시적인 혼합 언어 예제는 유지합니다.
0.0.1-beta.89 — 2026-08-12
- 영어와 한국어 break 반복 안내 예제를 각 언어 경로에 맞추고, 별도의 혼합 언어 예제는 유지합니다.
0.0.1-beta.88 — 2026-08-12
- 영어와 한국어 while 반복 안내 예제를 각 언어 경로에 맞추고, 별도의 혼합 언어 예제는 유지합니다.
0.0.1-beta.87 — 2026-08-12
- 한국어 Python 패키지 안내를
birthday.ko.nme, 한국어 초급 표기, 영어 학습 경로와 맞춥니다.
0.0.1-beta.86 — 2026-08-12
- Windows CLI 설치 스모크 테스트를 PowerShell에서 실행하여 Git Bash의
link.exe가 CI가 설정한 MSVC 링커를 가리지 않게 합니다.
0.0.1-beta.85 — 2026-08-12
- Python 패키지 안내에서 써드파티 라이브러리를 한영
nme install/nme 설치래퍼로 설치하는 방법과 E9025 실패 경로를 설명합니다.
0.0.1-beta.84 — 2026-08-12
- MSVC 컴파일러 배너가 성공한
nme 네이티브출력에 섞이지 않게 하고, Windows 기본 실행 파일 이름에서.c·.ko원본 줄기를 유지하여.c.exe·.ko.exe로 만듭니다. - 네이티브 백엔드 문서를 수정된 운영체제별 이름과 맞춥니다.
0.0.1-beta.83 — 2026-08-12
- Windows CI 작업을 Visual Studio 개발자 환경으로 설정하여 네이티브 C 테스트가
cl.exe를 찾고 실제 MSVC 경로를 검사하게 합니다.
0.0.1-beta.82 — 2026-08-12
- 빈 요구 사항을 최신 pip이 성공한 무작업으로 처리하더라도
nme 설치가 성공했다고 보고하지 않도록 pip을 실행하기 전에 빈 패키지 이름을 거부합니다. - CI에서 사용하는 안정 Rust 포매터를 워크스페이스에 적용합니다.
- 현재 Clippy 검사에서도 네이티브 백엔드와 테스트가 경고 없이 통과하게 합니다.
0.0.1-beta.81 — 2026-08-12
- Windows 네이티브 빌드와 테스트에서 MSVC
/utf-8을 전달하여 생성된 한국어·영어 C 문자열이 의도한 텍스트를 유지하게 합니다.
0.0.1-beta.80 — 2026-08-12
- 생성된 네이티브 C 런타임 도우미가 GCC·Clang·MSVC의 경고 설정에서도
안전하도록 하고, 생성된
NME_UNUSED매크로를 사용자 식별자에서 예약합니다.
0.0.1-beta.79 — 2026-08-12
nme native가 Windows에서는 MSVCcl과 호환되는 옵션을 사용하고 macOS·Linux에서는cc를 유지하도록 하며, 필요한 Windows 개발자 셸을 문서화합니다.
0.0.1-beta.78 — 2026-08-12
.c로 끝나는 원본 줄기의 기본 네이티브 빌드를 허용하면서, 명시적인-o <경로>.c충돌 방지 검사는 유지합니다.
0.0.1-beta.77 — 2026-08-12
- 영어판과
.ko쌍 프로그램의 기본 네이티브 결과물 이름이 서로 충돌하지 않게 하고.ko줄기인 Windows 기본 출력에도.exe를 붙이며, 명시적인-o이름 지정 동작은 유지합니다.
0.0.1-beta.76 — 2026-08-12
- 네이티브 함수 정의보다 먼저 C 프로토타입을 내보내 뒤에 정의된 함수 호출과 상호 재귀가 올바르게 컴파일되게 하고, 인자가 없는 함수도 다룹니다.
0.0.1-beta.75 — 2026-08-12
- 영어·한국어 README의 컴파일러 설명이 구현된 v0 네이티브 C 백엔드와 그 로드맵을 표시하도록 고쳐, 아직 계획뿐인 기능처럼 설명하지 않게 합니다.
0.0.1-beta.74 — 2026-08-12
- 네이티브 백엔드 메모에서 구현된 v0 기준선과 앞으로의 마일스톤·측정 기반 확장을 분리해 설명합니다.
0.0.1-beta.73 — 2026-08-12
- 네이티브 백엔드 메모가 구현된 제한적 NME-to-C 경로와 별도의 Python/Nuitka 경로를 정확히 설명하도록 고칩니다.
- 네이티브 함수 헤더와 본문 사이에 빈 줄이나 주석이 있는 배치를 백엔드 회귀 테스트에서 다룹니다.
0.0.1-beta.72 — 2026-08-12
- 문서 일치성 검사에서 순서별 영어·한국어 가이드 색인이 번호가 붙은 모든 가이드를 한 번씩 올바른 순서로 나열하는지도 확인하게 합니다.
0.0.1-beta.71 — 2026-08-12
nme native에실행·빌드동작을 둘 이상 적으면 안정적인 이중 언어 진단 E9032으로 거부하고, 네이티브 CLI 테스트 폴더가 서로 충돌하지 않게 합니다.
0.0.1-beta.70 — 2026-08-12
nme native run에서-o를 사용하면 안정적인 이중 언어 진단 E9031으로 거부하고,-o는nme native build에서만 사용하게 합니다.
0.0.1-beta.69 — 2026-08-12
- 문서 일치성 검사에서 번호가 붙은 모든 학습 가이드에 영어·한국어 쌍 파일이 있는지 확인하게 합니다.
0.0.1-beta.68 — 2026-08-12
- 문서 일치성 검사가 대상 파일뿐 아니라 대상 제목과 비교하여 로컬 Markdown 조각 링크도 확인하게 합니다.
0.0.1-beta.67 — 2026-08-12
- 문서 일치성 검사가 존재하지 않는 파일을 가리키는 로컬 Markdown 링크를 발견하면 실패하게 합니다.
0.0.1-beta.66 — 2026-08-12
- 네이티브 문자열 대입에 겹침을 안전하게 처리하는 복사를 사용하여 유효한 자기
대입이 정의되지 않은
memcpy동작을 일으키지 않게 합니다.
0.0.1-beta.65 — 2026-08-12
- 네이티브 바인딩과 파일 범위 함수에서 C 구현 예약 식별자 형태를 거부하여 이식 불가능하거나 잘못된 C가 생성되지 않게 합니다.
0.0.1-beta.64 — 2026-08-12
- 최상위 네이티브
return을main의 반환으로 잘못 만들지 않고 안정적인E0106진단으로 거부합니다.
0.0.1-beta.63 — 2026-08-12
- 네이티브 반복문 밖의
break를 잘못된 C로 만들지 않고 안정적인E0102진단으로 C 생성 전에 거부합니다.
0.0.1-beta.62 — 2026-08-12
- 생성된 C 헤더가 노출하는 매크로·typedef·선언을 예약하여 네이티브 식별자가 전처리나 C 라이브러리 충돌로 바뀌지 않게 합니다.
0.0.1-beta.61 — 2026-08-12
- 네이티브
len이 저장 바이트가 아니라 UTF-8 유니코드 문자를 세게 하여, 바이트 버퍼 한도는 유지하면서 비ASCII 텍스트에서도 Python 동작과 맞춥니다.
0.0.1-beta.60 — 2026-08-12
- 네이티브 바인딩 분석에서 형제 분기를 서로 격리하여 한 분기에서만 대입한 이름을 다른 분기에서 읽지 못하게 합니다.
- C 선언 재사용을 유지하고, 불확실한 제어 블록 뒤에는 보수적으로 초기화 가능성이 있는 이름을 추적합니다.
0.0.1-beta.59 — 2026-08-12
if true뒤의 실행되지 않는else/else if대안에서 대입한 이름을 확정된 네이티브 범위 밖에 두어 초기화되지 않은 C 값을 읽지 않게 합니다.
0.0.1-beta.58 — 2026-08-12
- C를 만들기 전에 네이티브 미해결 이름, 네이티브 함수 값을 그대로 쓰는 경우, 중복 매개변수, 네이티브 함수 이름을 가리는 바인딩을 거부합니다.
0.0.1-beta.57 — 2026-08-12
- 네이티브 변환에서 Python 주석을 동작하지 않는 C 주석으로 내려 주석 내용이 C 전처리기 지시문이 되거나 함수 이동을 혼동하지 않게 합니다.
0.0.1-beta.56 — 2026-08-12
- C를 만들기 전에 네이티브 유한하지 않은 실수 리터럴을 거부하고, 유한한
정수형 실수 리터럴은 C
double값으로 정규화하여 부호 있는 0을 보존합니다.
0.0.1-beta.55 — 2026-08-12
- 네이티브 문자열 리터럴을 C에서 유효하게 쓰도록 제어 문자를 이스케이프하고, C API로 보존할 수 없는 내부 NUL 문자열은 거부합니다.
0.0.1-beta.54 — 2026-08-12
- C를 만들기 전에 네이티브 중첩 함수 정의를 거부하고, 네이티브 함수 표면이 파일 최상위에서만 동작한다는 경계를 분명하게 합니다.
0.0.1-beta.53 — 2026-08-12
- C를 만들기 전에 네이티브 함수 중복 정의와 지원하지 않는 기본값·가변 인자 헤더를 거부합니다.
- 네이티브 호출의 키워드 인자를 거부하여 AST 인자가 조용히 빠지지 않게 합니다.
0.0.1-beta.52 — 2026-08-12
- C를 만들기 전에 네이티브 함수 호출을 정수 함수 정의와 선언된 매개변수 개수에 대조하고, 알 수 없거나 개수가 맞지 않는 호출에 영어·한국어 진단을 제공합니다.
0.0.1-beta.51 — 2026-08-12
- 조건부 분기만 거친 뒤 빠져나올 수 있는 네이티브 함수를 거부하고, 모든 경로를 보장하는 최상위 정수 반환을 요구하여 정의되지 않은 C 반환값을 막습니다.
0.0.1-beta.50 — 2026-08-12
- 네이티브 부호 있는 32비트 정수 리터럴과 산술을 검사하여 정의되지 않은 C 오버플로와 0 제수 동작을 허용하지 않습니다.
- 정수 오버플로와 0으로 나누는 나머지 연산에 영어·한국어 네이티브 런타임 오류를 보고하고, 제한된 네이티브 정수 범위를 문서화합니다.
- 네이티브 함수의 실수 인자와 반환값을 C
int매개변수·반환값으로 조용히 변환하지 않고 거부합니다.
0.0.1-beta.49 — 2026-08-12
- 네이티브 조건부 바인딩을 추적하고, 블록 전에 초기화하지 않은 이름은 실행되지 않을 수 있는 블록 뒤에서 읽거나 값을 바꾸지 못하게 합니다.
- 정적으로 참인
if true블록은 계속 사용할 수 있으며, 초기화가 불확실한 경우 정확한 영어·한국어 진단을 제공합니다.
0.0.1-beta.48 — 2026-08-12
- 네이티브 대입에서 정수·실수·문자열 바인딩의 타입을 다른 타입으로 바꾸려는 경우 호환되지 않는 C를 만들기 전에 거부합니다.
더해/빼값 변경에는 먼저 대입된 숫자 바인딩이 필요하며, 초기화되지 않은 이름이나 문자열 대상에는 영어·한국어 진단을 제공합니다.
0.0.1-beta.47 — 2026-08-12
- 제어 블록 안에서 대입한 네이티브 정수·문자열 선언을 현재 함수 범위로 올리면서 원래의 제어 흐름과 이후 바인딩 사용을 보존합니다.
- 중첩 블록 대입이 범위를 벗어난 C 선언을 만들지 않게 합니다.
0.0.1-beta.46 — 2026-08-12
- 네이티브 함수 안의 스칼라 바인딩을 주 프로그램 바인딩과 분리하여 같은 이름을 다시 사용해도 잘못된 C가 생성되지 않게 합니다.
- 네이티브 백엔드 참고 문서에도 이 범위 동작을 함께 설명합니다.
0.0.1-beta.45 — 2026-08-12
- 사용하지 않는 매개변수라도 런타임 도우미를 가릴 수 있는 네이티브 런타임 이름을 C로 내보내기 전에 거부합니다.
- 네이티브 변수와 함수 이름에 사용하는 것과 같은 정확한 영어·한국어 진단을 제공합니다.
0.0.1-beta.44 — 2026-08-12
- C 키워드와 생성된 네이티브 런타임 이름을 C로 내리기 전에 거부하고 충돌을 허용하지 않는 정확한 영어·한국어 진단을 제공합니다.
nme_copy,nme_cat,len,_nme_i같은 도우미 이름을 예약하지만 사용자 식별자를 조용히 바꾸지는 않습니다.
0.0.1-beta.43 — 2026-08-12
- 네이티브 문자열을 검사 없이 복사하거나 이어붙이지 않고 안전한 도우미를 사용합니다.
- 저장하거나 이어붙인 문자열이 고정 버퍼보다 크면 버퍼를 넘치게 하지 않고 영어·한국어 런타임 오류로 중단합니다.
- 네이티브 문자열 용량을 문서화하고 제한 없는 텍스트에는 CPython 경로를 계속 사용할 수 있게 합니다.
0.0.1-beta.42 — 2026-08-12
nme 빌드 -o가 이미 있는 Python 결과물을 덮어쓰지 않고 E9009로 거절합니다.- 영어와 한국어 빌드 명령에서 기존 결과물을 그대로 유지해
nme compile과nme native build의 동작과 맞춥니다.
0.0.1-beta.41 — 2026-08-12
- 가져온 모듈, 네이티브, Nuitka 준비 폴더를 작업 전체에서 소유하고 성공할 때와 중간에 실패할 때 모두 삭제합니다.
- 저장에 실패해 일부 Python 또는 C 준비 파일이 남는 일을 막습니다.
0.0.1-beta.40 — 2026-08-12
- 가져온 모듈, 네이티브, Nuitka 준비 단계가 프로세스 ID만으로 된 폴더를 재사용하지 않고 실행마다 새로운 임시 폴더를 사용합니다.
- 중단된 실행이나 프로세스 ID 재사용으로 남은 Python 파일이 다음 프로그램의 일반 import를 가리는 일을 막습니다.
0.0.1-beta.39 — 2026-08-12
nme native build가 이미 있는 실행 파일이나 함께 만드는 C 소스를 덮어쓰지 않고 다른 빌드 명령과 같은 E9009로 거절합니다.- 실행 파일과 생성되는 C 소스가 같은 파일을 가리키지 않도록
.c출력 경로를 E9003으로 거절합니다. - E9009 영어·한국어 조회 설명에 네이티브 결과물도 포함합니다.
0.0.1-beta.38 — 2026-08-12
nme native의 폴더 인수를 읽을 수 없는 파일 E9007이 아니라 E9014로 표시해 Python 경로 명령과 같은 폴더 진단을 사용합니다.- 네이티브 명령의 공통 폴더 진단에 영어·한국어 검사를 추가했습니다.
0.0.1-beta.37 — 2026-08-12
- 이미 존재하지만 읽을 수 없는 프로그램 파일은
nme run과nme native에서 없는 프로그램 E9015가 아니라 파일 읽기 코드 E9007로 표시합니다. - 실제로 찾지 못한 경로에만 E9015를 유지합니다.
0.0.1-beta.36 — 2026-08-12
nme compile의 임시 폴더 생성 실패를 네이티브 컴파일러 시작 실패 E9011이 아니라 E9027로 유지합니다.- 임시 Python 소스 저장 실패는 E9008로 구분하고, 외부 컴파일러를 시작하지 못한 경우에만 E9011을 사용합니다.
0.0.1-beta.35 — 2026-08-12
- 읽을 수 없는 가져온
.nme모듈을 최상위 프로그램 찾기 코드 E9015가 아니라 기존 파일 읽기 진단 코드 E9007로 표시합니다. - E9007의 한영 설명에 가져온 모듈 파일도 포함했습니다.
0.0.1-beta.34 — 2026-08-12
- 패키지 이름 없이 실행한
nme install에 별도 안정 진단 코드 E9030을 부여해 옵션 값 코드 E9003을 잘못 재사용하지 않도록 했습니다. - 패키지 이름 누락 경로의 영어·한국어 코드 조회 검사를 추가했습니다.
0.0.1-beta.33 — 2026-08-12
- 가져온 모듈 이름 충돌에 별도 안정 진단 코드 E9028을 부여해 잘못된 옵션 값 오류로 표시하지 않도록 했습니다.
- 현재
nme compile의 모듈 가져오기 제한에 별도 안정 진단 코드 E9029를 부여하고 한영 조회 및 CLI 회귀 검사를 추가했습니다.
0.0.1-beta.32 — 2026-08-12
- 임시 작업 폴더 생성 실패에 E9027을 추가해 현재 폴더 읽기 오류로 잘못 표시하지 않도록 했습니다.
- 가져온 모듈을 실행용으로 준비할 때 한국어 우선 한영 진단을 유지합니다.
0.0.1-beta.31 — 2026-08-12
- 네이티브 실행 파일 시작 실패에 별도의 안정적인 진단 코드 E9026을 부여해 Python 시작 오류로 잘못 표시하지 않도록 했습니다.
- 네이티브 프로그램 시작 경로에 결정적인 Unix CLI 회귀 검사와 한영 공개 코드 조회 검사를 추가했습니다.
0.0.1-beta.30 — 2026-08-12
- E9010·E9011의 한영 설명을 고쳐 Nuitka를 쓰는
컴파일경로와 시스템 C 컴파일러를 쓰는native경로 모두의 복구 방법을 안내합니다. - 두 백엔드 도구 체인이 초보자에게 보이도록 공개 코드 조회 회귀 검사를 추가했습니다.
0.0.1-beta.29 — 2026-08-12
- 실패한 Python 패키지 설치에 새 진단 코드 E9025를 부여해 네이티브 컴파일 코드 E9010을 잘못 재사용하지 않도록 했습니다.
- 한영 코드 조회와 네트워크에 의존하지 않는 패키지 설치 실패 CLI 회귀 검사를 추가했습니다.
0.0.1-beta.28 — 2026-08-12
- 한국어
네이티브·설치명령 별칭도 다른 한국어 CLI 명령과 같은 한국어 우선 한영 진단을 사용하도록 연결했습니다. - 두 실패 경로의 회귀 검사를 추가하고 영어 명령은 영어만 출력하는 동작을 유지했습니다.
0.0.1-beta.27 — 2026-08-12
- 두 예제 템플릿의 영어 초급 뼈대가 3에서 끝나도록 고쳤습니다. 이전에는 값이 참인 동안 계속 도는 의도하지 않은 무한 반복이었습니다.
- 영어·한국어 템플릿 반복이 제한된 형태인지 패리티 회귀 검사로 고정했습니다.
0.0.1-beta.26 — 2026-08-12
- 니드모어코인 본문 가이드와 예제 작성 가이드에 빠져 있던 영어 코드 예제를 보충해 한영 쌍이 같은 학습 자료를 보여 주도록 했습니다.
- 문서 패리티 검사를 번호별 가이드뿐 아니라 모든 가이드 쌍으로 넓히고, 코드 블록 범위도 같은지 확인합니다.
0.0.1-beta.25 — 2026-08-12
- 니드모어코인 순서 가이드 네 편의 한국어·영어 문서에 빠져 있던 주제 메타데이터를 완성했습니다.
- 영어 문장형 작업증명·거래 증명 예제를 한국어 쌍과 맞추고, 번호별 가이드의 코드 블록 수가 한영 쌍에서 같은지 CI에서 검사합니다.
0.0.1-beta.24 — 2026-08-12
- 한국어 문서의 로컬 링크가 의도적으로 영어를 비교하는 링크를 제외하고 한국어 쌍 문서로 이동하도록 고쳤습니다.
- 가이드 순서 전체의 한영 탐색 행을 맞추고, 언어가 다른 링크와 빠진 탐색 행을 잡는 CI 문서 패리티 검사를 추가했습니다.
0.0.1-beta.23 — 2026-08-12
- 니드모어코인 여섯 예제(한국어·영어 문장형, 초급형, 고급형)의 작업증명 난이도 표기를 일치시키고, 이 학습 계약을 회귀 테스트로 고정했습니다.
0.0.1-beta.22 — 2026-08-12
- 니드모어코인 여섯 방향 학습 매트릭스를 정기 예제 검사에 충분히 빠르고 결정적으로 만들고, 문장형 예제가 약속한 진행 단계에서 실제로 특수문자를 쓰지 않도록 정리했습니다.
- 순수 영어 문장형 지식 증명 표현의 파서·회귀 테스트를 추가하고 한국어와 영어 문장형 소스를 각각 검증했습니다.
0.0.1-beta.21 — 2026-08-12
- locked 출시 메타데이터를 고치고 CLI와 암호화폐 예제 회귀 검사가 현재 beta 패키지 버전과 일치하도록 유지했습니다.
0.0.1-beta.20 — 2026-08-12
- 기존의 독립 블록체인 시연을 니드모어코인 학습 프로젝트로 교체했습니다. 한국어·영어 문장형, 초급형, 고급형 예제와 공통 제작 안내, 여섯 방향 예제 작성 표준을 함께 제공합니다.
- 여섯 예제와 의도한 문법 표면, 공통 관찰 동작을 검사하는 자동 검증을 추가했습니다.
0.0.1-beta.19 — 2026-08-12
- 공개 beta의 Git 토폴로지를
main과 수렴시킵니다. 최종 beta.19 릴리스 커밋은 beta.18을 첫 부모로 유지하고 현재 main tip을 둘째 부모로 기록합니다. 따라서 beta의 first-parent 릴리스 선은 공개 커밋마다 버전이 정확히 1씩 증가하면서도,main이 차세대beta의 실제 조상이 됩니다. - beta.17에서 추가한 버전 증가 가드, locked Cargo 검증, 3개 OS 게이트, CPython 3.10/3.12/3.14 호환성 매트릭스는 그대로 유지합니다.
0.0.1-beta.18 — 2026-08-12
- 내장 슈노르 어댑터를
0.0.2로 올리고 문맥에 묶인 Fiat-Shamir 비대화형 증명을 추가했습니다. SHA-256 도전은 NME 전용 도메인 태그 아래 Group 15 생성원, 약속값, 공개값, 길이 구분된 명시적 문맥을 함께 묶습니다. zk_nizk_challenge,zk_nizk_prove,zk_nizk_verify와 한국어 문장형을 추가했습니다. 증명은 JSON 친화적인[약속값, 응답값]이며 다른 문맥으로 재사용하면 검증이 실패합니다.- 한국어/영어 실행 예제, 파서·lowering·CLI 종단간 테스트를 추가하고 문맥 결박만으로 같은 문맥 안의 freshness/replay 문제가 해결되는 것은 아니라는 경계를 문서화했습니다.
0.0.1-beta.17 — 2026-08-12
beta를 규칙으로 강제되는 차세대 릴리스 선으로 만들었습니다. 공개 beta push마다 workspace beta 번호가 부모보다 정확히 1 증가하고, 커밋 제목과Cargo.lock의 workspace 패키지 버전이 모두 일치해야 합니다.- CI를
actions/checkout@v6,actions/setup-python@v6로 올리고 Cargo 검사와 테스트에--locked를 적용했습니다. - beta와 PR에 CPython 3.10, 3.12, 3.14 호환성 검증을 추가하면서 Ubuntu, Windows, macOS 전체 품질 게이트도 유지합니다.
0.0.1-beta.16 — 2026-08-11
내장
zero_knowledge/영지식어댑터(버전0.0.1)를 추가했습니다. Pythonsecrets보안 난수, RFC 3526의 3072비트 MODP 그룹 15 부분군, 256비트 검증자 도전, 부분군·범위 검사, 전사록 모의 도우미, 도우미 이름 충돌 보호를 포함한 실제 유한체 슈노르 지식 증명 기준 구현입니다. 한국어 문장형만으로 완전한 증명 흐름을 쓸 수 있으며, 송신자 에이→수신자 비와 악성 중계자 씨가 저장 전사록 재전송 실패·전사록 모의·별개의 실시간 중계를 보여 주는 한국어/영어 예제를 추가했습니다. 수학적으로 실제 계산을 쓰는 학습·기준 코드이며 부채널 방어가 된 실서비스 암호 라이브러리를 대신하지 않는다는 보안 범위도 문서화했습니다.NME 네이티브 코어를 확장했습니다: 산술에 정수
%모듈로(실수 모듈로는 정직하게 거부).%를 쓰는 조건은 프론트엔드 후속 작업입니다.네이티브 백엔드를 고쳤습니다: 첫 문자열 대입이 이어붙이기일 때(
greeting = "hello" + " world") C 배열을 함수 호출로 초기화할 수 없으므로 버퍼를 먼저 선언하고 strcpy로 복사합니다.NME 네이티브 코어를 확장했습니다: 실수 리터럴·변수, 실수 산술(정수/실수 혼합은 double로 승격), 실수 비교.
NME 네이티브 코어를 확장했습니다: 초급
times:반복(블록형과 한 줄형)이 C for 루프로 내려갑니다.NME 네이티브 코어를 확장했습니다: 참·거짓 조건에서 불리언 리터럴(
if true/if false→ 1/0) 지원, 정수 참·거짓과 함께.NME 네이티브 코어를 확장했습니다: 정수 값의 참·거짓 조건(
if ready,while turns)으로 비교 없이도 카운터와 플래그가 네이티브로 동작합니다.자연어
<=/>=연결어를 추가했습니다:if x is less than or equal to 3, 한국어만약에 점수가 10보다 작거나 같으면이 두 백엔드에서<=/>=로 내려갑니다.or equal구절은 논리or분리와 오타 복구에서 제외됩니다.NME 네이티브 코어를 확장했습니다: 문자열 변수에
+이어붙이기(고정 버퍼strcpy)로 문자열을 단계적으로 만들 수 있습니다. 중첩 이어붙이기는 여전히 거부합니다.NME 네이티브 코어를 확장했습니다:
strcmp를 쓰는 문자열==/!=비교(Python 조건형과 자연 한국어형 모두),strlen으로 매핑하는len내장, 문장 조건의 문자열 같음.NME 네이티브 코어를 확장했습니다: 문자열 변수(리터럴), 문자열 출력, 작은 런타임 도우미를 쓰는 이항
+이어붙이기 하나(중첩은 정직하게 거부). 식이 이제 하강 과정에서 정적 타입(정수 vs 문자열)을 지닙니다.NME 네이티브 코어를 확장했습니다: 스칼라 매개변수 함수와
return(재귀 동작),else/else if가지,say안의 호출, C 키워드 식별자의 정직한 거부,-O2빌드. 이 머신에서 측정: 정수 5,000만 회 반복이 네이티브에서 CPython보다 약 60배 빠릅니다(마이크로벤치마크 하나, 메모에 문서화).NME 네이티브 AOT 백엔드의 첫 조각을 구현했습니다(
nme-native크레이트 +nme native 실행/nme native 빌드): 제한된 정적 타입 코어 부분집합(정수 값, 비교 조건의 문장형while/if,break,say)을 C로 내리고 시스템 C 컴파일러로 네이티브 실행 파일을 만듭니다. 코어 밖의 모든 것은 명확한 이중 언어 진단으로 거부되며 CPython으로 그대로 실행할 수 있습니다. 한국어 표기도 동작하며, 컴파일·실행·출력 비교의 종단 간 테스트가 있습니다.부트스트랩 예제(아주 작은 언어를 Python으로 변환해 실행하는 NME 프로그램)와 한국어 쌍, 부트스트래핑/셀프호스팅 가이드 29, 두 버전을 실행하는 CLI 테스트를 추가했습니다.
가이드 25(네이티브 컴파일)를 추가했습니다:
nme native 실행/nme native 빌드, 문서화된 코어 부분집합, 함수와 재귀, C 산출물, 정직하게 측정한 벤치마크를 다룹니다.README와 시작 안내(가이드 24)에서
nme 설치를 소개합니다.nme 설치/nme install을 친절한 pip wrapper로 추가했습니다: Python 패키지를 설치하고 초보자에게.nme파일에서 쓸import줄을 알려 주며, pip이 없을 때는 명확한 이중 언어 메시지를 냅니다.네이티브 백엔드 조사 문서(
docs/native-backend.ko.md)를 추가했습니다: 제한된 정적 타입 코어 부분집합을 목표로 하는 첫 NME 네이티브 AOT 컴파일러를 위해 C 백엔드 vs LLVM vs Cranelift vs 직접 코드젠을 정직하게 평가하고 C를 권장하며, Python 호환 백엔드 및 Nuitka와 명확히 분리합니다.NME 안에서
datetime표준 패키지를 쓰는birthday.nme카운트다운 예제(한국어 버전 포함)와 표준 라이브러리·pip 패키지를 다루는 가이드 24를 추가했습니다..nme모듈 가져오기를 추가했습니다:from "helper.nme" import greet, score는 옆에 있는.nme파일에서 이름 있는 값들만 가져옵니다. 프로젝트를 여러 파일로 나누되 인터페이스가 명확하고 전역 상태가 없습니다.nme 실행/검사/빌드는 가져온 모듈을 재귀적으로 변환하고 실행 시 임시 모듈 폴더를sys.path에 넣어 가져올 수 있게 만듭니다. 모듈 오류는 모듈 파일 이름과 함께 표시됩니다. 파일 이름은 Python 식별자여야 하고, 두 모듈이 이름을 공유하면 안 되며,nme compile은 아직 모듈을 지원하지 않습니다. 예제 쌍(examples/modules/)을 포함합니다.로컬 서버에서 페이지를 받아 오는
http-client.nme예제와 터미널 메뉴 반복문terminal-menu.nme예제를 추가했습니다(각각 한국어 버전 포함). CLI 테스트가 스크립트 입력으로 메뉴를 실행해 확인합니다.nme 변환이 파일 문장형을 배웠습니다:x = open("f").read()와x = Path("f").read_text()는x에 "f" 읽어서로,open("f", "w").write(v)/Path("f").write_text(v)는"f" 파일에 "v"를 저장해로 변환됩니다(한국어 출력 기준). 초급 변환은 파일 도구가use file모듈이므로 Python을 유지하고, 변환된 문장형 소스는 컴파일러를 통해 다시 순환합니다.교육용 블록체인 학습 프로젝트 네 개를 추가했습니다(학습용이며 투자 조언이 아닙니다). 각각 한국어 버전도 있습니다:
blockchain-ledger.nme(초급, 해시로 연결된 블록),proof-of-work.nme(중급, 난이도 있는 채굴과 사슬 검증),signatures.nme(고급, HMAC 서명과 검증),consensus.nme(초고급, 두 노드의 포크와 가장 긴 사슬 규칙 시뮬레이션).문장형 파일 문법을 추가했습니다:
read "notes.txt" into memo,memo read "notes.txt",memo에 "notes.txt" 읽어서 (저장해),write "hello" to "out.txt","out.txt" 파일에 "hello"를 저장해가use file모듈 없이pathlib줄로 내려갑니다. 읽은 대상은 문장 출력에서 쓰는 이름이 되며,read the book이나write hello처럼 애매한 줄은 평범한 문장 출력으로 남습니다.random옆에 파일 읽기·쓰기와 JSON을 위한use file/파일 사용모듈 (버전0.0.1)을 추가했습니다. 한 번 불러오면 두 언어 이름이 모두 생깁니다:file_read/파일읽기,file_write/파일쓰기,json_load/json읽기,json_save/json저장, 버전 이름까지.use줄 파서는 두 모듈이 공유하며(같은 최신/버전 표기, 같은 이름 충돌 보호, 같은 오류),nme 모듈이 두 모듈을 모두 보여 줍니다. 문장형 파일 wrapper는 다음 단계입니다.안정적인 오류 코드를 명령줄 오류까지 확장했습니다.
nme ko <코드>와nme en <코드>가 이제 CLI 오류(E9001알 수 없는 명령,E9015프로그램 없음,E9013Python 시작 실패 등)도 설명합니다. 컴파일러 오류는E0001부터, CLI 오류는E9xxx범위를 쓰며 같은 방식으로 (error[E9015]:) 표시됩니다. CLI의 모든fail()경로에 코드가 붙었습니다.명시적
end/끝블록 파싱을 고쳤습니다. 들여쓴 문장형 블록 뒤에 평평한 블록이 이어질 때, 남은end줄로 닫을 수 없는 들여쓴 본문은 들여쓰기가 끝난 지점에서 닫힙니다. 이제만약 ...(들여쓴 본문) 뒤에 평평한if ... end블록이 와도 "닫는end없음" 오류가 나지 않습니다. 기존에 정상 동작하던 프로그램은 그대로이고, 닫는end가 충분한 중첩 헤더는 여전히 중첩으로 남으며, 평평한 블록은 여전히 자기end가 필요합니다.모든 컴파일러 오류에 안정적인 오류 코드를 붙였습니다. 메시지 옆에
error[E0102]:처럼 표시됩니다.nme ko <코드>로 자세한 한국어 설명(영어 설명 포함)을,nme en <코드>로 영어 설명을 볼 수 있습니다. 코드 없이nme ko(또는nme 에러/nme error)를 실행하면 모든 코드를 나열합니다. 각 코드는 무엇이 잘못됐는지, 왜 그런지, 어떻게 고치는지를 안내하며, 도움말과 두 README, 두 언어 레퍼런스에서도 이 기능을 소개합니다.설치 문서를 운영체제별 독립 섹션(Windows 11, Windows 10, 이전 Windows, macOS, Debian/Ubuntu, Fedora, Arch Linux)으로 나누었습니다. 각 섹션에 복사해서 쓸 설치 명령, PATH, 버전 확인, 첫 실행, 흔한 오류 해결이 들어 있습니다.
100개 가이드 과정을 시작했습니다.
docs/guides/에 난이도 범례, 순서 학습 경로, 주제 찾아보기, 전체 표가 있는 인덱스와 초급 가이드 12개(hello → ask → set → update → repeat → if → while → break → and/or → random → check/build → convert)가 있으며, 각 가이드는 난이도, 선수 지식, 주제, 결과물을 두 언어로 표시합니다. 모든 코드 블록은nme check로 검증했습니다.프로그램 이름을 겹치지 않는 범위에서 줄여 쓸 수 있습니다:
nme r gue는guessing-game.nme를 실행합니다.run/실행,check/검사,build/빌드,compile,convert, 파일 이름만 적는 실행 단축 (nme gue), 그리고 "어느 것을 선택할까요?" 목록(이름·줄임 이름으로 답 가능) 모두에 같은 규칙을 적용합니다. 대소문자를 무시한 정확한 파일 이름이 우선이고, 그다음 유일한 접두사가 적용됩니다. 여러 프로그램이 일치하면 추측하지 않고 후보 목록을 보여 주며 이름을 더 입력하라고 안내합니다.길게 출력되는 도움말·오류 코드 목록은 파이프가 일찍 닫혀도 (
nme ko | head처럼) 더 이상 패닉하지 않습니다.
0.0.1-beta.15 — 2026-08-11
- 한국어
!=문장형 비교같지 않으면,같지 않다면,같지 않을(붙여 쓴같지않으면등 포함)을 받아들입니다. 영어is not equal to와 같은 뜻입니다. while+ 한국어 문장 조건 +동안끝맺음(예:while 점수가 3보다 작을 동안)을 고쳤습니다. 끝맺음이 블록 표시로 처리되고 반복문의 한 줄 본문으로 잘못 내려가지 않습니다.while조건의 각 논리 항에도 끝맺음을 따로 붙일 수 있습니다(while 점수가 10과 같지 않을 동안 그리고 점수가 3보다 클 동안).- 한국어 논리 조건을 고쳤습니다. 비교 끝맺음이
그리고/또는과 함께 쓸 수 있습니다(점수가 0보다 크면 그리고 점수가 3보다 작으면). 잘못된 조건은 파서가 멈추지 않고 진단을 보여줍니다. - 영어 룰렛 동반 예제의 숫자 메뉴·배팅·휠 선택에
ask number를 쓰도록 고쳤습니다. - 명령어 단축(
nme r/c/b/m/v/h,nme comp/nme conv)과 파일 자동 발견을 추가했습니다. 파일 이름 없이nme r을 실행하면 폴더의.nme프로그램이 하나면 바로 실행하고, 여러 개면 번호를 물어보며, 없으면 무엇을 해야 하는지 설명합니다. - 초보자 예제마다 영어·한국어 쌍 예제를 추가했습니다.
- 양쪽 언어의 초보자 문서를 고치고 영어·한국어 문서 격차를 닫았으며 튜토리얼에 예제 링크를 추가했습니다.
- CLI 도움말과 양쪽 언어 안내서에 단축 명령을 소개하고 파일 힌트를 더 친절하게 바꿨습니다.
0.0.1-beta.14 — 2026-08-11
use random전에 가져온 Python import 이름도 추적해 랜덤 모듈이 덮어쓰지 않도록 했습니다.
0.0.1-beta.13 — 2026-08-11
- 랜덤 모듈이 이미 있는 이름을 덮어쓸 수 있으면 불러오지 않고 친절한 오류를 보여 줍니다.
0.0.1-beta.12 — 2026-08-11
- 한국어 초급 타임루프 예제의 빠진 들여쓰기를 고쳐 공개 예제가 모두
nme check를 통과하도록 했습니다.
0.0.1-beta.11 — 2026-08-11
3번:·3 times:초급 반복 블록도끝·end로 닫으면 실제 들여쓰기를 하지 않아도 됩니다.repeat 3 times:처럼 자연스러운 초급 반복 표기를 지원하고, 일반 Python 콜론 블록은 Python의 들여쓰기 규칙을 그대로 지킵니다.How old are you?,몇 살이에요?같은 나이 질문과준비하는동안처럼 말하듯 붙인 한국어 반복 조건도 지원합니다.Please show me hello,보여줘 나 안녕처럼 부탁하는 출력 문장도 실제 내용만 말합니다.- 문장형에서 초급형으로 넘어가는 평면 블록 예제를 영어와 한국어 문서에 함께 추가했습니다.
0.0.1-beta.10 — 2026-08-11
만악에같은 한국어 조건 시작 오타,이름 이 철수 면처럼 띄어 쓴 조사와 어미,그러면연결어를 안전하게 복구합니다.use random lates,랜덤 사요 최신처럼 뜻이 분명한 모듈 오타를 복구합니다.나이 몇 살이에요,이름 은 뭐예요처럼 자연스러운 질문의 이름 형태를 넓히면서나이처럼이로 끝나는 명사도 보존합니다.- 한국어
nme 버전명령은 한국어와 영어 버전 정보를 함께 보여 줍니다.
0.0.1-beta.9 — 2026-08-11
ask, 쉼표, 따옴표 없이What is your name?,What's your city?,이름이 뭐예요?,나이는 몇 살이에요?처럼 자연스럽게 질문할 수 있습니다. 마지막 물음표는 생략할 수 있고내 이름은 뭐예요?도 이해합니다.name save Mina,이름 저장 민수처럼 이름을 먼저 말하는 저장과, 들여쓰기 없는 NME 블록 안의 일반 Pythonif/for본문 가상 들여쓰기를 지원합니다.이름이 철수면,이라면,준비가 거짓이면같은 짧은 한국어 조건과있으먄,철수먄같은 제한된 말하듯 오타를 지원합니다.- 첫 실행 예제와 튜토리얼을 문장형에서 Python으로 성장하는 흐름에 맞췄습니다.
0.0.1-beta.8 — 2026-08-11
색이 빨강과 같으면 맞아요 말해줘처럼 주어부터 시작하는 자연 조건과끝으로 닫는 평평한 블록을 지원합니다.그리거,an,같먄같은 흔한 논리·조건 연결어 오타를 복구하면서 평범한 출력 문장은 잘못 조건문으로 바꾸지 않습니다.- 내장 파서보다 새 버전인 Python 문법(예: CPython 3.14 t-string)은 그대로 보존하고, Windows/macOS/Linux CI 검증 행렬을 추가했습니다.
0.0.1-beta.7 — 2026-08-11
Hello world!,I'm ready처럼 출력 동작이 없는 여러 단어 문장과 줄임말도 자연스럽게 출력합니다.shwoe,thne같은 흔한 글자 순서 바꿈을 안전하게 복구합니다. 애매한 Python 모양의 입력은 그대로 둡니다.ask name, What is your name?처럼 따옴표 없이 쉼표 뒤에 질문을 쓸 수 있습니다.
0.0.1-beta.6 — 2026-08-11
- 콜론이나 출력 동작 없이도
3번 안녕하세요처럼 글을 반복하고,점수에 1 더해처럼+,-,=없이 값을 바꾸는 문장형 다리를 추가했습니다. - 띄어 쓰거나 붙여 쓰는 한국어 조건 연결어, 공손한 문장 앞말,
저장·설정같은 한국어 초급 저장 동작을 지원합니다. - 첫 실행 예제와 튜토리얼을 다듬어 들여쓰기에서 막히지 않고 문장형·초급·일반 Python으로 단계적으로 이동할 수 있게 했습니다.
0.0.1-beta.5 — 2026-08-11
- 평평한 블록 안에서 세 학습 단계와 한국어 초급 문법을 더 자연스럽게 섞고 일반 Python과 함께 쓰는 회귀 테스트를 추가했습니다.
이름있으면같은 붙여 쓰는 한국어 조건 연결어, 자연스러운아니면만약에가지 표현, 짧은 공손한 문장 앞말을 지원합니다.- 최상위 Python 이름인
end와끝은 그대로 두고, 뒤에 있는 NME끝때문에 콜론을 쓴 Python 블록을 잘못 열지 않도록 고쳤습니다. - 한영 문법 레퍼런스와 로컬 후속 작업 안내를 갱신했습니다.
0.0.1-beta.4 — 2026-08-11
- 들여쓰기 없이
while,break,and/or,elif/else,end/끝을 쓸 수 있는 제어 흐름 다리를 추가했습니다. 문장형·초급·일반 Python 줄을 한 블록에서 섞을 수 있습니다. - 새 제어 흐름의 한국어 표현, 평평한 블록의 가상 들여쓰기, 구조 오류 안내와 회귀 예제를 추가했습니다.
- 가장 쉬운 문장에서 Python으로 성장하는 영어·한국어 학습 문서와 AI 안내를 확장했습니다.
0.0.1-beta.3 — 2026-08-11
- 같은 프로젝트에서 평범한 문장, 짧은 초급 문법, Python으로 성장하는 학습 경로를 NME의 중심 정체성으로 정리했습니다.
- 확장자를 생략한
nme 실행 program,nme run program,nme program과 운영체제별 Python 자동 선택을 추가했습니다. - 한국어 명령은 문법 설명·힌트·명령 오류를 한국어 먼저와 영어로 함께 표시하고, 영어 명령은 영어만 표시합니다.
검사와빌드가 생성 코드를 CPython으로 검증하며, 실패한빌드는 출력 파일을 만들지 않습니다.- 동작 오타 모호성, 조건 부정·리터럴, 이름 범위 누출, 한국어 조사·동작, 모듈 검증, 영어 아포스트로피, 실제 줄 수 보존 문제를 고쳤습니다.
- 호출, 여러 줄 문장, 별칭, 범위, 질문, 표현식, 평범한
import random의 뜻을 보존할 수 없을 때 변환하지 않도록 보수적으로 만들었습니다. - Fedora와 패키지 관리자 Cargo의 PATH 설치 안내를 고쳤습니다.
0.0.1-beta.2 — 2026-08-10
- 고급 Python, 짧은 초급 문법, 대화식 문장형 문법을 영어와 한국어로 자유롭게 섞어 쓸 수 있게 했습니다.
- 코드용 특수문자가 거의 필요 없는 입력, 출력, 값 저장, 반복, 조건, 숫자 입력, 랜덤 정수, 랜덤 선택 문법을 추가했습니다.
- 동작 단어의 한 글자 오타를 제한적으로 복구하고, 뜻이 모호한 문장은 정확한 위치와 고치는 힌트로 알립니다.
- 로컬에서 버전을 선택하는 한영 랜덤 어댑터와 모듈 목록 명령을 추가했습니다.
- 원하는 단계와 언어를 고르는 안전한 Python→NME 변환기를 추가했습니다.
- 설치된 Nuitka를 이용하는 선택적 독립 실행 파일 컴파일을 추가했습니다.
- 인사, 숫자 맞히기, 세 단계 혼용, 작은 컴파일러 예제와 이에 맞춘 양언어 튜토리얼·운영체제·편집기 안내를 추가했습니다.
- 새 문법 전체에서 Python 우선 및 줄 수 보존 계약을 유지합니다.
0.0.1-beta.1 — 2026-08-10
- 첫 공개 베타 버전 계열을 정했습니다.
- 출력, 글자 입력, 반복, 조건을 영어와 한국어로 쓸 수 있게 했습니다.
- 올바른 모든 Python 소스의 호환성과 바이트 단위 보존을 유지합니다.
- Python에 기본 포함된
random모듈을 이용하는 영어·한국어 도우미를 제공합니다. - 서로 대응하는 영문·한국어 튜토리얼, 정확한 언어 레퍼런스, 예제, 출시 정책 문서를 추가했습니다.