Search Results for '프로그래밍 언어'

7 POSTS

  1. 2008.04.30 자바 as 에스페란토 for JVML
  2. 2008.04.28 프로그래밍 언어 성능 측정 5
  3. 2008.04.22 Scala 이상한 점 2
  4. 2008.04.19 Scala
  5. 2008.03.31 통계 및 데이터 분석용 언어 R 3
  6. 2007.12.03 Lambda the Ultimate 3
  7. 2007.12.03 새로운 다짐 1

자바 as 에스페란토 for JVML

Posted 2008. 4. 30. 00:15
전통적으로 프로그래밍 언어의 외부 인터페이스(외부 함수 호출)는 주로 C로 되어 있었습니다. 자바의 JNI(Java Native Interface)가 대표적이고, 파이썬도 Python/C API를 제공합니다. 함수 언어 OCaml로 C 인터페이스를 제공하고, Haskell도 마찬가집니다.

C는 프로그래밍 언어계의 에스페란토인 셈인데 C가 이렇게 널리 쓰이는 이유는 다음과 같습니다.

1. C는 표준화된 언어이다 (ISO C)
2. C는 운영 체제 구현 언어로 가장 많이 사용된다. 대표적으로, Unix, Windows, MacOS 등이 모두 C로 구현되어 있다.
3. 많은 라이브러리가 C로 구현되어 있다.
4. 대부분의 프로그래밍 언어가 C 인터페이스를 제공하기 때문에, 프로그래밍 언어가 C 인터페이스만 제공하면 다른 언어와 바인딩도 가능하다. 일례로, Pycaml은 OCaml C 인터페이스로 Python/C API를 호출해 파이썬을 바인딩한다.


자바 가상 머신에서 동작하는 언어에서는 자바가 C를 대체하는 새로운 에스페란토가 되고 있습니다. 자바는 앞서 C가 프로그래밍 언어 인터페이스로 많이 사용되는 이유가 모두 맞아 떨어집니다.


1. 자바는 표준화된 언어다 (Java Language Specification)
2. 자바는 자바 플랫폼 구현 언어로 사용된다. 자바 라이브러리는 모두 자바로 작성되어 있다.
3. 많은 라이브러리가 자바로 구현되어 있다.
4. 대부분의 JVML이 자바 인터페이스를 제공하기 때문에, 프로그래밍 언어가 자바 인터페이스만 제공하면 다른 언어와 바인딩도 가능하다.




프로그래밍 언어 성능 측정

Posted 2008. 4. 28. 20:40
프로그래밍 언어의 특성 중 실용적인 관점에서 가장 중요한 요소 중 하나는 성능입니다. 요즘 동적 언어가 인기를 얻는 것을 보면 생산성이 성능보다 더 높은 점수를 얻고 있는 것 같긴 하지만, Python이나 Ruby를 .NET이나 JVM으로 포팅해서 HotSpot이나 JIT을 이용하려는 시도는 성능은 여전히 중요한 요소임을 반증합니다. (물론 .NET이나 JVM의 방대한 라이브러리를 재활용하고 다른 언어로 작성된 프레임워크를 사용하려는 목적도 큽니다.)

프로그래밍 언어 자체의 성능은 비교할 수가 없습니다. C 언어라도 컴파일러가 거지같으면 굉장히 느릴 수 있고, 옛날에 느리다고 욕먹던 Java도 근래 많은 최적화를 한 서버 JVM을 사용하면 C/C++과 유사한 정도로 성능이 올라가기도 하니깐요. 따라서 프로그래밍 언어 보다는 프로그래밍 언어의 구현을 놓고 성능을 비교해야 합니다.

그런데 벤치마크라는 게 컴파일러나 인터프리터 몇 개 갖다 놓으면 바로 비교가 되는 것이 아니고 또 별도의 벤치마크 프로그램을 통해 간접적으로 테스트해야만 합니다. 어떻게 벤치마크 할 것이냐를 놓고 이견이 많고 시끄러울 수밖에 없습니다. 어떤 언어는 과학 연산만 죽어라고 하는 벤치마크에는 매우 취약한 반면에 문자열 연산이 많은 벤치마크에는 좋은 성능을 보여줄 수도 있으니깐요.

