2015년 5월 17일 일요일

Julia Lang의 놀라운 점들




Julia를 조금 들여다 보면서 몇가지 특징들을 보고 깜짝 놀랐다.
속도가 빠르다던지, 문법이 쉽다던지 따위의 차원이 아니고,
세심하게 사용자(User)를 배려한 깨알같은 특성들 때문이다.

이런 것들은 수치해석 분야를 제대로 해 본,
뭔가 '아는 사람'이 아니면 생각도 못할 특징들 같다.
도저히 오픈소스 프로젝트라고 믿어지지 않을 만큼
사용자를 배려한 세심함이
이 언어의 완성도를 크게 끌어올려주는 것 같다.


그 첫번째 특징은...

유니코드로 코딩하는 것이 가능하도록 처음부터 만들어져 있다는 것이다.
사실 Python 같은 것은 90년대에 처음 개발된 것이라
유니코드 쪽은 나중에 부랴부랴 갖다붙인 거라서
셋팅해주는 것도 참 어렵다.
헌데 Julia는 그냥 막 써도 된다.
변수 이름을 한글로 써도 되고, 그리스어로 써도 된다.
심지어 LaTex 문법으로 변수 이름을 써도 된다.


두번째 특징은...

정말 깨알같은데, 곱셈 연산자를 생략해도 된다는 것이다.
예를 들어 "3*a^2+2*a-1" 이라는 계산식을 쓴다고 치면
Julia에서는 "3a^2+2a-1" 이라고 써도 아무일 없이 그냥 계산된다.
에러메시지 따위는 없다.
물론 이런 식으로 쓰는 습관을 들여 버리면
프로그래머로서는 안좋은 습관이 되겠지만,
전문적인 소프트웨어 공학자가 아닌
그냥 일반적인 다른 분야의 엔지니어라면
이렇게 되도록 해 주는게 맞을 것이다.
사실 이거 보고 거의 경악을 금치 못했다.
이렇게 깨알같다니...


세번째 특징은...

외부 패키지를 불러쓸 때,
import 라던가 include 같은 단어 대신에 using 이라는 단어를 쓴다.
그냥 단어가 다를 뿐인데 뭔 의미가 있겠냐 싶지만...
using 이라는 단어를 쓰니까 일단 뭔가 진입장벽이 엄청 낮게 느껴진다.
컴퓨터에게 명령하는 느낌이 아니고 살살 부탁하는 느낌.
굉장히 심리적인 것 같은데,
아무튼 단어 자체가 아주 마음에 들었다.


네번째 특징은...

어떤 글자를 프린트할 때 println() 함수를 쓰는데,
이 함수가 재밌다.
C의 printf()함수와는 차이가 있다.
일단 "\n" 따위는 쓰지 않는다.
이걸 아예 안 쓰니 훨씬 가독성이 좋다.
쓰레기 치워버린 느낌.
게다가 문자열 중간에 변수값을 삽입해 줄 때도 더 간단하다.
C에서는
printf("변수값은 %f2.5 이다.\n", a);
이런 식으로 써 줘야 할텐데...
Julia에서는
println("변수값은 ", a, "이다.")
라는 식으로 그냥 줄줄 써 주니깐 잘 된다.
이런게 소프트웨어 공학적으로는 별 의미 없을지 몰라도,
사용자 입장에서는 상당히 좋은 것 같다.


다섯번째 특징은....

한 줄 끝나고 나서 세미콜론(;) 기호를 안 써줘도 된다.
뭐 써 줘도 아무 상관 없지만, 안 써줘도 아무 소리 안한다.
특히 한국사람한테는 세미콜론 같은 기호는
문화적으로 별로 익숙하지가 않아서 더 와닿는 것 같다.
어떤 커뮤니티에서 봤는데 어떤 미국 사람이 
"빌어먹을 f**king 세미콜론 안 써도 되니까 정말 살 것 같다"
라고까지 표현한 코멘트도 봤다.


여섯번째 특징은....

for 같은 루프를 마음껏 돌려도 아무도 뭐라 안한다.
특히 Matlab 같은데서는 루프 쓰면 큰일 날 것 처럼 가르치다 보니...
(Matlab에서는 루프 쓰면 속도가 엄청 떨어지니깐)
하지만 Julia는 속도가 원체 빵빵하다 보니 
루프를 마음껏 쓰라고 오히려 권장하는 분위기인 것 같다.
아 물론 Matlab 처럼 벡터로 써도 되고...


일곱번째 특징은....

역시 깨알같은 건데,
주석문을 아무데나 갖다붙여도 에러메시지 따위는 내뿜지 않는다.
예를 들어 C에서,

printf(a, %길이
b, %면적
c %체적);

이딴 식으로 쓰면 그냥 에러난다.
하지만 Julia에서는

println(a, # 길이
b, # 면적
c # 체적
)

이딴식으로 써 놔도 아무 상관없다.
뭐랄까 모호성(Ambiguity)가 있어도 적당히 알아먹는다는 느낌이다.


코딩 문법 같은걸로 걸기적거리지 않고,
컴퓨터공학적인 문제에 발목잡히지 않고,
그냥 해결해야 할 문제에만 집중할 수 있도록
장애 없이 줄줄 써나가면
답이 나오도록 하는 목적에 충실하다.





댓글 없음:

댓글 쓰기