런타임 대 컴파일 시간


370

런타임과 컴파일 타임의 차이점은 무엇입니까?


나는 아주 작지만 분명한 예를 들었습니다 .... 그것은 아주 세밀하게 협박하지 않습니다. 그 후 모든 대답이 끝날 수 있습니다. 그들은 ... 굉장
sankar 얀 배너 지

답변:


479

컴파일 시간과 실행 시간의 차이는 뾰족한 이론가들이 위상 구별 이라고 부르는 예입니다 . 특히 프로그래밍 언어에 대한 배경 지식이없는 사람들에게 배우기 가장 어려운 개념 중 하나입니다. 이 문제에 접근하려면 물어 보는 것이 도움이됩니다.

  1. 프로그램은 어떤 불변성을 만족합니까?
  2. 이 단계에서 무엇이 잘못 될 수 있습니까?
  3. 단계가 성공하면 사후 조건은 무엇입니까 (우리는 무엇을 알고 있습니까)?
  4. 입력과 출력은 무엇입니까?

컴파일 시간

  1. 프로그램은 불변량을 만족시킬 필요가 없습니다. 사실, 제대로 구성된 프로그램 일 필요는 없습니다. 이 HTML을 컴파일러에 공급하고 barf를 볼 수 있습니다 ...
  2. 컴파일 타임에 잘못 될 수있는 것 :
    • 구문 오류
    • 타입 검사 오류
    • (드물게) 컴파일러 충돌
  3. 컴파일러가 성공하면 무엇을 알 수 있습니까?
    • 이 프로그램은 어떤 언어로든 의미있는 프로그램으로 구성되었습니다.
    • 프로그램 실행을 시작할 수 있습니다. (프로그램이 즉시 실패 할 수 있지만 최소한 시도 할 수 있습니다.)
  4. 입력과 출력은 무엇입니까?
    • 입력은 컴파일중인 프로그램과 함께 컴파일하기 위해 가져와야 하는 헤더 파일, 인터페이스, 라이브러리 또는 기타 부두입니다 .
    • 출력은 어셈블리 코드 또는 재배치 가능한 객체 코드 또는 실행 가능한 프로그램입니다. 또는 무언가 잘못되면 출력은 많은 오류 메시지입니다.

런타임

  1. 우리는 프로그램의 불변에 대해 아무것도 모른다 – 프로그래머가 무엇을 입력하든 상관 없다. 런타임 불변은 컴파일러만으로는 거의 시행되지 않는다. 프로그래머의 도움이 필요합니다.
  2. 잘못 될 수있는 것은 런타임 오류입니다 .

    • 0으로 나누기
    • 널 포인터 역 참조
    • 메모리 부족

    또한 프로그램 자체에서 감지되는 오류가있을 수 있습니다.

    • 존재하지 않는 파일을 열려고 시도
    • 웹 페이지를 찾거나 주장 된 URL이 제대로 구성되지 않았 음을 발견
  3. 런타임이 성공하면 프로그램이 충돌하지 않고 완료됩니다 (또는 계속 진행합니다).
  4. 입력과 출력은 전적으로 프로그래머에게 달려 있습니다. 파일, 화면의 창, 네트워크 패킷, 프린터로 전송 된 작업 등을 이름을 지정합니다. 프로그램이 미사일을 발사하면 출력이며 런타임에만 발생합니다 :-)

13
그것이 다루는 것 (+1)에 대한 매우 좋은 대답이지만 컴파일 타임 대 런타임의 메타 프로그래밍 측면에 대해서는 다루지 않으며 IMHO가 가장 흥미로운 부분입니다. 이 답변을 수락하면 OP가 찾고 있던 외부에있을 수 있습니다.
BCS

4
누군가가 내 강의 중에 대해 물어 경우, 니스, 나는 당신의 anwser :-) 사용합니다
전자 satis

12
이것은 정말 좋은 대답입니다. 꽤 명확하고 이해하기 쉽습니다. Google에서 그처럼 명확한 답변을 찾는 것은 쉽지 않습니다.
Tarik

7
비록 당신이 프로그래밍을하더라도 여전히 쉬운 일이 아닙니다. 그것은 초보자들만이 아닙니다. OP의 좋은 질문입니다.
PositiveGuy

