Offcanvas

개발자

틈새 파고든다, 새로운 프로그래밍 언어 11선

2022.05.11 Peter Wayner  |  InfoWorld
웹어셈블리를 훨씬 더 쉽게 작성하는 법부터 머신러닝을 지원하는 시각적 언어까지 새로운 프로그래밍 도구 11가지를 살펴본다. 이는 어쩌면 소프트웨어 작성 방식을 재정의할지도 모른다. 

영국의 시인 알렉산더 포프는 “희망은 인간의 가슴에서 영원히 샘솟는다(Hope springs eternal in the human breast)”라고 말했으니 해커가 아닌 시인이라 할지라도 새로운 프로그래밍 언어 발견에 대한 희망을 이해할 것이라 본다. 소프트웨어 개발자들은 유니코드 문자의 독특한 조합으로 만들어진 언어가 마침내 모든 문제를 해결하여 몇 번의 클릭만으로 쉽게 코딩할 수 있길 영원히 희망하고 있다. 

포프는 분명 답을 상상하기만 하면 될 정도로 직관적인 구문에 대한 희망을 이해할 것이다. 또한 그는 올림픽에서 볼 수 있는 트리플 악셀 혹은 대회전 활강처럼 (사실은 그렇지 않지만) 힘들지 않고 우아해 보이는 새로운 코드를 손에 넣으려는 열망을 높이 평가할 것이다. 
 
ⓒGetty Images Bank

하지만 오늘날의 언어 대부분은 기발함이나 코딩 역량을 보여주기 위해 만들어지진 않았다. 이는 개발자(창작자)가 간절하게 해결하고자 했던 문제에 해결책을 내놓으면서 만들어졌다. 대다수의 개발자가 하나 이상의 오래된 기성 언어로 코딩을 계속하겠지만 코딩 문제를 해결하는 데 도움이 되는 새로운 도구도 ‘영원히’ 찾고 있다. 특히, 도메인별 언어(DSL)의 부상에서 이러한 경향을 볼 수 있다. 이러한 언어는 특정 도메인에 초점을 맞추고 있으며, 범용적으로 사용하진 못한다. 하지만 바로 그런 이유로 도구 상자에서 특별한 위치를 차지할 수 있다. 

여기서는 틈새시장을 찾은 11개의 새로운 언어를 살펴본다. 비록 지금 당장 필요한 것은 아니지만 이 모두는 현재 하는 일을 개선할 무언가를 갖고 있다.

리액티브 클로저(Reactive Clojure)
이는 클로저(Clojure)와 리액트(React)를 결합한 결과다. 즉, 리액티브 프론트엔드의 모든 가능성과 클로저의 견고하고 기능적인 장점을 결합한 시스템이다. 리액티브 클로저를 사용하면 복잡한 프론트엔드 구성요소 컬렉션을 배치하고 이를 기능과 함께 묶을 수 있다. 리액티브 프레임워크는 세부 사항을 입력하고 애플리케이션 데이터가 구성요소와 데이터베이스 간에 원활하게 흐르도록 한다. 클로저는 비정상적인 사용 사례도 가능하고 디버깅할 수 있는 기능적 기반을 제공한다.

이 결합이 천생연분일까? 시간이 말해줄 것이다. 리액티브 클로저는 프론트엔드 구성요소를 함께 묶는 글루 코드를 작성하는 데 유용한 옵션이다. 멀티스레드 모델은 여러 작업을 동시에 보고하는 복잡하고 반응적인 대시보드에 자연스럽게 어울린다.

니켈(Nickel)
프로그래머가 하는 아이러니한 게임 중 하나는 대부분의 작업을 구성 파일로 푸시하는 것이다. 제이슨(JSON), YAML 또는 심지어 XML로 인코딩되는 이러한 파일은 정교한 의식으로 전이되는 좋은 코딩 아이디어다. 어떤 경우에는 실제 코드를 작성할 필요조차 없다. 필요한 작업을 하기 위해 다양한 구성 파일을 끝없이 재배열하면 된다.

따라서 구성 파일을 생성하기 위한 프로그래밍 언어인 니켈은 의미가 있다. 니켈은 정적이지 않은 구성 파일을 만드는 데 사용할 수 있는 임베디드 로직이 포함된 템플릿과 같다. 매개변수는 주중에는 하나의 값이고 주말에는 다른 값일 수 있다. 실행되면 니켈은 수신된 모든 매개변수에 적합한 새 구성 파일을 생성한다.

니켈의 구조는 대체로 기능적이며, 유형 검사도 가능하다. 핵심은 ‘정확성’이다. 잘 작성된 니켈 코드 조각은 출력이 구문 규칙과 시행해야 하는 다른 규칙 모두를 준수한다는 것을 거의 보장하기 때문이다. 니켈의 컴파일러를 사용하면 계약서를 작성한 다음, 출력이 계약서를 준수하는지 확인할 수 있다. 물론 구성 파일을 만들기 위해 코드를 작성하는 데 까다로운 부분이 있다. 하지만 이는 현대 아키텍처를 위한 매우 실용적인 솔루션이다.

