가까운 장래에 컴파일러를 작성할 계획은 없습니다. 아직도, 나는 컴파일러 기술에 관심이 있으며, 어떻게 이런 것들이 더 나아질 수 있는지에 관심이 있습니다.
컴파일 된 언어로 시작하면 대부분의 컴파일러에는 경고와 오류의 두 가지 오류 수준이 있습니다. 경고와 오류, 가장 치명적이지 않은 대부분의 경우 수정해야하는 오류 및 기계 (또는 바이트)를 생성 할 수없는 대부분의 시간을 나타내는 오류 입력에서 코드.
그러나 이것은 꽤 약한 정의입니다. Java와 같은 일부 언어에서는 @SuppressWarning
지시문 을 사용하지 않고 특정 경고를 제거하는 것이 불가능합니다 . 또한 Java는 치명적이지 않은 특정 문제를 오류로 처리합니다 (예를 들어, Java의 연결할 수없는 코드는 알고 싶은 이유로 오류를 트리거합니다).
C #에는 동일한 문제가 없지만 몇 가지가 있습니다. 컴파일은 여러 패스에서 발생하는 것으로 보이며 패스가 실패하면 추가 패스가 실행되지 않습니다. 이 때문에 빌드가 실패 할 때 발생하는 오류 수는 종종 과소 평가됩니다. 한 번 실행하면 두 가지 오류가 있다고 말할 수 있지만 일단 수정하면 26 개의 새로운 오류가 발생합니다.
C와 C ++를 파는 것은 단순히 Java와 C #의 컴파일 진단 취약점에 대한 나쁜 조합을 보여줍니다 (Java와 C #이 각각 절반의 문제로 진행되었다고 말하는 것이 더 정확할 수도 있음). 일부 경고는 실제로 오류 (예 : 모든 코드 경로가 값을 반환하지 않을 때) 여야하지만 여전히 표준을 작성할 때 컴파일러 기술이 이러한 종류의 코드를 작성하기에 충분하지 않았기 때문에 경고입니다 필수 사항을 확인합니다. 같은 맥락에서, 컴파일러는 종종 표준보다 더 많은 사항을 확인하지만 추가 결과를 위해 여전히 "표준"경고 오류 수준을 사용합니다. 그리고 종종 컴파일러는 발견 할 수있는 모든 오류를보고하지 않습니다. 그것들을 모두 제거하려면 컴파일이 약간 필요할 수 있습니다. C ++ 컴파일러가 침을 뱉고 싶어하는 중대한 오류는 말할 것도없고,
이제 컴파일러가 경고를 낼 때 실패를보고하도록 많은 빌드 시스템을 구성 할 수 있다는 점을 추가하면 이상한 혼합이 발생합니다. 모든 오류가 치명적이지는 않지만 일부 경고가 발생합니다. 모든 경고를받을 자격이있는 것은 아니지만 더 이상 언급하지 않고 일부 경고를 명시 적으로 억제합니다. 때로는 모든 경고가 오류가됩니다.
컴파일되지 않은 언어에는 여전히 크 래피 오류보고 기능이 있습니다. 코드가 실제로 실행될 때까지 Python의 오타는보고되지 않으며 스크립트가 하나를 만나면 실행이 중지되므로 한 번에 두 개 이상의 오류를 발생시킬 수 없습니다.
PHP는 다소 심각한 오류 수준 과 예외가 있습니다. 구문 분석 오류는 한 번에 하나씩보고되며 경고가 너무 나빠서 스크립트를 중단해야하지만 (기본적으로는 아님), 알림은 종종 심각한 논리 문제를 표시합니다. 일부 오류는 실제로 스크립트를 중지 할만큼 나쁘지 않지만 여전히 PHP에는 평소와 같이 이상한 점이 있습니다 (실제로 치명적이지 않은 치명적 오류에 대해 오류 수준이 필요한 이유는 무엇입니까? E_RECOVERABLE_E_ERROR
, 나는 당신에게 이야기하고 있습니다).
내가 생각할 수있는 컴파일러 오류보고의 모든 단일 구현이 망가진 것 같습니다. 모든 훌륭한 프로그래머가 오류를 올바르게 처리하는 것이 얼마나 중요한지 주장하지만 자체 도구를 얻을 수는 없기 때문에 정말 부끄러운 일입니다.
컴파일러 오류를보고하는 올바른 방법은 무엇이라고 생각하십니까?