11
"이 프로그램은 불변을 만족시킬 필요가 없다. 사실, 잘 구성된 프로그램 일 필요는 없다.이 HTML을 컴파일러에 공급하고 바프를 볼 수있다 ..." 여기. 이 모든 기술 쓰레기와 혼잡하지 않고 간단한 용어로 이것을 설명 할 수 있습니까?
PositiveGuy

175

오류와 오류가 발생할 수 있다고 생각합니다.

컴파일 시간 :

string my_value = Console.ReadLine();
int i = my_value;

문자열 값에는 int 유형의 변수를 할당 할 수 없으므로 컴파일러는 컴파일 타임 에 확실히 알고 있습니다. 에이 코드에 문제가 있음을 있습니다

런타임 :

string my_value = Console.ReadLine();
int i = int.Parse(my_value);

여기서 결과는 ReadLine ()이 반환 한 문자열에 따라 다릅니다. 일부 값은 정수로 구문 분석 할 수 있고 다른 값은 해석 할 수 없습니다. 런타임시 에만 판별 할 수 있습니다.


59
이제 이것은 우리 모두가 이해할 수있는 것입니다. 여기에 일반적인 쓰레기 기술 단어가 없습니다. 좋은.
PositiveGuy

iPhone 앱의 경우 : 개발자가 코드를 처음으로 .app확장 으로 컴파일 할 때 컴파일 시간이 됩니까? 또는 발생 마다 사용자가 시작 응용 프로그램에 의해 시작?
Honey

1
@Honey 개발자가 .app에 처음으로 컴파일 함
maytham-ɯɐɥʇʎɐɯ

2
이것은 컴파일과 런타임의 차이를 개념적으로 다루는 훌륭한 결론입니다. 나는 선택된 학문적, 교수 적 답변에도 감사하지만 이것은 명확하고 간결합니다. 이 답변을 읽은 후 돌아가서 선택한 답변을 읽을 수 있으며 더 이해가됩니다. 감사합니다
mojave

72

컴파일 타임 : 개발자가 코드를 컴파일하는 기간입니다.

런타임 : 사용자가 소프트웨어를 실행하는 기간입니다.

더 명확한 정의가 필요하십니까?


12
@BCS : OP는 해석이 불필요하거나 한 번에 한 단계 씩 실행되는 언어를 사용하여 프로그래밍에 대한 매우 간단한 소개를 받았으므로 구별이 필요하지 않았습니다. 순진에서 질문,하지만 하지 바보.
dmckee --- 전

@ dmckee :이 답변은 원래 질문보다 더 많은 정보 내용이 없으므로 사용자에게 유용하지 않을 것이라고 생각합니다. 이 답변에 대한 답변을 묻는 사람은 비즈니스 프로그래밍이 없습니다 ( OP가 그것을 요구한다고 생각 하지 않습니다 ).
BCS

빠른 질문이 있습니다. 누군가가 일반적인 런타임 오류가 0으로 나눌 때 변수가있는 경우 어떻게 말할지 말하지만 int x = 3/0이 변수로 아무것도하지 마십시오. 우리는 그것을 인쇄하지 않습니다. 여전히 런타임 오류로 간주됩니까?
Robben

iPhone 앱의 경우 : 개발자가 코드를 처음으로 .app 확장자로 컴파일 할 때 컴파일 시간이됩니까? 또는 사용자가 앱을 시작할 때마다 시작될 때 발생합니까? 개발자 코드를 컴파일하는 데 컴파일 시간이 걸리면 왜 신경 쓰겠습니까? 이것이 사용자 경험에 영향을 미치지 않을 것입니까? 그것은 개발자들을 시간 만 죽일 것입니다!
Honey

1
@Robben 나는 당신이이 모든 시간 후에 당신의 대답을 얻었다 고 가정하지만, 나는 others.yes에 대답 할 것이다. 네가 그것을 사용하지 않더라도 런타임 에러가 될 것이다
فربد ضروري

22

