조금 다른 내용이지만 대부분의 JIT 구현들은 거의모두 C++ 로 만들지요, 그래서인지 영원히 쌩까지는 못하겠더군요... (jit 을 직접 다루지는 않지만 관심이 맣아서요..)
지금은 보지 않지만 spidermonkey 소스로 작업을 한적이 있는데 얼마전 오랜만에 소스를 받아봤더니 jit 이 들어가면서 모두 C++ 로 바뀌었더군요..
python 소스를 받아서 살펴보니 아직 python 은 C 로 되어있더군요. 아직 jit 관련해서는 안들어가 있는건지 모르겠지만 이녀석은 C++ 로 바뀌지 않았으면 하네요...
아무도 자바는 언급하지 않으셔서.. 한마디 쓰자면
자바는 checked exception 때문에 더 골때립니다.
컴파일 타임에 예외를 검사하기 때문에 개발자가 모든 예외상황에 대해 알아야 하고..
반드시 catch 되거나 throw 되어야만 해서 예외를 처리하는 부분을 공통화 시키기도 어렵고, 코드를 상당히 지저분하게 만듭니다.
덕분에 자바 코드에서는 예외를 잡아 로그 찍기만 하거나 심지어 예외를 집어 삼키는 코드들이 참 빈번하게 보이더군요.
몇 시간 전에 다른 걸
몇 시간 전에 다른 걸 검색하다가 봤던 페이지 입니다.
http://stackoverflow.com/questions/307610/how-do-exceptions-work-behind-the-scenes-in-c
꼭 써야 한다기 보다... return 값 검사하는 것에 비해 손해볼 것 하나도 없으니 편하게 써라 정도.
OTL
관련 구글 구룹스입니다.
관련 구글 구룹스입니다.
I keep running into long term c++ programmers who refuse to use exceptions
http://groups.google.com/group/comp.lang.c++.moderated/browse_thread/thread/e109e8b5a792dd91/3e5e2cd91461bf71?hl=en&lnk=gst&q=refuse#3e5e2cd91461bf71
위 링크에도 언급잉 있는데요. 라이브러리를 만드는 관점에서 생각해 보겠습니다.
우선 리턴 구문'만'을 쓰면, 무엇이 올바른 상황이고 무엇이 예외 상황인지 결정하는 것을
라이브러리 사용자(함수 호출자)에게 맡길 수 있는데요.
try, catch, throw를 쓰게되면, 무엇이 예외 상황인지를 라이브러리 설계자가 미리 정의해야 하는데,
라이브러리 사용자가 이를 예외 상황으로 받아들이지 않을 수 있습니다.
그렇게 되면 정상 코드와 예외 코드가 뒤죽박죽되어 더 알아보기 힘들게 되죠.
(일반적인 예가 아니라, 특별한 예입니다)
try, catch, throw의 목적이 예외 처리 코드와 정상 처리 코드를 분리하여 코드의 엘레강스(?) 높이는 것인데요.
무엇이 정상이고 무엇이 예외인지 나누는 것이 생각보다 쉽지 않은 것 같습니다.
뭐 논쟁이 될 수 있는 내용입니다.
——
———
Life is a tragedy when seen in close-up, but a comedy in long-shot. - Chaplin, Charlie -
C++
C++ 예외는 악입니다. 사탄이 만들었어요.
http://www.yosefk.com/c++fqa/exceptions.html
사실 C++ 전체가 다 그렇습니다만...
C++ 을 처음 봤을때
C++ 을 처음 봤을때 이걸로 프로그램을 만들수는 있는거야? 라고 생각했었지요..ㅜ,ㅜ
조금 다른 내용이지만 대부분의 JIT 구현들은 거의모두 C++ 로 만들지요, 그래서인지 영원히 쌩까지는 못하겠더군요... (jit 을 직접 다루지는 않지만 관심이 맣아서요..)
지금은 보지 않지만 spidermonkey 소스로 작업을 한적이 있는데 얼마전 오랜만에 소스를 받아봤더니 jit 이 들어가면서 모두 C++ 로 바뀌었더군요..
python 소스를 받아서 살펴보니 아직 python 은 C 로 되어있더군요. 아직 jit 관련해서는 안들어가 있는건지 모르겠지만 이녀석은 C++ 로 바뀌지 않았으면 하네요...
High Risk & High Return ~
Unladen Swallow
안됐지만 구글에서 진행하고 있는 파이썬 JIT 프로젝트인 Unladen Swallow가 C++로 되어 있습니다.
케케묵은(?) 농담이지만..
if(예외가 발생하면)
goto 처리루틴;
이런 방법을 goto 쓴다구 욕먹지않으면서 쓸 수 있다는거 아닐까요^^
아.. 재미없는 농담이었습니다. try~catch exception handling 아이디어를 폄하하거나 의미없는 논쟁을 할 생각은 없었으니, 기분 나쁘신분 계시다면 너그럽게 용서해 주시기를
...
꼭 써야하는 이유라기보단, 쓰면 좋은 상황이 있고 안 그런 상황이 있겠죠.
(뭐 아무도 관심없으시겠...지만..-.-) 구글에서는 C++로 프로그래밍할 때 exception을 안씁니다.
http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml#Exceptions
다른 언어에서 try
다른 언어에서 try catch를 쓰는건 나쁘지 않습니다만...
C++의 그것은 정말 쓸모가 의심스럽더군요.
왜냐면 C언어에서 내부적으로 에러로 처리하는 것(예: 잘못된 메모리 접근)은
절대 C++에서 예외처리로 다루지 못합니다.
STL의 at member 함수는 예외를 던지잖아요.
C++안의 C에서 처리하는 부분을 다루지 못한다는 점이 문제라고 생각하시는듯...
다른 언어에서는 어떤 점이 좋은지 알려주실 수 있나요?
저는 좋아하는 편입니다.
우선 함수 반환형식을 의미 그대로 쓰는 형태를 취할 수 있다는게 좋음.... -_-.
반환형태가 아니라 참조자나, pointer의 경우는 잘 안 쓰는군요.
개인적으로 편리성때문이라 생각합니다.
예전에 계산기를 흉내내는 것을 해야 할때가 있었습니다.
그때 Error에 대한 처리를 Exception 개념을 사용하니 편했던것 같습니다.
그때 사용한 로직은 다음과 같습니다:
1. 수식을 입력받는다.
2. 수식의 유효성을 검증한다.
2.1. 만약 수식이 유효하지 않으면 다음 로직을 수행한다.
3. 수식을 평가한다.
4. 평가된 수식의 결과로 다음 로직을 수행한다.
여기서 getValue 함수가 수식 유효성점검을 해야 했기에 error에 대한 처리는 Exception으로 처리하는 것이 손쉬웠던것 같습니다.
아무도 자바는
아무도 자바는 언급하지 않으셔서.. 한마디 쓰자면
자바는 checked exception 때문에 더 골때립니다.
컴파일 타임에 예외를 검사하기 때문에 개발자가 모든 예외상황에 대해 알아야 하고..
반드시 catch 되거나 throw 되어야만 해서 예외를 처리하는 부분을 공통화 시키기도 어렵고, 코드를 상당히 지저분하게 만듭니다.
덕분에 자바 코드에서는 예외를 잡아 로그 찍기만 하거나 심지어 예외를 집어 삼키는 코드들이 참 빈번하게 보이더군요.
Java guru 들이 checked exception에 너무 많은 기대를 한 것 아니냐는 토론이 있었던 것 같은데
그런데 그거 Web framework에서 쓴다고 하던데... 저는 Java를 거의 안해서 모르겠어요.