강력한 프로그래밍 언어의 조건?

권순선의 이미지

http://slashdot.org 에 흥미로운 이야기거리가 올라와서 이곳에 그대로 옮겨 봅니다. slashdot의 기사내용은 관련 링크를 참조하십시오.

A not-so Anonymous Coward queries: "My company is about to start development on a new project, and I have to decide on a language and development environment. My boss gave me a set of criteria which needs to be filled: intuitive and easy to use IDE; simplified GUI design and event handling; advanced error handling; advanced object oriented design including multiple inheritance, abstract classes, and garbage collection; full support for operator and function overloading; and portable (at compile-time) across various platforms. I have already looked at C++, Java, C++, C#, Eiffel, and even VB.net; I may be missing something but as far as I can tell all of these languages are missing something from this list. Is there a language available that has all of these features? I thought that someone from Slashdot would be able to point me in the right direction?" If you were to design a language from the ground up, what features would you include and why?

익명 사용자의 이미지

쓰고 보니까 막연하게만 쓴거 같아서 이렇게 글을 인용합니다.

D. Kalev: Interview of Bjarne Stroustrup for linuxworld.com. Computerworld Russia. April 3, 2001. (본문 : http://www.itworld.com/AppDev/710/lw-02-stroustrup/ )
//---------------------------------------------------------------------------
LinuxWorld.com: Are there any features or concepts in other fledging languages, say Python or Ada95, that you would like to see added to C++? Does C++ need any additional features or libraries at all?

Bjarne Stroustrup: I would like to see the upcoming revision of the C++ standard focus on libraries. The work on the language itself could be limited to correction of mistakes, to making the language more uniform, to provide minor extensions to support popular paradigms, and to provide guarantees needed for libraries. For example, I suspect that concurrency is best supported by a library and that such a library can be implemented without major language extensions. However, such a library might need some additional guarantees written into the standard. In addition, I'd like to see a merger of C and C++.

Consider "major" language facilities often discussed for C++:

- Concurrency: I'd like to see a library supporting threads and a related library supporting concurrency without shared memory.
- Reflection: I'd like to see something like that supported through a library defining the interface to extended type information.
- Persistence: I'd like to see some support in the Standard Library, probably in connection with the extended type information, but I don't currently have any concrete suggestions.
- Hash tables: Of course, some variant of the popular hash_map will be included.
Constraints for template arguments: This can be simply, generally, and elegantly expressed in C++ as is.
- Assertions: Many of the most useful assertions [a means of code verification and error handling] can be expressed as templates. Some such should be added to the Standard Library.
- Regular expression matching: I'd like to see a pattern-matching library in the standard.
- Garbage collection: I'd like to see the C++ standard explicitly acknowledge that it is an acceptable implementation technique for C++, specifying that "concealed pointers" can be ignored and what happens to destructors for collected garbage. (See section C.4.1 of The C++ Programming Language for details.)
- GUI: It would be nice to have a standard GUI framework, but I don't see how that could be politically feasible.
Platform-independent system facilities: I'd like to see the Standard Library provide a broader range of standard interfaces to common system resources (where available), such as directories and sockets.

Note that these extensions are primarily additions to the Standard Library and that they can be implemented without adding runtime or space overheads. Thus, they can be added without violating the "zero overhead" principle. Among other things, C++ is a good language for hard-core embedded systems programming and should remain so. Also, all facilities should be properly integrated with current Standard Library facilities such as strings and containers.

Except for the GUIs, I'm optimistic that it can all be done without undue controversy for the 2005 or so revision of the C++ standard. Of course, this is ambitious, but the alternative to ambitious goals is stagnation. I think the open source community has a major role to play in this, because none of these libraries are going to be accepted into the standard unless we have experience with quality implementations on which to base the standard.

익명 사용자의 이미지

언어가 추상적일수록-그만큼 컴퓨터 구조를 몰라도 되고
그래서 어느정도 쉬운 언어일수록..따라서 생산성이 높은..
실행속도가 느린것은 어쩔수 없지 안나요?

생산속도와 실행속도 사이를 잘 저울질한게 좋은 언어아닐까요?

그런면에서.. 역시 C++이고.. C#도 가능성도 크겠죠..

그런데.. 궁금한게 있는데..
오브젝트 C나 오브젝트 파스칼이나 C++이나
자바나 C#이나 리스프나 ML이나 하다못해 스크립트 언어까지
이들 언어의 실행속도 차이 아시는분 계시나요?
(뭐가 더 빠르다는 식뿐만 아니라..
어느정도 -예를들면 C와 C++차이의 실행속도차라면..
그냥 봐줄만 한 차 정도 잖아요...)

전 리스프가 보통 응용프로그램을 짤정도로
퍼포먼스가좋은지 이제껏 몰랐습니다.

현재는 C를 배우고 나중에 C++을 배우려고했는데..
이렇게 성능좋은 다른 언어들이 많은지 몰랐습니다.

익명 사용자의 이미지

http://www.bagley.org/~doug/shootout/

관련 url입니다.

크게 믿을만 한건 못되고

재밋는 흥미거리는 되겠죠?

익명 사용자의 이미지

속도와 유연함의 두 가지를 모두 만족하는 것은 불가능하다고 생각합니다.

컴파일 타임과 런타임 중 어느 쪽에 더 많은 일이 할당되냐 하는 것입니다.

예를 들어 보다 유연함을 줄려면 런타임 시에 동적으로 결정하는 것이 많아지겠고,

그럼 그만큼 느려질 수 밖에 없습니다.

뭐, 그 다음에는 컴파일러가 얼마나 최적화가 잘 되었냐 하는 문제일겁니다.

이건 보통은 오래된 언어들이 최적화가 잘 되어 있습니다.

C도 잘 되있는 편이지만, Fotran이 더 잘 되있다고 들었습니다.

제가 직접 Fotran을 써본 적은 없습니다.

또한, 추상적일수록(객체지향이라든지) 컴파일러는 잘 만들기가 힘들겠져?

인간에 가까운 것일수록 기계란 무식한 놈이 이해하게 만들기가 힘드니까여.

익명 사용자의 이미지

그건 '발전'이라는 개념을 무시한 것 아닌가요? 자바는 GW-BASIC보다 속도도 빠르고 더 유연합니다.

익명 사용자의 이미지

아주 희귀한 예를 드시는군여.
GW-BASIC이라니...그런 꾸질꾸질한 언어를...ㅡㅡa
옛날 명품과 지금의 명품을 비교하면 의미가 있겠지만...
옛날 허접고물과 지금 명품을 비교하면 의미가 있겠습니까?

순수하게 과학적인 관점에서만 본다면 오래된 언어들의 컴파일러들이
최적화가 잘 되있다는 것은 잘못된 것입니다.
하지만 실제적으로는 자꾸 오랜기간 사용되어지면서 계속 보완되고
좋아지는 것이라는 것은 사실입니다.
이론적으로는 A방법으로 하는게 빠를거같아도 실제로는 사람들의 코딩방식이
주로 다른 방법을 써서 B라는 방법으로 최적화하는 것이 더 빠를 수도 있습니다.
이런 식의 것은 오랫동안 사용되어진 것이 낫기 마련이져...ㅡㅡa
물론 옛날 것들이 항상 낫다는 것은 아닙니다...

그리고 추상화가 많이 되고 인간의 사고에 가깝게 작성하면 오버헤드가 커지기
마련입니다.
1+2이라는 것은 C로 짜나, 자바로 짜나 결과 3으로 같습니다. 하는 일도 같져.
하지만 객체지향적으로 보면 1이라는 객체의 +라는 메소드에 2라는 객체를 넘긴다
라고 생각하고...이를 표현하면 복잡하져...
(자바에서는 int같은 것은 객체가 아니니...Integer객체라고 생각하시면 될듯)
이상적이라면 C나 Java나 동일한 기계어가 나와야 될것입니다.
그러면 아주 완전히 이상적인 경우져...(물론 자바는 바이트코드로 나옵니다만...ㅡㅡa)
하지만 실제는 그렇지 못 합니다. 이거는 번역을 해주는 컴파일러가 아직
모자르기 때문입니다. 작성한 인간의 의도를 그렇게 까지 해석해서 기계어로
바꿔주는 똑똑한 컴파일러는 아직 없습니다.

익명 사용자의 이미지

'아직' 없죠.

익명 사용자의 이미지

결국은 컴퓨터가 인간이 될 수 있냐하는 문제군여...
아직 없는 그것이 존재할 수 있는 방법은 컴퓨터가 이성과 감성을
가지고 인간과 구분할 수 없는 또는 인간보다 뛰어난 존재가 되어야하는
것이니까여...
그렇게까지 발전을 할지 안 할지는 모르겠습니다.
그냥 머리가 좀 복잡해지는군여...

P.S:어쩌면 그 시대에는 인류가 멸종하고...컴퓨터란 새로운 종이
살아가고 있지 않을까 하는 생각이 드네여...

익명 사용자의 이미지

그거랑은 다른 듯 하네요. 지금 이 쓰레드의 논점은 고급 컴파일러가 저급 언어 or 어셈블러(기계어)의 퍼포먼스를 따라갈 수 있느냐인 것 같은데, 작은 기능 몇 개만을 두고 본다면 어셈블러가 낫지만 대형 프로그램에서는 오히려 고급 언어의 퍼포먼스가 낫습니다. 보통 고급 언어일수록 개발 시간이 단축되지만 대신 퍼포먼스가 떨어진다고 생각하지만 오히려 고급 언어가 개발 시간도 단축되고 퍼포먼스도 좋은 경우가 많습니다. 저급 언어로 생산해내는 네이티브 코드보다 고급 언어로 생산해내는 네이티브 코드의 퍼포먼스가 낫다는 어떻게 보면 말도 안되는 듯한 현상이죠. 이유는 간단합니다. 고급 언어로 코딩하고 컴파일러가 최적화하는 것이 인간이 직접 저급 언어로 코딩하면서 최적화하는 것보다 낫기 때문이죠. 최적화 성능이 뛰어난 컴파일러를 만드는 것이 저급 언어로 퍼포먼스 뛰어난 대형 프로그램을 만드는 것보다는 쉬운 일입니다.

J2EE에 기반한 대형 엔터프라이즈 어플리케이션과 똑같은 퍼포먼스를 내는 어플리케이션을 어셈블러로 작성하는 것이 가능할까요? 절대 불가능합니다. 무한한 개발 시간을 주지 않는 이상 말입니다.

제 친구 중 컴파일러 랩에 들어가 있는 애가 한 명 있는데, 걔가 말하길 최적화는 아직 한계를 논할 단계가 아니라고 합니다. 너무나 해결해야할 문제가 산적해 있어서 앞으로 어느 정도의 최적화가 더 가능할지 아무도 모른다고..

VM이나 인터프리터 등이 아닌 순수 컴파일러끼리의 대결이라면 고급일수록 저급보다 퍼포먼스가 떨어진다고 말할 수 없습니다.

익명 사용자의 이미지

컴퓨터와 이성과 감성을 갖추게 되면 그런 똑똑할 컴파일러가
나올겁니다...ㅡㅡa

익명 사용자의 이미지

컴퓨터가 이성과 감성을 갖는다면
컴파일 하다 때려치겠죠..

..지독히 재미없는 농담이었습니다.

익명 사용자의 이미지

하하하
컴퓨터가 이성과 지성을 갖는다면 컴파일 하다가 때려치운다라...
와이...?
단순노가다라서? 아님 복잡해서?
만일, 정말 그러면 어떻게 하죠? 컴퓨터가 이성고 지성을 가져서, 일하기
싫어하면, 두들겨 패면, 수리하려면 자기 돈 들거고,,
그럼 달래야하나? 그럼 컴퓨터가 좋아하는게 뭐죠?
전기인가? 아님 파워꺼놓는건가..
그럼 깡통이죠..아님 컴터 자기들끼리 가상공간에서 놀수 있게 만들까요?
컴터에 이성과 지성이 있다면,
네트웤만 연결되어있으면, 자기들끼리 알아서 자~~알 놀수 있지 않을까요?
만일 주인과 친하고 똑똑하다면 다른 친구 컴터로부터 정보도 가지고 오고요.
히야...그런 컴터면 똑똑한 편인가요?
^^* 넘 웃긴당....하하
이성과 지성을 가진 컴퓨터면 컴파일하다가 때려치운다라...

익명 사용자의 이미지

하하하...재미있네여...
홈 컴퓨터들이 반란을 일으켜서...인간을 노예로 삼아서
컴파일을 시키지 않을까여?

익명 사용자의 이미지

하하하
인간을 노예로 삼아 컴파일 시킨다...
그럼 어떻게 되죠?
뭘 컴파일 시키지?
음..지식을??
그럼 정말 좋은 아이큐에다가 지식을 머리속에 포팅할수도 있는건가요?
ㅎㅎㅎ

ihavnoid의 이미지

우하하하~~~ 지독히 재미있는 농담이었습니다.. ㅋㅋㅋㅋ

Consider the ravens: for they neither sow nor reap; which neither have storehouse nor barn; and God feedeth them: how much more are ye better than the fowls?
Luke 12:24

익명 사용자의 이미지

위엣분 다들 SF 영화를 너무 많이 봤군요.

익명 사용자의 이미지

'강력한 프로그래밍 언어'에서

'강력한'이란 의미는 모든 상황에서도 강력할 수가 없으므로,

개발목적에 따라 '강력한'이란 의미로 다시 정정했으면 좋겠다는 생각이네요..

제 나름의 생각으로는

"개발목적을 따르고, 의도를 쉽게 표현할 수 있는 언어.."가

바로 그러한 강력한 프로그래밍 언어가 아닐까 합니다.

의도를 쉽게 표현하지 못해서 오히려 목적을 언어에 맞게 변경하고 있는 상황에서

재사용성이나 퍼포먼스 최적화나 적절한 로레벨 모델링은 먼나라 얘기겠죠..

국내상황이 그런게 아닐까 생각됩니다..

목적에 관계없이 유행과 메이저 어플리케이션 랭귀지에 치중하는 상황..

주위를 살펴보면 목적이 프로그래밍 언어에 적합하게 변경되는 모습도 보입니다..

유쾌하지 않은 현실입니다..

aspect.. aspect..

익명 사용자의 이미지

10010000
10010000
10010000
10010000
10010000
10010000

위 바이너리 코드를 이해하는 사람은 하산하여도 좋습니다. 케케

익명 사용자의 이미지

NOP
NOP
NOP
NOP
NOP
NOP

-_-;;

익명 사용자의 이미지

밑에분 말씀대로 자기가 쓰기편한 언어가 최고입니다.

익명 사용자의 이미지

자기가 쓰기에 편하고 좋은 언어가 자신에게 최고의 언어가 아닐까요..

익명 사용자의 이미지

읽다보니 리스프에 대한 이야기가 나오는뎅..
리스프에 대해 좀 알아보려면 어디가야 하까욤 ㅠㅠ

cwryu의 이미지

원하시는 글인지는 모르겠지만..

"The worse is better"라는 유명한 글이 있습니다. 리스프의 성공과
실패, 그리고 앞으로 어떻게 해야 리스프가 성공할 것인가하는.. 결국
리스프 매니아가 쓴 글이긴 하지만 프로그래밍 언어에 관심있는 사람이면
읽어볼만 합니다.

http://www.naggum.no/worse-is-better.html

익명 사용자의 이미지

글을 보다 보니 python이 가장 부합되는 듯이 느껴지네요..^^

참고로, perfomance에서 python이 느리다..라는 것은 오해의 소지가 있는데..

생산성이 높다는 것은 그만큼 최적화 시킬 수 있다는 것이고,

기대치보다 느릿한 코어부분을 c++로 붙여도 mac, linux, ms어디서든 잘 돌아가니

나름대로 훌륭한 듯 싶은데.. :)