( 편집 : 다음은 C # 및 유사한 형식의 프로그래밍 언어에 적용됩니다. 이것이 도움이되는지 확실하지 않습니다).

예를 들어, 프로그램을 실행하기 전에 컴파일러에서 다음과 같은 오류 ( 컴파일 시간 )를 감지 하여 컴파일 오류가 발생합니다.

int i = "string"; --> error at compile-time

한편, 컴파일러는 다음과 같은 오류를 감지 할 수 없습니다. 런타임시 (프로그램이 실행될 때) 오류 / 예외가 수신됩니다 .

Hashtable ht = new Hashtable();
ht.Add("key", "string");
// the compiler does not know what is stored in the hashtable
// under the key "key"
int i = (int)ht["key"];  // --> exception at run-time

예외. Hashtable은 하나 였지만 가장 큰 단계는 .net 1.1에서 .net 2.0으로, 형식화되지 않은 데이터 형식에서 형식화 된 데이터 세트 (및 현재 linq)로 이동했습니다. 나를 매우 슬프게 만드는 데 사용되는 dodgy 데이터베이스로 깨진 양식의 문제를 해결하려고합니다!
Spence

19

소스 코드를 디스크 상에 스터핑 (hapter-happening-on-the-the-disk)으로 변환하는 것은 (거의) 두 가지 방식으로 발생할 수 있습니다. 그것들을 컴파일하고 해석한다고 부릅니다.

A의 컴파일 된 프로그램 (실시 예에서는 C 및 포트란)

  1. 소스 코드는 실행 가능한 프로그램 (또는 오류)을 생성하는 다른 프로그램 (보통 컴파일러 --go figure)으로 공급됩니다.
  2. 실행 파일이 두 번 클릭되거나 명령 줄에 이름을 입력하여 실행됩니다.

첫 번째 단계에서 발생하는 작업은 "컴파일 시간"에서 발생한다고하며, 두 번째 단계에서 발생하는 작업은 "런타임"에 발생한다고합니다.

에서 해석 프로그램 (예를 들어 마이크로 소프트 도스의 기본 ()와 파이썬 (내 생각)) :

  1. 소스 코드는 직접 "실행"하는 다른 프로그램 (일반적으로 통역사)에 제공됩니다. 여기서 인터프리터는 프로그램과 운영 체제 (또는 간단한 컴퓨터의 하드웨어) 사이의 중간 계층 역할을합니다.

이 경우 컴파일 시간과 실행 시간의 차이는 찾기가 더 어렵고 프로그래머 나 사용자와의 관련성이 훨씬 낮습니다.

Java는 일종의 하이브리드로, 코드가 바이트 코드로 컴파일 된 다음 일반적으로 바이트 코드의 인터프리터 인 가상 머신에서 실행됩니다.

프로그램이 바이트 코드로 컴파일되어 즉시 실행되는 중간 경우도 있습니다 (awk 또는 perl에서와 같이).


11

기본적으로 컴파일러가 의미하는 바 또는 "컴파일시"값을 알아낼 수있는 경우이를 런타임 코드로 하드 ​​코딩 할 수 있습니다. 런타임 코드가 느리게 실행될 때마다 계산을 수행 해야하는 경우 분명히 컴파일 타임에 무언가를 결정할 수 있으면 훨씬 좋습니다.

예 :

일정한 접힘 :

내가 쓴다면 :

int i = 2;
i += MY_CONSTANT;

컴파일러는 2가 무엇인지, MY_CONSTANT가 무엇인지 알기 때문에 컴파일 타임에이 계산을 수행 할 수 있습니다. 따라서 매 실행마다 계산을 수행하지 않아도됩니다.


또한 런타임 바운드 코드보다 컴파일 타임 코드를 유지하는 것이 더 쉽습니다. 컴파일 타임에 컴파일러를 사용하여 몇 가지 사항을 확인할 수 있습니다. 테스트와 관련되므로 런타임시 동일한 항목을 확인하는 데 시간이 더 걸립니다.
user1154664

10

음, 런타임은 프로그램이 실행될 때 발생하는 것을 설명하는 데 사용됩니다.

컴파일 시간은 프로그램이 빌드 될 때 (보통 컴파일러에 의해) 발생하는 것을 설명하는 데 사용됩니다.


8

컴파일 시간 :

컴파일 타임에 수행되는 작업은 결과 프로그램이 실행될 때 비용이 거의 들지 않지만 프로그램을 빌드 할 때 큰 비용이 발생할 수 있습니다.

실행 시간:

거의 정반대입니다. 빌드 할 때 적은 비용, 프로그램 실행시 더 많은 비용.

다른 쪽에서; 컴파일 타임에 수행 된 작업은 시스템에서만 실행되고 런타임 인 ​​경우 사용자 시스템에서 실행됩니다.

관련성

이것이 중요한 곳의 예는 유닛 운반 유형입니다. 컴파일 타임 버전 ( Boost.Units 또는 D의 내 버전 과 같은 )은 네이티브 부동 소수점 코드의 문제를 해결하는 것처럼 빠릅니다. 런타임 버전은 값이 다음과 같은 단위에 대한 정보를 둘러 싸야합니다. 모든 작업과 함께 점검을 수행합니다. 반면에, 컴파일 타임 버전은 값의 단위가 컴파일 타임에 알려지고 런타임 입력에서 오는 경우를 처리 할 수 ​​없음을 요구합니다.


8

이전의 비슷한 질문에 대한 답변에 따라 런타임 오류와 컴파일러 오류의 차이점은 무엇입니까?

컴파일 / 컴파일 시간 / 구문 / 시맨틱 오류 : 컴파일 오류 또는 컴파일 시간 오류는 입력 오류로 인해 발생하는 오류입니다. 프로그래밍 언어의 올바른 구문과 의미를 따르지 않으면 컴파일러에서 컴파일 시간 오류가 발생합니다. 모든 구문 오류를 제거하거나 컴파일 시간 오류를 디버그 할 때까지 프로그램이 단일 행을 실행하지 못하게합니다.
예 : C에서 세미콜론 누락 또는 잘못 입력 int으로 Int.

런타임 오류 : 런타임 오류는 프로그램이 실행 중일 때 생성되는 오류입니다. 이러한 유형의 오류로 인해 프로그램이 예기치 않게 작동하거나 프로그램이 종료 될 수 있습니다. 이들은 종종 예외라고합니다.
예 : 존재하지 않는 파일을 읽고 있다고 가정하면 런타임 오류가 발생합니다.

모든 프로그래밍 오류 에 대한 자세한 내용은 여기를 참조하십시오


7

다른 답변에 대한 추가 기능으로 평신도에게 설명하는 방법은 다음과 같습니다.

소스 코드는 선박의 청사진과 같습니다. 선박의 제작 방법을 정의합니다.

청사진을 조선소에 넘겨주고 선박을 건설하는 동안 결함을 발견하면 선박이 드라이 도크 나 물에 닿기 전에 건물을 멈추고 즉시보고합니다. 이것은 컴파일 타임 오류입니다. 배는 실제로 떠 다니거나 엔진을 사용하지 않았습니다. 선박이 만들어지지 않았기 때문에 오류가 발견되었습니다.

코드가 컴파일되면 선박이 완성되는 것과 같습니다. 구축 및 준비 완료 코드를 실행하면 항해 중에 선박을 발사하는 것과 같습니다. 승객이 탑승하고 엔진이 작동하고 선체가 물 위에 있으므로 런타임입니다. 만약 당신의 배가 처녀 항해에 가라 앉는 치명적인 결함이 있거나 (혹은 추가 두통을 겪은 후 항해가된다면) 런타임 오류가 발생했습니다.


5

예를 들어, 강력한 형식의 언어에서는 컴파일 타임이나 런타임에 형식을 확인할 수 있습니다. 컴파일 타임에 컴파일러가 형식이 호환되지 않으면 불평한다는 의미입니다. 런타임에 프로그램을 잘 컴파일 할 수 있지만 런타임에 예외가 발생 함을 의미합니다.


4

간단히 말해서 차이점은 컴파일 시간과 실행 시간입니다.

컴파일 시간 : 개발자가 .java 형식으로 프로그램을 작성하고 클래스 파일 인 바이트 코드로 변환합니다.이 컴파일 중에 오류가 발생하면 컴파일 시간 오류로 정의 할 수 있습니다.

런타임 : 생성 된 .class 파일은 응용 프로그램에서 추가 기능을 사용하고 논리가 잘못되어 런타임 오류 인 오류가 발생합니다.


4

다음은 컴파일 주제에 대한 '자바 프로그래밍 소개'의 저자 인 Daniel Liang의 인용문입니다.

"높은 수준의 언어로 작성된 프로그램은 소스 프로그램이나 소스 코드라고합니다. 컴퓨터가 소스 프로그램을 실행할 수 없기 때문에, 소스 프로그램을해야 번역기계 코드 에 대한 실행 . 번역이라는 또 다른 프로그래밍 도구를 사용하여 수행 할 수 있습니다 " 통역사 또는 컴파일러 ." (Daniel Liang, "자바 프로그래밍 소개" , p8).

...그는 계속한다...

"A 컴파일러는 전체 변환 소스 코드 (A) 내로 시스템 코드 파일, 및 컴퓨터 코드 파일은 실행"

우리가 사람이 읽을 수있는 높은 수준의 코드를 입력 할 때 이것은 처음에는 쓸모가 없습니다! 작은 CPU에서 일련의 '전자 사건'으로 변환되어야합니다! 이를 향한 첫 단계는 컴파일입니다.

간단히 말해 :이 단계에서는 컴파일 타임 오류가 발생하지만 나중에 런타임 오류가 발생합니다.

기억하십시오 : 프로그램이 오류없이 컴파일되었다고해서 오류없이 실행되는 것은 아닙니다.

프로그램 수명주기의 준비, 실행 또는 대기 중 런타임 오류는 수명주기의 '새'단계 전에 컴파일 시간 오류가 발생합니다.

컴파일 타임 오류의 예 :

구문 오류-코드가 모호한 경우 어떻게 기계 수준 명령어로 컴파일 할 수 있습니까? 코드는 언어의 구문 규칙을 100 % 준수해야합니다. 그렇지 않으면 작업 기계 코드 로 컴파일 할 수 없습니다 .

런타임 오류의 예 :

메모리 부족-예를 들어 재귀 함수를 호출하면 특정 정도의 변수가 주어지면 스택 오버플로가 발생할 수 있습니다! 컴파일러는 이것을 어떻게 예상 할 수 있습니까!? 그럴 순 없어.

그리고 그것은 컴파일 타임 에러와 런타임 에러의 차이점입니다


2

런타임은 프로그램을 실행할 때 발생하는 문제를 의미합니다.

컴파일 시간은 프로그램을 컴파일 할 때 어떤 일이 발생 함을 의미합니다.


2

컴파일 시간 :

컴파일 타임에 수행되는 작업은 결과 프로그램이 실행될 때 비용이 거의 들지 않지만 프로그램을 빌드 할 때 큰 비용이 발생할 수 있습니다. 실행 시간:

거의 정반대입니다. 빌드 할 때 적은 비용, 프로그램 실행시 더 많은 비용.

다른 쪽에서; 컴파일 타임에 수행 된 작업은 시스템에서만 실행되고 런타임 인 ​​경우 사용자 시스템에서 실행됩니다.


2

컴파일 시간 : 소스 코드를 머신 코드로 변환하여 실행 파일이되도록하는 데 걸리는 시간을 컴파일 시간이라고합니다.

런타임 : 응용 프로그램이 실행 중일 때이를 런타임이라고합니다.

컴파일 시간 오류는 구문 오류, 누락 된 파일 참조 오류입니다. 소스 코드가 실행 가능한 프로그램으로 컴파일 된 후 그리고 프로그램이 실행되는 동안 런타임 오류가 발생합니다. 예를 들어 프로그램 충돌, 예기치 않은 프로그램 동작 또는 기능이 작동하지 않습니다.


2

당신이 상사이고 조수와 하녀가 있고, 그들에게 할 일 목록을 주면, 조교 (컴파일 타임)가이 목록을 잡고 작업이 이해할 수 있고 당신이 있는지 확인하기 위해 점검을 할 것입니다 어색한 언어 나 구문으로 글을 쓰지 않았으므로 그는 당신이 직업을 위해 누군가를 지명하고 싶다고 이해하고 당신을 위해 그를 지명하고 커피를 원한다는 것을 이해하므로 그의 역할은 끝났고 하녀 (런타임) 그녀는 커피를 만들기 위해 그 일을 시작하지만 갑자기 커피를 만들지 않아서 커피를 만들지 않거나 다르게 행동하고 차를 만듭니다 (오류가 발견되어 프로그램이 다르게 행동 할 때) ).


