News Feed

지금 배워야 할 최신 프로그래밍 언어 11가지

컨텐츠 정보

  • 조회 734

본문

새 출발, 새로운 시작, 새 빗자루가 더 잘 쓸린다는 말은 모두 새로운 것을 지향한다. 물론 각자 선호하는 오래된 프로그래밍 언어가 다루기 편하고 사용하기도 쉽다. 그런 언어의 API와 라이브러리라면 속속들이 알고 있다. 그러나 그 언어의 온갖 결함과 버그, 문제점에도 마찬가지로 익숙할 것이다. 한때는 완벽했지만 이제는 조금 진부해졌다.

새로운 언어로 눈을 돌려보자. 괜찮은 신생 언어가 매년 수십 개씩 나온다. 프로그래머들은 혁신을 좋아하며, 혁신의 근본적인 전략 중 하나는 이전의 모든 문제를 해결하는 새로운 뭔가를 만드는 것이다. 새로운 구문과 의미 체계는 견고하고 버그도 상대적으로 적은 양질의 코드 작성을 촉진하므로 더 나은 기반을 제공한다.

여기서는 시간을 투자해 살펴볼 만한 11개의 최첨단 프로그래밍 언어를 소개한다. 이 중에는 1~2년밖에 되지 않은 언어도 있다. 그보다 조금 더 오래된 언어도 있지만 여전히 성장 중이다. 소개하는 모든 언어는 기존 언어가 해결하지 못한 몇몇 난제에 해결책을 제공한다.

이러한 새로운 과학 프로젝트가 모든 문제를 해결하지는 못한다 해도 알아보는 것 자체로 배울 수 있는 내용이 있고, 이렇게 배운 것을 현재 사용 중인 언어에서 활용할 수 있다. 새로운 접근 방식은 실험적 프로젝트를 통해 테스트되고 개선되면서 실제로 기존의 많은 프로그래밍 언어가 거듭나고 활력을 되찾는 수단이 된다. 기존 언어 개발자는 새로운 프로젝트의 이점을 인지하고 차용해서(훔쳐서) 자신의 언어에 적용한다.

새로운 언어를 경험하는 최선의 방법은 소소한 작업, 예를 들어 스컹크 웍스 프로젝트나 작은 유틸리티에 사용해보는 것이다. 빌드하고 테스트하면서 새로운 기능을 실험한다. 이 과정에서 새 언어가 실제로 무엇을 할 수 있는지, 그리고 애초에 그 언어가 만들어진 이유를 이해할 수 있다.

코크

개발자 관점에서 혼동의 대부분은 대체로 비슷한 대상을 가리키는 온갖 단어를 정리하는 데서 비롯된다. 작성하는 것이 “함수”인지, “서브루틴”인지, “메소드”인지 또는 전혀 다른 것인지 혼란스럽다. 충분히 추상적으로만 간다면 사실 모두 거의 동일한 개념이다. 코크(Coq)는 여기서 한 걸음 더 나아가 타입 계층 구조에 대한 정리에 문제를 명시할 것을 요구한다. 그러면 코크는 그 선언의 증명을 찾아 검증한다. 물론 이 증명은 개발자가 찾는 답이기도 하다(계층 구조를 제대로 했다면).

물론 아주 괴팍하다는 느낌이 든다. 예를 들어 퐁(Pong)을 만들기 위해 프로그래밍의 심층적인 수학적 기반까지 포용할 필요는 없지 않냐는 생각이 들 수 있다. 그러나 더 복잡한 문제에서는 유용할 수 있다. 코크의 구조는 제약 또는 규칙이 많은 복잡한 조합이나 여러 수준에 걸친 문제를 해결하는 데 유용하다. 모든 사람, 모든 문제에 다 효과적이지는 않지만 복잡한 문제를 처리하는 데는 효과적이다.

옵저버블

옵저버블(Observable)은 언어인가? 설명서에는 “어느 언어로든” 명령어를 작성할 수 있다고 나와 있는데, 구체적으로 어떤 형태인지 선뜻 이해가 가지 않을 수 있다.