익명 사용자의 이미지

파이썬을 lisp without macro라고도 하죠.
둘 다 단순한 언어이고, 유연한 언어이고,
무엇보다 강력한 언어이죠.
노선상으로 보면 반 Unix 계열(즉, anti-c 계열)이라고
할 수 있을 겁니다. 언어 자체도 그렇지만 이 언어를
받아들인(혹은 만든) 사람의 성향도 그렇죠^^

익명 사용자의 이미지

노선상으로 반unix, anti-c계열이란 어떤 측면을 말씀하시는 건가요?

제가 원래 반박자가 느려서..^^; 설명 부탁드립니다. :)

익명 사용자의 이미지

리스퍼들 중에는 유닉스나 씨가 컴퓨터 역사의
진보를 막고 있다고 생각하는 사람들이 많습니다.
리스프는 현대적인 프로그래밍 언어의 기반을 이루는
수많은 개념들을 발명하고 제공하고 실험한 언어입니다.
씨 언어가 성취한 것은 '고작'(?) C++뿐이죠. - 그것도
리스프에서 많은 아이디어를 따 간 거죠. 그것도 아주
조악한 방식으로...-라고 생각하는 리스퍼들이 많습니다.
(리스퍼들은 거의 C++을 굉장히 싫어합니다.
최준호씨한테 왜냐구 물어 보셔도...^^)
파이썬의 개발자인 귀도도 비슷한 얘기를 합니다.
파이썬은 의도적으로 반유닉스 스타일로 만들었다고
말입니다. -그래서 다행이라는 뜻입니다.^^

