널리 사용되는 언어들에 대한 유력한 대안들이 부상 중이다. 다음에 진행할 프로젝트에는 이와 같은 대체 언어가 더 적합할 수도 있다.

주요 언어들이 인기를 얻는 데는 이유가 있다. 방대한 오픈 소스 코드, 라이브러리, 프레임워크라는 토대를 제공하므로 그만큼 쉽게 원하는 목적을 달성할 수 있다. 오랜 세월에 걸쳐 다양한 프로젝트에 사용되면서 세세한 부분에 대한 전문적인 지식이 풍부하게 쌓인 결과다.

그러나 광범위하게 사용되는 주류 프로그래밍 언어의 방대한 리소스로도 문제를 해결하지 못할 때가 있다. 또 적당한 언어를 찾기 위해 눈앞에 있는 것 이상으로 멀리 시선을 돌려야 할 때도 있다. 딱 맞는 구조의 언어를 찾으면 끝없는 조정과 최적화 작업 없이 훨씬 더 빠르게 코드를 실행할 수 있다. 난잡한 코드 또는 잘못된 코드를 사전에 방지함으로써 훨씬 더 안정적이고 정확한 코드를 생산할 수도 있다.

세상에는 C#, 자바 또는 자바스크립트 말고도 똑똑한 언어들이 넘쳐난다. 소수의 애호가들 사이에서만 사용되는 언어도 있지만, 많은 경우 그 언어의 특정 문제 해결 능력에 대한 애정으로 똘똘 뭉친 활발한 커뮤니티가 형성되어 있다. 수천만 명의 프로그래머에게 친숙한 구문은 아닐지 몰라도 가끔은 조금 다른 방식으로 하는 데서 더 많은 가치를 얻기도 한다. 새로운 언어에 대한 실험은 미래의 프로젝트에서 큰 도움으로 되돌아올 수 있다.

다음에 소개하는 9가지 언어는 모든 프로그래머가 관심을 가질 만한 언어들이다. 모든 작업에 다 어울리지는 않지만(많은 언어들이 특정 종류의 작업에 초점을 둠) 한 번쯤 살펴보고 투자할만한 장점을 지니고 있다. 이러한 언어들 중 하나가 언젠가 여러분의 프로젝트(또는 상사)가 요구하는 언어가 될지도 모를 일이다.

얼랭(Erlnag) : 실시간 시스템을 위한 함수형 프로그래밍
얼랭이 탄생한 곳은 스웨덴 통신업체 에릭슨(Ericsson)의 연구실 깊은 곳이다. 에릭슨 프로그래머들이 얼랭을 사용한 99.9999999%의 데이터 전송(즉, “9개의 9”) 성능에 대해 자랑을 늘어놓기 시작하자 에릭슨 외부의 개발자들도 얼랭에 관심을 갖기 시작했다.

얼랭의 비밀은 함수형 패러다임에 있다. 코드의 대부분이 자체 구역 내에서만 작동하도록 강제되므로 부작용을 통해 시스템의 나머지 부분에 해를 끼칠 일이 없다. 함수는 샌드박스와 같은 역할을 하는 작은 “프로세스”에서 실행되면서 모든 기능을 내부적으로 처리하며, 메일 메시지를 통해서만 서로 대화한다. 얼랭에서는 스택의 아무데서나 포인터 하나를 잡아서 상태를 바로 변경하는 등의 일은 할 수 없다. 호출 계층 내에 있어야만 한다. 조금 더 생각을 요하지만 실수로 인한 파장이 확산될 가능성은 낮다.

런타임 코드는 이 모델을 통해 동시에 실행 가능한 항목을 더 간단히 판단할 수 있다. 동시성을 쉽게 감지할 수 있으므로 런타임 스케줄러가 감당해야 할, 프로세스를 설정하고 해제하는 데 따르는 오버헤드가 극히 낮다. 얼랭의 지지자들은 웹 서버 하나에서 2000만 개의 “프로세스”를 동시에 실행하는 것을 자랑하곤 한다.