1

다음은 "런타임과 컴파일 타임의 차이점은 무엇입니까?"라는 질문에 대한 답변의 확장입니다. 런타임 및 컴파일 타임과 관련된 오버 헤드의 차이점은 무엇입니까?

제품의 런타임 성능은 결과를 더 빠르게 제공하여 품질에 기여합니다. 제품의 컴파일 타임 성능은 편집 컴파일-디버그주기를 단축하여 적시성에 기여합니다. 그러나 런타임 성능과 컴파일 시간 성능은 적시 품질을 얻는 데있어 2 차적인 요소입니다. 따라서 전반적인 제품 품질 및 적시성 향상으로 정당화되는 경우에만 런타임 및 컴파일 타임 성능 향상을 고려해야합니다.

자세한 내용은 여기를 참조하십시오 .


1

나는 항상 프로그램 처리 오버 헤드와 그것이 이전에 언급 한 것처럼 성능에 어떤 영향을 미치는지에 대해 생각했습니다. 간단한 예는 코드에서 내 객체에 필요한 절대 메모리를 정의하는지 여부입니다.

정의 된 부울은 x 메모리를 사용하며 컴파일 된 프로그램에 있으며 변경 될 수 없습니다. 프로그램이 실행될 때 x에 할당 할 메모리 양을 정확히 알 수 있습니다.