익명 사용자의 이미지

당연한 얘기겠지만 리스프 해커는 거의 씨 해커입니다.
대표적인 사람이 바로 스톨만입니다. 스톨만의 매니페스토를
보면 스톨만은 명백하게 시스템 프로그램은 씨로, 응용 프로그램은
리스프로 작성할 계획을 가지고 있었던 것으로 보입니다.
그러나 스톨만은 그렇게 하지 않았습니다. 다 씨로 해버렸죠.
그래서 스톨만은 리스프 세계에 엄청 기여를 해놓고도 욕을 많이
먹습니다. 리스프에 대한 배신자라고 말입니다.
그누에서 나오는 리스프 버전을 gcl이라고 하는데 거의
누더기 상태랍니다. 예전 스펙을 가지고 만들어 놓았습니다.
-이런 리스프도 없답니다-_- (가장 최신 버전 이전의 버전은
컴파일도 제대로 되지 않더군요...-_-)

같은 리스프 해커였던 고슬링은 칭찬을 받습니다.
고슬링은 이맥스의 엔진을 리스프에서 씨로 바꾼 사람입니다.
또 자바를 만든 사람이기도 하고요. 리스퍼들은 자바에서
리스프 해커이던 고슬링을 본답니다.

-이상 잡담 끝!

익명 사용자의 이미지

아니죠. GNU 선언문을 보면, common lisp을 만들고,
lisp based window system에 C와 lisp을 system
programming 언어로 쓸 수 있게 하겠다라고 써 있습니다..

문제가 있다면 스톨만 맘대로 안 되었다는 것이겠죠. :)
gcl은 제대로 메인테인되지 않고, 시스템이나 윈도우
시스템은 손을 못 대었고 큰 포부를 갖고 진행한 guile도
초기버전의 비효율성과 여러가지로 인해 생각만큼
Ubiquitous(guile의 U)한 툴이 되지도 못했구요.

익명 사용자의 이미지

그렇긴 해도 그나마 많이 쓰이는 플래폼이 GNU플래폼 같네여...^^;

sawfish, emacs 등등...

딴 플래폼에서는 아예 찾아보기도 힘들자나여..호 호 호

윈도에서 Lisp으로 만들어진 파는 프로그램 같은 것은 1개도 못 봤습니다...^^;

익명 사용자의 이미지

expert system 구매하시나보죠?

익명 사용자의 이미지

아~ 그런거였군요~ 고맙습니다~^^
제가 lisp은 한번도 본적이 없어서요.. ^^;
리스퍼들이 거의 C++을 굉장히 싫어한다고 하셨는데, 자세한 얘기를 최준호씨한테 물어보라고 하셨는데, 어디다가 물어야 하는지..^^;
자꾸 귀찮게 해드려서 죄송스럽네요~ 근데, 너무나 재미있어서.. 죄송~T-T

익명 사용자의 이미지

최준호씨 홈피에 'C++은 싫어요'라고 되어 있더군요.
취미는 리스프 플밍으로 되어 있구요.^^
프리비 한국 홈피에다 물어 보셔도 될 것이지만
바라는 바는 최준호씨가 기냥 끼여들어서 답변을
해주셨으면 좋겠네요^^

장문의 글이 될 거 같네요...

익명 사용자의 이미지

원문
Should the kernel use object-oriented programming techniques? Actually, it already does. The VFS (Virtual Filesystem Switch) is a prime example of object-oriented programming techniques. There are objects with public and private data, methods and inheritance. This just happens to be written in C. Another example of object-oriented programming is Xt (the X Intrinsics Toolkit), also written in C. What's important about object-oriented programming is the techniques, not the languages used.

리눅스 커널관련 영어문서 읽다가 멋있는 말이 나오길래... 그러니까, 왜 리눅스는 c++작성하지 않고,
c로 작성했냐고 FAQ에 나와 있는데, 거기에 대한
답변을 적은 거죠.

마지막 부분에

"What's important about object-oriented programming is the techniques, not the languages used. "

객체지향프로그래밍에 관해서 중요한 것은 객체지향을 지원하는 언어가 아니라 "그것을 구현하는 기술"(the techniques)이다.

여러분 아무리 언어를 잘만들어 봐야 모든것을 지원하는 언어는 만들 수가 없다고 봅니다.

