:: 게시판
:: 이전 게시판
|
- 자유 주제로 사용할 수 있는 게시판입니다.
- 토론 게시판의 용도를 겸합니다.
통합규정 1.3 이용안내 인용"Pgr은 '명문화된 삭제규정'이 반드시 필요하지 않은 분을 환영합니다.법 없이도 사는 사람, 남에게 상처를 주지 않으면서 같이 이야기 나눌 수 있는 분이면 좋겠습니다."
15/04/18 06:15
장, 단점이 명확하다고 봅니다.
대형화될 수록 오류가 발생하지 않을 확률이 거의 없다고 봐야겠지만 그만큼 개발자가 입맛에 맛게, 가지고 놀고 싶은데로 쓰일 수 있다는 장점이 있겠지요. 개인적으로는 후자쪽을 더 중시합니다.
15/04/18 06:21
'입맛에 맞게 쓸 수 있다'라면 표현력을 말하는 것일 텐데, 이 점에 있어서는 sum type쪽이 오히려 낫습니다. 단적인 예로, sum type이 있는 언어에서는 모든 포인터를 nullable로 설정함으로서 전통적인 포인터를 흉내낼 수 있지만, 그 반대는 불가능합니다.
다르게 생각하면, 기존 언어들은 '모든 포인터가 처음부터 강제로 nullable인 상태'라고 말할 수 있겠죠. 당연히 nullable을 제거할 수 있는 sum type 쪽이 더 입맛에 맞게 쓸 수 있습니다.
15/04/18 06:33
정해서 놓고 쓰는것이 아닌 쓰고싶은 타입으로 캐스팅하고 다니며 이를 이용해 많은 짓을 할 수 있다는것이죠.
나머지는 개인적인 생각인데 널을 제거 할 이유를 사실 납득을 못하는 것도 있네요 만약 널 참조오류가 발생했던 상태라면 거기에서 참조오류만 발생하지 않았다뿐이지 개발자가 의도하지 않았던 곳으로 포인팅을 하게 되는 경우가 태반이라 역시나 오류라는 점에서는 다를게 없다는게 제 생각이네요.
15/04/18 06:43
뭔가 프로그래밍 언어 꼰대(?)처럼 들리는 것 같기도 하지만... 직접 써 보시면 장점을 더 확실하게 느끼실 수 있을 거라고 생각합니다. 저도 sum type이 있는 언어들을 쓰기 전에는 '널처럼 유용한 걸 왜 없애야 하나...'라고 생각했습니다. 그런데 막상 써 보니 너무 편하더군요.
정말로, 저도 써 보기 전에는 널 포인터처럼 필수적인 것을 어떻게 없앨 수 있는지 무척 회의적이었습니다. 그런데 됩니다. 진짜 됩니다. 캐스팅 같은 것도 전혀 문제 없습니다!
15/04/18 08:51
흐흐흐 재밌게 잘 읽었습니다.
자바스크립트 처음 배울 때 이것 땜에 진짜 어렵더군요;;; 오류는 나는데 뭐가 오류인지 못찾겠고 한참 보다보면 null값 때문이고;;;
15/04/18 09:12
이게 sum type이랑 비슷한건진 모르겠는데, 전 static으로 Null Variable을 선언해서 씁니다.
그럼 가령 if (var) { printf("%s", var->name); } 이렇게 안하고 printf("%s", var->name); 만 해도, var가 null대신 전역 변수인 Null Variable이라면 name에 "NULL" 문자열을 넣어주면 그만이니까요. 디버깅 정책/관점의 차이에 따라 쓸모 없을 수도 있는데, 잘만 사용하면 많은 경우 효율적이니까요.
15/04/18 11:06
재밌는 아이디어군요. sum type이랑 비슷해 보입니다. 값이 없다는 상태도 값으로 나타내는 거니까요.
하지만 의미상으로는 어떻게 되는 건지 좀 갸우뚱하군요. sum type은 널일 경우 아예 못 쓰게 하지만, 말씀하신 방법에서는 기본값 변수(?)가 대신 사용되겠군요. 유닛 체력을 다시 예로 들면 널이 될 상황이 발생할 때마다 기본값 변수의 유닛 체력이 대신 깎인다는 것인데... 음. 프로그램이 죽는 것보다는 낫다고 생각할 수도 있지만 저는 프로그래머의 초기 의도와 달라졌다는 생각이 먼저 듭니다.
15/04/18 09:51
크크 이런 거 재미있어요.
MFC랑 C/C++만 하다가 C#을 요새 좀 하고 있는데, new는 있어도 delete는 자동으로 해준다는 개념이 참 생소하면서 편리하더군요.. 맨날 메모리 새는거 땜에 설비 담당자랑 싸우고 그랬는데... 지금은 딱히 고민할 필요가...(하지만 이제 메모리가 기본 8GB는 되서 C++이라도 덜 고민되는 건 함정..)
15/04/18 15:44
가비지 콜렉션 때문에 가능한건데요...
C++ 쪽에서도 최근에 나온 STL 진영에서는 auto_ptr, shared_ptr 등으로 흉내낼 수 있지요. 그리고 솔직히.. 가비지 콜렉션 자체가 생각보다 완벽하지 못해서, C#도 메모리 샙니다.. 쓰다보면... 흐흐...
15/04/18 17:42
크크 그렇군요~ 누수의 원인을 랭귀지로 돌릴수 있으니 것도 괜찮습니다
근데 이렇게나 편리한 언어들이 많이 등장하는데 C++의 생명은 언제까지 유지가 될까요? 여전히 플랫폼적응이나 스피드에서 강점을 보이는 걸까 싶네요
15/04/19 01:19
지금도, 어플리케이션을 개발할때는 자바스크립트, 자바, C#, 파이선...
그 외에도 Go, 러스트, 헤스켈 등등의 신생(?) 언어들이 많이 쓰이는 추세지만, 코어 라이브러리를 제작할 때는 어쩔 수 없이 C/C++로 제작하게 되더라고요. 게다가, 4세대 언어들이 할 수 없는 극단적인 최적화는 C/C++의 최대 강점이라서... 제 개인적인 생각으로는, 파스칼을 더 이상 안쓰게 된 지금은, C/C++은 끝까지 갈 것 같아요. 게다가, 최근 나오는 언어들도 문법의 기반은 죄다 C/C++에 있다는 것도 한 몫 하고요.
15/04/18 11:13
확실히 그렇습니다만, 저는 파이선을 오래 해서, 댕글링 포인터의 괴로움은 상대적으로 덜 겪었습니다. 그리고 파이선의 None은 이름만 다를 뿐 널 포인터랑 다른 게 없지요.
댕글링 포인터에서 해방됐는데도 불만이 드는 걸 보니, 사람 욕심이 끝이 없는 것 같습니다. 하하
15/04/18 15:46
글쵸, 솔직히 널포인터는 어떤식으로는 우회할 방법이 있고, 최근에 나온 실행전 코드분석툴 등에서 잡아주기도 하니까요.
댕글링 포인터가 제일 짜증나죠. 특히나 멀티스레드 방식으로 만들다보면... 아오...
15/04/18 12:00
현 시점에는 공식 홉페이지의 서적이 가장 낫습니다. 아직은 베타라 이 물건마저도 완전히 최신 상태를 반영한건 아니지만 대부분의 주제에 대해서는 별 문제 없이 공부하실 수 있을겁니다.
http://doc.rust-lang.org/book/
15/04/18 12:15
여담이지만 여지까지 널 포인터를 가지고 나온 대부분의 정적 타입 언어의 개발자들이 한 입을 모아 말하는 내용 중 하나가 "널 포인터의 도입은 실수"라는 겁니다. 동적 타입 언어야 이걸 체크할 도리가 없으니 어쩔 수 없다지만요. C++은 레퍼런스를 도입했고, C#은 "여러분들이 언어를 만들면 널 포인터를 넣지 마세요!"라고 조언하고, 자바는 나중 가서야 NonNull 어노테이션을 추가하고...
어쨌든간에 기계적으로 체크할 수 있는 문제점을 사람이 체크하게 하도록 만들면 나중에 가서 후회를 하게 되죠. 이런 중요하지 않은 문제는 전부 기계가 체크하도록 하는게 좋습니다.
15/04/18 15:49
그러니까, 둘 다 문제없는 C#을 씁시다! (응?)
최근 xamarin에 기대를 거는 중입니다. 멀티플랫폼 프로젝트를 하겠다고 언어를 여러가지를 쓰는건 너무 낭비같아요. ㅠㅠ
|