Ruby является действительно интерпретируемым языком, если все его реализации компилируются в байт-код?

Вы можете использовать kube-state-метрики для этой цели.

kube-state-metrics - это создание метрик из объектов API Kubernetes без изменений. Это гарантирует, что функции, предоставляемые показателями состояния куба, имеют такой же уровень устойчивости, что и сами объекты API Kubernetes. В свою очередь это означает, что метрики состояния куба в определенных ситуациях могут не отображать те же значения, что и kubectl, так как kubectl применяет определенные эвристики для отображения понятных сообщений. kube-state-metrics предоставляет необработанные данные, не измененные из API Kubernetes, таким образом, пользователи получают все необходимые им данные и выполняют эвристику, как они видят

blockquote>

. Вы можете найти метрики узла здесь [112 ]. Например:

Metric name: kube_node_info
node= 
kernel_version= 
os_image= 
container_runtime_version= 
kubelet_version= 
kubeproxy_version= 
provider_id=

16
задан River 18 October 2017 в 03:24
поделиться

5 ответов

Да, Ruby все еще интерпретируемый язык, или более точно, Интерпретатор Ruby Matz (MRI), который является тем, какие люди обычно говорят о том, когда они говорят о Ruby, является все еще интерпретатором. Шаг компиляции состоит в том, чтобы просто там уменьшить код до чего-то, что это быстрее для выполнения, чем интерпретация и иное толкование тому же коду раз за разом.

19
ответ дан 30 November 2019 в 15:30
поделиться

Почти каждый язык "компилируется" в наше время при подсчете байт-кода, как скомпилированного. Даже Emacs Lisp компилируется. Ruby был особым случаем, потому что до недавнего времени, он не был скомпилирован в байт-код.

Я думаю, что Вы правы подвергнуть сомнению утилиту охарактеризования языков, как "скомпилировано" по сравнению с "интерпретируемым". Одно полезное различие, тем не менее, - создает ли язык машинный код (например, x86 ассемблер) непосредственно из пользовательского кода. C, C++, многие Шепелявят, и Java с JIT включил, делают, но Ruby, Python и Perl не делают.

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

21
ответ дан 30 November 2019 в 15:30
поделиться

Можно запустить программы Ruby в интерактивном режиме с помощью irb, Интерактивный Ruby Shell. В то время как это может генерировать промежуточный байт-код, это - конечно, не "компилятор" в традиционном смысле.

3
ответ дан 30 November 2019 в 15:30
поделиться

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

Сам код байта является просто промежуточным шагом между литеральным кодом, написанным пользователем и виртуальной машиной, это все еще должно быть интерпретировано виртуальной машиной, хотя (поскольку это сделано с Java в JVM и PHP с кэшем кода операции).

3
ответ дан 30 November 2019 в 15:30
поделиться

Это возможно немного вне темы, но...

Железный Ruby является основанной на.NET реализацией рубина и поэтому обычно компилируется в код байта и затем JIT, скомпилированный в машинный язык во времени выполнения (т.е. не интерпретировал). Также (по крайней мере, с другими языками .NET, таким образом, я принимаю с рубином) ngen может использоваться для генерации скомпилированного собственного двоичного файла заранее, таким образом, это - эффективно скомпилированная версия машинного кода кода Ruby.

0
ответ дан 30 November 2019 в 15:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: