코드 중복, 언어별로 얼마나 차이날까? 4억 줄 분석 결과 공개!
scc 도구를 사용하여 4억 줄 이상의 코드(400M LOC)를 분석, 언어별 코드 중복 정도를 측정함
고유 라인(ULOC) 비율을 통해 언어의 간결성을 평가, 쉘 스크립트(Shell Script)가 가장 높은 중복률을 보임
Java가 예상보다 간결하다는 결과에 대한 커뮤니티의 의문 제기 및 방법론에 대한 비판
APL, K와 같은 배열 언어(Array Languages)에 대한 분석 부재와 ULOC 측정의 한계 지적
ULOC(Unique Lines of Code) 측정 방법론에 대한 비판
커뮤니티에서는 scc 도구의 ULOC(Unique Lines of Code) 측정 방식에 대한 의문을 제기하며, 코드의 간결성을 평가하는 데 있어 ULOC의 한계(Limitations)를 지적했다. 특히, 코드 서식(Code Formatting)과 변수명(Variable Naming) 컨벤션이 결과에 큰 영향을 미칠 수 있으며, 단순히 공백을 제거하는 방식으로는 코드의 실제 중복성을 정확하게 파악하기 어렵다는 비판이 제기되었다. 또한, 구조적 중복(Structural Redundancy)을 고려하지 않는 점도 문제점으로 지적되었다.
언어별 코드 중복 분석 결과 및 해석
분석 결과에 따르면, 쉘 스크립트(Shell Script)가 가장 높은 중복률을 보였으며, Java는 예상보다 간결한 것으로 나타났다. 이러한 결과에 대해, 커뮤니티에서는 Java의 간결성에 대한 의문을 제기하며, JVM 언어(JVM Languages)의 특성과 코드 스타일(Code Style)의 영향을 분석했다. 특히, Clojure와 같은 Lisp 계열 언어가 높은 고유성(Uniqueness)을 보이는 반면, C#은 상대적으로 높은 중복성을 나타내는 점에 주목했다.
Rust와 Go의 코드 중복 비교
저자는 Rust와 Go의 코드 중복 정도가 거의 유사하다는 결과를 제시했지만, 커뮤니티에서는 이에 대한 다양한 의견이 제시되었다. 일부에서는 Rust의 트레이트(Trait)와 설정 코드(Setup Code)로 인해 중복이 발생할 수 있다는 점을 지적했으며, Go의 경우에도 에러 처리(Error Handling)와 관련된 반복적인 코드가 존재한다는 점을 언급했다. 이러한 논의는 언어의 설계 철학(Design Philosophy)과 실제 코드 작성 방식(Code Writing Style)이 코드 중복에 미치는 영향을 보여준다.
APL, K와 같은 배열 언어에 대한 추가 분석 필요성
토론에서는 APL, J, K와 같은 배열 언어(Array Languages)에 대한 분석 부재를 지적하며, 이러한 언어의 특성상 라인(Line) 단위의 중복 측정은 적절하지 않을 수 있다는 의견이 제시되었다. 배열 언어는 한 줄의 코드로 많은 작업을 수행하는 경향이 있어, 구문적 중복(Syntactic Redundancy)보다는 관용구(Idioms)의 반복이 더 두드러질 수 있다는 것이다. 따라서, 이러한 언어에 대한 분석은 다른 측정 기준(Measurement Criteria)을 적용해야 할 필요가 있다.