휴대폰 스위치에 대한 청구 시스템과 같이 데이터 손실을 감수할 수 없는 실시간 시스템을 구축한다면 얼랭을 주목하라.


고(Go) : 단순하고 역동적인 언어
구글은 여러 언어를 조사해보고 이들 언어가 지저분하고 복잡하며 느린 경우가 많다는 사실을 새삼 발견하고는 2009년 이에 대한 해결책을 내놨다. 얼핏 C처럼 보이지만, 프로그래머가 형식을 지정하고 복잡한 malloc 호출을 다룰 필요가 없는 정적 형식 지정 언어인 고다. 고를 사용하면 프로그래머는 컴파일된 C의 간결함과 구조, 그리고 동적 스크립트 언어의 사용 편의성을 함께 누릴 수 있다.

썬과 애플도 비슷한 맥락에서 각각 자바와 스위프트를 만들었지만 구글 고는 이 두 언어와는 중대한 차이점이 있다. 바로 “한 프로그래머의 머리에 다 담을 수 있을 정도로 단순하게”를 목표로 만들어졌다는 점이다. 고를 만든 사람 중 하나인 롭 파이크는 아르스 테크니카(Ars Technica)와의 인터뷰에서 “길게 보면, 버림으로써 더 많은 것을 얻는 때도 있다”고 말했다. 그래서 제네릭, 형식 상속, 단언, 문자열과 배열, 해시 테이블을 조작하는 깔끔하고 단순한 if-then-else 코드 블록과 같은 극소수의 유용한 요소들만 있다.

이 언어는 구글 내부에서 확고히 자리를 잡은 것으로 알려졌으며, 다른 분야(동적인 파이썬 및 루비 언어 애호가라도 컴파일 언어의 엄격함을 일부 감수할 만한 분야)에서도 서서히 확산되고 있다.

서버 측 비즈니스 로직을 구축해야 하며 구글의 관심을 끌기 위해 애쓰는 벤처 기업이라면 고를 사용하는 것이 유리하다.

그루비(Groovy) : 자바를 위한 스크립팅의 미덕
자바 세계는 놀라울 정도로 유연하다. 모든 변수에 대한 형식 지정, 모든 라인 끝에 세미콜론 붙이기, 단순히 값을 반환할 뿐인 클래스에 대한 접근 방법 작성과 같은 구태의연한 측면도 있다. 그러나 자바는 동적 언어가 인기를 얻는 동향을 파악하고, 자바와 긴밀하게 통합되는 자체적인 동적 언어를 만들었다.

그루비를 사용하면 프로그래머는 지루한 괄호, 세미콜론 규칙을 신경 쓰지 않고 모든 기존 자바 코드를 활용할 수 있는 단순한 프로그램을 만들 수 있다. 모든 요소가 JVM에서 실행된다. 그뿐만 아니라 모든 요소가 자바 JAR에 긴밀하게 연결되므로 기존 코드를 활용할 수 있다. 그루비 코드는 동적으로 형식이 지정되는 스크립팅 언어와 같이 실행되면서 정적으로 형식이 지정되는 자바 객체의 데이터에 대한 완전한 접근 권한도 갖는다.

그루비 프로그래머는 두 가지 세계의 장점을 모두 누린다고 생각한다. 클로저, 연산자, 오버로딩, 폴리모픽 반복을 사용하는 재미를 주는 자바 코드 베이스의 막강한 힘을 그대로 이용할 수 있다. 물음표로 널 포인터 확인을 표시하는 간편함은 말할 필요도 없다. 널을 테스트하기 위해 또 다른 if-then 문의 형식을 지정하는 것보다 훨씬 더 간단한 방법이다. 이러한 모든 유연함은 훨씬 더 적은 키보드 입력으로 대등한 로직을 생성할 수 있게 해준다. 좋아하지 않을 수가 있는가?

동적 언어의 단순함을 부러워했던 자바 프로그래머들도 이제 자바 영역을 벗어나지 않으면서 파티에 동참할 수 있게 됐다.



오카멜(OCaml) : 복잡한 데이터 계층의 마술사
프로그래머에 따라 변수의 형식을 지정하기를 좋아하지 않는 경우가 있는데, 이런 프로그래머들을 위해 만들어진 것이 동적 언어다. 그렇지 않은 사람들은 변수에 정수, 문자열 또는 객체 속성을 지정함으로써 얻는 확실성을 좋아한다. 이런 프로그래머들은 다양한 컴파일 언어를 통해 원하는 것을 얻을 수 있다.

그런가 하면 정교한 형식 계층을 꿈꾸고 심지어 형식의 “대수학”을 만드는 것에 대해서까지 이야기하는 사람들이 있다. 이들은 이종 형식의 목록과 테이블을 한데 모아 복잡한 다층적 데이터의 향연을 표현하는 것을 상상한다. 이들은 폴리모피즘, 패턴 매칭 프리미티브, 데이터 캡슐화에 대해 논한다. 이것조차 이들이 갈망하는 고도로 구조화되고 복잡한 형식, 메타형식, 메타메타형식 세계의 시작에 불과하다.

이런 사람들을 위한 언어가 오카멜이다. 오카멜은 위에 언급한 여러 아이디어를 대중화하기 위해 프로그래밍 언어 커뮤니티가 진지하게 노력한 결과물이다. 객체 지원, 자동 메모리 관리, 장치 이식성 등이 특징이다. 애플 앱 스토어에 오카멜 앱도 있다.

오카멜이 딱 맞는 프로젝트라면 대수학을 가르치기 위한 기호 수식 웹 사이트 구축 정도일 것이다.

커피스크립트(CoffeeScript) : 깔끔하고 단순한 자바
엄밀히 말해 커피스크립트는 언어가 아니다. 자바스크립트로 만들어진 것을 변환하는 전처리기(Pre-Processor)다. 다르게 보이는 이유는 구두점이 거의 없다는 데 있다. 내부는 자바스크립트처럼 움직이는 루비나 파이썬이라고 생각하면 된다.

커피스크립트는 세미콜론을 싫어하는 사람들이 웹 브라우저의 언어라는 이유로 자바스크립트로 프로그래밍할 수밖에 없는 상황에 몰리면서 시작됐다. 웹의 작동 구조를 뒤바꿀 가능성은 없었으므로 이 사람들은 자체적인 프리프로세서를 만들기로 했다. 그 결과 깔끔한 코드를 작성한 다음 이 코드를 웹 브라우저가 요구하는, 구두점이 난무하는 자바스크립트로 바꿀 수 있는 커피스크립트가 탄생했다.

세미콜론이 없다는 것은 시작에 불과하다. 커피스크립트를 사용하면 var를 입력하지 않고도 변수를 만들 수 있다. function을 입력하거나 중괄호로 묶지 않고도 함수를 선언할 수 있다. 중괄호는 커피스크립트에 사실상 존재하지 않는다. 코드는 훨씬 더 간결해서, 그 차이는 고딕 성당과 현대식 건물의 차이 정도라고 할 만하다. 최신 자바스크립트 프레임워크들이 커피스크립트로 작성되고 컴파일되는 경우가 많은 이유도 여기에 있다.

스칼라(Scala) : JVM의 함수형 프로그래밍
프로젝트에 객체 지향 계층의 코드 단순성이 필요하지만 함수형 패러다임을 좋아하는 사람이라면 몇 가지 방법을 선택할 수 있다. 자바를 주 무대로 한다면 스칼라가 있다.

스칼라는 JVM에서 실행되며, 자바 클래스 사양에 일치하고 다른 JAR 파일과 링크되는 코드를 제공함으로써 자바에 함수형 프로그래밍의 모든 깔끔한 디자인 구조를 구현해준다. 링크되는 JAR 파일에 부작용이나 기타 골칫거리가 있어도 관계없다. 자신의 코드는 깨끗하기 때문이다.

