LINUX.ORG.RU

Что такое рантайм?

 


2

2

Тут царь и ему подобные частенько упоминают такую штуку как рантайм. А я из тех, кто не осилил, что это значит. Я знаю, что рантайм это время выполнения программы, как антоним компайлтайм. Например, ошибка может появиться «в рантайме». Мне кажется, данное слово еще употребляют к стандартным библиотекам ЯП. Например «сишный рантайм» . Я прав? Сишный рантайм это libc?

#include <stdio.h>
#include <iostream>

Тут у меня, по лоровской терминологии, включено 2 рантайма, сишный и плюсовой?

★★★★

Ответ на: комментарий от theNamelessOne

Ха. И тема совсем новая. Просмотрел как-то. Но дискуссия там странная и ничего все равно не понятно.

unt1tled ★★★★
() автор топика

Ты прав до слов «я прав» включительно. После этого просто два заголовка, включенных в сорец. Рантайм во втором смысле в программе будет независимо от того, что и куда ты включал.

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

arturpub ★★
()
Ответ на: комментарий от theNamelessOne

Там больше срач о «модели выполнения», зачем-то перемешанной с рантаймом. Тсу, судя по тегам, хватит понятия sequence point, не влезая в эту мышиную возню.

arturpub ★★
()

Рантайм - это то, что нужно самому языку для реализации собственных конструкций.

Самый простой пример: GC.

RazrFalcon ★★★★★
()

хм хм

райтайм в области лор это то что в терминах таненбаума(того самого) 70ых годов - даёт расширенную машину в которой язык чей рантайм фунциклирует.

чем ближе язык данной машине тем меньше(колмогорова мера вот это вот всё) рантайм.

т.е рантайм бойлерплейт исполнения для данного языка на данной машине.

например для перво компилируемых языков (фортраны там) не нужон стек на целевой машине.

а вот для Алгол-языков(си там паскаль ада и прочии языке 3го поколения) ...

qulinxao ★★☆
()

ин лифо ордер нет.

нет

нет.

рантайм - жаргонизм «библиотека времени исполнения» включающая(но не ограниченная как правило) в себя премайн машинению и машинерию завершения программы и перечу управления обратно в ос

qulinxao ★★☆
()

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

blokant ★★
()

В коде ниже, присваиваение переменной x происходит в момент работы программы. Все остальные действия происходят во время компиляции. Если сделать дизассемблирование, то «рантайм» в данном примере это вот эта инструкция:

movb   $0x6b,0x0
Т.о. любые инструкции, которые выполняются процессором во время работы программы это рантайм. Все остальные действия производит компилятор. Другое дело, что извлечение данных или заполнение некоторых областей памяти при запуске программы нельзя однозначно отнести к «чистому» рантайму или «чистому» компайлтайму (например, см. как инициализируются массивы).

/*
 * cc -Wall -Wextra -std=c89 -o volatile1 volatile1.c
 */

#include <stdio.h>

volatile char x;

int
main (void)
{
    printf ("the next instruction will be executed in a runtime:\n");
    x = 'k'; /* we tell to a compiler to skip any optimizations, using the volatile keyword above */
    printf ("x = %c\n", x);
    return 0;
}
anonymous
()

Мне кажется, данное слово еще употребляют к стандартным библиотекам ЯП. Например «сишный рантайм» . Я прав? Сишный рантайм это libc?

А как вообще можно программировать с такими понятиями? Что значит сишный? Какая разница, какой язык? Ты же сам сначала говоришь

Я знаю, что рантайм это время выполнения программы, как антоним компайлтайм
Я знаю

Если ты это знаешь, то как это сочетается с той ахинеей, про libc и прочую лабуду, которую ты плетешь дальше? Или имеется в виду, знаю, читал, но не понимаю? Ну так надо так писать сразу. Создается ощущение, что си (относительно низкоуровневым же считается, да?) самый синтетический язык, оторванный от реальности из всех возможных, судя по понятиям его адептов. Например, по версии царя, ООП нужно для создания интерфейсов, а интерфейсы — для эргономичности. Может си вообще к программированию отношения не имеет?

filequest
()

Я знаю, что рантайм это время выполнения программы, как антоним компайлтайм.

Да

Мне кажется, данное слово еще употребляют к стандартным библиотекам ЯП

Это второе значение, сокращение от «run-time libraries». Однако термин включает не только собственно стандартную библиотеку, но и все библиотеки, которые компилятор неявно линкует с твоей программой.

В случае с С++ ситауция немного сложнее, так как значительная часть стандартной библиотеки является header-only и поэтому к рантайму не относится. С другой стороны, посредством рантайма реализуются исключения, которые являются частью core language, а не стандартной библиотеки (см. выше про «все библиотеки...»)

annulen ★★★★★
()
Ответ на: комментарий от qulinxao

включающая(но не ограниченная как правило) в себя премайн машинению и машинерию завершения программы и перечу управления обратно в ос

Для простых смертных, не-миллениалов: код, выполняющийся до функции main() и запускающий ее, и код, выполняющийся после возврата из нее.

annulen ★★★★★
()

Например, к рантайму относится код, который выполняется от точки входа в исполняемом файле до вызова функции main(). Как минимум, он откуда-то достаёт и передаёт значения argc, argv

Harald ★★★★★
()
Ответ на: комментарий от Harald

Как минимум, он откуда-то достаёт и передаёт значения argc, argv

Если ОПу это интересно, то берёт он (рантайм) их из стека, куда эти данные заботливо положило ядро.

Например, к рантайму относится код, который выполняется от точки входа в исполняемом файле до вызова функции main().

Опять же, если ОП сомневается, то main() это вовсе не тот кусок кода, который первым начинает выполняться при старте процесса.

