2019-11-28 작성

[Book] 프로그래밍 언어도감(4) 기타 언어

목차: 기타 언어

  • R
  • Julia
  • Pascal
  • Bash
  • Clojure
  • SQL
  • COBOL
  • Visual Basic
  • 기록 제외한 언어

R

  • 탄생 : 1995년
  • 주요 용도 : 통계 분석
  • 분류 : 절차형 함수형 객체지향형/인터프리터

 벡터 처리 : 실수, 복소수, 문자열 등의 데이터를 하나씩 처리하는 것이 아니라, 같은 형태의 데이터를 정리한 '벡터'로 취급한다. 이 때문에 대부분의 연산이 벡터에 대한 처리로 정의되어 있다.

풍부한 패키지 : 기본 패키지 말고도 확장 패키지가 많이 제공되고 있어 자유롭게 설치하고 사용할 수 있다. 의존관계를 자동으로 체크하고 도입할 수 있다.

통합 개발 환경에서 개발 가능 : Windows, macOS, Linux 등에서 GUI 통합 개발 환경을 사용할 수 있다. 패키지의 설치 등을 GUI에서 할 수 있을 뿐만 아니라, 실행 및 그래픽 표시도 윈도우 내에서 해결할 수 있다.

 S언어와 S-PLUS : 통계 처리 언어인 S언어 처리계로 유료인 'S-PLUS'가 있다. R언어는 S언어의 문법을 도입하여 오픈소스로 작성되어 있다.

데이터 프레임 : 통계 처리에 사용하는 표 형식의데이터를 처리하는 리스트. 다른 자료형의 데이터를 정리하여 하나의 변수에 저장할 수 있고, 행과 열을 지정해서 접근할 수 있다. 1행이 한 묶음의 데이터를 나타내며, 각 열은 데이터 항목을 나타낸다.

CRAN : R언어 프로그램의 배포 사이트. 패키지 형시그로 다운로드, 인스톨 할 수 있다. 웹 브라우저로 다운로드 할 수도 있지만, R언어에서 직접 자동 설치하는 것도 가능하다.

Julia 

  • 탄생 : 2012년
  • 주요 용도 : 과학기술 계산 외
  • 분류 : 절차형 함수형/인터프리터 컴파일러

고속 스크립트 언어 : 스크립트 언어지만, LLVM에서 JIT 컴파일러에 의해 C언어 등의 컴파일러 언어에 필적하는 성능을 낼 수 있다. 주목받는 과학기술 계산 언어로 MATLAB, R, Python 등을 대체할 수 있다. 

연쇄 비교가 가능 : 많은 언어에서는 복수의 비교를 하는 경우, 각각의 비교 결과를 AND 등으로 조합하는 경우가 많다. Julia에서는 Python과 마찬가지로 연쇄비교를 아래처럼 사용할 수 있다. ex : a<b<c

자료형 승격 : 많은 언어에서는 자료형의 자동 변환이 있고 정수와 소수의 조합 등이 가능하다. Julia에서는 자료형의 수형도(나무 가지 모양 그림)처럼 이어지지만 자동변환이 되지는 않고 convert와 promote라는 처리에 의해 합리적인 변환이 가능하다.

 Gadfly : Julia의 그래프를 그릴 수 있는 라이브러리. 쉽게 화려하거나 예쁜 차트를 만들 수 있고 SVG, PNG, PostStript, PDF 등으로 출력할 수 있다.

메타 프로그래밍, 매크로 : 메타 프로그래밍을 사용하면 LISP 처럼 프로그램의 실행 중에 코드를 생성하고, 생성된 코드를 실행할 수 있다. 매크로를 사용하면 식을 평가하지 않고 식 그대로 전달할 수 있다.

JuliaBox : 브라우저 상에서 실행할 수 있는 실행 환경. 커맨드 라인이 준비되어 있어 Julia뿐만 아니라 다른 언어도 실행할 수 있고, 사용하고 싶은 라이브러리의 추가도 가능. GitHub에 소스코드도 공개되어 있다.

Pascal

  • 탄생 : 1970년
  • 주요 용도 : 교육용, 데스크톱 애플리케이션 개발
  • 분류 : 절차형 객체지향형/컴파일러

