Спускаемся в сборку с Ruby через C?
-
20-12-2019 - |
Вопрос
Поскольку Ruby позволяет вам перейти на C для любых частей, где производительность имеет решающее значение, а простой Ruby не справляется с этой задачей, и поскольку C позволяет вам перейти на ассемблер в тех же обстоятельствах, я всегда задавался вопросом, будет ли это можно встроить язык ассемблера в ваш код Ruby, сначала перейдя к C, а затем из кода C перейдя к ассемблеру.
Я всегда надеялся, что это возможно, но до сих пор не нашел ничего, что могло бы подтвердить или опровергнуть это.Из-за исследования Qt (и, следовательно, C++) для побочного проекта я наткнулся на заявление о Сравнение Ruby с C и C++ на сайте Ruby-lang.com. это в Руби
- Вы не можете перейти к сборке
Означает ли это просто, что вы не можете пойти напрямую на ассемблеру, или что на C это сделать вообще нельзя?А что, если вы пишете расширение для Ruby на C:Могу ли я предположить, что, поскольку это всего лишь C (не встроенный в Ruby), вы все равно можете использовать там ассемблер, а Ruby все еще может использовать расширение C со сборкой в нем?
Решение
Учитывая контекст, кажется совершенно ясным, что это означает Рубин, вы не можете просто бросить что-то сумасшедшее, например:
def func1(arr)
arr.map { |v| func2(v) }
end
def func2(val)
asm do
mov ax, 1234h
mov bx, ax
end
end
Ruby не может помешать вам использовать что-то подобное в связанном объекте C.
Но, учитывая это в качестве примера, было бы очень круто, если бы кто-то сделал такую библиотеку.:)