Es realmente compilado Objetivo C? ¿No es más como Visual Basic / .NET de tiempo de ejecución? Entonces, ¿qué impide que sea portátil para otras plataformas?

StackOverflow https://stackoverflow.com/questions/4571448

Pregunta

sintácticamente es de superconjunto de C. Sin embargo, dado que los mensajes son enviados y procesados ??en tiempo de ejecución Esto significa que no puede ser un lenguaje compilado como C pura pero se necesita un tiempo de ejecución como Visual Basic o .Net tiempo de ejecución.

A continuación, lo que impide que sea portátil para otras plataformas mediante la transformación de este tiempo de ejecución para algo así como .NET Framework o Java JVM?

Nota: cuando digo VB es, por supuesto, la última versión 6, que compila a bytecode así que ¿por qué pretender que Java o .Net son diferentes fundamentalmente de VB6 a excepción de la portabilidad es el mismo principio: ver similares a Java, Visual Basic es compilado en un lenguaje intermedio llamado "código de bytes". El código de bytes se traduce en lenguaje de máquina x86 por el módulo de tiempo de ejecución de Visual Basic.

Leer más: http://www.answers.com/topic/visual-basic # ixzz19iJd3wjA

Al igual que en Java, Visual Basic se compila en un lenguaje intermedio llamado "código de bytes". El código de bytes se traduce en lenguaje de máquina x86 por el módulo de tiempo de ejecución de Visual Basic.

¿Fue útil?

Solución

No se deduce en absoluto que el paso de mensajes no puede ser compilado. Es simplemente implica que el mensaje debe ser resuelto de una llamada al método en tiempo de ejecución. Objective-C es sin duda un lenguaje compilado.

El proceso se describe aquí . Es cierto que la llamada inicial a un método es más lento que una llamada al método C ++, pero la resolución se almacena en caché por lo que las llamadas posteriores son más rápidos. Tal comportamiento no determinista haría Objective-C inadecuado para algunas aplicaciones.

Objetivo-C se proporciona como un front-end de GCC, por lo que es altamente portátil. Sin embargo, sólo OSX y su predecesor Nextstep, y el IOS tienen una API del sistema operativo para que Objective-C es el idioma preferido (es decir, el idioma de la API de OS está escrito en / para). Así, mientras que puede ser utilizado en cualquier sistema operativo que soporta GCC, su utilidad en este tipo de plataformas se limita.

Otros consejos

Parece que está confundido entre la necesidad de soporte de ejecución para las características del lenguaje, y la diferencia entre una lengua nativa integra y compilado VM (o interpretado).

La mayoría de los lenguajes de alto nivel necesitan algunos tipo de apoyo en tiempo de ejecución. Incluso C tiene una biblioteca en tiempo de ejecución, aunque en muchas plataformas se puede optar por no utilizar algunos o todos de la misma. Los sistemas operativos modernos proporcionan un apoyo aún más el tiempo de ejecución, y muchos lenguajes proporcionan extensiones específicas del OS que integran estos - consideran que la carga dinámica de las bibliotecas ...

Además, no hay nada que nos impida la construcción de un sistema de paso de mensajes en la parte superior de un idioma que no es compatible de forma intrínseca. Puesto que esto es muy común (sobre todo para los programas escritos para las plataformas basadas en eventos), integrado en el lenguaje puede ser mirado como simplemente factorizar algunos busywork propenso a errores del código de alto nivel y en el lenguaje y en tiempo de ejecución.

Por último, Java y la mayoría de los lenguajes .NET se compila en realidad - que acaba de compilar abajo a un código de bytes que no se implementa la máquina de forma nativa, lo que requiere el uso de un virtual Máquina para realmente ejecutarlos. El VM más performant compilar el código nuevo antes de ejecutar - esto puede ser una técnica tan eficaz que se ha utilizado para Crecimiento rápido y eficiente herramienta de compilación cadenas !

Visual Basic es una cortina de humo aquí - algunas versiones se interpretan, otros se compilan , y VB.NET - al igual que otros lenguajes .NET - se compila a código de bytes y luego JIT-compilado de nuevo durante la ejecución (mientras superficialmente similar, esto tiende a ser implementado de manera muy diferente de la anterior VB VM). Por lo menos, esto debería decir que una lengua y los medios por los cuales los programas escritos en que se ejecutan no están tan estrechamente unida como comúnmente se cree, ...

En respuesta a su última pregunta : Objective-C no tiene no ha sido portátil, por lo menos en el sentido de que C es portátil (es decir, fuente- portabilidad del código). Apple utiliza el compilador GCC, que ha sido portado a una increíble variedad de plataformas ... Sin embargo , una vez que empiece a tomar ventaja de las API específicas de la plataforma (probablemente una de las mejores razones para usar Obj-C en las plataformas de Apple, para empezar ...) que eres limitados a las plataformas que implementan las API . binario portabilidad es posible en teoría, pero no conozco ningún implementaciones.

Pero ya que los mensajes son enviados y procesados ??en tiempo de ejecución significa esto ser un lenguaje compilado como C pura

¿Por qué no? Puede enviar y procesar mensajes en un lenguaje compilado, un lenguaje compilado podría proporcionar la reflexión y enviar dinámicamente llamadas así, si eso se necesitarían.

Obj-C, tal como se aplica en OSX / iOS es compilado a código nativo. Aquí es una pequeña introducción a la ejecución Obj-C, aquí es otra

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top