Що таке "час виконання"?


403

Я чув про такі речі, як "C Runtime", "Visual C ++ 2008 Runtime", ".NET Common Language Runtime" тощо.

  • Що саме " час виконання "?
  • З чого вона виготовлена?
  • Як це взаємодіє з моїм кодом? А може, точніше, як мій код контролюється ним?

Під час кодування мови збірки в Linux, я можу використовувати інструкцію INT для здійснення системного виклику. Отже, чи час виконання не що інше, як купа попередньо виготовлених функцій, які перетворюють функцію низького рівня на більш абстрактні та високі функції? Але це не схоже на визначення для бібліотеки, а не на час виконання?

Чи є "час виконання" та " бібліотека часу виконання " двома різними речами?

ДОДАТИ 1

У наші дні я думаю, що, можливо, Runtime має щось спільне з так званою віртуальною машиною , наприклад, JVM. Ось цитата, яка призводить до такої думки:

Цей процес компіляції є досить складним, щоб розділити його на кілька шарів абстракції, і зазвичай вони включають трьох перекладачів: компілятор, реалізацію віртуальної машини та асемблер. --- Елементи обчислювальних систем (вступ, дорога в землю обладнання)

ДОДАТИ 2

Програмування книги Expert C: Deep C Secrets . Розділ 6 Структури даних даних про виконання є корисним посиланням на це питання.


Тривалість виконання містить runtime libraryплюс деякий код управління та деякий стан (надається ОС).
Мартін Йорк

43
Чудове запитання, це завжди ставили під сумнів.
contactmatt

Я б не назвав INT функцією. Детальнішу інформацію див. У розділі stackoverflow.com/questions/1817577/… .
Корай Тугай

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

Мені це завжди подобається як пісочниця, щоб знизити інфраструктуру нижчого рівня. У вас є комплект диспетчера завдань / або процесів у комплекті Unix, всі бібліотеки низького рівня графічного інтерфейсу тощо. Все, що є частиною часу виконання. Основи, на яких будуються речі.
JGFMK

Відповіді:


262

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

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

Ви вірні, що код виконання - це код бібліотеки, але код бібліотеки - це більш загальний термін, який описує код, створений будь-якою бібліотекою. Код виконання - це конкретно код, необхідний для реалізації особливостей самої мови.


103

Виконання - це загальний термін, який відноситься до будь-якої бібліотеки, рамки чи платформи, на якій працює ваш код.

Виконання C і C ++ - це сукупність функцій.

Виконання .NET містить інтерпретатор проміжних мов , сміттєзбірник тощо.


4
Стандартна бібліотека C ++ містить не лише функції, а відповідно до Метта Балла, "час виконання" C і C ++ - це бібліотеки часу виконання.
смерлін

1
Моє запитання полягає в тому, що статичні бібліотеки теж є часом виконання? я думаю, що цей термін використовується в основному для спільних об'єктів, чи не так? розглянемо libc в Linux. А як щодо платформ і каркасів? вони теж розбиті на бібліотеки?
Амір Заде

3
Але як мій код насправді може працювати на будь-якій " бібліотеці, рамках чи платформі "? Він повинен працювати на процесорі або іншому процесорному блоці. Чи можете ви надати додатковий рівень деталізації для більш детального роз'яснення?
n611x007

Виконання C і C ++ - це сукупність функцій. -> Які функції?
Корай Тугай

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

80

Відповідно до Вікіпедії: бібліотека часу виконання / система виконання .

У комп'ютерному програмуванні бібліотека часу виконання - це спеціальна бібліотека програм, що використовується компілятором для реалізації функцій, вбудованих у мову програмування, під час виконання (виконання) комп'ютерної програми. Сюди часто входять функції введення та виведення даних або управління пам'яттю.


Система виконання часу (також називається системою виконання або просто час виконання) - це програмне забезпечення, розроблене для підтримки виконання комп'ютерних програм, написаних якоюсь мовою комп'ютера. Система виконання часу містить реалізацію основних команд низького рівня, а також може реалізовувати команди вищого рівня і може підтримувати перевірку типу, налагодження і навіть генерацію та оптимізацію коду. Деякі служби системи виконання часу доступні програмісту через інтерфейс програмування додатків, однак інші сервіси (такі як планування завдань та управління ресурсами) можуть бути недоступними.


Re: ваша редакція , "час виконання" та "бібліотека часу виконання" - це два різних імені для однієї і тієї ж речі.


69
Вікіпедія не є хорошим джерелом для цитат. Це гарне місце для початку шукати авторитетних джерел, але саме по собі його не слід вважати авторитетним і тому таке цитування з нього не є надійним. (Відповідно до заяв містера Уельса, творця Вікіпедії).
Мартін Йорк