runtime ★★★★
()

Тут у меня, по лоровской терминологии, включено 2 рантайма, сишный и плюсовой?

По ЛОРовской терминологии есть ещё один рантайм: runtime

runtime ★★★★
()

Как уже ответили, рантайм (в контексте C и C++) это то что до и после main(). Это инициализация служебных переменных, инициализация глобальных переменных, инициализация (и подержка) thread-local storage, поддержка самих thread (нет, не публичное API из C11 или C++11, а внутренние потроха), поддержка локалей, аллокаторы. Это всё - рантайм

Uter
()

Я знаю, что рантайм

Да - рантайм, в общем случае это всё то, что рантайм.

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

Выше адепт написал верно:

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

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

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

Так же и тут - трон в кустах - рантайма не содержит, трон белый - содержит. Хотя явно ты его не используешь и о нём не знаешь.

registrant27492
()

Please, read last comment with steady attention. Exactly,this is your level. You may watch youself there, just like in a mirror.

anonymous
()

см. Многоуровневая организация ЭВМ.Э.Таненбаум 1979

либо

Structured Computer Organization Andrew S. Tanenbaum 1976

qulinxao ★★☆
()
Ответ на: комментарий от arturpub

Открою маленькую тайну, но main() не является истинным entry point в программе.

Для MSVC (то, что я знаю) это mainCRTStartup (или ей подобные, разные для console и GUI, wide и ansi) делающие вот это: http://stackoverflow.com/questions/1583193/what-functions-does-winmaincrtstartup-perform

Uter
()
Ответ на: комментарий от Uter

Мне интересно, как он этого наркомана парсит, если кто не уловил. Про ентри поинты я узнал, когда начал exe вместо com собирать.

arturpub ★★
()
Ответ на: комментарий от qulinxao

У вас очень хорошо получается объяснять (я не шучу)

Deleted
()
Ответ на: комментарий от arturpub

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

b0c0813f
()
Ответ на: комментарий от arturpub

А, это. Работа со своеобразными заказчиками/инженерами придает необыкновенную гибкость парсеру

Uter
()
Ответ на: комментарий от b0c0813f

Не, я в целом это понял, можно просто выкинуть все знаки препинания и прочитать так, как будто не пишешь, а говоришь разговорно, угадывая интонацию. Но иногда она не угадывается и тогда все, reduce-reduce conflict, нерешаемая хрень.

arturpub ★★
()
Ответ на: комментарий от b0c0813f

моя после угадывания паттерна (первые 2-3 слова) перепрыгивает сразу на следующий пост =\

unt1tled ★★★★
() автор топика

Сишный рантайм это libc?

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

anonymous
()
Ответ на: комментарий от anonymous

Также crt0.S (или crt1.S, что почти то же самое) заполняют аргументы для main и делают её вызов, а также вызывают exit на выходе из main.

Обычно crt0/1 — это маленькая программа на ассемблере, описывающая функцию _start, куда передаётся исполнение при запуске программы. Она достаёт argc, argv и env из начала стека, как указано тут http://www.x86-64.org/documentation/abi.pdf Во фряхе, ядро копирует %rsp в %rdi, что позволяет написать crt1 на C. Для C это почти весь рантайм, он не такой сложный, как для других языков.

Более подробно http://wiki.osdev.org/Creating_a_C_Library

Иногда вместо crt0 в системе есть crt1. Разница между ними описана тут http://stackoverflow.com/questions/2709998/crt0-o-and-crt1-o-whats-the-differ...

anonymous
()

Тут царь и ему подобные частенько упоминают такую штуку как рантайм. А я из тех, кто не осилил, что это значит. Я знаю, что рантайм это время выполнения программы, как антоним компайлтайм. Например, ошибка может появиться «в рантайме».

Верно.

Мне кажется, данное слово еще употребляют к стандартным библиотекам ЯП. Например «сишный рантайм» . Я прав?

Почти. Рантайм языка это всё, что требуется для запуска программы на этом языке. Например для Java рантайм это виртуальная машина (JVM) и стандартная библиотека. Стандартная библиотека многих языков встраивается в конечный бинарник и при запуске ничего не требует, поэтому многие языки не требуют отдельного рантайма.

Сишный рантайм это libc?

Формально говоря да. Но по факту практически на любом языке программа использует libc, можно и без неё обойтись, но я таких языков не встречал. Так что его рантаймом можно считать с определённой натяжкой. Рантайм часто это какие-то дополнительные мегабайты. libc есть на любом компьютере, кроме совсем уж встраиваемых, поэтому с какой-то точки зрения у C нет рантайма.

Ну и C в принципе не требует рантайма, т.е. можно писать программы и без него (хотя немножко «поколдовать» придётся). Не со всеми языками так получится.

Тут у меня, по лоровской терминологии, включено 2 рантайма, сишный и плюсовой?

Это общепринятая терминология. Да, в твоём примере два рантайма.

Legioner ★★★★★
()
Ответ на: комментарий от unt1tled

если в ней нет вызовов malloc() и прочих из стандартной библиотеки, argc и argv она не использует, то рантайм в принципе не нужен тогда

например, программа, исполняющаяся на каком-нибудь контроллере без ОС, на голом железе

Harald ★★★★★
()
Ответ на: комментарий от unt1tled

вдруг у того контроллера и так после рестарта стек в приемлемом месте :D

Harald ★★★★★
()
Ответ на: комментарий от Legioner

Сишный рантайм это libc?

Формально говоря да.

Формально говоря нет.

практически на любом языке программа использует libc, можно и без неё обойтись, но я таких языков не встречал.

Встречал. Это, внезапно, сам Си.

tailgunner ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.