Что такое «время выполнения»?


405

Я слышал о таких вещах, как «C Runtime», «Visual C ++ 2008 Runtime», «.NET Common Language Runtime» и т. Д.

  • Что такое « время выполнения »?
  • Из чего это сделано?
  • Как это взаимодействует с моим кодом? Или, может быть, точнее, как мой код контролируется этим?

При кодировании языка ассемблера в Linux я мог использовать инструкцию INT для выполнения системного вызова. Итак, разве среда выполнения - не что иное, как набор готовых функций, которые оборачивают низкоуровневую функцию в более абстрактные и высокоуровневые функции? Но разве это не похоже на определение библиотеки, а не среды выполнения?

Являются ли «среда выполнения» и « библиотека времени выполнения » разными вещами?

ДОБАВИТЬ 1

Сейчас я думаю, что, возможно, Runtime имеет что-то общее с так называемой виртуальной машиной , такой как JVM. Вот цитата, которая приводит к такой мысли:

Этот процесс компиляции является достаточно сложным, чтобы разбить его на несколько уровней абстракции, и в них обычно участвуют три транслятора: компилятор, реализация виртуальной машины и ассемблер. --- Элементы вычислительных систем (Введение, Дорога к аппаратной земле)

ДОБАВИТЬ 2

Книга Эксперт C Программирование: Deep C Secrets . Глава 6 Структуры данных времени выполнения является полезной ссылкой на этот вопрос.


Среда выполнения содержит runtime libraryплюс некоторый управляющий код и некоторое состояние (предоставляется ОС).
Мартин Йорк,

43
Отличный вопрос, всегда сомневался в этом.
contactmatt

Я бы не назвал INT функцией. Пожалуйста, см. Stackoverflow.com/questions/1817577/… для получения дополнительной информации.
Корай Тугай

2
Я нашел другой пост на родственном сайте, который может быть полезен: programmers.stackexchange.com/questions/294346/…
CloudyTrees

Я всегда отношусь к этому как к песочнице для инфраструктуры нижнего уровня. У вас есть диспетчер задач / или процессы в Unix kit, все библиотеки низкого уровня GUI и т. Д. Все это является частью времени выполнения. Основы, на которых строятся вещи.
JGFMK

Ответы:


262

Runtime описывает программное обеспечение / инструкции, которые выполняются во время работы вашей программы, особенно те инструкции, которые вы не написали явно, но необходимы для правильного выполнения вашего кода.

Низкоуровневые языки, такие как C, имеют очень маленькое (если есть) время выполнения. Более сложные языки, такие как Objective-C, который обеспечивает динамическую передачу сообщений, имеют гораздо более длительное время выполнения.

Вы правы, что код времени выполнения - это код библиотеки, но код библиотеки - это более общий термин, описывающий код, созданный любой библиотекой. Код времени выполнения - это, в частности, код, необходимый для реализации возможностей самого языка.


103

Runtime - это общий термин, который относится к любой библиотеке, инфраструктуре или платформе, на которых работает ваш код.

Среды выполнения C и C ++ являются коллекциями функций.

Среда выполнения .NET содержит интерпретатор промежуточного языка , сборщик мусора и многое другое.


4
Стандартная библиотека C ++ не только содержит функции, и, ссылаясь на Matt Ball, C и C ++ «runtime» являются библиотеками времени выполнения, .NET runtime - это библиотека времени выполнения и система времени выполнения.
Смерлин

1
У меня вопрос, что статические библиотеки тоже исполняются? я думаю, что термин используется в основном для общих объектов, не так ли? рассмотрим libc в Linux. А как насчет платформ и фреймворков? они тоже разбиты на библиотеки?
Амир Заде

3
Но как мой код может работать на любой « библиотеке, фреймворке или платформе »? Он должен работать на процессоре или другом процессоре. Не могли бы вы предоставить дополнительный уровень детализации для большей ясности?
n611x007

Среды выполнения C и C ++ являются коллекциями функций. -> Какие функции?
Корай Тугай

3
@KorayTugay: функции в стандартной библиотеке, например coutили printf.
Слух

80

Согласно Википедии: библиотека времени выполнения / система времени выполнения .

В компьютерном программировании библиотека времени выполнения - это специальная библиотека программ, используемая компилятором для реализации функций, встроенных в язык программирования, во время выполнения (выполнения) компьютерной программы. Это часто включает функции для ввода и вывода или для управления памятью.