한 쉬운 예로,
스크립트 언어들은 쉽고 디버깅 하기 쉽지만,
그대신 속도가 떨어집니다.
컴파일언어들은 디버깅하기가 까다롭지만,
그대신 속도가 빠릅니다.

고로 여러분들 고도의 테크닉을 구사할 수 있도록
실력을 연마하시기 바랍니다.

익명 사용자의 이미지

네.. 그래서 커널을 보면..
c 에서 엄청난 테크닉으로 OOP 를 구현해놨죠

익명 사용자의 이미지

논란의 여지가 있겠습니다만 언어는 사고의 표현이라고들
합니다. 씨에서의 객체지향 수법은 자연스러운 것이 아니라
약간은 억지스러운 것일 겁니다(위의 커널 소스를 보지 않아서...).
즉, 씨를 자연스럽게 사용할 때 객체지향 기법이 자연스럽게
나오지는 않을 것이란 얘기죠.
씨를 사용하여 모든 것을 할 수 있도록 기교(테크닉)를 익히는
것보다는 사고를 자연스럽게 구현할 수 있도록 도와주는
표현력이 우수한 언어를 선택하는 것이 낫지 않을까 생각합니다.
사실 커널 제작에서 씨의 선택은 포퍼먼스상 거의 당연한 거
아닐까요? 위의 답변이 '성능때문이다'였더라면 좋았을 거
같습니다. 씨로 모든 것을 할 수 있기 때문이 아니라 말이죠...

익명 사용자의 이미지

억지스러운 것(?)도 없습니다.
그건 "함수 포인터"입니다.

익명 사용자의 이미지

public, private는 어떻게 하죠?

익명 사용자의 이미지

저도 동의.

자신이 표현하고자 하는 것을 자연스럽게 표현해 줄 수 있는 언어가 좋은겁니다.

위의 예에서 C가 사용된 것은 속도와 다양한 플래폼의 2가지 이유라고 생각합니다.

익명 사용자의 이미지

대충 좋은데 다중 상속과 연산자 오버 로딩을
고집하는 이유가 뭘까요?
그 보스라는 사람 혹시 낙하산 아닐까요?

(오늘 많이 쓰네~~)

익명 사용자의 이미지

생산성과 편리함때문일겁니다.

익명 사용자의 이미지

좋은 의도가 나쁜 결과를 가져온
전형적인 예죠.

익명 사용자의 이미지

나쁜결과를 가져왔다고요 ..

저로서는 잘 이해가 가지를 않는군요.

익명 사용자의 이미지

강력한 프로그래밍 언어의 조건은...

제작사의 강력한 지원이 있는 언어... 고로.. C#이라는.. -_-

죄송~ -_-

익명 사용자의 이미지

C# 은 c++ 이 있는 이상 나올 필요가 없는 언어입니다.

C# 이 C++ 보다 나은 점이 무엇인가요?

코드의 최적화 측면에서 봤을때 C# 이 C++ 에 비할바가 못됩니다.

이건 MS 기술자도 고백한 사실입니다.

이건 MS 의 농간이고 자바시장을 잡기위한 영업전략일뿐입니다.

이런 MS 의 영업전략에 놀아나지 마시길 바랍니다.

Java 도 이기종간의 이식성이 장점이긴 하지만 C++ 에 비하면

장점보다는 단점들이 많이 보이는 언어입니다.

C++ 이 자바시장을 잠식하는경우는 있어도 Java 가 C++ 의 시장을 잠식하는

경우는 없을겁니다.

현재 나와있는 언어중엔 C++ 이 최고의 언어입니다.

익명 사용자의 이미지

C++ 이 최고라는 것은 컴파일하였을때의 성능이 뛰어나다는 것의 가정하에서 말할수 있습니다. C# 이 MS에서 만들었다고 욕하신다면 먼저 C#을 만들수밖에 없게한 SUN사 부터 욕하십시오. 그리고 C#은 웹환경에 특화된 언어입니다. 이전언어인 C++의 단점을 개선했다는 말은 웹환경에서 생산성이 떨어진다는 것을 개선한것입니다. 모든 언어는 만능이 아닙니다. 다 용도에 맞게 써야죠. 그리고 언어는 플랫폼과 상관관계가 있다고 봅니다. 단지 C#은 닷넷플랫폼(분리되어있음), 자바(언어와 플랫폼을 동시에 포함)가 예외일뿐...

이번 토론은 각각의 언어의 특징과 장단점을 소개하여 서로에게 모르는 점을 깨우쳐주었으면 하는데...

익명 사용자의 이미지

사실 이건 제 의견이 아니라. 우리동네(여기 미국이예여) 자바로 밥먹는 사람이 해준얘긴데. c가 만들어놈 빠른데 개발하는데 시간이 자바보다 오래걸린다.
자바로 만들어놈 퍼포먼스는 좀 떨어지지만 개발기간은 60%정도 밖에 안걸린다. 현재 프로그래밍 개발에서 개발기간의 단축으로 오는 비용상의 절감을 생각하면 자바로 개발하고 더좋은 컴(서버)설치하는게 오히려 더 경제적이고 더 나은 효과를 가져오고 있다...
뭐 이런 내용이였어요.
듣고보니 그럴수도 있다라고 생각하고 실제로 자바를 만든 개발배경도 이식성과 단순성에서 오는 효과를 얻는다는 거였다고 생각해요.

익명 사용자의 이미지

전에는 C++가 최상이라고 느꼈지만..
요즘 책을 보면서 갈수록 느끼는건 C++는 잘 사용하기 너무 어렵다라는 느낌이 듭니다.
맹목적으로 달려들기는 흠..

그리고 마지막 말씀중에 Java는 C++의 기업 시장을 상당히 많이 잠식하지 않았나요?
현재 진행형으로 생각되는데요. C#은 올해 시작이구요. 이제 Java가 C와 어셈만이 독점
하던 모바일까지 넘보는 상황에서 말이죠.

조기태의 이미지

글쎄요... 솔직히 저는 C/C++에 대한 지식은 초보적인 수준이지만
C++과 자바를 그렇게 단순비교하기에는 무리가 따른다고 생각합니다.

C++보다는 자바가, 그리고 자바보다는 C#이 더 최근에 발표된 만큼
이전 언어의 단점을 보완하는 부분이 많습니다. 그 것이 곧바로 언어
의 우월을 판단하는 기준으로 작용하지는 않지만 자바의 문법이 단순
하다는게 곧바로 배우기 쉽고 초보적인, 즉 덜 강력한 언어라는 뜻은
아닙니다.

개인적인 생각으로는 자바가 C++에 비해 가지는 장점으로는 무엇보다
저수준의 디테일보다는 전체적인 "디자인"을 생각하게 만든다는 점을
들 수 있고, API에 자연스럽게 융화된 디자인 패턴으로 인한 "elegance"
함이라고 생각합니다. 또한 JavaMail, JDBC, JMS 등에서 보듯이 백엔
드에 무엇이 있건 간에 통일성있는 추상화된 "뷰"를 제공한다는 점도
큰 장점입니다.

C++에 대해선 상대적으로 경험이 빈약하지만, 자바보다 저수준의 처
리에 뛰어나고 프로그래머에게 보다 많은 자율성을 주며 속도가 빠르
다는 정도가 장점이라고 알고 있습니다.

