LINUX.ORG.RU

Runtime и исполнительная модель — уточнение понятий

 , ,


1

3

Хаюшки!

После эпического срача в теме про Redox задался вопросом, а правильно ли я понимаю что такое рантайм в самом общем случае?

Как я думаю, собственно среда выполнения программы — это набор библиотек,

который транслирует вызовы процедур из библиотек некоторого ЯВУ в вызовы API-функций конкретной ОС.

В этой связи у меня другой вопрос, что такое модель выполнения?

Почему Вики говорит, что среда выполнения реализует исполнительную модель в терминах отличных от тех,

в которых реализована сама библиотека ЯВУ.

The runtime system implements an execution model different from that of the language the library is written in terms of.

Там дальше, конечно, идет пояснение, но его сути я так и не уловил.

Просвещайте, короче!

sudo cast tailgunner, i-rinat, beastie,

stevejobs

★★★★★

Последнее исправление: Twissel (всего исправлений: 5)

Почему Вики говорит, что среда выполнения реализует исполнительную модель в терминах отличных от тех, в которых реализована сама библиотека ЯВУ.

А они ошибаются. Это не обязательно. Интерпретатор языка может быть написан и на самом этом языке.

filequest
()

это скомпилированный набор библиотек, который транслирует вызовы процедур из библиотек некоторого ЯВУ

Это, ИМХО, тоже не особо удачное определение. Исполнительная среда, это машина, включающая этот набор (попросту говоря, набор текстов программ). Правильнее рассматривать ее в контексте поведения. То есть, она имеет поведение такое, что транслирует вот такие-то строки в такие-то, как именно она реализована, второстепенно. Само слово «скомпилированный набор библиотек» вводит в заблуждение. Когда они скомпилированны, их уже, как бы, не существует, в том смысле, что исходники можно выбросить, а среда никуда не денется. Набор этот не имеет прямого отношения к рантайму

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

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

filequest
()

,Почему Вики говорит, что среда выполнения реализует исполнительную модель в терминах отличных от тех,

в которых реализована сама библиотека ЯВУ.

Парсер вошел в бесконечную рекурсию и сегфолтнулся.

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

что i_rinat забанили

Ага, довыпендривался он.

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

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

Как практикующий программист :-)

Да тут скорее не для дискуссии, а для точного определения понятий, с претензией на универсальность.

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

Когда операция, обеспечиваемая языком, отсутствует в execution environment, она реализуется в runtime system. Для Си, например, умножение там, где его нет, или сдвиг на не-константное значение, хотя Си плохой пример - у него runtime system минимальная. Ну вот у Си++ исключения - часть runtime system, у Ады - управление задачами и рандеву.

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

В статье по ссылке справа есть блок, в котором runtime system и runtime library — отдельные пункты. В этом смысле у собранных программ на C и Rust runtime system нет. У Go и Objective-C есть: в частности, сборка мусора. У Java на JVM, понятное дело, есть JVM.

А чтобы всё не было так радужно, можно копнуть глубже, и обнаружить, что в glibc есть aio, который эмулируется на нитях. То есть некая неведомая штуковина запускает нити, хотя явно её никто не просил. Вполне себе runtime system.

Ох, там ещё и crt0. Вот тут я понимание потерял.

i-rinat ★★★★★
()
Последнее исправление: i-rinat (всего исправлений: 1)
Ответ на: комментарий от i-rinat

В статье по ссылке справа есть блок, в котором runtime system и runtime library — отдельные пункты

Там же написано «However, sometimes the term runtime library is meant to include the code of the runtime environment itself, even though much of that code cannot be directly reached via a library call». ИМХО, самая разумная трактовка, хотя уточнение бы не помешало - термин вроде «language runtime».

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

Execution model определяется языком, execution environment - обычно ОС, но может и голым железом.

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

Т.е. по-сути runtime-библиотека обеспечивает реализацию тех абстракций языка,

которые не реализованы в конкретной ОС?

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

Я бы сказал, что она реализует абстракции языка в терминах конкретной ОС. Правда, здесь корректнее говорить об execution environment, т.к. ОС может не быть или она может не участвовать в реализации конкретной абстракции.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от i-rinat

Я не очень понимаю, почему я там в списке

Извиняюсь =) Это я тебя порекомендовал ;-)

DELIRIUM ☆☆☆☆☆
()
Ответ на: комментарий от Twissel

Т.е. определение из ОП имеет право на жизнь?

«Набор библиотек, который транслирует вызовы процедур из библиотек некоторого ЯВУ в вызовы API-функций конкретной ОС»? Думаю, нет. Во-первых, «трансляция вызовов» - перегруженный термин; во-вторых, называть, например, рантайм Go или там Haskell «трансляцией» - это просто неуважение. Собственно, для достаточно сложного рантайма даже «реализация абстракций языка в терминах конкретной ОС» недостаточно уважительно :)

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

Ужос!

Я безнадежно отстал от жизни)))

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

Иными словами, чем больше абстракции ЯВУ отличаются от возможностей конкретной среды исполнения,

тем жирнее рантайм библиотека языка.

Так или нет?

Twissel ★★★★★
() автор топика
Последнее исправление: Twissel (всего исправлений: 2)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.