실제로 옵저버블은 데이터로 채워진 디스플레이 또는 대시보드를 구축하기 위한 메커니즘이다. 중요한 점은 이를 사용해서 서비스나 API로 실행되는 많은 라이브러리와 기타 코드 번들을 연결할 수 있다는 것이다. 최상위 수준은 마크다운으로 작성된다. 차트는 브라우저에서 실행되는 D3, 리플렛(Leaflet) 및 기타 코드에 의존하므로 자바스크립트를 사용한다. 최하위 수준은 무엇이든 관계없지만 SQL, 파이썬 또는 R을 사용하는 경우가 많다.

보기에 따라 옵저버블을 도메인별 언어라고 할 수도 있다. 설명서에는 “프레임워크”라고 나와 있다. 또는 “스택(블록이 비교적 조화롭게 실행되어 활성 텔레메트리를 제공할 수 있을 만큼 충분히 다듬어진 스택)”이라고 생각하는 편이 더 정확할 수도 있다.

플랭

대규모 언어 모델이 코드의 초안을 만드는 데 있어 상당히 유용하다는 사실은 모두가 알고 있다. 완벽한 경우는 거의 없지만, 어쨌든 모델이 코딩 도움말로 가득 찬 온갖 웹사이트를 스크래핑해서 뭔가를 배운 것은 분명하다.

플랭(Plang)은 논리적인 그 다음 단계다. 플랭을 만든 사람들은 LLM을 컴파일러에 고정해서 사용자가 코드를 복사해서 붙여넣을 때까지 기다리지 않고 코드를 실행할 수 있도록 했다. 개략적으로 작성한 기본적인 지침을 입력하기만 하면 나머지는 플랭이 처리하거나, 처리하려고 시도한다.

기계 코드에 명확하게 매핑되는 엄격한 의미 체계 규칙 집합이 없는 시스템을 두고 너무 많은 약속을 하는 것은 위험하지만, 플랭의 출력은 상당히 놀라운 경우가 많다. 문제를 완전히 해결하지는 못한다 해도 90%까지는 해결이 가능할 수도 있다. 그렇다면 남은 10%의 일만 하면 된다는 말인데, 필자가 보기에는 아주 좋은 거래 조건이다.

파이썬 확대집합 : 모조와 에르그

파이썬은 파이썬을 잘 알고 대체로 좋아하는 대규모 커뮤니티를 보유한 강력한 언어다. 다만 파이썬에서 현재 상태 이상을 원하는 사람들도 있고, 그 중 일부는 그 희망을 실제로 행동으로 옮긴다. 모조(Mojo)에르그(Erg)는 파이썬에서 시작해서 정적 타이핑, 메모리 안전성과 같은 기능을 더해 최종 제품의 속도를 높이고 더 견고하게 만든 두 언어다.

모조는 엄격한 확대집합이다. 즉, 기존 파이썬 코드도 계속 실행되므로 속도를 조금 더 높여야 하는 부분을 다시 작성하는 방식으로 천천히 코드를 개선해 나갈 수 있다. 에르그의 경우 파이썬과 대체로 호환되는 것으로 알려져 있다. 따라서 모든 코드가 완벽하게 실행되지는 않지만 구문은 아마 친숙하게 느껴질 것이다.

이 두 가지 언어에는 중요한 차이점이 있다. 에르그는 더 복잡하고 목표가 큰 전략을 세웠고, 그에 따라 더 엄격하기도 하다. 함수형 프로그래밍을 더 강화하는 데 목표를 두는 언어이므로 표준적인 파이썬 접근 방식에서는 벗어난다. 모조는 표준 파이썬에 더 가깝다. 또한 모조를 만든 사람들은 시스템 수준 작업을 목표로 삼은 것으로 보인다. 메모리 안전성에 초점을 두는 컴파일러는 빠른 성능을 제공하는 모조의 강점을 더 강화한다. 모조 웹사이트에도 “메탈까지 확장된다”는 문구가 있다. AI 커뮤니티가 많은 애플리케이션에 이미 파이썬을 사용하고 있는 가운데 모조는 대용량 모델에 필요한 더 높은 성능을 지원하는 데 집중한다. 두 언어 모두 파이썬 지식을 활용해서 더 복잡한 작업을 처리하는 좋은 방법이다.