5
На що посилається "під час виконання" у першій цитаті (нібито про бібліотеку виконання)? Легкою [неправильною] інтерпретацією може бути наступне: "під час виконання програми компілятор паралельно використовує бібліотеку (для себе) для реалізації (тобто генерування додаткового коду під час виконання)" обіцяно "(мовою специфікації ) функції для програми ". Це може бути помилковим та / або легко зігнутим при визначенні системи запуску.
n611x007

2
Щоб продовжити звідки Локі пішов, особливо коли жодна із статей не містить посилань (це не цитата, це якраз те, що я думав, що краще сказати)
arsaKasra

1
@MartinYork - це не тільки енциклопедія, яка не є авторитетною, вона також зосереджується на документації, а не на поясненні. Вони можуть бути дуже різними.
Рой Прінс

59

Середа або середовище виконання є частиною реалізації мови , який виконує код і присутні в режимі виконання ; час компіляції частина реалізації називається середовищем перекладу в стандарті C.

Приклади:

  • Час виконання Java складається з віртуальної машини та стандартної бібліотеки

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


2
Дякую, я думаю, що це найкраща відповідь у цій темі.
Корай Тугай

1
Я вдячний називати "середовищем виконання", але вважаю, що використання просто "часу виконання" як псевдоніму для попереднього є поганою ідеєю (це, з моїх спостережень, те, що роблять багато програмістів), "середовище виконання" є більш точним. Я погоджуюся з @ MichałTrybus, що "час виконання" означає "час запуску програми".
WloHu

32

На мій погляд, час виконання - це саме те, що це означає - час, коли програма працює. Ви можете сказати, що щось відбувається під час виконання / виконання або під час компіляції.

Я думаю, що бібліотека часу виконання та часу виконання повинні бути (якщо їх немає) двома окремими речами. "C час виконання" мені не здається правильним. Я називаю це "Бібліотека часу виконання".

Відповіді на ваші інші запитання: Я думаю, що термін виконання може бути розширений, щоб включати також середовище та контекст програми під час її запуску, так що:

  • він складається з усього, що можна назвати "середовищем" під час запуску програми, наприклад, інші процеси, стан операційної системи та використовувані бібліотеки, стан інших процесів тощо
  • він не взаємодіє з вашим кодом у загальному розумінні, він просто визначає, в яких обставинах працює ваш код, що йому доступне під час виконання.

Ця відповідь певною мірою поширюється лише на мою думку, а не на факт чи визначення.


29

Метт Балл відповів на це правильно. Я б сказав про це на прикладах.

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

Це 16-бітний компілятор. І ви побачите, що всі ваші програми мають 16-бітні покажчики. Чому так, коли ваша ОС 32-бітна? Оскільки ваш компілятор налаштував середовище виконання 16-ти біт, а 32-бітна версія ОС підтримувала це.

Що зазвичай називається JRE (Java Runtime Environment), надає програмі Java всі ресурси, які можуть знадобитися для її виконання.

Насправді, середовище виконання є продуктом мозку ідеї віртуальної машини. Віртуальна машина реалізує необмежений інтерфейс між обладнанням і тим, що може знадобитися програма. Навколишнє середовище виконання приймає ці інтерфейси та представляє їх для використання програмістом. Розробнику компілятора потрібні ці засоби, щоб забезпечити середовище виконання для своїх програм.


Віртуальна машина реалізує "необроблений" інтерфейс між апаратним забезпеченням і тим, що може знадобитися програма. -> Я не впевнений у цьому.
Корай Тугай

7

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

Виконання несе відповідальність за розподіл пам’яті, звільнення пам’яті з використанням підсистеми операційної системи, як-от (файлові послуги, послуги IO .. мережеві послуги тощо)

Ваш код буде називатися "РОБОТА В ТЕОРІЇ", поки ви практично не запустите свій код. а Runtime - друг, який допомагає досягти цього.


3

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

що стосується програм C, час виконання - це код, який встановлює стек, купу тощо, який вимагає середовища C. він по суті створює середовище, яке обіцяє мова. (це може мати компонент бібліотеки часу виконання, crt0.lib або щось подібне у випадку C)


3

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

Тривалість роботи Мозілли XulRunner

Ви можете бачити, що є " джерело ", є " SDK " або "Kit для розробки програмного забезпечення", а потім є Runtime, наприклад. речі, які запускаються - під час виконання. Його вміст виглядає так:

Вміст папки runtimes

Zip Win32 містить .exe -s та .dll -s.

Так, наприклад. C час виконання буде такими файлами - Бібліотеки виконання C, .so-s або .dll -s - ви працюєте під час виконання, зроблені спеціально за їх включенням (або їх вмістом або цілями) включенням у визначення Мова 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

@Matt: Ще раз. Однак 2/3 його версій підтримували. Net, 1/2 його тегів стосуються .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.