코브라(Kobra)
코브라 개발자는 머신러닝을 엔지니어, 과학자, 그리고 (이에) 전문적이지 않은 다른 코더에게 개방하는 언어를 원했다. 그 결과 머신러닝용 시각적 언어가 탄생했다. 코브라의 편집기는 통계 분석과 머신러닝을 지원하는 일반적인 빌트인 루틴을 나타내는 드래그 앤드 드롭 타일로 코드와 같은 시퀀스를 구성한다. 이 프로세스는 테이블 형식 데이터로 구성된 데이터 프레임과 대시보드 및 보고서를 만들기 위한 그래픽 디스플레이 기능을 갖춘 R처럼 느껴진다.

바이셉(Bicep)
클라우드의 유용한 기능 중 하나는 데이터 급증을 처리하기 위해 서버를 시작하고 해제하는 것이다. 한때는 데이터센터 하드웨어 팀이 시스템을 요청, 설치, 테스트, 구성하는 데 몇 주가 걸렸다. 이제 클라우드를 사용하면 이 모든 작업이 몇 분 또는 몇 초 만에 이뤄진다. 많은 데브옵스 팀이 다양한 클라우드에서 지원되는 여러 API에 코드를 쓰기 시작했다. 마이크로소프트는 더 나아가 코드형 인프라(Infrastructure-as-Code; IaC) 철학의 일환으로 애저에서 시스템을 시작하기 위한 단순화된 언어를 만들기로 했다.

바이셉이라는 이 언어는 개발자가 새 인스턴스에서 뒤집기를 원하는 대부분의 다른 비트를 기술하는 효율적이고 선언적인 형식을 제공한다. 몇 가지 기본적인 타입-세이프티는 오류를 방지하는 데 도움이 될 수 있으며, VS 코드에서 사용할 수 있는 구문 인식 편집기도 있다. 언어 자체는 고차원적 사고를 위해 설계됐으며, 강력한 선언적 구조를 통해 어떤 순서로든 명령을 포함할 수 있어 애저의 리소스 관리자가 실행을 최적화하도록 지원한다. 

프링크(Frink)
일각에서는 은행을 선택하는 한 가지 요건이 은행의 회계 소프트웨어가 1달러 단위의 부동 소수점 숫자가 아닌 정수를 사용하여 페니를 계산하도록 하는 것이라고 말한다. 부동 소수점 오류의 위험성은 잘 알려져 있고, 너무 크다. 얼마나 많은 버그가 대수롭지 않게 숫자를 뒤적거려서 생겨났던가?

프링크는 바로 이 문제를 해결하기 위해 만들어진 ‘단위 인식(unit aware)’ 언어다. 프링크의 각 변수는 숫자뿐만 아니라 톤, 와트, 피트, 미터 등 측정 단위도 표시한다. 프링크의 구성 파일 덕분에 단위 변환이 쉽다. 또한 핵심 메커니즘은 임의의 정밀도 숫자를 사용해 반올림 문제를 줄인다. 

파우스트(Faust)
소리 합성은 너무 작은 시장처럼 보일 수 있지만 게임 개발, 가상현실, 우수한 음질을 활용하는 모든 애플리케이션에서 매우 유용하다. 그렇다면 기능적 오디오 스트림의 조합에서 이름을 얻은 도메인별 언어인 파우스트에 주목하라. 파우스트의 구조는 순수하게 기능적이며, 모든 기능은 사운드 프로세싱 파이프라인을 구성한다. 백엔드는 들어오는 소리를 숫자 표현으로 나누고, 코드 자체는 최종 결과로 구성되거나 결합될 수 있는 기능 집합이다. 예를 들면 코드 출력을 분할하고 지연을 도입하여 에코 또는 리버브를 생성할 수 있다. 파우스트의 코드는 C++, C, LLVM 비트 코드, 웹어셈블리, 러스트 등으로 변환되기 때문에 거의 모든 프로젝트에서 쓸 수 있다.

멜로즈(Melrōse)와 글리콜(Glicol)
코드를 쓰는 사람은 프로그래머가 어떻게 밴드를 시작하는지 안다. 드러머를 찾기 위해 광고를 내고 모든 지원자를 인터뷰하는 대신, 드럼 머신의 리듬을 설명하는 코드만 작성하면 된다. 그렇게 되면 다른 밴드 멤버를 모두 서브루틴으로 교체할 수 있다. 그런 식으로 교향악단 전체를 만들 수도 있다.