반면에 일반 객체 유형 (예 : 정의되지 않은 자리 표시 자 또는 거대한 얼룩에 대한 포인터)을 정의하면 프로그램이 실행될 때까지 객체에 필요한 실제 메모리를 알 수 없으며 무언가를 할당 할 수 있습니다 따라서이를 평가하고 메모리 할당 등이 런타임에 동적으로 처리됩니다 (더 많은 런타임 오버 헤드).

동적으로 처리되는 방법은 언어, 컴파일러, OS, 코드 등에 따라 다릅니다.

그러나 참고 사항은 실제로 런타임과 컴파일 시간을 사용하는 컨텍스트에 따라 다릅니다.


1

서로 다른 두 개의 넓은 그룹 정적 바인딩과 동적 바인딩으로 분류 할 수 있습니다. 바인딩이 해당 값으로 수행되는 시점을 기반으로합니다. 컴파일 타임에 참조가 해결되면 정적 바인딩이고 참조가 런타임에 해결되면 동적 바인딩입니다. 정적 바인딩 및 동적 바인딩은 초기 바인딩 및 후기 바인딩이라고도합니다. 때로는 정적 다형성 및 동적 다형성이라고도합니다.

Joseph Kulandai


1

런타임과 컴파일 시간의 주요 차이점은 다음과 같습니다.

  1. 코드에 구문 오류와 유형 검사가 있으면 런타임 오류가 발생합니다. 런타임 : 코드 실행 후 검사합니다. 예를 들면 다음과 같습니다.