엣지 프로그래밍 : 문비트와 윙

인터넷 엣지에서 실행되는 코드를 작성하는 개발자는 자바스크립트, 자바, 파이썬과 같은 표준 언어를 사용하는 경우가 많다. 많은 엣지 컴퓨팅 플랫폼이 기존 표준을 활용하며, 그 자체에는 문제가 없다.

그러나 늙은 개에게 새로운 기술을 가르치는 데는 한계가 있다. 그래서 몇몇 사람들은 빈번한 작은 작업에 더 나은 성능을 제공하는 데 목표를 둔 문비트(MoonBit), 윙(Wing)과 같은 새로운 언어를 개발하고 있다. 개발자는 이러한 언어를 사용하면 즉시 시작되고 최대한 신속하게 완료되는 실행 가능한 코드를 더 쉽게 작성할 수 있다.

문비트는 최종적으로 웹어셈블리로 전달되는 실행 파일의 크기를 강조한다. 객체 및 함수형 접근 방식을 가볍게, 정적 타입으로 혼합해서 제공하며 스마트 컴파일러에 의존해 전체 프로그램을 한 번에 최적화해서 속도를 높일 수 있는 모든 기회를 활용한다. “데이터 지향적”이라고 표현하는 경우도 있는데, 이는 끝없는 바이트 스트림을 처리하는 것을 목표로 함을 의미한다.

윙은 클라우드 컴퓨팅에 따르는 단순하고 일상적인 작업을 처리하는 많은 추상화를 제공함으로써 클라우드 프로그래머를 돕는 데 중점을 둔다. 이상적으로 개발자는 네트워크 정의, ID 관리, 액세스 규제 등에 대해 신경 쓸 필요가 없다. 코드는 자바스크립트로 컴파일된 후 JIT 컴파일러로 실행된다.

메모리 소유권 : 러스트, 지그, 잭트, 오딘, 모조

변수와 데이터 구조 다루기는 참조 카운팅 또는 가비지 수집과 같은 기법에 의존해온 프로그래머가 겪는 오랜 과제 중 하나다. 최근 러스트와 같은 언어는 각 값에 단 하나의 공식 소유자만 부여하는 메모리 모델로 주목을 받고 있다. 다른 주체는 “빌리는” 방식으로 값에 액세스할 수 있지만 통제권은 공식 소유자에게 남는다. 소유자가 죽으면 메모리가 회수된다.

러스트의 접근 방식을 두고 메모리 안전이라고도 하고 “소유권과 차용”이라고도 하는데, 지그(Zig), 잭트(Jakt), 오딘(Odin), 모조와 같은 다른 언어에서도 이러한 방식을 찾아볼 수 있다. 각자 선호하는 구문으로 래핑된 메모리 소유권 개념을 제공한다. 예를 들어 잭트는 C++로 트랜스파일된다. 지그는 C와 많은 부분에서 비슷한 시스템 언어이며, 모조는 앞서 언급한 바와 같이 파이썬의 확대집합이다.

현재로서는 메모리 안전성의 대표 언어는 러스트라고 할 수 있다. 프로그래머들은 러스트 코드가 경합 조건과 널 역참조의 상당수를 피할 수 있다고 보고한다. 경합 조건과 널 역참조는 다른 개발자들이 원인을 찾기 위해 스택 트레이스를 이리저리 뒤지는 원인이 된다. 엄격한 소유권 규칙은 충돌, 잠금 또는 메모리 누출이 발생하지 않는 더 안정적인 시스템 수준 코드로 이어질 것이다.
dl-itworldkorea@foundryco.com

관련자료

댓글 0
등록된 댓글이 없습니다.