프로그래밍 언어의 표현력이라는 것이...

puppet의 이미지

상당히 모호한 말인것 같다는 생각이 듭니다.

표현력이라는게 대체 무엇을 의미하는 것인지 궁금합니다.

어차피 언어의 표현력이라는 것이 어떤 언어이든지 마찬가지 아닐까요??

함수형언어가 표현력이 높다는데, 제가 보기엔 오히려 함수형 언어들은 명령형 언어에 비해

제한 사항들이 많아서, 표현력이 떨어진다고 생각되는데..

imyejin의 이미지

일단 함수형 언어가 아닌 함수들은 함수를 first class 로 쓸 수 없습니다.
그래서 C++ 같은 언어에서는 함수 객체를 만드는 등의 방법으로 함수형 언어를 흉내냅니다.
뭐 이런 세세한 것 말고도 일반론에서 접근할 수도 있습니다.

표현력이 뛰어나다는 말은 크게 두 가지 의미가 있는데 하나는 메모리가 무한히 주어졌을 때
계산이론에서 말하는 모든 계산가능한 함수를 표현할 수 있는가 하는 문제이고, 다른 하나는
프로그램을 얼마나 쉽게 추상화(abstraction)할 수 있는가의 정도에 따라 말하는 것입니다.

표현력에 대한 첫번째 의미야 뭐 대부분의 프로그래밍 가능한 시스템은 다 같습니다.
튜링 머신, 람다 셈법, 재귀 이론을 비롯한 추상적인 시스템 및 실제로 사용하는 거의
모든 범용 프로그래밍 언어들은 메모리가 무한하다면 모든 계산가능한 함수를 다 기술할
수 있으니 이건 뭐 굳이 비교할 필요가 없습니다.

표현력이 뛰어다나는 두번째 의미는 single point of control 의 원리에 비추어 보았을 때
얼마나 프로그램을 안전하면서도 작성하기 편하게 지원하는지의 정도라고 저는 봅니다.
예를 들면 C++의 템플릿 등과 같이 parametric polymorphism 지원하는 언어는
그렇지 못한 언어보다 훨씬 더 코드의 중복을 줄임으로서 single point of control 을
쉽게 유지할 수 있습니다. C 같은 경우는 void 포인터 장난을 쳐야 하고 java 도 Object
로 다 캐스팅했다 빼야 되는데 C++ 템플릿은 이런 문제를 비교적 깔끔하게 해결합니다.
(결국 Java 도 이런 문제 때문에 generic 을 지원하게 되었죠)
안전한 타입 시스템을 염두해 두고 다지인된 함수형 언어들은 C++의 템플릿보다도
훨씬 더 깔끔하게 표현할 수 있답니다.

그리고 제한사항이 많은 데는 이유가 있고 오히려 장점이 되는 경우가 많습니다.
제한사항이 많은 RISC 머신이 오히려 CISC 머신보다 현대적인 컴퓨터 구조라고 각광받고 있죠.
파이프라인이나 멀티 프로세서 등 병렬화되는 현대적인 컴퓨터 구조에는 오히려 간단하고 제한이 많은 디자인이 각광받고 있습니다.

복잡하게 프로그램을 작성하지 않고 KISS를 강조하는 것과 같은 이치랍니다.

디자인은 더 집어넣을 것이 없을 때 완성되는 것이 아니라 더 뺄 것이 없을 때 비로소 완성됩니다.

임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

[예진아씨 피카사 웹앨범] 임예진 팬클럽 ♡예진아씨♡ http://cafe.daum.net/imyejin

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.