TL;DR
- JavaScript의 태그드 템플릿 리터럴에서
${{ url }}같은 표현은 실제로는 값을 평가하는 문법이지만 템플릿 언어의{{ url }}처럼 보이는 이중 해석을 만들어내는 말장난임. - 셰익스피어의 말장난은 문법에 따라 단어의 품사를 바꾸거나 문맥으로 구절의 뜻을 달리하는 방식임.
- 태그 함수는 템플릿 리터럴의 텍스트 조각과 평가된
${...}값을 각각 받아 원하는 방식으로 처리함. prompt태그 함수와${{ ... }}표현을 이용해 프롬프트 변수에<prompt id="...">형태의 주석을 붙여 관측 도구인 Helicone에서 분석할 수 있음.- 이 문법의 재미는 JavaScript가 해석하는 것과 사람이 눈으로 읽는 것이 다르다는 데 있으며, 이 아이디어는 2024년 Justin과 함께 작업해 SDK에 공식 반영됨.
말장난과 문법
- 셰익스피어 작품에는 말장난이 가득하며, 이는 언어에 대한 숙련과 애정을 보여주는 것으로 여겨짐.
- 서로 다른 두 단어를 바꿔도 문법적으로 올바른 문장이 되는 일은 드물지만, 셰익스피어는 마술사처럼 단어를 다룸.
“재치 있는 바보가 바보 같은 재치가 있는 사람보다 낫다.”
— 《십이야》
- 이 예문에서는 명사 “fool”이 형용사 “foolish”로, 형용사 “witty”가 명사 “wit”으로 바뀌며, 가장 단순한 말장난은 문법 규칙을 활용해 단어의 의미를 바꿈.
- 문법이 아닌 외부 문맥을 활용해 구절의 의미를 달리하는 말장난도 있음.
“불을 끄고, 그다음 불을 끄시오.”
— 《오셀로》
- 첫 번째 표현은 촛불을 끄라는 뜻이고, 두 번째는 누군가를 죽인다는 은유로 데스데모나를 가리킴.
- 옥스퍼드 영어 사전(Oxford English Dictionary)은 말장난(pun)을 두 가지 이상의 의미나 연상을 암시하도록 단어를 사용하거나, 발음이 같거나 비슷하지만 뜻이 다른 둘 이상의 단어를 사용해 유머 효과를 내는 언어유희로 정의함.
- 유머는 사람마다 다르게 느끼는 것이지만, 지금까지 발견한 가장 뛰어난 말장난은 영어가 아닌 언어에 있음. 자연어와 프로그래밍 언어에는 문법이라는 공통점이 있음.
태그드 템플릿 리터럴
- JavaScript에는 문자열을 강력하게 조작할 수 있는 태그드 템플릿 리터럴(tagged template literal)이 있음.
dedent같은 태그 함수는 템플릿 리터럴의 과도한 들여쓰기를 제거함.- 태그 함수는 리터럴의 텍스트 조각과 평가된
${...}값을 별도의 인수로 받으므로, 각각을 원하는 방식으로 처리할 수 있음.
템플릿 언어
- 대부분의 템플릿 언어는 결과물과 같은 형식, 즉 변수 자리를 비워 둔 텍스트로 템플릿을 작성하도록 함.
- 제어 대상과 제어 방식이 같은 시스템 안에 있을 때 흥미로운 일이 생기며, 여기에는 탐구할 만한 괴델의 불완전성 정리 관련 논점도 있음.
hi {{ name }}처럼{{ }}문법은 여러 템플릿 언어에서 널리 쓰임.- Mustache
- Handlebars
- Jinja2
- Django 템플릿
- Liquid
- Angular 템플릿
- Vue 템플릿
프롬프트 템플릿 리터럴
prompt라는 태그 함수를 정의하면{{ }}템플릿을 받는 것처럼 보이는 문법을 만들 수 있음.prompt템플릿에[${{ url }}]처럼 URL, 추가 메모, 시각을 전달하면, 내부적으로는 프롬프트를 분석하는 관측 도구 Helicone에서 처리할 문자열이 생성됨.- 생성된 문자열에서 각 값은
<prompt id="url">https://github.com/etc/etc</prompt>,<prompt id="notes">Only review the unit test files</prompt>,<prompt id="time">2026-09-26</prompt>형태로 표시됨. - 겉으로 보이는
{{ }}템플릿 문법은 JavaScript 코드에서 우연히 나타남.${...}는 내부 표현을 평가하고, JavaScript의{ name }객체 축약 표기는{ name: name }과 같음. - 따라서
prompt태그 함수는 문자열에 주석을 붙이는 데 필요한 정보를 모두 받음. - JavaScript가 보는 것과 사람이 보는 것은 서로 다르며,
{{ url }}문법은 사람의 머릿속에서 만들어짐. - 이 아이디어는 2024년 Helicone의 Justin과 함께 작업한 것으로, 내부에서 사용하던 방식을 Justin이 SDK에 공식 반영함. 말장난이 재미있다고 생각했고 Justin도 이를 포함하는 데 동의함.
- 말장난은 하나의 문자열이 두 가지 방식으로 파싱되는 것임. 문법 모델이 돌아왔으며, 이를 진지하게 받아들여 가능한 해석에 대한 확률 분포를 반환함. 공간 언어에서는 한 차원을 더해 파서를 더욱 복잡하게 만듦.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요