2009-12-23 12 views
3

Je n'ai aucune éducation formelle en informatique mais j'ai programmé en Java, Ruby, jQuery pendant longtemps.MacRuby: le runtime de l'objectif-c est le même que le runtime de ruby ​​

Je vérifiais le projet macruby. Je continue à courir dans des déclarations qui sont similaires à "Dans MacRuby objectif-runtime c est le même que ruby ​​runtime".

Je comprends ce qu'est l'IRM. Je comprends ce que Ruby 1.9 apporte à la table. Cependant, je ne comprends pas comment la VM pour une langue peut supporter une autre langue. Je sais que je pose une question à laquelle dépend des années d'éducation formelle. Encore des pointeurs et toute discussion aidera.

J'aime aussi ce que je vois dans macruby.

Répondre

0

Juste une note sur la

Cependant, je ne comprends pas comment la machine virtuelle pour une langue peut prendre en charge une autre langue.

partie. Une machine virtuelle représente une couche intermédiaire entre la machine et votre langage de programmation. Par exemple. la machine virtuelle Java (JVM) exécute ce qu'on appelle le bytecode java. Le compilateur javac prend le code source et le compile dans un langage intermédiaire - ce bytecode. Lorsque vous exécutez votre application, vous exécutez réellement bytecode dans la machine virtuelle:

Le temps d'exécution JVM exécute .class ou .jar, émulant l'instruction machine virtuelle Java définie par l'interprétation, ou en utilisant un juste à temps compilateur (JIT) comme HotSpot de Sun. La compilation JIT, pas l'interprétation, est utilisée dans la plupart des JVMs aujourd'hui pour atteindre une plus grande vitesse. Il existe également des compilateurs Ahead-of-time qui permettent au développeur de précompiler des fichiers de classe en code natif pour une plate-forme particulière.

Il est donc possible de coder dans toutes les langues (par exemple Clojure, Scala, Rhino, ...) pour lequel un compilateur à une certaine VM a été écrit. Le même principe s'applique à l'architecture autour du Common Intermediate Language (CIL) de Microsoft .NET.

Comme pour les macruby internes, il y a un short overview sur leur site.

1

Eh bien,

L'explication la plus simple est que MacRuby est un rubis 1,9 VM. Au cours des versions précédentes, il s'agissait d'une version modifiée de YARV (la machine virtuelle officielle de ruby ​​1.9) qui utilisait des équivalents trouvés dans des classes de base de pommes telles que NString au lieu d'utiliser des types personnalisés pour des rubis, des hachages etc. Avec l'avènement de la version 0.5, une toute nouvelle VM a été développée sur la base du framework LLVM, encore compatible avec ruby ​​1.9, qui est basée sur des classes de base de pommes. Par conséquent, vous pouvez penser à Macruby simplement comme un ruby ​​1.9 VM. Cependant, en raison de l'utilisation des classes de fondation susmentionnées, il a été possible d'interfacer nativement avec une grande partie des pommes propres API fournissant des fonctionnalités supplémentaires disponibles uniquement pour ceux qui exécutent MacRuby (comme HotCocoa par exemple.)