int a = 1 int b = a/0;

여기서 첫 번째 줄에는 작업 b를 수행하는 동안 프로그램을 실행 한 후 컴파일 시간 오류 끝에 ---> 컴파일 시간 오류가 발생하면 세미콜론이 없습니다. 결과는 무한합니다 .-> 런타임 오류입니다.

  1. 컴파일 타임은 코드에서 제공하는 기능의 출력을 찾지 않지만 런타임은 그렇지 않습니다.

1

다음은 매우 간단한 답변입니다.

런타임 및 컴파일 시간은 소프트웨어 프로그램 개발의 여러 단계를 나타내는 프로그래밍 용어입니다. 프로그램을 만들기 위해 개발자는 먼저 프로그램 작동 방식을 정의하는 소스 코드를 작성합니다. 작은 프로그램에는 수백 줄의 소스 코드 만 포함될 수있는 반면 큰 프로그램에는 수십만 줄의 소스 코드가 포함될 수 있습니다. 실행 가능한 프로그램이 되려면 소스 코드를 머신 코드로 컴파일해야합니다. 이 컴파일 과정을 컴파일 시간이라고합니다 (컴파일러를 번역기로 생각하십시오).

컴파일 된 프로그램은 사용자가 열고 실행할 수 있습니다. 응용 프로그램이 실행 중이면이를 런타임이라고합니다.

"런타임"및 "컴파일 시간"이라는 용어는 종종 프로그래머가 다른 유형의 오류를 나타내는 데 사용됩니다. 컴파일 시간 오류는 구문 오류 또는 파일 참조 누락과 같은 문제로 프로그램이 성공적으로 컴파일되지 못하게합니다. 컴파일러는 컴파일 시간 오류를 생성하며 일반적으로 소스 코드의 어떤 행이 문제를 일으키는 지 나타냅니다.

프로그램의 소스 코드가 이미 실행 가능한 프로그램으로 컴파일 된 경우 프로그램이 실행되는 동안 여전히 버그가 발생할 수 있습니다. 작동하지 않는 기능, 예기치 않은 프로그램 동작 또는 프로그램 충돌이 그 예입니다. 이러한 유형의 문제는 런타임시 발생하므로 런타임 오류라고합니다.

참조


0