어느 정도 신빙성이 있는지는 모르겠지만, Debian에서 프로그래밍 언어를 비교하는 벤치마크를 하나 제공하고 있습니다. The Computer LanguageBenchmarks Game인데, Gentoo나 Debian이 깔린 리눅스 머신에서 몇 가지 벤치마크의 성능을 순서대로 보여줍니다. 모든 벤치마크를 모든 언어에 대해 돌려보니, Java 6 -server의 성능이 인상적이고, 함수 언어인 Clean, Haskell GHC, OCaml 등도 상당히 좋네요.

Scala 이상한 점

Posted 2008. 4. 22. 19:48
마소 원고 쓰면서 Scala를 가지고 놀다가 재밌는 사례를 발견했습니다.

val은 보통 변하지 않는 값(immutable)을 선언할 때 쓰는 키워드인데, 다음과 같이 선언을 했더니 오류가 발생하지 않고 x 가 1이 되더군요.

scala> val x: Int = x + 1
x: Int = 1


우변의 x + 1은 x가 아직 초기화 되지 않았기 때문에 오류가 발생해야 맞을 것 같은데, 신기하게 그냥 0으로 초기화되고 1을 더해서 x의 값은 1이 되었습니다. scala-user 메일링 리스트에 물어봤더니, Scala 인터프리터에서 위와 같이 선언하면 다음과 같은 클래스를 생성한다고 합니다.


class Foo {
     int x;
     public Foo() {
         x = x + 1;
     }
 }

x가 필드가 되기 때문에 x은 자동으로 0이 할당되고, x + 1은 1이 됩니다. 이건 구현상의 이슈고, Scala에서는 적절히 오류가 발생해야 맞을 것 같은데, 언어 명세에 어떻게 정의해놨는지 모르겠군요.


Scala

Posted 2008. 4. 19. 17:09
5월 마소에 Scala 프로그래밍 언어를 소개합니다. Scala는 객제+함수언어를 지향하며 자방 가상 머신(JVM) 위에서 돌아가는 언어입니다. 얼마 전에 블로그에서 한 번 소개를 한 적이 있었습니다.

사실 기본적인 문법 및 HelloWorld 스타일의 예제만 소개만 해서는 어떤 언어나 비슷하기 때문에 Scala의 여러 특징 중에 어떤 점을 부각해서 글을 작성할지 고민을 했습니다. 일단 머리 속에 떠오른 몇 가지 아이디어는 다음과 같았습니다.

1) 자바 플랫폼 언어
 * 기존 라이브러리와의 통합
 * 컴포넌트 활용

2) 함수형 언어
 * 함수 언어의 장점
 * 함수 언어와 객체지향 언어와의 통합

3) 병렬 프로그래밍
 * Actor 모델
 * 다양한 병렬 프로그래밍 도구


자세한 내용은 5월 호에^^;

통계 및 데이터 분석용 언어 R

Posted 2008. 3. 31. 21:06
리스프(Lisp), SML, 얼랑(Erlang), 헤스켈(Haskell) 등은 각자 특징은 다르지만 범용 함수형 언어라는 공통점이 있습니다. 이와 달리 몇 가지 한정된 영역에만 쓰이는 특수 목적용 함수 언어도 있습니다. 대표적인 예로 통계 및 데이터 분석용 언어이자 환경인 R입니다. 기능이 1:1로 대응되는 것은 아니지만 매트랩(Matlab)이 장악하고 있는 도메인(데이타 분석, 통계, 수학)을 다룰 수 있는 함수형 언어입니다.

R 언어 홈페이지에 있는 An Introduction to R을 보시면 R의 기본적인 특징과 장단점을 파악하실 수 있습니다. IBM dW에도 Statistical programming with R라는 제목으로 R 프로그래밍 언어 소개가 올라와 있습니다. Part 1. Dabbling with a wealth of statistical facilities 제목의 1부는 기본적인 특징과 데이터 타입을 다루고, Functional programming and data exploration라는 제목의 2부에서는 함수형 언어로서의 특징을 이야기하고 있습니다.

R은 데이터 분석용 언어인만큼 기본 데이터 타입으로 벡터(vector)를 지원하고, 각각의 원소에 셈을 할 수 있는 elementwise 연산자를 지원합니다.

