짧은 대답 : 아니오, 튜링 동등성 때문입니다.
긴 대답 :이 녀석은 트롤입니다. 유형 시스템이 "하위 집합으로 제한"하는 것이 사실이지만, 그 부분 집합 밖의 물건은 정의 상으로는 작동하지 않는 물건입니다.
Turing-complete 프로그래밍 언어 (범용 프로그래밍을 위해 설계된 언어와 그렇지 않은 많은 언어)로 할 수있는 모든 것; 정리하기에는 상당히 낮은 수준이며 Turing이되는 시스템의 몇 가지 예가 있습니다. 실수로 완료하십시오) 다른 Turing-complete 프로그래밍 언어로 할 수 있습니다. 이것을 "동등한 투어링"이라고하며 정확히 말한 것을 의미합니다. 중요한 것은 다른 언어로 쉽게 다른 일을 할 수 있다는 것을 의미하지는 않습니다. 어떤 사람들은 처음에는 새로운 프로그래밍 언어를 만드는 것이 전체 요점이라고 주장합니다. 기존 언어가 빨아 먹는 것들.
예를 들어, 모든 변수, 매개 변수 및 반환 값을 기본 Object
유형 으로 선언 한 다음 리플렉션을 사용하여 특정 데이터에 액세스하여 정적 OO 유형 시스템에서 동적 유형 시스템을 에뮬레이션 할 수 있습니다. 정적 언어로는 할 수없는 동적 인 언어로는 할 수있는 것이 아무것도 없다는 것을 알 수 있습니다. 그러나 그렇게하는 것은 물론 큰 혼란입니다.
인용문의 사람은 정적 유형이 수행 할 수있는 작업을 제한한다는 것이 정확하지만 문제가 아닌 중요한 기능입니다. 도로의 줄은 차에서 할 수있는 일을 제한하지만 제한적이거나 도움이되는 것을 찾으십니까? (차가 반대 방향으로 가고 있고 운전하는 곳을 오지 않기 위해 반대 방향으로 가고 있다는 말이없는 바쁜 복잡한 도로에서 운전하고 싶지 않다는 것을 알고 있습니다!) 유효하지 않은 동작을 고려하여 발생하지 않도록하려면 심한 충돌이 발생할 가능성을 크게 줄입니다.
또한 그는 다른 쪽의 특성을 잘못보고 있습니다. "작성하려는 모든 흥미로운 프로그램이 유형으로 작동하는 것"이 아니라 "작성하려는 모든 흥미로운 프로그램이 유형 을 필요로 합니다." 특정 수준의 복잡성을 넘어 서면 두 가지 이유로 인해 유형 시스템없이 코드베이스를 유지 관리하기가 매우 어려워집니다.
첫째, 타입 주석이없는 코드는 읽기 어렵 기 때문입니다. 다음 Python을 고려하십시오.
def sendData(self, value):
self.connection.send(serialize(value.someProperty))
연결의 다른 쪽 끝에있는 시스템이받는 것처럼 보이는 데이터는 무엇입니까? 그리고 그것이 완전히 잘못 보이는 것을 받고 있다면, 무슨 일이 일어나고 있는지 어떻게 알 수 있습니까?
그것은 모두의 구조에 달려 value.someProperty
있습니다. 그러나 그것은 어떻게 생겼습니까? 좋은 질문! 무슨 소리 야 sendData()
? 통과하는 것이 무엇입니까? 그 변수는 어떻게 생겼습니까? 어디에서 왔습니까? 로컬이 아닌 경우 전체 기록 value
을 추적하여 진행 상황을 추적해야합니다. 어쩌면 당신은 someProperty
재산 이있는 다른 것을 전달하고 있지만 생각하는 것을하지 않습니다?
Boo 언어에서 볼 수 있듯이 매우 유사한 구문을 사용하지만 정적으로 유형이 지정된 유형 주석으로 살펴 보겠습니다.
def SendData(value as MyDataType):
self.Connection.Send(Serialize(value.SomeProperty))
문제가 발생하면 갑자기 디버깅 작업이 훨씬 쉬워집니다. 정의를 찾아보십시오 MyDataType
! 또한 같은 이름을 가진 속성을 가진 호환되지 않는 형식을 전달했기 때문에 나쁜 동작 을 일으킬 가능성이 있습니다. 유형 시스템은 실수를하지 않기 때문에 갑자기 0이됩니다 .
두 번째 이유는 첫 번째 이유입니다. 크고 복잡한 프로젝트에는 여러 기고자가 있습니다. (그렇지 않으면 오랜 시간에 걸쳐 직접 빌드하는 것입니다. 본질적으로 동일한 것입니다. 3 년 전에 작성한 코드를 믿지 않으면 읽어보십시오!) 코드를 작성할 당시에 코드의 거의 일부를 작성한 사람의 머리를 통하는 것입니다. 왜냐하면 당신이 없었거나 오래 전에 자신의 코드인지 기억하지 못하기 때문입니다. 형식 선언을 사용하면 코드의 의도가 무엇인지 이해하는 데 실제로 도움이됩니다!
인용문에 나오는 사람과 같은 사람들은 정적 입력의 이점을 거의 무제한의 하드웨어 리소스로 인해 매년마다 컴파일러의 도움 또는 효율성에 관한 모든 것으로 잘못 잘못 인식합니다. 그러나 내가 보았 듯이, 이러한 이점은 확실히 존재하지만 주요 이점은 인적 요소, 특히 코드 가독성 및 유지 관리 가능성에 있습니다. (추가 된 효율성은 확실히 좋은 보너스입니다!)