Система времени выполнения (также называемая системой времени выполнения или просто среда выполнения) - это программное обеспечение, разработанное для поддержки выполнения компьютерных программ, написанных на некотором компьютерном языке. Система времени выполнения содержит реализации базовых команд низкого уровня, а также может реализовывать команды более высокого уровня и может поддерживать проверку типов, отладку и даже генерацию и оптимизацию кода. Некоторые сервисы системы времени выполнения доступны программисту через интерфейс прикладного программирования, но другие сервисы (такие как планирование задач и управление ресурсами) могут быть недоступны.


Re: ваше редактирование , "runtime" и "runtime library" - это два разных имени для одной и той же вещи.


69
Википедия не является хорошим источником для цитат. Это хорошее место для начала поиска авторитетных источников, но само по себе это не следует считать авторитетным, и поэтому цитирование из него не является надежным. (Согласно заявлениям г-на Уэльса, создателя Википедии).
Мартин Йорк,

5
Что означает «во время выполнения» в первой цитате (предположительно о библиотеке времени выполнения)? Простая [неправильная] интерпретация может быть следующей: «во время выполнения программы компилятор параллельно использует библиотеку (для себя) для реализации (т. Е. Генерирования дополнительного кода во время выполнения),« обещанную »(согласно спецификации языка). ) функции для программы ". Это может быть ложным и / или легко сгибаться с помощью системы определения времени выполнения.
n611x007

2
Продолжать с того места, где ушел Локи, особенно когда ни одна из статей не дает никаких ссылок (это не цитата, это просто то, что я подумал, что лучше сказать)
arsaKasra

1
@MartinYork, энциклопедия не только не авторитетна, она также сосредоточена на документации, а не на объяснениях. Те могут быть очень разными.
Рой Принс

59

Среда выполнения или среда выполнения является частью языковой реализации, которая выполняет код и присутствует во время выполнения ; часть реализации во время компиляции называется средой перевода в стандарте C.

Примеры:

  • среда выполнения Java состоит из виртуальной машины и стандартной библиотеки

  • обычная среда выполнения C состоит из загрузчика (который является частью операционной системы) и библиотеки времени выполнения, которая реализует части языка C, которые не встроены в исполняемый файл компилятором; в размещенных средах это включает в себя большинство частей стандартной библиотеки


2
Спасибо, я думаю, что это лучший ответ в этой теме.
Корай Тугай

1
Я ценю название «среда выполнения», но я думаю, что использование только «среды выполнения» в качестве псевдонима для первого - плохая идея (что, по моим наблюдениям, делают многие программисты), «среда выполнения» является более точной. Я согласен с @ MichałTrybus, что «время выполнения» означает «время запуска программы».
Влоху

32

В моем понимании время выполнения - это именно то, что оно означает - время запуска программы. Вы можете сказать, что что-то происходит во время выполнения / выполнения или во время компиляции.

Я думаю, что runtime и runtime library должны быть (если они не являются) двумя разными вещами. «C runtime» мне не кажется правильным. Я называю это "C runtime library".

Ответы на другие ваши вопросы: Я думаю, что термин время выполнения может быть расширен, чтобы включить также среду и контекст программы, когда она запускается, поэтому:

  • он состоит из всего, что можно назвать «средой» во время запуска программы, например, другие процессы, состояние операционной системы и используемых библиотек, состояние других процессов и т. д.
  • он не взаимодействует с вашим кодом в общем смысле, он просто определяет, при каких обстоятельствах работает ваш код, что доступно ему во время исполнения.

Этот ответ в какой-то степени только мое мнение, а не факт или определение.


29

Мэтт Болл ответил правильно. Я бы сказал об этом на примерах.

Подумайте о запуске программы, скомпилированной в компиляторе Turbo-Borland C / C ++ (версия 3.1 от 1991 года), и позвольте ей работать под 32-битной версией Windows, такой как Win 98/2000 и т. Д.

Это 16-битный компилятор. И вы увидите, что все ваши программы имеют 16-битные указатели. Почему так, когда ваша ОС 32-битная? Потому что ваш компилятор настроил среду исполнения 16 бит и 32-битная версия ОС поддерживает это.

То, что обычно называют JRE (Java Runtime Environment), предоставляет Java-программе все ресурсы, которые ей могут понадобиться для выполнения.

На самом деле, среда выполнения - это мозговой продукт идеи виртуальных машин. Виртуальная машина реализует сырой интерфейс между оборудованием и тем, что может потребоваться программе. Среда выполнения принимает эти интерфейсы и представляет их для использования программистом. Разработчику компилятора понадобятся эти средства, чтобы обеспечить среду выполнения для его программ.