> x <- c(10.4, 5.6, 3.1, 6.4, 21.7)
> 1/x

위 코드는 x에 벡터 (10.4, 5.6, 3.1, 6.4, 21.7)를 바인딩하는 예입니다. 1/x는 elementwise 나눗셈으로 각 원소를 1에 대해서 나눈 결과값을 돌려줍니다.

통계에 강한 만큼 통계에 사용되는 mean (평균), sd (표준편차) 등을 기본으로 제공합니다.

> mean(basement)            # Mean fails if we include unavailable data
[1] NA
> mean(basement, na.rm=TRUE)
[1] 18.87542
> sd(basement, na.rm=TRUE)      # Standard deviation must also exclude NA
[1] 2.472855
> cor(basement, livingroom, use="all.obs")   # All observations: no go
Error in cor(basement, livingroom, use = "all.obs") :
        missing observations in cov/cor
> cor(basement, livingroom, use="complete.obs")
[1] 0.9513366
> cor(outside, livingroom, use="complete.obs")
[1] 0.6446673

물론 계산 후에는 멋진 그래픽으로 보여주는 것도 중요하기 때문에 데이터 시각화(data visualization)도 R의 장점 중에 하나입니다. R로 뽑아낸 그래프의 예는 앞서 언급한 dW 글인 Part 1. Dabbling with a wealth of statistical facilities 를 보시면 됩니다.


Lambda the Ultimate

Posted 2007. 12. 3. 03:02
블로그 제목을 "프로그래밍 언어 이야기"로 바꾸고 첫 포스팅입니다.

컴퓨터를 전공하는 후배들을 만나면 컴퓨터 쪽 정보를 얻기 위해 주로 가는 사이트나 구독하는 블로그, 잡지에 대해서 많이 물어봅니다. 사실 저는 관심 분야가 다양한 편이라 한 사이트를 정기적으로 방문하거나 하는 일은 잘 없습니다. (금방 열정이 식기 때문에...) 대신 주로 특정 주제를 가지고 검색을 했다가 관련 사이트들을 들어가보는 방식으로 새로운 것들을 보는 편이고요.

그런 저에게도 새로운 글이 올라오면 항상 체크하고 꼼꼼히 읽어두려고 노력하는 사이트가 하나 있는데 Lambda the Ultimate이라는 사이트입니다. 번역하면 [람다 최고]인 이 사이트는 주로 프로그래밍 언어 전공자들이 프로그래밍 언어에 대한 최신 소식을 전하고 자기들끼리 논쟁도 벌이는 곳입니다. 람다는 함수형 언어의 이론적 바탕이 된 람다 칼큘러스(lambda calculus)의 람다를 지칭하는 말이고요.

물론 [람다 최고]라는 이름에서 알 수 있듯이 주로 함수형 언어 관련 연구자들이 많이 포진해 있기 때문에 함수형 언어를 상당히 옹호하는 글이 많이 올라옵니다. 또한 주로 PL 전공자들이 많다보니 최신 논문이나 이론을 소개하는 등 상당히 학구적인 곳이기도 하고요. 물론 PyPy나 LLVM, IronPythonm EcmaScript 4 등 우리가 자주 듣는 프로그래밍 언어 관련 프로젝트에 대해서도 근황을 전하고 자기 의견을 피력하기도 합니다.

또 메뉴에 보면 Getting Started 항목도 있어서 프로그래밍 언어 관련 이론을 공부할 수 있는 기본적인 책이나 사이트들을 소개해 주고 있습니다. 학교에서 PL 전공하지 않는 이상 접하기 힘든 내용들을 많이 볼 수 있어서 초보자들에게는 매우 귀중한 자료입니다.

PL하면 단순히 자바나 파이썬 같이 새로운 언어를 만들어내는 것만으로 생각하시는 분이 많은데, PL 관련 이론은 프로그래밍 언어의 의미(semantic)를 정형적으로 정의하는 것부터 시작해서 타입 이론(type theory), 구현(implementation), VM이나 컴파일러와의 연계 등 많은 이슈들을 다루거든요.