형식 메커니즘은 매우 정적이며 컴파일러가 형식 추론을 위한 모든 작업을 한다. 스칼라는 하나의 객체 호출인 Any로부터 모든 것을 내려받는 방식이므로 프리미티브 형식과 객체 형식 간에 구분이 없다. 구문은 자바보다 훨씬 더 단순하고 깔끔하다. 스칼라 사용자들은 이를 “격식이 없다”고 표현한다. 자바에서 사용하던, 한 단락 길이의 캐멀케이스 변수 이름을 이제 버려도 된다.

스칼라는 지연 연산, 꼬리 순환, 불변 변수와 같은 다양한 함수형 프로그래밍 기능을 제공하지만 JVM에서 작동하도록 다듬어졌다. 기본적인 메타형식 또는 컬렉션 변수(예: 링크된 목록 또는 해시 테이블)는 가변 또는 불변 모두 가능하다. 꼬리 순환은 간단한 예에서는 작동하지만 정교한 상호 순환 예에서는 작동하지 않는다. 개념은 모두 존재하지만 실제 구현은 JVM으로 인해 제약된다. 그러나 자바 플랫폼의 범용성과 오픈 소스 커뮤니티에 의해 작성된 심층적인 기존 자바 코드 모음이 그대로 함께 제공된다. 그 정도라면 현실적인 문제들을 감수할 가치는 충분하다.

1,000개의 프로세서 클러스터에서 데이터를 다루어야 하고 레거시 자바 코드가 많이 있다면 스칼라가 훌륭한 솔루션이다.

다트(Dart) : 자바스크립트 없는 자바스크립트
인기가 있다는 것이 생각만큼 좋은 것만은 아니다. 자바스크립트는 압도적으로 많은 스택에 사용되고 있지만 그 친숙함은 곧 경멸로 이어지고, 경멸은 사람들로 하여금 대안을 찾도록 한다. 다트는 구글이 만든 웹 브라우저를 위한 새로운 프로그래밍 언어다.

다트는 자바스크립트의 기본 개념에서 크게 벗어나지 않는다. 백그라운드에서 작동하여 모든 DIV 및 웹 양식 객체를 애니메이션 처리한다. 다트를 설계한 사람들은 그저 자바스크립트의 불편하고 성가신 부분을 없애 더 단순하게 만들고자 했다. 그러나 빠른 도입을 위해 자바스크립트로 컴파일되는 방법을 택했기에 근본적인 아키텍처에서 크게 벗어나지는 못했다.

하이라이트는 다수의 실질적(de facto) 자바스크립트 라이브러리에 들어가는 부가적인 함수들이다. J쿼리나 기타 다른 일반적인 라이브러리가 없어도 HTML 페이지의 일부분을 수정할 수 있다. 이런 기능이 적당히 깔끔한 구문과 함께 모두 제공된다. 또한 정교한 데이터 형식과 구문 단축 트릭을 통해 키보드 입력도 줄일 수 있다. 구글은 모든 주요 플랫폼을 위한 오픈 소스 개발 도구를 제공하는 등 다트를 강하게 밀고 있다.

동적 웹 앱을 제작하는데 자바스크립트에 질렸다면, 다양한 웹 소스에서 가져온 데이터로 채운 여러 DIV를 만들기 위한 깔끔한 구문을 제공하는 다트를 사용해 보라.





'IT' 카테고리의 다른 글

윈도우10 skype 삭제방법  (0) 2019.06.09
시놀로지 준비할꺼  (0) 2019.05.24
IE11 에서 DOM7009 에러  (0) 2019.05.22
모든 콘텐츠 표시 (보안 콘텐츠만 표시됩니다.)  (0) 2019.05.14
Object-c 클레스메소드, 인스턴스메소드 + - 차이  (0) 2018.03.16
Object c Pdf  (0) 2018.01.04
jquery 새로고침(reload)  (0) 2018.01.03

+ Recent posts