IMHO 당신은 런타임과 컴파일 시간의 차이에 대해 생각하기 위해 많은 링크와 리소스를 읽어야합니다. 그것은 매우 복잡한 주제이기 때문입니다. 이 그림 / 링크 중 일부를 추천합니다.

위에서 말한 것 외에도 때로는 1000 단어의 그림을 추가하고 싶습니다.

  1. 이 두 가지 순서는 다음과 같습니다. 첫 번째는 컴파일 시간이며 사용자는 컴파일 된 프로그램을 열고 실행할 수 있습니다. 응용 프로그램이 실행 중이면 runtime : compile time과 runtime1 컴파일 시간과 런타임 1;

CLR_diag 컴파일 시간과 runtime2  CLR_diag 컴파일 시간과 runtime2

 from Wiki  

https://en.wikipedia.org/wiki/Run_time https://en.wikipedia.org/wiki/Run_time_(program_lifecycle_phase)

런타임, 런타임 또는 런타임은 다음을 참조 할 수 있습니다.

컴퓨팅

컴퓨터 프로그램이 실행되는 기간 (프로그램 수명주기 단계)

프로그래밍 언어에 내장 된 기능을 구현하도록 설계된 프로그램 라이브러리 인 런타임 라이브러리

컴퓨터 시스템의 실행을 지원하도록 설계된 런타임 시스템

소프트웨어 실행, 런타임 단계 동안 하나씩 명령을 수행하는 프로세스

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오 컴파일러 목록 https://en.wikipedia.org/wiki/List_of_compilers여기에 이미지 설명을 입력하십시오 여기에 이미지 설명을 입력하십시오

  • Google에서 검색하고 런타임 오류와 컴파일 오류를 비교하십시오.

런타임 오류

컴파일 오류 ;

  1. 내 의견으로는 알아야 할 매우 중요한 사항 : 3.1 빌드 대 컴파일과 빌드 수명주기의 차이점 https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html

3.2이 3 가지 차이점 : 컴파일 vs 빌드 vs 런타임

https://www.quora.com/What-is-the-difference-between-build-run-and-compile 페르난도 파도 안 (Pernando Padoan), 언어 디자인에 대해 조금 궁금한 개발자 2 월 23 일 답변을 드리겠습니다 다른 답변에 :

실행은 바이너리 실행 파일 (또는 통역 언어의 경우 스크립트)이 컴퓨터에서 새로운 프로세스로 실행되도록합니다. 컴파일은 일부 고급 언어로 작성된 프로그램을 구문 분석하고 (머신 코드와 비교하면 더 높음) 구문, 의미론, 라이브러리 연결, 일부 최적화 수행 후 바이너리 실행 프로그램을 출력으로 작성하는 프로세스입니다. 이 실행 파일은 머신 코드 또는 일종의 바이트 코드 형태 일 수 있습니다. 즉, 일종의 가상 머신을 대상으로하는 명령어입니다. 빌드에는 일반적으로 종속성 검사 및 제공, 코드 검사, 코드를 바이너리로 컴파일, 자동화 된 테스트 실행 및 결과 바이너리 및 기타 자산 (이미지, 구성 파일, 라이브러리 등)을 배포 가능한 파일의 특정 형식으로 패키징하는 작업이 포함됩니다. 대부분의 프로세스는 선택 사항이며 일부는 빌드하려는 대상 플랫폼에 따라 다릅니다. 예를 들어 Tomcat 용 Java 응용 프로그램을 패키징하면 .war 파일이 출력됩니다. C ++ 코드에서 Win32 실행 파일을 빌드하면 .exe 프로그램이 출력되거나 .msi 설치 프로그램으로 패키지 될 수도 있습니다.


0

이 예를 살펴보십시오.

public class Test {

    public static void main(String[] args) {
        int[] x=new int[-5];//compile time no error
        System.out.println(x.length);
    }}

위의 코드는 성공적으로 컴파일되었으며 구문 오류가 없으며 완벽하게 유효합니다. 그러나 런타임에 다음과 같은 오류가 발생합니다.

Exception in thread "main" java.lang.NegativeArraySizeException
    at Test.main(Test.java:5)

컴파일 시간에 특정 사례가 확인 된 경우와 같이, 프로그램이 출력을 얻는 모든 조건을 만족하면 특정 사례가 확인 된 후 실행됩니다. 그렇지 않으면 컴파일 시간이나 런타임 오류가 발생합니다.


0