프로그래밍 교육에 최적 : 구조적 프로그래밍을 수행하기에 적합한 대표 언어로 알려져 있다. 

세미클론은 문장의 구분 기호 : Pascal은 문장과 문장의 구분을 의미하기 때문에, 블록 안의 마지막 문장 끝에는 세미클론을 붙이지 않는다.

고속 컴파일 : 소스코드를 한 번 읽으면 실행 파일을 생성할 수 있는 'One Path Compile'을 해서 컴파일 시간이 매우 짧다.

알고리즘 기술 언어 : 정확한 설명이 가능한 구문 덕분에 교과서, 논문 등에서 알고리즘을 설명할 떄 Pascal 풍의 의사 코드가 사용되는 경우가 많았다.

 Delphi : Pascal을 확장하여 만든 객체지향 언어. GUI 애플리케이션 개발도구를 가리키기도 한다. Windows 애플리케이션 개발에 많이 사용되었다. 또한 'Kylix'를 사용해서 Linux 애플리케이션에 쉽게 이식할 수 있었다.

Pascal 문자열 : 배열의 맨 앞에 문자열 길이를 넣은 문자열을 말한다. C언어는 NULL 문자(\0)를 넣는 것으로 끝을 판단하는데, Pascal 문자열 배열의 선두를 체크해서 문자열 길이를 판단할 수 있다.

Pascal 형식 : 변수, 메서드 이름 등의 스타일로 Camel 형식이나 Snake 형식 등이 있다. Pascal 형식은 첫 글자를 대문자로 하고 이어지는 각 단어의 첫 글자를 대문자로 작성한다.

Bash

  • 탄생 : 1988년
  • 주요 용도 : 셸 스크립트
  • 분류 : 절차형/인터프리터

 Linux에서 표준 셸 : 다수의 Linux 배포판에서 표준 셸로 Bash를 사용하고 있다. ''은 이용자가 입력한 command를 OS에 전달하고 그 결과를 받아오는 역할을 한다. 처리의 실행을 자동화하기 위해 간단한 프로그램을 작성할 수 있어서 '셸 스크립트'라고 불린다. Bash 외에도 csh, ksh, zsh 등 셸은 여러 가지가 있지만, 다수의 UNIX계 OS에 Bash가 표준으로 등재되어 있다.

 ALGOL 68풍의 제어구조 : 보통 제어문에 { }를 한쌍으로 쓰지만, ALGOL 68에서는 반전 문자열을 사용한다. 예를 들어 if의 끝에는 fi, case의 끝에는 esac, do의 끝에는 od 등이다. Bash도 마찬가지로 문자열을 반전시켜 사용한다.

 GPL 라이선스 : csh, tcsh, zsh 등이 BSD 라이선스로 배포되고 있지만, Bash는 GPL 라이선스로 배포된다. GPL 라이선스는 해당 프로그램을 어떤 목적이나 형태로든 사용할 수 있지만, 사용하거나 변경된 프로그램을 배포하는 경우 무조건 동일한 라이선스인 GPL로 공개해야 하는 제약조건이 있다.

 Window에서도 Bash 사용 가능 : 64 비트판 Winodws 10 Anniversary Update 이후에는 Windows에서도 Bash 셸을 쓸 수 있게 되었다. (기본 옵션으로는 사용할 수 없고, 설정과 인스톨이 필요) Windows 상에서 Ubuntu의 컴포넌트를 동작시키는 것으로 구현되어 있다. 다만 개발 툴로 분류되어 있어서 Windows 관리 툴로는 'PowerShell'를 이용한다.

 괄호 확장 : 복수의 파일을 일괄 생성하는 경우 등에서 파일명을 일련번호로 작성하고 싶은 경우가 있다. 괄호 확장을 사용하면 루프를 사용하지 않고 중괄호를 사용해서 해당 부분 문자열을 자동 생성할 수 있다.

Shellshock : Bash처럼 이용자가 많은 소프트웨어에 결함이나 취약성이 발생하면 큰 영향을 미치게 된다. 2014년 발생된 Shellshock라는 취약성이 많은 환경에 영향을 미쳤다(CVE-2014-6271).

dash : Debian Almquist shell. Debian이나 Ubuntu에서 기본 셸로 사용되고 있는 셸. Bash보다 간결해서 시작이 빠르다.

