닷넷의 언어중립성이 실질적으로 어떤 이점이 있나요?

youbit의 이미지

원래 주언어가 자바인데 요즘에는 C#을 공부하고 있습니다. 유사점이 많아 서로간에 새로 배우기가 쉽다고 하길래 말이죠(솔깃).
음... 그런데 닷넷 플랫폼의 특성을 읽다가 IL을 통한 언어중립성이라는 부분에서 고개를 갸웃하고 말았습니다. 언뜻보면 굉장히
좋아보이기는 하는데... 실질적으로는 무슨 이점이 있나하는 생각이 들더군요. 여러 언어를 지원한다고는 하지만 결국 하나의
메타언어로 표현되는 것이고 곰곰히 생각해보면 껍데기만 다를 뿐 속은 닷넷이잖습니까? 물론 기존의 개발자들을 가능한 거부감없이
새로운 플랫폼으로 유도한다는 상업적으로 매우 중요한 이점이 있겠지요. 제가 이해할 수 없는 건 '개발상의 이점'입니다.

아무리 겉보기 뿐이지만 개개인이 자신이 자신있는 언어로 진행하는 닷넷 프로젝트를 생각해보았습니다..... 잘 상상이 안가더군요.
통합에 아무리 문제가 없다고해도 하나의 프로젝트에 각자가 자신의 언어를 사용한다니... 의사소통 문제라던가 서로간에 소스를
공유할 때의 효율성에 문제가 있지않습니까? 개인적으로 이것저것 사용하기에는 재밌고 편할지 모르겠지만, 실무에서 언어중립성이
어떤 도움이 되는건지 궁금합니다.

그리고 부가적으로, 닷넷의 VM은 왜 그렇게 비대한가요? 자바는 플랫폼 독립성을 지키기위해 어쩌구 저쩌구... 할테지만 닷넷은
'윈도우'만 타겟으로 생각하면 될테니까 훨씬 더 최적화하고 뺄 수 있는 부분이 많을거라는 생각이 들던데요. (모노 프로젝트가 있지만
그건 그냥 오픈소스고, MS가 진심으로 윈도우 이외의 운영체제에 신경을 쓴다는 것은 도저히 믿을 수가 없군요)
당연한 걸지도 모르겠지만 윈도우 개발에 있어서 닷넷이 편리한 환경을 갖춘만큼 타 운영체제에 적용하기란 힘들거라는 생각이 들었습니다.

일단 '상황에 따라 필요한 도구를...'이라는 말은 좋지만, 실질적인 이점은 잘 모르겠습니다.
JVM을 사용하는 가장 큰 이유는 플랫폼 독립성인데 그게 목적이 아닌이상 왜 비대한 VM을 사용하는지 모르겠습니다. IL을 포기하고
GC나 C# 언어상의 간결함은 유지한 '진화된 MFC'를 만드는게 더 좋았을 것 같은데요. 그러면 닷넷이 아니라 Visual C#이 되겠지만
말이죠. 처음에는 그냥 그러려니 했는데... 공부하려다보니 '왜???'라는 생각이 뭉게뭉게 드는군요. 차근차근 가르쳐주시면 감사하겠습니다.

Scarecrow의 이미지

새로운 언어(문법)을 만들었을때
라이브러리까지 새로 만들 필요는 없다는 장점이 있을듯하네요.

익명사용자의 이미지

DLL도 여러 언어에서 사용할수 있죠..

Necromancer의 이미지

DLL은 프로세서에 종속됩니다. 즉 x86 DLL이면 x86머신에서만 알파DLL이면 알파 머신에서만
돌 수 있죠.

VM으로 돌리는 이유는 어떤 프로세서를 쓰든간에 한 바이너리를 수정없이 쓸 수 있도록
하는게 가장 큰 목적이죠. 자바가 나오게 된 것도 이런 목적이 있고요.

Written By the Black Knight of Destruction

Written By the Black Knight of Destruction

wish의 이미지

그냥 개념적인 차원에서, 여러 언어들을 교차 지원을 위한 인터페이스가 사방팔방에 있는 것으로 미루어 보아 하나의 기초에서 여러 언어를 구현하게 되면 교차 지원에 대한 부담이 훨씬 줄지 않을까요?

예를 들어 파이썬과 자바, 파이썬과 씨/씨플플, 파이썬과 펄에 대한 교차 지원을 각각 따로 만들어야 하지만, CLR 기반으로 3가지를 구현하면 일단 교차 지원은 걱정 안해도 되는 그런 구조일 것 같은데요. 적어도 윈도우즈 클래스 라이브러리는 통일적인 방법으로 접근 가능하겠죠.
물론 현재도 전부 C 인터페이스로 혼용하는 방법도 있는 것 같습니다만..

그리고 정적 언어와 동적 언어를 섞어 쓰는 것은 주변에서도 많이 본 듯 하네요~

익명사용자의 이미지

JVM에서 돌아가는 언어의 구현체만 백개 이상입니다.

질문자의 의도는 왜 윈도우에 최적화된 CLR이 그렇게 큰가... 정도 아닐까요?

meteors의 이미지

언어 중립성은 자바를 따라하다 보니 나온 결과일 뿐입니다. 뭔가 다른것 처럼 표현하려다 보니 그런 용어를 쓴 것 뿐이구요. 자바 환경도 공식적으로는 1개의 언어이지만 많은 언어들을 그 환경 위에서 구현하고 있습니다.

여러 언어를 실무에 쓸 경우 장점이 있을 경우도 있습니다. 특정 언어로 표현이 어렵거나 도구나 라이브러리가 불충분하거나 할 경우죠.
예를 들자면 인터프리터를 만들고자 할 때 C# 용으로는 적절한 도구가 별로 없습니다. 그 경우 C의 LEX/YACC, 자바의 JavaCC, 자바, C++의 ANTLR 같은 도구를 써서 다른 언어로 구현한 다음에 C#으로 UI쪽을 마무리 해 주면 되지요.

닷넷도 플랫폼 독립성이 어느정도는 필요합니다. 32bit Windows, 64bit Windows, Windows CE 계열에서 프로그래밍을 할 때 고려해 줘야 할 것들이 있거든요. CE 같은 경우에는 인텔 CPU만 꼭 쓰는 것도 아니구요. 또 앞으로 128bit Windows가 나올 수도 있지요.
또 자바만큼 편하게 지원을 안하면 시장을 자바에게 다 넘겨줘야 하기 때문에 자바의 라이브러리 대부분을 넣어줬지요. "자바에는 있는데 닷넷에는 없네.." 라는 말을 고객한테 들으면 영업 부문에서 싫어하겠죠.

seank76의 이미지

어떤 새로운 기능을 구현할때, 모든 언어를 다 신경쓰기보단 Framework만 업그래이드 해주고 랭귀지 상에선 정해진 프로토콜로 불러주기만 하면되니까 MS 개발자들로서는 엄청 편하지않을까요?

또 프로그래머 입장에서도 좋죠.
예를 들어 Vista의 기능들을 제대로 쓰려면 꼭 Visual C++만 쓰지 않아도 되니까요.
.NET의 개념이, .NET에서 가능한 기능들은 .NET상의 모든 언어들이 공유한다는 점이니까요.

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.