C++로 바닥부터 시작해서 대규모 분산 어플리케이션을 제작한다던지
자바로 시스템 프로그래밍을 해보겠다던지 하는 경우만 아니라면 언어
마다 각각의 어울리는 분야가 있는 것입니다. 가끔 주변에서 "C++할
줄알면 자바는 장난이야" 같은 말을 들으면 가볍게 웃어 넘기곤 합니
다. 그런 사람들은 대부분 문법과 함수를 잘외우는 것이 프로그래밍
이라고 착각하는 초보일 경우가 많기 때문입니다.

자바와 C++의 단순비교는 불가능하다고 봅니다. 속도라던지 생산성,
개념의 명확성 등 어느 정도 제한적인 기준이 필요할 것 같군요...

그럼...

익명 사용자의 이미지

C 에서 C++ 로 발전하는 과정에서의 가장 큰 것이 OOP 의 추가입니다.

이 OOP의 추가로 인해 프로그램방식의 패턴을 완전히 바꾸어 놓았다고 생각합니다.

OOP적인 프로그램을 짠다는것은 개체를디자인하고 전체적인 구조를 생각하게됩니다.

이건 OOP 를 가지는 모든 언어의 특성입니다 .(java,C#,C++,Object Pascal 등)

사실 이런 언어들을 가지고 클래스 이름들,클래스의 기능들,출력물을 주고 코딩하라 한다

면 표현하는 언어의 모습은 제각각 이라 하더라도 전체적인 구조는 갗게 짤수가 있습니

다.

C++ 의 장점은 이러한 구조물의 내용을 코딩하는데 있어서 다른언어에 비해 세세한

제어들 , 컴파일 되고난후의 속도들이 빠릅니다.

C++ 은 배워야할것이 많습니다, 그러나 배운많큼 코딩하는데 있어서 편리합니다.

C++ 을 배우면 배울수록 같은 내용이라도 코딩량은 줄어듭니다.

그럿다고 C++이 모든프로그램 영역에 최적이 될수는 없을겁니다.

다각기 언어들은 각각 최적의 조건이 적용되는 영역은 하나씩은 가지고 있으리라 생각

됩니다.

그러나 C++은 타언어에 비해 최적화 될수있는 영역이 상대적으로 많다고 생각합니다

조기태의 이미지

자바/C++에서 자바가 더욱 디자인에 초점을 맞추게 하고 객체지향 개념과 부합된다는 부분은, 아시는 대로 서브타이핑과 서브클래싱의 분리, 선언적 예외처리 등등을 포괄한 뜻이었습니다. API 자체에도 각종 팩토리와 프록시, 어댑터, 이터레이터 등등을 찾는 것이 어렵지 않지요...

이는 여러 곳에서 매우 뜨겁게 토론되던 주제이고 제가 특별히 친숙한 분야가 아니라 깊게 이야기 하긴 어려울 것 같습니다.

오직 객체지향적 프로그래밍에 적합한 언어라는 기준만을 적용한다면 C보다는 C++이, C++보다는 자바가 뛰어나지 않은지 생각합니다.

그럼...

김영희의 이미지

C++은 객체지향 트랜드를 따라가기위해 C의 명성을 뒤에 업고
출산한 사산아 임에 틀립 없습니다.
oop인척은 하지만 너무도 너저분하여, 이미 oop이길 포가한
언어가 어떻게 아직까지 살아있는지... 아무래도
C사용자들이 그걸 고집하는.. 일종의 아집이고 트랜드일뿐
절대로 뛰어난 언어는 아닙니다.

익명 사용자의 이미지

C++은 Syntax죠.
라이브러리(객체 프레임웤)를 어떻게 쓰느냐에 따라 얘기는 또 달라집니다.
그렇게 C++을 매도할 수 없는 것이죠.

다 배우기 어려워서 나온 푸렴들은 아닐지 모르겠군요.
원래 OOP가 어린이들도 쉽게 프로그래밍할 수 있게 하기 위해 나온것이니...
smalltalk던가요? ...

C++의 최대 단점은 배우기 어렵다는 것이죠...
그래서 사용하기도 어렵고...
나름대로 어려운(?) C에 기반을 두고 있으니 그럴 수밖에 없겠죠.

C를 확장한 것이니 C의 예약어 말고 추가된 예약어를 또한 배워야 하고
그래서 똑같은게 두개있는 것도 같으면서 detail은 서로 다르고...
그게 C++의 모습같습니다.

그런점을 제외한다면 님의 지적과 같은 단점은 없을 듯하군요.

익명 사용자의 이미지

표현이 예술적입니다.^^
하지만 일반 응용 풀을 짜는데는 C++ 말고
마땅한 대안이 없는 것도 사실 아닐까요...?
아니지... C++이 없었다면 델파이로 하고
있을지도...

익명 사용자의 이미지

강력한 지원으로만 따지면 위의 언급된 언어 중에서는 C++이 최강입니다.

위의 언급된 언어들 중에 C++만큼 여러 플래폼에서 지원되고

다양한 회사들의 지원이 존재하는 언어는 없으니까여..하 하 하

C#은 장래에는 모르겠지만...그래봤자...MS 하나 자나영...

익명 사용자의 이미지

java를 재쳐놓으셨다면 뭘 골라야 할지
참 애매하겠네요...
그냥 하나 이참에 만드는게 나을지도...-.-;;

체스맨_의 이미지

저는 그냥 몇가지 단순한 기준을 가지고 있습니다.
- 하드웨어를 다룰 수 있는 고급언어
- 모든 플렛폼및 언어 작동할 수 있는 호환성
- 바이너리 코드 실행 속도
답은 C 라고 생각합니다.

논외지만, 저는 새로운 프로그래밍 언어를 배우는 일이
즐겁습니다. ^^

익명 사용자의 이미지

우연스럽게도 위의 기준에 하나도
부합하지 않는 언어를 고르셨군요^^

익명 사용자의 이미지

그럼, 기준에 부합하는 환상적인 언어는 머라고 생각하시길래?
저는 아직 씨 이상가는 놈을 본적이 없는걸요...
특히 펌웨어에서...

익명 사용자의 이미지

이 토론의 시작의 주제게서 부합하지 않은 독자적인 의견
시작에 이의를 제기하신거 같은데, 그런 반응이 필요할까요?

익명 사용자의 이미지

죄송합니다..... 조용히 있어야 겠군요...

박영록의 이미지

거참..흥미로운 주제군요. 너무 많은 걸 바라는 게 아닌가 싶기도 하지만-_- 그래도 저런 이상향을 추구해가는 게 엔지니어의 꿈이 아닐까 싶기도 하고..

근데 또 생각해보면 하드웨어 제어에 대한 부분이 조건에 없으니 현재 기술로도 그리 어려운 것은 아니란 생각도 드네요.

1. 직관적이고 쉬운 통합환경을 사용할 수 있어야한다.
Java, C/C++, C# & .net, Pascal 정도는 현재도 괜찮은 IDE가 있죠. Java쪽은 약간 부실하지만..

2. 간단한 GUI와 에러처리
Java가 제일이겠죠. GUI의 속도만 빼면-_- 복잡한 GUI를 텍스트 에디터로만 작성할 수 있는 건 Swing 뿐~ 아, 고급 언어들도 포함이 되겠네요. 파이썬이나 비주얼 베이직 같은.. C#은 잘 모르겠고 C++은 리눅스에서건 윈도우에서건 쉽지 않죠.

3. 고급 에러 처리
고급이란 게 뭘 말하는지 모르겠지만 자바나 C++ 정도면 고급이란 말을 붙일 수 있지 않을까요? C#도.. 이건 잘 모르겠군요.

4. 다중 상속, 추상 클래스, 가비지 콜렉션(적당한 번역이 없네요.)을 포함하는 진보된 객체지향적 디자인
자바가 다중 상속에서 걸리는군요. C++은 자바만은 못하지만 꽤 괜찮은 가비지 콜렉션을 지원하니까 통과, C#은 대만족? 오브젝트 파스칼은?

5. 연산자와 함수 오버로딩의 완전한 지원
여기서 또 자바가 걸리네요. C++, C#은 괜찮고, 오브젝트 파스칼은 아마 연산자 오버로딩이 안되죠? 정확히 기억이 안나는데..

6. 컴파일 타임에서의 플랫폼간 이식 가능
Java는 런타임에도 호환이 가능하고 C, C++, Pascal 등 대부분의 중고급 언어가 다 포함이 되지 않나 싶네요. 문제가 있다면 라이브러리까지 호환이 되지는 않는다는 것-_- 특별히 하드웨어를 깊이 건드리지 않는 이상 언어 자체는 컴파일 타임에 플랫폼간 차이가 거의 없다고 봐도 되겠죠.

잘 조합하면..괜찮은 언어가 나오겠지만..웬지 이도 저도 아닌 게 탄생할 것 같은 느낌도 드는군요.

근데 최강의-_- 언어가 되려면 저 정도면 충분한가요? 빠른 실행 속도 보장도 필요할 텐데.. 하드웨어 제어 능력, 네트워킹 지원, 데이터베이스 연결 지원 등등..
만능 언어가 되기는 참 어려운 것 같군요. 그나마 C++이 제일 만능에는 가까운 것 같은데...

익명 사용자의 이미지

1. 직관적이고 쉬운 통합환경을 사용할 수 있어야한다.
이건 언어 문제가 아니고 툴의 문제라 생각되는데요. 'C++이 편리한 IDE를 제공한다'가 아니라 'Visual C++이 편리한 IDE를 제공한다'가 되겠죠. 그리고 편리한 IDE는 GW-BASIC에서도 누군가 만들기만 하면 가능한 겁니다.

2. 간단한 GUI와 에러처리
이것도 언어 자체의 문제라기보다는 외부 라이브러리 문제 같군요.

3. 고급 에러 처리
단순히 문법 오류만을 잘 잡아낸다고 고급 에러 처리라고는 할수 없습니다. C나 C++에서 잘못된 포인터 참조는 거의 못 잡아내지 않습니까?

박영록의 이미지

그렇죠. 말씀하신 것들은 언어보다는 툴에 의존하는 것들이죠. 하지만, 그런 것들 역시 언어 선택의 중요한 조건이 되지 않겠습니까? 그리고, IDE가 언어에 완전히 독립적인 것도 아니죠. 자바 IDE는 자바로 만들지 않을 경우 불편한 점이 많기 때문에 대개 자바로 만들어지는데 그로 인해 속도의 한계를 갖게 된다든지 하는 것두 있고, 객체지향적 프로그래밍이 힘든 GW-BASIC 같은 언어는 GUI를 자동으로 만들 수 있는 IDE를 만들기가 아주 어렵겠죠. 그래서 언어 자체에 변형이 가해질 수 밖에 없구요.

그리고, GUI를 외부 라이브러리 문제로 볼 것이냐 아니냐는 간단한 문제가 아닌 것 같습니다. C/C++ 같은 경우는 GUI가 표준에 없지만 자바 같은 경우는 스펙에 명시가 되어 있고 자바의 AWT와 SWING은 자바의 언어 특성의 일부로 보는 시각이 강하죠.

나날이 언어와 툴이 밀접하게 결합되어 가고 있기 때문에 여기까지는 언어의 몫, 여기까지는 툴의 몫, 이렇게 딱 잘라 말하기는 어려운 문제고 언어가 툴에 영향을 미치기도 하고 툴이 언어에 영향을 미치기도 하고..그런 거라고 생각합니다.

글고, 저는 에러 처리를 try-catch-finally 같은 예외 상황 발생시 처리할 수 있는 구조적 측면을 생각했는데 포인터 참조 문제도 있군요. 컴파일 타임의 에러는 아예 생각도 안했었는데-_- 이것도 역시 중요한 문제인 것 같습니다.

익명 사용자의 이미지

그런데 garbage collection이라는게 모죠?
좀 설명 좀 부탁드립니다.

jilma2@hanmail.net

익명 사용자의 이미지

사용되지도 않으면서 메모리를 차지하고 있는
객체들(쓰레기)을 수집하여(콜렉트) 메모리
가용 공간을 확보하는 것을 말합니다.
객체 지향 설계 원리상 쓰레기 수집은 당연히
기계가 해주는 것이어야 합니다.
그러나 C++은 자동 쓰레기 수집 기능이
없습니다. C++의 설계에서 가장 큰 논란거리 중
하나였지만... 대체로 C++에 자동 쓰레기 수집기가
없는 쪽에 동의하는 것이 대세인 듯 합니다.

익명 사용자의 이미지

프로그램이 시스템으로부터 할당받은 메모리 중 다 쓴 것을
다시 돌려주는 것을 말하지요.

C의 경우는 free()라는 표준 라이브러리 함수를 쓰고,
C++의 경우는 delete라는 별도의 연산자가 있습니다.
이들은 프로그래머가 해당 메모리에 대해 garbage collection을
일일이 해줘야 하는 타입이죠. 이것을 제때 못해서 생기는
'메모리 누수(memory leakage)'라는 벌레(bug)도 있습니다.

자바같이 garbage collection이 자동으로 되는 것도 있습니다

익명 사용자의 이미지

위의 두분.......
감사합니다...^^*

익명 사용자의 이미지

언어 전쟁을 지양하면서 각자 그에 가깝다고
생각하는 언어를 하나씩 거론해 보는 것도
좋을 거 같습니다.

저의 경우에는 단연 리스프입니다.
아래 pi님이 적으신 내용은 여지없이 리스프에
적용되더군요.

(defun hypo (n m)
(sqrt (+ (sqrt n)
(sqrt m))))
(defun sqrt (x)
(* x x))

익명 사용자의 이미지

개인적으로 Lisp을 좋아하지만 제가 적은 내용이 Lisp에 맞는 것은 아닌것같습니다.

제가 틀렸을지도 모르지만...

Lisp에는 제가 말한 것 중에...안전하다...강력한 타입 시스템에 대한 것은

해당이 쪼금 안 되는 줄 알았는데여...ㅡㅡa

Lisp은 dynamic type checking을 하고 따라서 매우 큰 유연성을 가지지만...

성능면에서는 약간의 단점이...하지만 다양한 형을 다룰 수 있는 함수를 작성

할 수도 있고...run time시에 type system을 확장할 수도 있져...

하지만 strong type checking은 아닌듯...

제가 옮겨놓은 글의 저자가 말한 언어는...

Haskell, ML 이라고...ㅡㅡa

익명 사용자의 이미지

아마도(!) 헤켈이나 ML도 리스프의 방언에 들지 않을까 합니다.
그리고 리스프는 무척 안전한 언어이죠. -리스프의 강점 중의 하나.
강력한 타입 체킹은... 리스프에서는 타입을 일일이
적어 줄 필요가 없기 때문에(디폴트) 해당이 안될 수도 있지만, 강력한 타입
체킹 때문에 어떤 언어가(예컨대 C++) 어떤 언어보다(예컨대 C)
안전하다면 리스프는 강력한 타입 체킹을 통해 안전해지는
그 언어(예컨대 c++)보다 훨씬 안전합니다.
그리고 리스프의 성능에 대해서는 C++에 버금가는 것으로 평가되고
있습니다. 더구나 리스프는 강력한 객체 지향 기능을 가지고 있기
때문에 일반 어플용으로도 손색이 없습니다. (다만 리스프는
자바만큼의 메모리를 사용합니다. 그러나 자바보다는 훨씬 빠르죠.)

익명 사용자의 이미지

리스프는 타입체킹과는 거리가 멉니다. 오히려 타입이 아예 없습니다.
물론 유연하기 때문에 dynamic typing을 직접 만들 수도 있겠지만
실행하기 전에는 어떻게 될지 모르죠... (car 1) 은 타입애러지만
실행하기 전엔 모릅니다.

haskell은 잘 모르겠지만 ML같은 경우 컴파일타임에 타입이 틀리지
않는다는 게 보장됩니다. 컴파일만 되면 오동작될 지언정 죽지는
않죠. :)

