10P by ffdd270 2022-06-23 | favorite | 댓글 1개

V 프로그래밍 언어 리뷰


  • V언어가 나온 몇년이 지난 2022년에 V언어가 홍보했던 기능들을 직접 테스트하며 리뷰하는 글입니다.
  • 피쳐들의 평가를 미작동, 경고, 작동으로 나눠서 평가했으며. 아래는 그 평가 리스트의 평가 결과입니다. 평가를 위한 예제 코드와 평가에 대한 근거는 모두 본문에 있습니다.
  • 아래 리스트는 영어 공부하면서 번역한거라 사실 관계에 오류가 있을 수 있습니다. 참고 용도로만 사용해주세요.

  • 유지보수하기 좋은 간단한 언어.
    • 주관적인 주장임.
    • N/A

안전

  • 널 없음.
    • V언어는 널 포인터( V 레퍼런스 )를 컴파일러 에러나 경고 없이 만들 수 있음.
    • 미지원.
  • undefined value 없음.
    • 초기화하지 않은 메모리를 컴파일러 에러나 경고 없이 읽을 수 있음.
    • 미지원.
  • undefined behavior 없음.
    • V 컴파일러는 3가지 다른 형태의 UB를 작성하는 걸 막지 않았음. UB 발생함.
    • 미지원.
  • 변수 쉐도잉 (서로다른 이름 공간에 같은 이름을 만들 때, 이름이 가려지는 현상) 없음.
    • 로컬 변수를 가릴 수 없었음.
    • 미지원.
  • 바운스 체크.
    • 몇가지 기본적인 확인은 있지만, 사소하게 바이패스할 수 있음.
    • 경고.
  • 상수 변수가 기본.
    • 변수들은 의미있는 상수가 아님. mut 선언된 변수에 상수 레퍼런스를 할당한 다음 변수를 바꾸면 원본 상수 변수도 변경되도록 손쉽게 바꿀 수 있음.
    • 미지원.
  • 순수 함수들이 기본.
    • 이 주장은 순수함을 불순함이 의미하는 것으로 재정의하므로 의미가 없음.
    • (저자는 I/O 함수 지원은 본질적으로 불순할 수 밖에 없다는 걸 지적했으며, 문서에는 I/O 함수를 제외한 모든 함수가 순수하다고 했지만. I/O 함수를 호출할 수 있을 때부터 그 함수들은 순수하지 않다고 말했습니다. 그래서 의미가 덮어졌다고 말하는 것 같습니다. 본문에는 순수 함수들이 불순한 값을 뱉는 우수꽝스러운 예제를 보여줍니다. )
    • 미지원.
  • 상수 구조체가 기본.
    • 이미 위에서 상수 변수들을 우회할 수 있음을 증명했습니다.
    • 미지원.
  • Option과 그 결과값에 대한 필수 에러 체크.
    • 광고대로 작동함.
  • Sum types(type MyType = string | int 와 같은 문법입니다.)
    • Sum Types는 일반적으로는 작동하는 것처럼 보이지만, 내부 구현 이슈가 있음. ( type을 두 개 더 만드는 걸로 V언어가 금지하는 레퍼런스를 Sum Types으로 삼는 행동을 가능하게 만듭니다. )
    • 경고.
  • 일반화(제너릭)
    • 기본 구현은 존재하지만 아주 버그 투성이며 자기 스스로 강조하며 설명한 안전과 컴파일러 성능과는 완전히 동떨어져있는 것처럼 보임.
    • 미지원.
  • 글로벌 변수 없음.
    • V는 전역적으로 공유되는 상태를 만들거나 변경하는 것에 어떠한 의미있는 방식으로도 막지 않음.
    • 미지원.

퍼포먼스

  • C만큼 빠름( V의 메인 벡엔드 컴파일러는 사람이 읽을 수 있는 C언어 코드 )
    • V의 퍼포먼스 주장은 검증되지 않은 것처럼 보임.
    • 미지원.
  • 추가 비용없는 C 상호 운용
    • 광고대로 작동함.
  • 최소화되어있는 할당
    • 주관적인 주장임.
    • N/A. (저자는 int를 선언한 V코드가 C언어로 번역될 때, C언어상에서는 int를 malloc 되는 결과물을 보여줬습니다.)
  • 런타임 리플렉션 없는 내장된 직렬화
    • 광고대로 작동함.
  • 아무런 디펜던시가 없는 네이티브 바이너리들로 컴파일됨.
    • V는 아직 그 주장을 달성하지 못한 것처럼 보이지만, 일반적인 아이디어로는 V 프로그램이 상대적으로 자급자족하며 작다는 약간의 진실도 있음.
    • 경고.

빠른 컴파일

  • V는 100만 라인을 초당, 그리고 CPU 코어마다 컴파일함.
    • V 컴파일러는 주장한 수준의 성능 근처에 오지 않았음. (V 컴파일러 밴치마크 사이트에서도 20만 V 라인을 컴파일정도임.)
    • 미지원.
  • V는 V로 쓰여졌고, 1초 언더로 V 스스로 컴파일할 수 있음.
    • 광고대로 작동함.
  • 혁신적 메모리 관리
    • V의 주장들은 잘 뒷받침되지 않으며, 현재 존재하는 구현은 혁신적이라고 설명할 수 없음.
    • 미지원

사실 V가 멀었다는 건 널리 알려진 사실이지만 이 글은 그 멀었다는 걸 증명하는 과정이 잘 적혀있습니다. 리스트에서 관심있는 걸 고르신 다음 그걸 증명하는 것만 한번 확인해보세요.