저는 원래 주어진 프로그램을 분석해서 자동으로 오류는 찾아주는 정적 분석(static analysis)에 관심을 가진 후에 프로그래밍 언어 쪽도 아주 조금 공부하려고 마음을 먹게 되었는데 지금은 잘못된 디자인(대표적인 언어 C 언어)를 고치기 위해 많은 노력을 들이는 정적 분석보다는 처음부터 제대로 설계하자는 "언어 설계" 쪽에 더 관심이 많이 갑니다.

아직 아는 것보다 모르는 것이 더 많기에 공부하는 데로 조금씩 정리해서 써보려고 합니다.

새로운 다짐

Posted 2007. 12. 3. 02:47
11월 한 달을 어떻게 보냈는지 모르겠는데 벌써 12월이 되어 버렸습니다. 까멜레오 프로젝트는 핵심 엔진의 교체 작업을 마치고 안정성 테스트를 계속하고 있는 와중에 중간 데모를 하느라 일주일에 일주일에 2-3번 씩 밤을 세며 주말에도 출근하는 생활을 잠깐 했습니다. 물론 좋아하는 제품을 만드는 일을 그럼에도 불구하고 즐거운 일이지만 육체적으로 힘들긴 하더군요.

11월은 거의 블로그를 손에서 놓고 있었습니다. 사실 일이 바빠지면서 한 달에 한 번 쓰는 마소나 경컴 원고도 매달 마감에 쫓기고 있는 상황이다 보니 블로그 쓸 엄두도 못 내고 있었습니다.

그리고 한RSS 기준으로 구독자가 거의 400명이 되었고 (안 보시는 분이 더 많겠지만...) 원래는 자유롭게 자기 이야기를 할 수 있는 개인 블로그임에도 불구하고 왠지 모르게 읽는 분들을 의식하게 되면서 글 쓰기가 쉽지 않더군요. 사실 보는 분들은 별로 신경도 안 쓰는데 혼자 괜히 의식하고 있는 것인지도^^;;

이 블로그에는 무엇을 쓸까 고민도 많이 했어요. 주제를 "소프트웨어 이야기"로 광범위하게 잡아놓긴 했는데 오히려 더 막연해 지더군요. 특별히 전문적인 강좌를 올리는 것도 아니면서 개인적인 넋두리를 적기에는 왠지 블로그 보러 오시는 분들에게 미안한 그런 느낌이랄까.

그래서 이왕 쓸 것 원래 관심 있었던 분야인 프로그래밍 언어나 컴파일러 쪽으로 다시 내용을 좁혀서 써볼까라는 생각을 했습니다. 항상 관심 분야라고 이야기하지만 실제로는 제대로 배워야 한다는 부담감 때문에 오히려 시작도 못 하고 있었는데 이대로 계속 살아서는 안 된다는 생각을 새삼했다고 할까요.

학부 시절 PL 전공으로 진학하고 싶었는데 그러지 못했던 사실 때문에 오히려 PL 쪽 주제를 볼 때는 조금 부담이 있었습니다. 어설프게 공부하느니 대학원 가서 제대로 배우자는 생각에 오히려 더 멀리했던 것이죠. 제대로 못 배울까봐 두려워서 전혀 안 배운다는 게 조금 웃기긴 하지만 심리적으로는 그렇게 되더군요.

이제는 제대로 배워야 한다는 부담감을 조금 버리고 시행 착오를 겪더라도 조금씩 시도를 해봐야겠다는 결심을 했습니다. 당장 진학 계획이 있는 것도 아닌데 정말 공부하고 싶은 분야를 그렇게 계속 미뤄두기만 해서는 안 된다는 생각이 들었거든요. 대한민국에 저 같은 생각을 가진 분이 저하나 만은 아닐 것이라 믿기에 "배우고 싶다는 티"를 내고 이미 비슷한 길을 먼저 걸으신 분들의 조언을 구할까 합니다.

다짐하는 의미로 블로그 제목도 바꾸고 로고도 바꾸었습니다. 근데 미련이 남아 있었는지 저번 로고도 람다(함수형 언어의 이론적 배경이 되는 람다 칼큘러스를 의미합니다)더군요.

꿈을 이루고 싶은 분들 안 될 것이라 접어두지만 말고 조금씩 펼쳐가 보아요^^