공개 클래스 RuntimeVsCompileTime {

public static void main(String[] args) {

    //test(new D()); COMPILETIME ERROR
    /**
     * Compiler knows that B is not an instance of A
     */
    test(new B());
}

/**
 * compiler has no hint whether the actual type is A, B or C
 * C c = (C)a; will be checked during runtime
 * @param a
 */
public static void test(A a) {
    C c = (C)a;//RUNTIME ERROR
}

}

class A{

}

class B extends A{

}

class C extends A{

}

class D{

}


0

실제 코드를 읽음으로써 코드 컴파일 구조를 이해할 수 있습니다. 사용 된 패턴을 이해하지 않으면 런타임 구조가 명확하지 않습니다.


-1

SO에 대한 좋은 질문은 아니지만 (구체적인 프로그래밍 질문은 아니지만) 일반적으로 나쁜 질문은 아닙니다.

그것이 사소한 것이라고 생각한다면 : 읽기 시간과 컴파일 시간은 어떻습니까? 그리고 이것이 언제 유용한 구별입니까? 런타임에 컴파일러를 사용할 수있는 언어는 어떻습니까? Guy Steele (더미 없음)은 CLTL2에 EVAL-WHEN에 대해 7 페이지를 썼는데, CL 프로그래머는이를 제어하는 ​​데 사용할 수 있습니다. 두 문장만으로도 정의 하기에는 충분치 않으며 , 그 자체로는 설명이 부족 하다 .

일반적으로 언어 디자이너가 피하려고하는 것은 어려운 문제입니다. 그들은 종종 "컴파일러가 있습니다. 컴파일 타임 일을합니다. 그 이후의 모든 것이 재미 있습니다"라고 말합니다. C는 가장 유연한 계산 환경이 아니라 구현이 간단하도록 설계되었습니다. 런타임에 컴파일러를 사용할 수 없거나 표현식을 평가할 때 쉽게 제어 할 수있는 기능을 사용하지 않으면 일반적인 매크로 사용을 위조하는 언어의 해킹이 발생하거나 사용자가 시뮬레이션을 위해 디자인 패턴을 사용하는 경향이 있습니다. 더 강력한 구조를 가지고 있습니다. 구현하기 쉬운 언어는 확실히 가치있는 목표가 될 수 있지만 이것이 프로그래밍 언어 디자인의 끝이 아니라는 것을 의미하지는 않습니다. (EVAL-WHEN을 많이 사용하지 않지만 그것 없이는 인생을 상상할 수 없습니다.)

그리고 컴파일 타임과 런타임 관련 문제 공간은 거대하고 여전히 미개척 상태입니다. 그것은 SO가 토론을 할 수있는 올바른 장소라고 말할 수는 없지만, 사람들이이 영역을 더 깊이 탐구 할 것을 권장합니다. 그 질문은 간단하거나 어리석지 않으며, 적어도 조사자를 올바른 방향으로 향하게 할 수 있습니다.

불행히도, 나는 이것에 대한 좋은 참고 자료를 모른다. CLTL2는 그것에 대해 조금 이야기하지만 그것에 대해 배우는 것은 좋지 않습니다.


4
친구에게 좋은 프로그래밍 질문이 아닌 것은 모두 상대적입니다. 나는 그것이 훌륭한 질문이고 더 많은 것을 배우고 싶었던 것이라고 생각했습니다. 예, 일반적인 "개념"과 컴파일 시간과 런타임이 무엇인지 알고 있지만 실제로 런타임과 컴파일 시간에 발생하는 불완전 성을 알고 싶습니다. 프로그래밍 할 때 중요하고 알아야 할 사항이 있습니다. 매우 구체적이지 않기 때문에 그가 묻는 이유입니다. 사람들이 여기 앉아서 이런 일반적인 질문은 그들이 어떤 개발자에게도 파악해야 할 가장 중요한 질문 일 때 가치가 없다고 말할 때 나는 그것을 싫어합니다.
PositiveGuy

1
질문에 가치가 없다면 이것이 문제입니다. 일반적인 경우에는 그 이유가 있습니다. 일반적인 질문이 마음에 들지 않는다고해서 세상이 자신이 유용하다고 생각하는 것을 중심으로한다는 의미는 아닙니다. 그는이 질문을 할 의도가 있으며 두 가지를 더 잘 이해하고 정의하기위한 다양한 답변을 원합니다. 알 겠어요?
PositiveGuy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.