A menudo escucho el término que el lenguaje A está escrito en el lenguaje B. Por ejemplo, PHP ha sido escrito C , C # está escrito en C ++ .
¿Alguien puede explicar qué significa eso y si es correcto? ¿Tiene eso algo que ver con el compilador de intérpretes utilizado por el lenguaje?
Además, ¿en qué factores se basa la elección del lenguaje de implementación?
s/written/implemented/
Y es mucho más claro.Respuestas:
La mayoría de los lenguajes de programación se dividen en dos categorías: lenguajes interpretados y compilados.
Un compilador traduce un lenguaje compilado al código de la máquina , el lenguaje que la CPU ejecuta directamente paso a paso. Un lenguaje interpretado, por otro lado, utiliza un intermediario, un intérprete , para ejecutar el código del idioma. El intérprete es en sí mismo otro programa, usualmente compilado en código máquina.
PHP es un lenguaje interpretado. Necesita un programa separado para ejecutar el código PHP, la computadora no ejecuta el programa directamente. Ese programa separado, el intérprete PHP, está escrito en C.
C # es un lenguaje compilado, pero no está compilado en código máquina. En cambio, se compila en un lenguaje especializado, código de bytes, para ejecutarse en una máquina virtual. Java es otro ejemplo de tal configuración. Podrías verlo como un híbrido entre compilación e interpretación, donde la máquina virtual es un intérprete. La máquina virtual para C # (CLI o Common Language Infrastructure ) está escrita en C ++.
Otros ejemplos son:
fuente
Básicamente tienes razón. Si se dice que Ruby está escrito en C, esto significa que el intérprete de lenguaje y partes de la biblioteca central están escritos en C.
Entonces, el intérprete de Ruby es un programa en C que toma un archivo de texto como entrada, lo procesa y luego llama a funciones que están en otro archivo de texto (si está escrito en Ruby) o que son código C compilado, como la mayor parte de la funcionalidad básica que necesita para acceder directamente a recursos del sistema como la memoria, el sistema de archivos y más. Y algunas funciones que requieren un rendimiento muy alto.
Por lo tanto, tiene diferentes partes de un idioma que pueden o deben escribirse en otros idiomas. Nada le impedirá escribir el intérprete en C y las bibliotecas en C ++ (aunque quizás haga algunas cosas más difíciles). Incluso podría tener varios pasos y usar un lenguaje que sea muy bueno en el procesamiento de texto para generar algunos datos intermedios que luego se procesan con algún código C.
Los factores para la decisión pueden ser los mismos que para otras aplicaciones complejas. El rendimiento es uno. La capacidad de escribir código que puede acceder a los recursos del sistema directamente a otro. Por lo tanto, en la mayoría de los casos tiene que ser un lenguaje compilado (aunque en teoría podrías escribir un intérprete de Ruby en Python). La disponibilidad en diferentes sistemas es importante si desea que su idioma se ejecute en Linux, Win, OS X y otros.
fuente
Simplemente significa que la mayor parte del núcleo del lenguaje A está escrito en el lenguaje B. Qué "núcleo del lenguaje A" puede diferir de un idioma a otro, pero en términos generales, adivina correctamente, significa que es compilador o intérprete. El factor decisivo para elegir un idioma para escribir otro idioma es, como en casi todos los proyectos, con qué idiomas están más familiarizados los desarrolladores.
Dicho esto, "el idioma A está escrito en el idioma B" es una simplificación excesiva para la mayoría de los idiomas modernos. Si tomamos Python como ejemplo, mientras que la implementación de referencia, CPython , fue escrita en C, hay implementaciones escritas en otros lenguajes, como Jython (escrito en Java), IronPython (escrito en C #), PyPy (escrito en Python), CLPython (escrito en Common Lisp), Stackless Python (escrito en C y Python) y Unladen Swallow (escrito en C ++).
Un lenguaje de programación es una definición, y como muestra el ejemplo de Python, en realidad no hay restricciones sobre en qué idiomas se pueden escribir su compilador, intérprete y bibliotecas. Y, por supuesto, también es posible que un lenguaje se escriba en sí mismo, a través de un proceso llamado bootstrapping .
fuente
string.lower(s)
es una función de Python que delega esoreturn s.lower()
, eso es correcto. Las operaciones de caso de cadena CPython 3.3 se implementan en C.Desde la perspectiva del uso de un lenguaje de programación, un lenguaje de programación es solo un programa. Puede ser un compilador, o un intérprete, o puede ser algún tipo de máquina virtual. Todas esas cosas son solo programas de computadora y, por lo tanto, se pueden escribir en cualquier idioma.
Por lo tanto, si desea crear su propia versión de PHP, puede comenzar con el lenguaje con el que tenga más fluidez. Luego, escribiría un programa que pueda leer código con formato PHP y haga lo que la especificación de PHP indique que debe hacer su programa. . Por lo tanto, está creando el lenguaje PHP en el lenguaje X.
fuente
explode
que toma unString
y devuelve unArray
, su implementación (es decir, el código que operará en la cadena para producir la matriz) está escrita en C , ¿verdad?Una frase muy similar con un significado completamente diferente es "escribir el lenguaje A en el lenguaje B", por ejemplo, "escribir C en Java".
Esto describe el código que es sintácticamente correcto en un idioma, pero utiliza estructuras, modismos y convenciones de otro idioma. En el ejemplo de "escribir C en Java", los signos de esto estarían declarando todas las variables locales en la parte superior de cada método, utilizando constantes enteras en lugar de enumeraciones, utilizando identificadores_con_colectores, etc.
Por lo general, esto sucede cuando alguien ha trabajado con un idioma durante mucho tiempo (especialmente cuando ha trabajado solo con ese idioma) y es muy nuevo en el idioma actual (o no está interesado en escribir código limpio).
fuente
La tecnología es un proceso inherentemente iterativo. Comenzamos con herramientas simples y luego usamos esas herramientas para hacer mejores. Los primeros lenguajes de ensamblaje fueron más o menos 1: 1 traducciones de los códigos de byte de instrucción estandarizados para el chip; la arquitectura 8086 y su ensamblador se hicieron dominantes sobre otras arquitecturas como Z80, RISC, etc., y así comenzamos a desarrollar lenguajes que podrían ser digeridos en el ensamblaje 8086, como FORTRAN, COBOL, Pascal y C. El programa que interpreta el código fuente de estos idiomas tienen que estar escritos en algo más primitivo, de lo contrario terminas en un argumento de gallina y huevo; si el código fuente para el primer compilador de C fue escrito en C, entonces, ¿qué compiló ese código fuente de C, y no sería, por definición, el primer compilador de C?
Básicamente, "C # está escrito en C ++" debe entenderse que el primer compilador y / o las bibliotecas de tiempo de ejecución / núcleo más populares que obedecen la especificación del lenguaje C # (que son .NET Framework de Microsoft y el compilador de línea de comandos programa CSC.exe) están escritos en C ++.
fuente
"El lenguaje A está escrito en el lenguaje B" significa que la única implementación del lenguaje A (o la única que se usa ampliamente) es la que en realidad es un proyecto desarrollado en el lenguaje B, y el único completo y actualizado la especificación de A es el código fuente B que lo implementa de tal manera que si la documentación y el programa B no están de acuerdo, el programa B generalmente se considera correcto.
fuente