Clojure

  • 탄생 : 2007년
  • 주요 용도 : Web 시스템, Android 앱 개발
  • 분류 : 함수형/인터프리터 컴파일러

기존의 플랫폼 상에서 동작 : Java의 JVM이나 .NET의 CLR, JavaScript 등의 환경에서 동작하기 때문에 기존의 라이브러리나 API 등을 활용할 수 있다.
 다양한 리스트를 다루는 시퀀스 : 리스트, 벡터, 맵 등 어떤 것이든 '시퀀스'로 추상화해서 다루는 것이 가능하다. 같은 이름의 함수에 인자를 전달할 수 있다.

멀티 메서드에 의한 다형성 : 여러 개의 함수를 묶은 것 같은 특수한 함수로 매개변수의 자료형 등에 의해서 실행할 때 처리를 바꿀 수 있다. 컴파일할 때가 아니라 실행할 때 자료형에 의해 호출되는 메서드가 정해진다.

 Clojure와 Closure : Closure는 JavaScript 옵티마이저로, JavaScript 코드를 고속으로 실행할 수 있도록 변환한다. 일부 프로그래밍 언어에서는 람다식이나 익명 함수 등을 Closure라고 하는 경우도 있다.

 Leiningen : Clojure용 빌드 툴. 패키지 관리 툴이기도 하다. Clojure의 인스톨에 사용되고, 신규 프로젝트를 템플릿으로 생성해서 작성하는 것도 가능하다.

Overtone : Clojure로 만들어진 오픈소스 오디오 환경(신시사이저). 프로그램을 바꿔 작성하면서 재생하는 것으로 실시간으로 음악을 작성, 재생할 수 있다.

STM : Software Transactional Memory. DB 등에서 채용되고 있는 트랜잭션 처리와 비슷한 방식을 일반적인 프로그래밍에 도입한 것. 

SQL

  • 탄생 : 1976년
  • 주요 용도 : RDB
  • 분류 : 선언형

 데이터 조작뿐만이 아니다 : SQL은 DDL, DML, DCL로 나뉘며, 데이터 조작뿐만 아니라 테이블의 정의, 관계 설정, 권한 부여, 트랜잭션 제어 등을 실시한다. 

제조사마다 다른 확장 : 표준 SQL이 존재하지만 개발되기 까지 시간이 걸렸기 때문에, 각 제조사가 독자적으로 확장을 하고 있다. 따라서 사용자의 DB에 따라 사용할 함수를 바꿔야 하는 경우도 있다.

관계 모델에 기초한 언어 : 데이터의 구조를 표 형식으로 표시하고, 여러 표를 서로 연관지을 수 있다. 관계 모델을 기반으로 하는 DBMS에서 SQL은 사실상 표준이 되어 있다.

 NoSQL : 관계형 DB 관리 시스템 이외의 DB 관리 시스템을 가리키는 경우에 사용된다. 키밸류형 데이터 구조뿐만 아니라, XML 및 JSON과 같은 문서 중심의 데이터 구조를 갖는 것 등이 있다.

 RDBMS : 데이터를 표 형식의 열과 행으로 표현하고, 이용자가 관게 연산을 사용하여 저장되어 있는 데이터를 조작하는 시스템

저장 프로시저 : DB에 대한 일련의 처리를 정리한 절차. RDBMS에 저장된 하나의 요청에 여러 SQL문을 실행할 수 있기 때문에 네트워크에 대한 부하를 줄일 수 있다. 또한 동일한 DB를 여러 애플리케이션에서 작업하는 경우, 개별적으로 SQL을 작성하는 것보다 유지 보수가 용이하다.

SQL 인젝션 : SQL문을 빌드할 때 사용자의 입력 내용을 사용하는 경우, 개발자가 예상하지 못한 SQL문을 실행함으로써 DB를 부정하게 조작하는 공격 방법

COBOL

  • 탄생 : 1959년
  • 주요 용도 : Web 시스템, Android 앱 개발
  • 분류 : 함수형/인터프리터 컴파일러

금융계 사무 시스템에서 많이 사용되는 언어 : 특히 메인 프레임에서는 현재도 주류 언어다. 대기업 중에는 COBOL의 소스코드가 아직 많이 남아있다. 레코드 단위의 처리, 일괄 처리에 적합하다. 

 영어와 비슷한 문법 : 초보자가 읽기 쉽다.