Виртуальная машина реализует «сырой» интерфейс между оборудованием и тем, что может потребоваться программе. -> Я не уверен в этом.
Корай Тугай

7

Время выполнения точно там, где ваш код входит в жизнь, и вы можете увидеть много важных вещей, которые ваш код делает.

Runtime несет ответственность за выделение памяти, освобождение памяти, использование подсистемы операционной системы, например (файловые службы, службы ввода-вывода .. сетевые службы и т. Д.)

Ваш код будет называться «РАБОТАЯ В ТЕОРИИ», пока вы практически не запустите свой код. и Runtime - друг, который помогает в достижении этого.


3

среда выполнения может обозначать текущую фазу жизненного цикла программы (время выполнения / время компиляции / время загрузки / время соединения) или это может означать библиотеку времени выполнения, которая формирует базовые действия низкого уровня, которые взаимодействуют со средой выполнения. или это может означать систему времени выполнения, которая совпадает со средой исполнения.

в случае программ на Си среда выполнения - это код, который устанавливает стек, кучу и т. д., что требуется средой Си. по сути, это создает среду, которая обещана языком. (он может иметь компонент библиотеки времени выполнения, crt0.lib или что-то подобное в случае C)


3

Я обнаружил, что следующая структура папок создает очень проницательный контекст для понимания того, что runtimeесть:

Время выполнения Mozilla XulRunner

Вы можете видеть, что есть « источник », есть « SDK » или «Software Development Kit», а затем есть Runtime, например. материал, который запускается - во время выполнения. Это содержание как:

содержимое папки runtime

Win32 zip содержит .exe -s и .dll -s.

Так, например. среда выполнения C - это такие файлы, как библиотеки времени выполнения C, .so-s или .dll -s, которые вы запускаете во время выполнения и делаются особенными благодаря их (или их содержанию или целям) включению в определение Язык C (на «бумаге»), затем реализуется выбранной вами реализацией на языке C. И затем вы получаете время выполнения этой реализации, чтобы использовать его и использовать его.

То есть, с небольшой поляризацией, запускаемые файлы, которые понадобятся пользователям вашей новой программы на Си. Как разработчик программы на C, вы тоже, но вам также нужны компилятор C и заголовки библиотеки C; пользователям это не нужно.


1
Еще один способ контекстуализации среды выполнения - это миф 6 этой несвязанной статьи, посвященной мифам о питоне, где вы можете увидеть различие между средой исполнения и языком программирования в первом абзаце мифа 6.
n611x007

3

Время выполнения в основном означает, когда программа взаимодействует с оборудованием и операционной системой машины. C не имеет своей собственной среды выполнения, но вместо этого он запрашивает среду выполнения у операционной системы (которая в основном является частью оперативной памяти), чтобы выполнить себя.


1

Если мое понимание прочитанных выше ответов верное, то среда выполнения - это в основном «фоновые процессы», такие как сборка мусора, выделение памяти, в основном любые процессы, которые вызываются косвенно библиотеками / средами, в которых написан ваш код, и особенно те процессы, которые происходят после компиляции во время работы приложения.


-1

Эти разделы документации MSDN посвящены большинству ваших вопросов: http://msdn.microsoft.com/en-us/library/8bs2ecf4(VS.71).aspx

Надеюсь, это поможет.

Спасибо Дамиан


3
На самом деле это не так; он не только спрашивает о .Net.
SLaks 10.10.10

@Matt: снова верно. Однако 2/3 его времени выполнения были поддержаны .Net, половина его тегов связана с .Net, и я просто подумал, что ссылки будут полезны.
Дамиан Шенкельман

Я бы сказал: «3/4 языков поддерживают .NET». .NET не оказывает большой поддержки, он спроектирован так, чтобы поддерживать разрыв между unix и windows на уровне промежуточного программного обеспечения.
Мэтт Джоунер

@MattJoiner - Это могло бы быть правдой в 2010 году, но сегодня это чудовищно неверно для реализаций .NET Standard и с открытым исходным кодом, таких как .NET Core и т. Д.
rory.ap

-2

Время выполнения - это тот случай, когда вы не знаете, какой тип объектов создается во время его выполнения, создание объектов основано на определенном условии или некоторой вычислительной работе. Напротив, время компиляции - это тот случай, когда требуемые объекты определяются вами до его выполнения.


-3

Время выполнения несколько противоположно времени разработки и времени компиляции / соединения. Исторически это происходило из медленной среды мэйнфреймов, где машинное время было дорого.


1
Это не отвечает на вопрос и еще более усложняет его.
cglotr
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.