멜로즈와 글리콜은 이러한 스타일의 음악 창작을 위해 설계된 음악 프로그래밍 언어다. 둘 다 몇 번의 키 입력으로 정교한 작곡을 할 수 있다. 먼저, 멜로즈는 서양 음악에서 흔히 볼 수 있는 표준 12음 옥타브의 높은 수준에서 작동한다. 음표는 시퀀스로 그룹화되며, 소프트웨어는 많은 작업(예: 조옮김 등)을 처리한다. 출력은 MIDI 지원 기기에 전달되며, 코드는 MIDI 포트를 통해 들어오는 신호에 반응할 수 있으므로 멜로즈 코드는 밴드 멤버가 될 수 있다.

글리콜은 동일한 작업을 하위 레벨에서 수행하는 러스트 기반 도구다. 이 코드는 디지털 신호 처리와 통합돼 광범위한 음악 옵션을 제공한다. 이 도구는 오픈소스 오디오 엔진을 사용하여 브라우저에서 쓸 수 있는 소리를 생성하도록 설계됐다. 글리콜의 개발자는 이 언어가 모든 기술 수준에 있는 다른 사람과의 협력을 장려하기 위해 ‘저렴한 비용과 높은 상한선’을 가지고 있다고 말했다.

웹어셈블리(WebAssembly)와 웨이스(Wase)
명령어를 컴퓨터에 전송하는 가장 효율적인 방법은 이를 바이너리로 인코딩하고 CPU에서 쓰는 기본 연산 집합으로 제한하는 것이다. 각 칩에는 선호하는 바이너리 구문이 있으며, 파스칼(Pascal)이나 자바(Java) 등의 일부 언어에는 로컬 가상 머신에 실행되는 중립 바이너리 형식이 있다. 웹어셈블리(WebAssembly; Wasm)는 웹 브라우저에 표준 형식의 텍스트와 결합된 바이너리 코드를 제공한다. 목표는 웹 애플리케이션의 백본을 구성하는 축소된 자바스크립트 코드를 거의 기본 속도로 실행할 준비가 된 코드로 교체하는 것이다. 

많은 개발자는 상위 언어를 브라우저에서 실행되는 웹어셈블리로 변환하는 컴파일러를 사용하여 웹어셈블리를 직접 작성하지 않고 활용한다. 웹어셈블리의 기본 구조의 대부분을 사용자가 읽을 수 있는 형식으로 노출시키는 하위 수준의 언어를 개발하려는 움직임도 있다. 웨이스는 강력한 유형의 C와 유사한 구문을 제공하는 그러한 옵션 중 하나다.

또한 웹어셈블리는 자바의 JVM과 유사한 스택 머신으로 명령어를 인코딩하는 일반적인 방법으로 웹 브라우저 외부에서 사용하는 방법을 찾고 있다. 이를테면 레드판다(Redpanda)는 웹어셈블리에서 작성된 코드로 데이터가 파이프를 내려올 때 개발자에게 데이터를 수정할 기회를 제공하는 스트리밍 데이터 플랫폼이다. 

자바 17(Java 17)
기술적으로 자바는 새로운 언어가 아니다. 하지만 자바의 가장 큰 장점은 개발자가 이전 버전과의 호환성을 유지하는 데 큰 역할을 했다는 것이다. 최신 JVM에 10년 또는 20년 된 코드를 컴파일하는 것이 매우 쉽다. 코드가 작동한다는 보장은 없지만 여전히 다른 모든 언어보다는 컴파일하기 쉽다. 자바 팀이 수백만 개의 통합 테스트를 수행했다는 점은 이를 보여준다.

자바 17을 이 목록에 포함시킨 이유는 1990년대 시간 여행자가 거의 알아볼 수 없을 정도로 현대화됐기 때문이다. 자바 17에는 코딩 방법을 바꾸는 많은 추가 기능과 확장 기능이 있다. 이를테면 개선된 난수 생성기 또는 더 엄격한 부동 소수점 계산 체계 등은 매우 복잡한 숫자 코드를 작성하는 문제를 해결한다. 회계 시스템을 작성하는 개발자는 정수를 사용하여 센트 수를 유지할 수 있지만 AI 알고리즘과 복잡한 선형 대수학을 다루는 개발자는 부동 소수점을 필요로 한다. 

아울러 강력한 캡슐화와 확장된 스위치 의미 체계 등은 핵심 언어에 규율과 유연성을 혼합하여 제공한다. 전반적으로 이러한 모든 개선사항 덕분에 더 강력하고, 더 안전하며, 더 안전한 코드를 작성하는 것이 그 어느 때보다도 쉬워졌다. ciokr@idg.co.kr

 
CIO Korea 뉴스레터 및 IT 트랜드 보고서 무료 구독하기
추천 테크라이브러리

회사명:한국IDG 제호: CIO Korea 주소 : 서울시 중구 세종대로 23, 4층 우)04512
등록번호 : 서울 아01641 등록발행일자 : 2011년 05월 27일

발행인 : 박형미 편집인 : 천신응 청소년보호책임자 : 한정규
사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.