10진수의 연산이 장점 : 많은 언어들이 2진수로 수치를 취급하고 있지만, COBOL에서는 2진화 10진법 등이 있어 소수점을 포함한 수치를 10진수로 계산할 수 있다. 이 때문에 돈을 다루는 은행에서 중요하게 여겨지고 있다.

 메인 프레임 : =범용기=호스트 컴퓨터. 여러 개의 업무를 병행처리 하거나 대규모 일괄처리 등에 강한 대형 컴퓨터

JCL : Job Control Language. 작업 제어 언어. 메인 프레임의 OS 등에서 이용할 수 있는 언어로, COBOL 등에서 작성된 프로그램을 실행하는 역할을 한다. 셸 스크립트나 배치 파일에 가깝지만 세밀한 실행 제어가 가능하다.

레거시 마이그레이션 : 메인 프레임에서 구축된 시스템을 UNIX나 Windows 등의 오픈된 플랫폼으로 이식하는 것. COBOL 등으로 만들어진 소스코드를 변환 툴 등을 이용해서 새로운 시스템에서 실행할 수 있는 언어로 변환한다.

Visual Basic

  • 탄생 : 2001년
  • 주요 용도 : Windows 앱 개발, Office 앱 개발, 웹앱 개발, 교육
  • 분류 : 절차형 객체지향형/컴파일러

Windows의 업무용 앱에 지금도 건재 : Windows에서 실행되는 애플리케이션 개발 환경으로, Windows 등장 당시부터 많이 사용되고 있었다. BASIC을 기준으로 한 구문이며, 초보자를 위한 프로그래밍 언어라고 할 수 있다. 기업의 내부 시스템과 무료 소프트웨어 개발 등에서도 많이 사용되며, 지금도 과거의 유산으로 남아있는 것이 드물지 않다. Office 매크로에서 사용되는 VBA와도 닮아있어 개발자의 수는 매우 많다.

 VB와 VB.NET의 차이가 크다 : .NET Framework 등장 이전의 Visual Basic과 등장 이후의 Visual Basic .NET 은 같은 언어임에도 불구하고 문법 등에서 다른 부분이 많다.

RAD의 원조 : 버튼, 텍스트 상자 같은 컨트롤을 마우스로 배치하는 스타일로 개발한다. 각 컨트롤에서 발행한 이벤트에 대한 처리를 기술하기 때문에, 초보자도 알기 쉽다. RAD는 Rapid Application Development

서포트 기간이 길다 : 최근에는 웹 브라우저에서도 최신 버전만을 지원하는 경우가 늘어나고 있다. 반면에 Visual Basic에 관해서는 Visual Basic 6.0 런타임이 아직 지원되고 있다. 따라서 개발 환경의 자원이 종료된 후 10년 가까이 지났음에도 불구하고, 아직도 기존의 응용 프로그램이 동작하고 있다.

 VBA : Word, Excel, Access와 같은 오피스 애플리케이션의 매크로를 작성할 수 있는 언어. Visual Basic과 비슷한 표현이며, 수작업을 자동화하기 위해 자주 사용된다.

VBScript : Visual Basic 풍의 스크립트 언어. Windows, IIS, 웹 브라우저 등으로 동작한다. 메모장만으로 개바할 수 있는 등 편리하지만, 컴퓨터 바이러스를 만드는데 사용되는 경우도 많다.

런타임 라이브러리 : VB.NET의 등장 이전에는 Visual Basic에서 개발한 애플리케이션을 배포할 경우, 런타임 라이브러리도 같이 배포해야 했다.