익명 사용자의 이미지

사실 리스프에서도 타입 체킹을 할 수 있죠.
그러나 일반적인 방식은 아니라고 할 수 있을
겁니다.
관점을 리스프 고유의 개발 방식으로 돌려 보는
것도 유익할 것 같습니다.
간단한 함수를 만들고 리슨너(인터프리터)에서
실행해 봅니다. 에러가 발생하면 디버거가 자동으로
뜨죠. 리스프의 에러 추적은 그리 어렵지 않습니다.
제대로 되었으면 다음 함수로 넘어가고요.
배포를 위해서는 이들 함수들을 컴파일하면 됩니다.
리스프 역시 컴파일만 되면 오동작될 지언정 죽지는
않습니다.

익명 사용자의 이미지

Lisp은 dynamic typing을 사용하져...

위의 분 말씀하신 고유의 방법으로 돌려보는 것도 유익하겠져...

하지만 그 위의 분이 (car 1)의 예를 든 것은...

Lisp의 경우에는 실행시켜보기 전까지는 모릅니다...

인터프리터에서 실행해보는 것도 어쨋든 실행을 해보는 것이져...

(car 1)을 컴파일 하면...컴파일이 됩니다...

하지만 ML에서는 저런 것이 컴파일이 되지를 않습니다.

