프로그래밍[Univ]/프로그래밍 언어론

[프로그래밍 언어론] 프로그램 언어 평가 기준

Cloud Travel 2011. 9. 11. 15:21

1. 가독성(Readability) : 얼마나 읽기 쉬운가??

 - 단순성(Simplicity)
  ⓐ 기능이 너무 많으면 좋지 않다.
  ⓑ 하나의 기능을 여러가지로 표현이 가능하면 안 좋음
   ex)  count++ // ++count // count = count+1 // count += 1 
    >한 가지 기능을 여러가지로 표현이 가능함.
  ⓒ 연산자 중복(Operator Overloading) : 사용자에게 중복 연산자 생성을 허용
   > 좋은 기능이지만, 연산자의 일반적 의미와 다른 의미로 쓰인다면 읽는 사람입장에서 해석하기가 힘들 것이다.

 - 직교성(Orthogonality) : 결합시 일관적인가?? 예외가 발생하는가??
                                          예제를 통해서 알아보자...
   ex1) ⓐ와 ⓑ중 더하기 기능을 보았을때 어떤 것이 더욱 직교적인가??

         예의 앞서 설명하자만 변수(피연산자(operand))는 레지스터와 메모리에 저장이 가능하다. 
         즉, 더하기 기능에서 직교성이 있다는 것은 다음 네가지 경우를 모두 가능해야 된다.
         레지스터+레지스터 / 레지스터+메모리 / 메모리+메모리 / 메모리+레지스터 

         ⓐ IBM 대형 컴퓨터 : 더하기 기능을 위해 2가지의 명령어를 제공해준다.
             A    Reg1, memory_cell
             AR  Reg1, Reg2
         -------------------------------------------------------------
        ⓑ VAX 컴퓨터 : 더하기에 한가지 명령어를 제공해준다
            ADDL operand_1, operand_2
        --------------------------------------------------------------
        ⓐ의 경우는 "메모리+메모리 / 메모리 + 레지스터"가 불가능하다
          > 이는 메모리+메모리/메모리+레지스터 계산에 대해서는 사용자가 직접 작성해줘야한다.
        ⓑ의 경우는 피연산자를 모두 가능하게 하였기에 모든 경우에서 가능하다.
      
        따라서 ⓑ의 경우가 ⓐ보다 직교성이 우수하다고 할 수 있다. 

   ex2) 우리가 자주 접하는 C언어는 직교성이 있는가??
           아니다... C언어는 직교성이 떨어지는 언어입니다.
           하나의 예로 모든 변수타입에 대해서 반환이 불가능합니다.

 - 데이터 타입(Data Types) : 제공되는 데이터 타입이 문장을 해석하는데 충분한가??

 - 문법설계(Syntax Design) : 변수의 길이조절, 예약어의 의미사용이 적절히 사용 되었는가??


2. 작성법(Writability) : 잘 작성 가능한가??

 - 단순성과 직교성 
  > 적은 수의 기본구조를 통하여 복잡한 문제가 해결 가능한가??
  > 직교성에 지나치게 치우쳐져 있는지 않는가??

 - 추상화의 지원 : 추상화를 지원해주는가??
  ex) 자바의 class 라이브러리 제공

 - 가독성의 단순함과 반대대는 개념으로 얼마나 표현을 많이 할 수 있는가??
  > 표현이 단순히 많이 되는 것을 뜻하는 것이 아니다.
  > 일반적으로 제공된 표현보다 더욱 단순하게 표현 가능한 표현이 많은가?? 에 대한 문제이다.


3. 신뢰성(Reliability)
 
 - 타입 검사 : 적절하지 않는 타입의 사용이나 서로 다른 타입의 연산이 있는지를 검사할 수 있는가?
 
 - 예외 처리 : 프로그램 실행간 발생한 오류를 실시간으로 수정하여 지속적으로 프로그램이 돌아가는가??

 - Aliasing : 동일 한 메모리를 여러개로 지칭하고 있는가?? (이런것이 적을수록 좋다.)
  > 프로그램언어 개발 초기에 메모리 절약을 위해 개발 되었으나, 현재는 없는게 좋다.

4. 비용(Cost)

 - 프로그래머가 프로그램언어를 배우는데 걸리는 시간

 - 소프트웨어 작성시 드는 비용

 - 컴파일과 수행시의 속도

 - 컴파일러의 비용

 - 유지보수

 - 가독성의 여부


5. 기타 등등....

 - 이식성

 - 일반성

 - 잘 정의가 되어있다. > 필요한 만큼의 것이 보기좋게 정의되 있음
---------------------------------------------------------------------------------------------

프로그램을 평가하는 여러가지 기능을 보았다.

어느 한 곳에 치중하면 안된다-_-;; 모든 것에 적당함이 필요하다...

적당함이란 가장 어려운 것이지만... 프로그램언어를 판단하는데에는 많이 필요한 것같다.