기록 제외한 언어

  • Assembly : 특정 하드웨어에 특화시켜 최대한 성능을 끌어낼 수 있는 언어 (용도 : 교육, 임베디드)
  • Ada : 미션 크리티컬한 용도에 최적인 '안전제일'의 언어 (용도 : 비행기 등의 임베디드)
  • AWK : 문자열 데이터의 일괄 처리에 적합한 언어 (용도 : 문자열 처리)
  • BASIC : 초보입문자용 프로그래밍 언어 (용도 : 교육)
  • bc : 커맨드라인에서 사용하는 전자계산기 (용도 : 계산)
  • Brainfuck : 8개의 문자만 사용. 튜링 완전한 난해 프로그래밍 언어 (용도 : 프로그래밍 연습)
  • CLIPS : NASA에서 독자적으로 개발한 전문가 시스템 개발 툴 (용도 : AI 연구)
  • csh : C언어 스타일의 셸 스크립트 (용도 : 셸 스크립트) 참고로 csh를 개발한 Bill Joy는 vi 에디터도 만들었다. 
  • Elixir : Erlang의 VM 위에서 동작하는 함수형 언어. 겉모습은 Ruby 풍이다. (용도 : 웹앱)
  • Erlang : 병행처리 지향의 프로그래밍 언어 및 실행 환경. (용도 : 웹앱)
  • F# : .NET에서 동작하는 ML풍 함수형 언어 (용도 : Windows 앱, 웹앱)
  • Factor : 함수에서 함수로 데이터를 전달하는 연쇄성 언어. (용도 : 웹앱, 게임)
  • Fantom : 닷넷, JVM, JavaScript 위에서 동작하는 순수한 객체지향 언어 (용도 : 범용)
  • Forth : 역 폴란드 표기법을 배우고 스택에 익숙해지는데 최적 (용도 : 임베디드계, 연구, 교육)
  • Fortran : 과학기술 계산에 특화된 언어. 고수준 언어의 원조 (용도 : 과학기술 계산)
  • Haskell : 순수 함수형 언어 (용도 : 교육, 데스크톱 앱, 웹앱)
  • Icon : Pascal과 문법이 비슷하고 텍스트 처리에 강한 언어 (용도 : 범용)
  • Intercal : 나중에 소스코드를 볼 수 없는 난해한 언어 (용도 : 프로그래밍 연습)
  • LISP LISt Processor. 리스트 처리가 장점인 함수형 프로그래밍 언어의 원조 (용도 : AI, 교육)
  • Lua : 게임 등에 삽입해서 실행. 내부 처리로 기능을 확장할 수 있다 (용도 : 게임, 임베디드, 교육)
  • Nemerle : .NET의 멀티 패러다임 언어. 컴파일 시 다양한 처리가 가능 (용도 : Windows 앱, 웹앱)
  • Nice : 객체지향형의 연구로 탄생. Java를 확장해서 사용할 수 있는 언어. 단, 이미 개발이 중지 상태라서 메리트는 별로 없다. (용도 : 범용)
  • Nim : 쓰기 쉽게 최적화된 코드와 고속 처리. (용도 : 범용)
  • OCaml : 객체지향형을 도입한 함수형 언어 (용도 : 금융계)
  • Octave : MATLAB과 상호성을 중시하는 수치계산용의 대화형 언어 (용도 : 수치계산, 연구개발)
  • Oz : 분산 환경에서 동작하는 병행성 지향 언어 (용도 : 범용, 교육용)
  • Pike : 동적 객체지향 언어 (용도 : 범용)
  • PL/I : IBM의 메인프레임 용으로 만들어진 버용 언어 (용도 : 메인프레임)
  • PostScript : 인쇄가 장점이라서 프린터에도 탑재된 스크립트 언어 (용도 : 프린터)
  • Prolog : AI 연구에서 대활약 중인 논리 프로그래밍의 대명사 (용도 : AI 연구)
  • Racket : 도입하기 쉬운 LISP풍 언어. Scheme의 학습 환경으로 최적 (용도 : 교육)
  • Scheme : LISP나 함수형 언어로 입문 (용도 : 교육)
  • Scratch : 초중등 SW 교육용 및 프로그래밍 입문 교육에 최적 언어 (용도 : 어린이 대상 교육)
  • sed : 커맨드라인에서 문자열을 치환. 정규표현식 활용으로 일괄 변환을 구현 (용도 : 문자열 처리)
  • Smalltalk : 객체지향 프로그래밍의 본보기가 된 언어. (용도 : 교육)
  • Tcl : 애플리케이션의 사입이 쉽다. 셸 스크립트 풍의 언어 (용도 : 데스크톱 앱, EDA 툴)
  • Unlambda : 람다 계산에 기초한 난해 언어 (용도 : 프로그래밍 연습)
  • Whitespace : 소스코드가 흰 공백으로 보이는 난해한 언어 (용도 : 프로그래밍 연습)