Can Your Programming Language Do This?

Tags:

Can Your Programming Language Do This?

그래서, 당신이 좋아하는 언어 X에서는 이게 되나요?

주로 Map, reduce, join 같은 것들을 이야기함. 그것들만이 functional language의 본질인 것 처럼 말하는 것은 다소이상해보임. 오히려 side effect를 없애는 모듈화 및 함수를 통한 문제 정의가 핵심이 아니었던가.

Comments

6 responses to “Can Your Programming Language Do This?”

  1. 골빈해커 Avatar

    …이긴한데 맨날 쓰다가 없거나 살짝 돌아가니까 정말 불편하더라구요-_-;;perl/ruby -> java;; 느무 복잡함;;

  2. MKSeo Avatar
    MKSeo

    자바는 말할것도 없이 복잡하죠…. ‘제발 lambda 좀;;;;;’ 이란 말이 절로 ㅎㅎ 익명클래스 없이 labmda좀 되고, generics는 던져버리던가 런타임에도 타입 정보좀 갖고 오게 새로 만들어 놓던가하고, 뭐 그정도만 해도 저는 정말 좋을텐데 말이죠….

    자바는 정말 너무나 쉽게 코드가 길어져요. 진짜 ‘아 내가 코딩하는구나’ 기분 절실히 느끼게 함 ㅎㅎ. 사실 이에 비할 수 없게 가끔 사람 더 괴롭히는게 C++이긴한데, 요즘은 그 퍼포먼스와 boost 라이브러리에 홀딱 반해버린고로 C++은 맘에 들어하고 있어요, 전.. ㅎㅎ

    제가 빨리 졸업하고 진학문제도 잘 처리되서 남는기간 알바뛰어드리면 좋을텐데 ㅋㅋ
    돈 많이 벌어두세요~

  3. 홍민희 Avatar

    저도 어중간한 Java는 싫더라구요. C++과 Python을 사랑합니다(Python에 클로져가 생기거나, def 키워드가 표현식으로 바뀌었음 좋겠지만……).

    덧. 개인적으로 PHP에 이상한 애착을 가지고 있는데, 요즘에는 심심해서 Objective-PHP라는 것을 구상해보고 있습니다.

  4. MKSeo Avatar
    MKSeo

    홍민희님, 대강 Objective-PHP에 대해서 살펴보았습니다. 하지만 아직 어떤 것이 PHP와 다른지는 잘 모르겠네요.. 언어적으로 무엇을 얻고자 하는지 명확하게 정의부터 하고 간다면, 예를들어 POLS라던가, 더 좋을 것 같습니다.

    그리고 PHP의 문제점으로 지적되는 것은 바로 maintenance hell 이라는 것일텐데요. 그 중 가장 큰 문제점은 바로 아무데서나 접근가능한 것들(함수 등) 숫자가 너무나 많다는 것입니다. 이런 점은 video.google.com에 있는 google techtalk 에서 django 를 찾아서 보시며 중간에 django의 개발자가 php의 문제점에 대해 지적한 부분을 보실 수 있습니다. 가령 a라고 쳤을때 그 a로 시작되는 접근가능한 것들이 너무 많다는 것이죠. (물론 django 개발자가 python 사용자이고, 제가 생각하기에 python은 referencing environment 를 좁히는 쪽으로 커온 언어이고, php는 모든 변수/함수의 접근범위를 키우는 쪽으로 커왔기 때문에 상호간의 견해차이일 뿐이다라고 반박도 가능하겠습니다. 하지만 반대로 모듈화가 잘 안되어 보이는 건 사실인 듯합니다.)

    민회님은 위키만 쓰시나요? 블로그같은게 있다면 좀 더 논의를 해볼 수 있겠지만, 이외에도 가령 $a=”문자열” $a( ) 와 같은 식으로 함수를 호출 할 수 있게 하는 것은 일견 좋아보이지만 엄청난 보안문제를 야기할 수 있습니다. 한가지 예로 모 시스템에서 자료를 검색할 때 쓰는 함수에 정규식을 쓰는데 그 정규식을 실제 코드로 취급해 실행할 수 있도록 하는 옵션이 있는 함수가 PHP에는 있습니다. 그리고 그로인해 정규식을 조작해 입력함으로써 deface가 가능했었죠. 이런 보안 hole은 더 많이 열려서는 안된다고 생각됩니다. 더 닫히는 쪽으로 가야되겠죠…

    음.. 이것도 되고 저것도 되고 하는 점도 중요하지만 사실 그것만이 전부는 아닐 거 같습니다.. objective의 목적이 명확해지는게 먼저이지 않을까 싶습니다.

  5. 홍민희 Avatar

    네, PHP에서는 네임스페이스 기능이 없고 모든 것이 전역에서 둥 떠서 다닙니다. 네임스페이스 규칙을 일관성 있게 하기 위해 $를 붙이면 변수이고 그렇지 않으면 상수라는 간단한 규칙으로 바꾼 것이지요. 여기서 변수와 상수의 개념은 C++에서의 그것과 비슷하면서도 다릅니다. 변수는 차후 다른 객체를 참조할 수 있다는 것이고, 상수는 한번 참조한 객체를 죽을 때까지 입맞추고 살아야 한다는 뜻입니다. 그렇기 때문에 상수 객체의 수정도 있을 수 있습니다. 그래서 제 생각은, 언어 컨벤션으로 lock()이나 clone() 같은 메서드를 두고(Java의 toString() 같이), 상수에 참조될 객체는 참조되기 전에 해당 객체가 lock() 메서드를 지닌다면 그것을 호출하여 잠긴 객체를, 그렇지 않다면 clone()을 호출하여 복제된 객체를 참조하도록 하게 할 생각입니다.

    문자열 객체를 호출하면 해당 이름의 함수가 호출되는 것은 제가 좋아서 넣은 것이라기 보다는 PHP에서 원래부터 지원하던 것이였습니다. 문제는 PHP가 그것만을 지원했다는 것입니다. 함수 포인터나 함수 객체 비슷한 어떤 것(클로져나 람다 따위는 당연히 생각도 못합니다)도 존재하지 않기 때문에, 모든 콜백 구현이 문자열에 함수 이름을 넣어서 전달하고, 그것을 호출하는 다소 지저분하면서도 이질적인 방식으로 되어 있습니다. 하위호환성을 위해서 언어적 기능을 언어 프레임워크 단위로 낮춘 것 뿐이지, 보안 문제를 생각하지 못한 것은 아니지요. (덧붙여서, 저는 이런 경우 보안 문제의 책임은 코드 작성자에게 있지, 언어의 기능에 있다고 보지 않습니다.)

    Objective-PHP는 진지한 프로젝트가 아니라 다소 가벼운 망상에 가까운 것들이라서 아직 무엇을 어떻게 구현할지에 대해서는 생각한 바가 없답니다. 다만 제가 기존 PHP에서 바뀌었으면 하는 점들이 하위 호환성을 유지하면서 추가된 것 뿐이죠(람다나 클로져 등).

  6. MKSeo Avatar
    MKSeo

    음 네…
    별로 생각안하셨다면서, 그래도 생각을 많이 하신것으로 보이네요 ㅎㅎ
    근데 혹시 블로그는 없으신가요..?
    위키밖에 없으신거 같지만;;
    있으면 좋을텐데..
    위키도 좀 많이 쓰세요 ㅎㅎ
    글도 별로 없고;;;

Leave a Reply

Your email address will not be published. Required fields are marked *