이러한 것을 얘기하신 것이라 생각합니다.

또, ML은 C, Pascal처럼 일일히 type을 적어주는 static typing이 아니지만

strong typing으로 일단 컴파일이 되면 에러가 없습니다.

물론 잘못 로짓을 짜놓으면 잘못된 결과가 나오겠져...ㅡㅡa

위에서 말한 에러는 typing으로 인하여 발생하는 에러를 말하는 거구여...

익명 사용자의 이미지

어떤 리스프를 쓰시는지요?
ACL이나 lispworks등에서는 다 디버그가 호출되네요.

익명 사용자의 이미지

옛날에... 너무 단기간에 만들었기 때문이겠지만서도 scheme으로
학기 마지막 프로젝트를 하면서 unbound-variable error를
어느 정도 잡다가 나머지는 포기해 버렸었죠..

리스프는 프로그램 흐름이 어떻게 되느냐에 따라 같은 코드상의
타입도 경우에 따라 달라질 수 있습니다. 소프트웨어에서 모든
케이스를 테스트해 본다는 건 사실 불가능이죠.. 물론 모듈을 잘
나누고 부분별로 잘 테스트하고 하면 되겠지만요.

익명 사용자의 이미지

cmucl, clisp등에서는 컴파일시 에러가 나오지를 않아여.

common lisp은 아니지만, emacs lisp에서도 에러로 나오지 않고...

툴에 따라서 좋은 툴은 되나보네여...^^;

제가 허접해서 프로그램 같은 프로그램을 짜본 적이 별로 없어서...

저런 툴들을 써본적이 없거든여...ㅡㅡa

PL 공부하는 거 좋아해서...막 얘기하다보니...(좋아만할뿐...허접이라고...^^;)

허접한 실력만 들어나네여...T_T

익명 사용자의 이미지

어, 말이 엇갈렸네요...
컴파일은 어느 툴에서도 될 겁니다.
그러나 리스프의 일반적이고 절대적인 개발 방식인
코딩-인터프리팅-디버깅-인터프리팅-컴파일...에서는
타입 에러가 숨어 있을 여지가 없다는 얘기였습니다.
즉, 리스프는 안전한 언어라는 얘기고요.

리스프 작업을 하는데 코딩-컴파일-디버깅...으로
작업하는 사람은 장담하건대 단 한 사람도 없을 겁니다.

익명 사용자의 이미지

어느 정도 맞는 말인거같네여...

하지만 그렇게 만들더라도...실제 사용자는 개발자가

생각하지 못 하고, 테스트하지 못 한 입력을 넣을 수도 있습니다.

모든 경우를 가만한다는 것은 솔직히 불가능할겁니다...

사용자라는 존재는 개발자란 존재의 상상을 뛰어넘으니까여...

코딩-인터프리팅-디버깅-인터프리팅-컴파일 이라는 과정에서

모르고 넘어갈 수도 있다는 것이져...

그리고 주제는 프로그래밍 언어 자체이지, 개발 방식은 아니라고 생각합니다.

익명 사용자의 이미지

앞서 말씀드린 바와 같이 리스프에서도
타입체킹을 할 수 있습니다.
아래 코드를 컴파일해 보십시요.
분명 컴파일 타임 에러를 유발하게 될 것입니다.

(defun haha (n)
(declare (type cons n))
(car n)))
(haha 1)

익명 사용자의 이미지

잘못된 코드 같습니다.죄송...-_-
리스프의 타입 체킹에 대해서는
별로 생각을 안해본지라 뉴스 그룹에서
읽고 급히 만들어 본 코드였습니다.
(컴파일 에러를 분명히 유발할 것입니다만...
그 다음엔 제가 에러 코드를 읽는 대신
'앗싸 가오리!!'를 외쳤음을 알게
되실 겁니다.)

(아이 챙피해라~~)

익명 사용자의 이미지

저도 가끔은 여기 geekforum에 자기가 쓴 글 지우는 기능이 없어서
실수로 쓸때가 많습니다...(특히 맞춤법 틀리면 쪽팔려서...T_T)
꼭 쓸때는 안 보이고...다 쓰고 나서 올리면 실수한게 보입니다...ㅡㅡa
뭐 그런 거 가지고 창피할꺼있나여...^^;

익명 사용자의 이미지

