LangDev

프로그래밍 언어 개발에 관심 있는 사람들의 모임입니다.

얼 언어(가칭), 우리말로 프로그래밍을!

2008-04-30 23:05:16

스프링노트로 옮겼습니다. 이 글을 쓸 때 버전은 여기서 읽으시기 바랍니다.

최신판을 볼 수도 있습니다. 가끔 바꿉니다.

디토 님이 2008-08-16 20:10:18에 고쳤습니다.

트랙백 주소: http://langdev.net/post/trackback/53

  1. 엽우 2008-05-01 01:20:05

    프로그래밍이 명령어의 조합이라는 관점에서 생각을 하다 보니 주어가 필요할까 싶더라구요. 주어, 목적어, 동사 등을 갖춰서 코드를 구성하다 보니 억지로 말을 만드는 느낌이랄까? 우리도 보통 밥 줘, 라면 좀 끓여줄래 등 주어를 생략하는 경우가 많죠.

    그리고 리터럴위에 오는 문자들을 무시하는 건 좀 그렇지 않을까요? 예로 드신 "고양이"를 "부탁"해 확장해볼께요. (근데 겹따옴표면 문자열인데 홑따옴표의 오타가 아니신지?; 전 심볼로 가정하고 계속 얘기할께요.)

    '고양이'와 '강아지'를 '부탁'해
    '고양이'의 '목욕'을 '부탁'해
    
    

    위 코드에서 각각 처리할 심볼은 고양이, 강아지, 부탁고양이, 목욕, 부탁이 되는데 첫번째를 목적어로, 마지막을 동사로 가정한다 하더라도 가운데에 있는 강아지목욕을 처리하기 힘들겠지요.

    앞의 경우는 고양이와 함께 묶여져서 속성 목록을 구성해야 하고 뒤의 경우는 홍민희님이 말씀하신 함수 합성 정도로 처리하거나 혹은 ( (고양이 목욕) 부탁)으로 처리해 고양이 목욕을 목적어로 봐야하겠지요.

    그러니 조사를 버리지 말고 오히려 조사를 살려 품사를 확인해 명령어 문장을 구성한 다음 각 문장 성분에 맞춰서 처리하면 좀 더 낫지 않을까 싶네요.

  2. 엽우 2008-05-01 01:42:51

    조사에 대해 조금 더 부연할께요(쫌 많이 아쉬워서요. ^^:).

    OOP란 단어에서 Object는 객체말고도 목적, 대상이라는 뜻도 있잖아요. 그래서인지 OOP에서 객체(Instance)를 생성해서 메서드를 호출할 때 주어라기 보단 목적어로 봐야할 듯 합니다.

    myCar.drive(10);
    myCar.stop();
    
    

    자바 책에서 예제로 들만한 코드죠? ^^: 위 코드를 우리말로 번역해보면 아래처럼 되죠.

    내차를 10으로 운행해
    내차를 세워 # 혹은 정지해
    
    

    여기서 객체였던 myCar는 모두 목적어로 사용이 되었습니다. 이렇듯 코드에서 주어가 명시적으로 드러나는 경우는 할당의 경우가 거의 유일한 것 같은데요.

    인삿말은 "안녕하세요, 얼!"이다
    
    

    위에서 보듯 전형적인 1형식;에서 보조사 ~은이 주격조사의 역활을 하였습니다. (보조사 은/는이 다른 격으로 해석되는 경우를 생각해 봤는데 당분간 은/는을 주격으로만 해석해도 큰 무리가 없을 것 같았습니다.)

    그렇다면 문장 마지막의 ~해 어미로 끝나는 것을 동사로 처리한다고 하면 그 중간에 올 문장성분을 해석해야 하는데 만일 조사를 무시한다면 괄호같은 특수기호가 잔뜩 동원되야 할 것 같습니다.

    request.send(message, METHOD_POST)
    
    

    위 코드를 번역한다면

    요청에 메시지를 포스트로 전송해
    메시지를 요청에 포스트로 전송해
    포스트로 메시지를 요청에 전송해
    
    

    등으로 번역할 수 있지요. 그런데 조사를 무시하면 세 가지 순서 중 한 가지만 제한해 사용해야 합니다. 하지만 조사를 이용하면 요청간접목적어이고 메시지가 직접목적어이고 이 부사임을 알 수 있죠.

    물론 이렇게 해석한 각 문장성분을 어떻게 처리할 것인가는 좀 더 해석해야겠죠 (동사를 문장 성분별로 다중정의(overload)를 시키는 건 어떨까요?;)

    한줄 요약 : 경제만 살리지 말고 조사도 살려주십셔 (굽신)

  3. 엽우 2008-05-01 01:50:49

    다음으로 동사에 대해 얘기할께요.

    제가 든 예제 중 내차를 세워 # 혹은 정지해란 코드를 볼께요. 여기서 동사는 세워였지만 형태소분석을 해야 어간이 세우~인 명령형 동사인 걸 알 수 있습니다. 반면 정지해와 같은 명사와 명령형 어미 ~해의 조합은 해석하기가 쉽죠.

    그러나 ~해를 남발하면 해석기가 처리하긴 쉽지만 작성된 코드가 자연어와 멀어진다는 문제가 생깁니다. 우리도 차 좀 세워봐라고 하지 차 좀 정지시켜봐하진 않잖아요; 따라서 우아한 코드를 작성하기 위해선 복잡하지만 형태소 분석기가 필수가 됩니다. (물론 여기엔 조사나 어미를 살린다는 전제가 필수고 디토님이 은 그런 거 필요 없어! 하면 …. _ _)

    그래도 다행인 건 이 부분은 검색엔진 개발자들에 의해 상당히 많이 진척되어 있는 분야라 참고할 내용은 많이 있습니다.

    한줄 요약 : 우아한 동사로 코드를 작성하기 위해선 형태소 분석기가 필수다.

  4. semmal 2008-05-01 01:58:53

    OOP는 Object에 명령을 내리는 것이 아니라, Object의 상태가 이렇다(또는 이래야 한다)는 것을 알려주는 것이 아닌가요? “Object야 method해”가 아니라 “Object는 method한다”라는 것이 맞을 것 같습니다. “myCar.drive(10)”은 말 그대로 “myCar drive 10”인 것이죠. OOP의 어순이 마치 우리말과 비슷해보이지만, 그것은 코드가 짧을 때의 이야기이고, 긴 프로그램이 되면 전혀 달라보입니다. 거기서부터 우리말 언어라는 것의 현실성이 없어지기 시작하는 것이죠.

    우리말같은 언어를 만든다면 사고방식 자체가 기존의 언어나 패러다임, 방법론에서 벗어나야한다고 생각합니다. 외국인의 사고방식에 맞춰져서 만들어진 체계가 우리들 방식으로 다듬는다고 해서 그 기본이 얼마나 바뀌겠습니까? 애초에 생각부터 다른데요.

  5. 민군 2009-04-01 17:03:24

    우리말로 하는 프로그래밍 이전 단계의 뭔가가 필요할거 같아요.

  6. semmal 2008-05-01 02:09:34

    우리말같은 프로그래밍 언어를 만드는 것은 정말 힘든 일일 수 있습니다. 간단한 수학식 f(x)=y를 나타낼 우리말이 없다는 것을 생각하면 더 그렇습니다. 즉, 어떤 것은 어색하더라도 그냥 쓸 수 밖에 없고, 어떤 부분은 우리말처럼 바꿀 수 있을 겁니다. 어쩌면 우리의 논의의 초점을, 모든 것을 우리말로 바꾸는 것이 아니라 우리말처럼 “잘” 바꿀 수 있는 것이 무엇인가에 집중하는 것이 조금 더 좋은 방법이 아닐까 생각해봅니다. 그래서 제가 이전에 품사 등의 우리말의 특성을 굳이 캐어본 것이구요.

  7. semmal 2008-05-01 02:11:54

    그리고 얼핏 든 생각이지만, 외국인이 우리말을 어려워하는 이유가 정말 우리말이 스택기반이라서 그런게 아닌가 하는 실없는 생각도 드네요. “우리말은 끝까지 들어봐야 안다”는 말이 갑자기 생각납니다.

  8. 민군 2009-03-26 22:04:42

    “우리말은 끝까지 들어봐야 안다”

    동양식 사고는 서양식 사고보다는 아무래도 속도가 느린(천천히, 여유로이) 사고이기 때문에 끝까지 들어야 의미를 정확히 파악 할 수 있는 상황이 발생하는 것 같습니다.

    그나저나….

    $소 = &부탁해(‘신선함’) 을.. ‘소’야, ‘신선함’을(를) ‘부탁해’

    이런 수준까지밖에 생각이 안되는 =3

  9. 김우승 2009-03-27 03:18:29

    저는 반대라고 생각했는데요. 물론 우리말은 끝까지 들어봐야 안다라는 말은 동의합니다만…

    우리 말은 부사와 동사를 통해 현재 문맥을 파악한 상황에서 순방향적으로 결론을 냅니다.

    그에 비해 영어권은 결론을 내고 결론을 둘러싸는 문맥을 설명하죠.

    예를 들어 Python의 list comprehension이 영어권이라면 Ruby의 Enumerable에 message를 보내는 것은 우리말과 유사하다고 할까요?

    그래서 우리말이 stack 기반이라는게 잘 이해가 안 갑니다.

    그리고 OOP가 객체에 상태가 이렇다고 하거나 알린다는 것은 좀 약한 말인 것 같습니다. 요구하는 명령은 너무 강하지만 말이죠.

    Message를 보낸다는 것은 요청에 가깝습니다. Message 없이 객체는 행동을 옮기지 않으니까요.

  10. 민군 2009-04-03 08:27:56

    근데 얼 언어에 푹 빠진 사람은 ‘얼 빠진 놈’이 되는건가요?

목록보기

← [랑데뷰전용떡밥] 어떤 VM을 사용하... | BNF vs EBNF 관련한 뻘글입니... →