Abstract
엑셀의 자동완성 기술은 사용자가 입력하는 데이터를 만들어낼 명령어를 역으로 추론해 낸다. 이 기술은 엑셀을 넘어서 관찰-분류에서도 쓰이는데, 현재는 데이터의 성질에 따라 다른 문법을 사용하지만, 해당 기술이 광범위하게 사용되면 한 가지 공통 문법이 제시될 수도 있을 것이다.
본문
엑셀의 자동 완성 기능은 사용자가 몇 개의 예를 입력하면 나머지 데이터를 추론하여 채워주는 유용한 도구다. 왼쪽 열 가득히 사람 이름이 채워져 있다고 하자. 오른쪽 열 첫 칸에 왼쪽 사람의 성을 한 번 적기만 해도 엑셀이 열의 나머지 칸 모두에 성을 자동으로 채워주며, 사용자는 $$ $$ 같은 복잡한 함수를 몰라도 된다.
%% (명령어를 설명하자면 \texttt{FIND}가 왼쪽 칸(성과 이름이 공백으로 구분)의 공백 위치를 숫자로 반환하고, \texttt{LEFT}가 그 숫자 이전까지를 읽어 들여온다.) %%
자동완성 기능을 위해선 프로그램이 다루는 자료를 서술할 수 있는 언어(DSL)를 설계하고, 주어진 예제의 규칙을 찾아내야 한다. 엑셀의 DSL은 이미 LEFT, FIND 등의 함수와 연산자로 설계되어 있다. %% 이 언어를 도메인 특화 언어(DSL)라고 한다. 엑셀의 DSL은 $$\texttt{=LEFT(_, _)}$$를 포함해야 하고, 이 양쪽 빈칸에 무엇이 들어갈 수 있는지도 제약을 걸어야 한다. (\texttt{LEFT}는 지정한 칸의 글자 중 몇 번째 글자 이전까지를 읽어오는 함수이므로, 왼쪽에는 칸의 위치, 오른쪽에는 숫자나 숫자가 결과로 나오는 함수, 연산자가 들어가야 한다.) 규칙을 찾아내기 위해 모든 명령어를 하나씩 탐색할 수는 없으니, 엑셀은 시작점 (빈 칸 하나)에서 시작해 빈 칸에 예제를 모두 만족하는 함수나 변수를 채우는 과정을 반복한다.\cite{excel} %%
이 기술은 엑셀을 넘어 여러 관찰-분류 문제에 활용된다. 예를 들어, 두 쥐의 거리를 시간별로 잰 자료를 가지고 쥐가 방금 한 행동을 구별하는 등이다. 거리 (숫자) 를 다룰 수 있는 DSL을 만드는 과정이 추가되지만 (사칙연산과 조건문 등이 포함되고, 거듭제곱 등은 빠진다), 빈칸에 함수들을 집어넣길 반복하는 과정은 전과 같다.
%% 최근에는 탐색을 빨리 하기 위해 빈칸에 들어갈 (크기 조건 없던) 상수값을 구간 정적분석 (interval analysis)으로 나누고, 각 구간의 상수값으로 빈칸이 채워진 프로그램이 몇 개의 예제를 확실히 맞추거나 틀릴지를 토대로 확률이 높은 쪽부터 탐색해 나가, 결과적으로 가장 많은 예제를 맞추는 프로그램을 빠르게 합성하는 방법이 제시되었다.\cite{mell} %%
DSL은 공통 부분이 합쳐질 발전의 여지가 남아 있다. 현재는 분석을 원하는 데이터의 특징에 맞춰 DSL이 따로 제안되고 있는데, 이는 언어에 꼭 필요한 규칙만 넣어야 합성 시간을 줄일 수 있기 때문이다. 예를 들어 Quivr DSL\cite{quivr} 등 새 DSL을 제안할 때는 데이터를 정확하되 빠르게 분류할 수 있다는 실험 검증이 덧붙여진다. 이는 언뜻 당연해 보이지만, 예전 컴파일러가 언어별로 따로 만들어졌던 것이 LLVM으로 통합된 것을 기억한다면 다르다. LLVM은 여러 언어의 중간언어를 하나의 컴파일러가 통합해 다루기 위한 필요성이 이끌었다. 즉 DSL의 통합이 필요하다면, 이는 여러 종류의 데이터를 분석하는 통합형 도구가 필요할 때일텐데, DSL에서도 LLVM에 비견되는 하나가 등장할 수도 있을 것이다.
\begin{thebibliography}{9} \bibitem{excel} Sumit Gulwani, ‘‘The Story of the Flash Fill Feature in Excel’’, https://blog.sigplan.org/2021/09/14/the-story-of-the-flash-fill-feature-in-excel/ % \bibitem{mell % Stephen Mell et al., ‘‘Optimal Program Synthesis via Abstract Interpretation’’, 2024. \bibitem{quivr} Stephen Mell et al., ‘‘Synthesizing Trajectory Queries from Examples’’, 2023 \end{thebibliography}