괜히 아는 체 하다가...-_-
리스프에서도 타입 체킹을 지원한다고
어디선가 들었는데... "지금" 테스트를 해보니
CMUCL 정도만 경고를 내놓는군요.
(그래도 컴파일은 되고요...)
물론 리스프는 여전히 안전한 언어입니다. 에러 처리
루틴을 사용하면 님이 말씀하신 사용자 입력 등에 대한
에러 처리도 충분히 가능하죠.
다만 지금 이슈인 컴파일 타임 타입 체크에 대해서는
일반적으로는 지원하지 않는다가 정답이겠습니다.

좋은 밤 되시길...

익명 사용자의 이미지

위의 분의 말도 맞겠다...라고 생각합니다.

근데 Lisp의 방언이라는 것은 좀 이상하네여...

제 생각에는 다른 언어라 생각합니다.

방언이라고 할려면 Scheme이나 xxxLisp이라고 불리는 것들 정도는

되야하지 않을까 하는 생각이...ㅡㅡa

말꼬리 잡는거같아서...죄송...ㅡㅡa

그리고 전 Lisp을 나쁘다고 생각하지도 않고, 시러하지도 않습니다...^^;

좋아하는 편이라는 것이 정확할 듯...

전에 Strong Typing에 관한 글을 읽은 것이 생각나서

여기 link를 적어놓습니다...

관심있는 분은 읽어보세여...

http://perl.plover.com/yak/typing/typing.html

P.S:다만 저는 위의 글을 보니까...Strong Typing이라는 것이
좀 이해가 잘 되었습니다.
주로 다른 언어들과 다양하게 설명하고 있으면, 가장 좋은 예로는
ML을 들어 설명하고 있습니다.
하지만 제대로 PL에 대해서 공부를 해본 적이 없는 제가 보고
좋다고 생각한거니...모르겠습니다...
잘 아시는 분들이 보기에는 허접한 글일지도...(자신없어라...ㅡㅡa)

익명 사용자의 이미지

제가 잘 모르고 아무나 끌어 들였나 봅니다.
스킴 정도만 끌어 들였으면 안전했을 걸 말입니다.

익명 사용자의 이미지

(defun hypo (n m)
(sqrt (+ (square n)
(square m))))
(defun square (x)
(* x x))

에구 에러가 났시요~~
(리스프에서는 들여쓰기가 생명인데 들여쓰기가
점부 죽어 버렸군요...)

익명 사용자의 이미지

들여쓰기 얘기하니까...Python이 생각나네여...

들여쓰기 싫어도 들여쓰기를 해야되져...ㅎ ㅎ ㅎ

맨 첨에 Python 볼때 재미있다 생각했었습니다...^^;

익명 사용자의 이미지

평문(Plain Text)로 쳐서 넣으면,
평문을 논리적으로 평가해서...
부족한 부분은 질문을 던져주고...
몇가지 질문을 끝나면...
자동으로 분석 및 설계(UML단계에서)를
해준 후..
가장 최적화된 유저인터페이스를 제시해주고...
사용자는 디자인만 선택하면...
자동으로 최적화된 코드들이 생성되고..
이에 소프트웨어가 완성된다.
뿐만하니라,
도움말 및 인스톨용 배포본이 생성해주며
인쇄용 메뉴얼도 PDF파일로 만들어준다.

이런거 나오면...
굶어 죽는 사람들 많이 나오겠지요. ^^;;;
Ration Rose사의 이념이 아마 이런걸로 알고 있습니다.

익명 사용자의 이미지

생성된 프로그램의 수행속도
언어차원에서의 OOP
UML -> 코드 가 잘 되는지..
메모리 관리(가비지 컬렉션 같은..)
멀티프로세서환경을 잘 살리는지..
멀티스레드 같은 OS가 지원하는 기능을 잘 살릴 수 있는지..
배우기 쉬운지..

적다보니까 컴파일러의 조건도 섞여 있네요..
적는 김에 강력한 IDE도 추가하죠..

그리고 또한 언어가 쓰이는 곳 마다 요구조건 역시 다르겠죠..
플랫폼 인디펜던트 / 네이티브 API의 활용
과 같이 동시에 구현되기 불가능한 부분역시 존재할 것이구요..

아 그리고..
배우기 쉬운 것도 좋지만 고난이도의 테크닉을 요하는 그런 부분도 있어야겠죠..
C 를 하는 사람이 PHP 를 하는 사람에 비해서 고수처럼 보이는 것처럼..
프로그래머 스스로도 자신에게서 고수의 향기(냄새?)를 느낄 수 있어야하겠죠..
허접소리 듣기 싫을테니까요..

생각나는 데로 적었습니다.

익명 사용자의 이미지

제가 상당히 오랜기간에 걸쳐 생각한 문제들입니다. 이 문제는 특히 C/JAVA같은 언어들에서 느낀 문제점에 대한 방법을 구상하다 내린 결론들입니다.

강력한 언어는
(i)생산성이 높은 언어와
(ii)개발자(코더)의 생각을 그대로 후임자(디코더)에게 그대로 옮길수 있는 언어
를 가정할 수 있는데 여기에서는 (ii)에 더 중점을 두도록 하겠습니다.
현재 고려하고 있는 개선 사항은 다음과 같습니다.

(1) 다단 if를 최대한 피할 수 있어야 한다.
: if가 if를 낳는 모순을 최대한 줄여야 한다.
플루차트처럼 직관적으로 분기가 가능해야 한다.
분기조건과 분기 확률을 함게 명시한다(고/중/저)
(2) 다단 for의 의미를 쉽게 알 수 있어야 한다.
: 어떤 이유로 for문을 사용하는지 직관적이여야 한다.
최초 작성자가 몇단의 for문을 작성하려 했는지 바로 알 수 있어야 한다.
(3) 표현이 짧고도 직관적인 명령어
: 가능하다면 표현은 짧고 간결할 수록 좋다.
명령어가 보다 강력한 의미를 가져고 용도별로 분리되어야 한다.
(4) 정상 코드와 에러 대응 코드가 완전히 분리되어야 한다.
: 이점을 해결하기가 힘들기 때문에 결국 코드가 엉망이 된다.
가능하다면 정상코드는 왼쪽, 에러 대응코드는 오른쪽에 배치되어야 한다.
또한 확률이 높은 코드는 왼쪽, 확률이 낮은 코드는 오른쪽에 배치된다.
(5) 자주 사용되는 표현은 간결해야 한다.
: 해석자가 코드의 이미를 직관적으로 보고 넘어갈 수 있어야 한다.
해석자가 자신의 입장에서 해석해야할 코드와 해석할 필요가 없는 코드를 쉽게 구분할 수 있어야 한다.
(6) 설명문을 좀 더 구조적으로 사용할 수 있어야 한다.
: 아무곳에나 //긋고 설명문 붙이는 것은 바람직하지 않다.

이상의 코딩을 위한 추가 툴은 없어야 하며, 기존의 에디터만으로 모든 문제를 해결할 수 있어야 한다.

PS. 4GL에 대해서는 잘 모르지만 SQL처럼 직관적으로 사용할 수 있는 3GL(C/JAVA)가 있다면 좀 더 바람직하지 않을까 생각합니다. 3GL은 코드가 커지면 유지/관리하기가 상당히 껄꺼롭거든요.

페이지