Почему была представлена ​​среда выполнения? - PullRequest
1 голос
/ 21 июня 2020

С сверхнизкоуровневыми языками, такими как Assembly, нет среды выполнения, но с чем-либо еще, что на самом деле часто используется, например Rust, C, C ++, C#, Java, Kotlin, Swift и т.д., c там среда выполнения, связанная с языком. Почему с этими языками не все делается во время компиляции? Это просто потому, что это было бы труднее сделать, чем использовать среду выполнения, или есть какая-то реальная польза от среды выполнения?

Ответы [ 3 ]

2 голосов
/ 21 июня 2020

Ну, нет «среды выполнения» с C или C ++, поскольку они являются полностью скомпилированными языками. Другие языки интерпретируются - по сути, среда выполнения, как вы ее называете, похожа на супер микрокод в процессоре, который интерпретирует операторы в Java, PHP, BASI C или что-то еще и переводит их в машинный код во время выполнения.

Что касается того, почему это делается - ну, я полагаю, чтобы ускорить разработку кода. Я не уверен, что сегодня это так же важно, как это было во времена z80 4 МГц !!!

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

1 голос
/ 26 июня 2020

Библиотека времени выполнения означает: код, который компилятор добавляет в вашу программу. Обычно он адаптируется к тому, как работает операционная система, и к тому, как язык хочет, чтобы операционная система работала.

Люди, пишущие C, хотели бы написать int fd = open("/dev/null", O_RDWR);, чтобы открыть файл. Они не хотят писать int fd; asm volatile("int 0x80" : "=a" (&fd) : "a" (1), "b" ("/dev/null"), "c" (2));. Таким образом, среда выполнения включает функцию с именем open, внутри которой находится этот ассемблерный код.

Компилятор может напрямую преобразовать вызов функции open в инструкцию int 0x80 - в этом случае это не будет средой выполнения, но разработчики компилятора предпочли бы определить его как обычную функцию, которая не генерирует специальных инструкций при ее вызове.

1 голос
/ 21 июня 2020

Язык программирования - это спецификация , то есть письменный документ. Для C11 прочтите стандарт n1570 . В качестве схемы введите R5RS .

Язык программирования может иметь несколько реализаций. Для C на Linux см. G CC, Clang , Tiny CC, nw cc et c .... Он имеет несколько C библиотек времени выполнения ( GNU glib c, musl-lib c, et c).

Не все реализации имеют библиотеку времени выполнения, потому что некоторые реализации языка являются чистыми интерпретаторами. Например, GNU Guile (на самом деле имеет байт-код для схемы).

Подробнее читайте в Dragon book .

Изучите исходный код нескольких реализаций, например, SBCL для Common Lisp . Или GNU Guile или Bigloo или Chicken / Scheme для Scheme.

Помните о программах Quine (например, скоро RefPerSys ).

...