programming languages - used - ¿Cómo se puede “implementar” un lenguaje de programación?
programming languages used in most popular websites (8)
quizás esto sea solo un pequeño malentendido, pero ¿cómo se puede implementar un lenguaje de programación?
¿No estoy hablando de cómo implementar mi propio lenguaje de programación sino de la palabra "implementado"? Quiero decir, ¿puedes implementar un compilador o un intérprete, pero un lenguaje de programación?
¿Qué significa si leo "C ++ se implementa en C" o "Python se implementó en C"?
Creo que un lenguaje es más sth. Como un protocolo de cómo alguien piensa acerca de las cosas debe ser implementado. Por ejemplo, si quiere mostrar un cuadro de mensaje, puede decir que el comando para esto es ShowMessageBox (cadena) e implementar un compilador que lo traduzca en algo que funcione en una computadora (aparte de los paradigmas de programación seleccionados que imagina).
Creo que esta pregunta lleva a la pregunta "¿qué es un lenguaje de programación en realidad"? ¿Un compilador, un intérprete o simplemente un lenguaje documentado sobre cómo se deben implementar las cosas en un idioma?
[EDITAR]
Respuesta: Los lenguajes nunca se implementan, solo compiladores / intérpretes, etc. Es así de simple.
"C ++ se implementa en C". Entiendo esto como "el compilador de C ++ está escrito en lenguaje C". Bastante simple, sin demasiada filosofía.
En general, el compilador de C ++ se puede escribir en cualquier lenguaje, incluido el propio C ++ (excepto en la primera versión del compilador).
"Python se implementó en C" significa que al menos un compilador de Python (en este caso el que se usa más comúnmente) se escribe usando C. Los desarrolladores de esa implementación de Python tomaron la decisión deliberada de no usar C ++. Como declaración, está incompleta, ya que Python también se ha implementado en Java, en C # y en Python.
La principal relevancia es que te da una idea de los sistemas en los que podrías portar el lenguaje: cualquier objetivo dirigido por un compilador de C debería (al menos en teoría) ser capaz de ejecutar la implementación de Python en C, pero si '' d elegido utilizar C ++, habría un conjunto más pequeño de sistemas que podrían ejecutarlo.
C ++ generalmente no se implementa en C en estos días: creo que generalmente se implementa en C ++. Es bastante común que los idiomas se implementen en el mismo idioma (o en un subconjunto del idioma), ya que significa que ya no depende de otro idioma no relacionado disponible para el destino. Para arrancar en un nuevo sistema, compile de otro sistema.
Si compila gcc para una nueva plataforma, el proceso de compilación implica compilar el código fuente una vez con el compilador que ya está disponible (tal vez un gcc más antiguo), luego compilarlo una vez más con el compilador recién compilado, y luego compilarlo una tercera vez con el compilador. Salida de la segunda compilación. Si las versiones segunda y tercera no son idénticas, se produce un error de compilación. Si son idénticos, entonces tienes una buena indicación de que se compiló correctamente.
Aquí hay una respuesta muy académica (de un académico de larga data). Primero voy a replantear la pregunta:
¿Qué significa que un lenguaje de programación sea implementado ?
Comenzaré con "qué es un lenguaje de programación":
Un lenguaje de programación es un lenguaje formal (un conjunto de expresiones que podemos caracterizar con precisión a través de reglas algorítmicas) de manera que una oración en el lenguaje tiene un significado computacional . Hay una variedad de formas de dar significado computacional; dos de los más populares son que una computación representa una función (de valores a valores, o de estados de máquina a estados de máquina) y que una computación representa una máquina que hace "transiciones de estado" e interactúa con el mundo exterior.
Se implementa un lenguaje cuando se proporciona un medio para leer en una expresión y realizar el cálculo, es decir, calcular la función o realizar el comportamiento. El medio es la implementación.
Las implementaciones típicas incluyen
Interpretación directa de la sintaxis del lenguaje. Este modelo es raro, pero FORTH probablemente se acerca más a él.
Traducción de la sintaxis al código de máquina virtual, también llamado código de bytes, que es en sí mismo otro idioma y que se interpreta. Es popular escribir intérpretes de código de bytes en C. Lua, Perl, Python y Ruby se implementan más o menos de esta manera.
La traducción de la sintaxis a las instrucciones de la máquina de hardware, que es en sí misma otro idioma, y que es interpretada por su CPU. C y C ++ se implementan normalmente (pero no siempre) de esta manera.
Interpretación directa del lenguaje en hardware. El código de máquina IA-32 y el código de máquina AMD64 se implementan de esta manera.
Cuando una persona dice "El lenguaje X se implementa en Y", generalmente dicen que un traductor para X o un intérprete para el código de bytes de X está escrito en lenguaje Y. Uno de los grandes secretos de los compiladores es la capacidad de escribir el compilador para El lenguaje X en el lenguaje X mismo. Si esto le interesa, obtenga Axiomatic Bootstrapping de papel de Andrew Appel : una guía para hackers de compiladores .
A veces la respuesta a esta pregunta no es obvia. Squeak Smalltalk escribe un traductor y un intérprete de código de bytes en Smalltalk, luego traduce el intérprete a C, que se traduce al código de máquina. ¿En qué se implementa Squeak? Charla.
Poke un profesor; obtener una conferencia
La afirmación "El lenguaje X está implementado en el lenguaje Y" tiene sentido y es verdadera si y solo si existe una implementación canónica del lenguaje X y esa implementación está escrita en el lenguaje Y. En el uso común, la implementación primera o la más popular es A menudo se asume que es canónico.
Por ejemplo, Perl es uno de los pocos idiomas con un canon definitivo. "Python se implementa en C" tiene sentido si se considera que CPython es la implementación canónica de Python y "C ++ se implementa en C" para CFront, la implementación original de "C con clases" de Bjarne Stroustrup.
La respuesta directa: la implementación en el contexto del que está hablando solo significa escrito y el lenguaje en realidad significa compilador. El compilador original de C ++ fue tal como lo entiendo escrito en C. No hay nada (aparte de conocimiento y tiempo) que le impida escribir un compilador de C ++ en otro idioma.
La implementación es el código que hace que el software funcione. A menudo hablamos de la implementación de una función como en: "la función aún no se ha implementado". por ejemplo, void foo ()
{
// la función no se ha implementado todavía
lanzar();
}
Esto ocurre a menudo durante la fase de diseño de un programa porque la llamada debe estar allí para poder escribir / depurar / probar el código de llamada, pero no tenemos tiempo para implementarlo (escribir el código para ir a la función)
Para crear un nuevo idioma, no necesariamente tiene que hacerlo en código de máquina de bajo nivel (ensamblaje, por ejemplo). Por lo tanto, usar otro idioma para lograr su objetivo (crear un nuevo idioma aquí) es perfectamente normal. Entonces, cuando decimos: Python se implementó en C, solo significa que C se usó para crear ese lenguaje. Por ejemplo, C se puede cumplir en muchas arquitecturas diferentes, por lo que los programadores no tienen que ocuparse de los diferentes tipos de computadoras (portátiles).
Un lenguaje es solo una forma de expresarte en la computadora. Hoy en día, se puede hacer de varias maneras. Pero cuando usa la misma sintaxis que el lenguaje y crea su propio marco, se llama biblioteca o marco. Un lenguaje de programación es solo una notación para el programa de escritura. Si la notación cambia, tienes un idioma diferente. Como el francés o el español viene del latín. (El francés se implementa en latín;)
¿Por qué hay tantos idiomas diferentes? Porque el objetivo de un lenguaje es resolver problemas complejos. Por lo tanto, dependiendo de lo que quiera probar, el elegir el idioma apropiado puede ser una decisión importante.
Tienes razón, esas declaraciones no tienen ningún sentido. Es bastante obvio que quien haya hecho esas declaraciones no entiende la diferencia entre un lenguaje de programación y un compilador (o intérprete).
Este es un problema sorprendentemente común. Por ejemplo, a veces las personas hablan de lenguajes interpretados o compilados. Eso es lo mismo: los idiomas no se interpretan o compilan, simplemente son . La interpretación y la compilación son rasgos de la implementación, no el lenguaje.
Otra golosina: Python tiene un GIL. No, no es así: una implementación de Python tiene un GIL, todas las demás implementaciones no lo tienen, y el lenguaje Python en sí no. O bien: Ruby tiene hilos verdes. Una vez más, no es cierto: Ruby tiene hilos. Período. Si alguna implementación de lenguaje en particular elige implementarla como hilos verdes, hilos nativos, hilos de plataforma o lo que sea, es un rasgo de esa implementación particular, no de Ruby. Y, por supuesto, mi favorito: Ruby 1.9 es más rápido que Ruby 1.8. Esto ni siquiera tiene sentido: Ruby 1.9 y Ruby 1.8 son lenguajes de programación, es decir, un montón de reglas matemáticas abstractas. No puede ejecutar un lenguaje de programación, por lo tanto, un lenguaje de programación nunca puede ser "más rápido" o "más lento" que otro.
La confusión más descarada sobre la diferencia entre los lenguajes de programación y las implementaciones es el Juego de Referencia de Lenguaje Informático, que afirma que los lenguajes de referencia se comparan entre sí pero en realidad son implementaciones de referencia.
Todas estas son expresiones diferentes del hecho de que aparentemente algunas personas parecen ser fundamentalmente incapaces de comprender el concepto de abstracción. O al menos el concepto de tener un lenguaje abstracto y una implementación concreta de ese lenguaje.
Si volvemos a la afirmación de que "Python se implementa en C", ahora debería ser obvio que esa afirmación no es simplemente errónea. Si la afirmación fuera errónea, eso implicaría que la afirmación incluso tiene sentido, es decir, que hay algún mundo posible allá afuera, en el que al menos podría ser teóricamente correcto. Pero ese no es el caso. La afirmación no es incorrecta ni correcta, simplemente no tiene sentido. Si el inglés fuera un idioma escrito, sería un error de tipo.
Python es un lenguaje de programación. Los lenguajes de programación no están implementados en nada. Se acaban de implementar. Los compiladores e intérpretes se implementan en idiomas. Pero incluso si interpreta la declaración de esta manera, no es cierto: Jython se implementa en Java, IronPython se implementa en C #, PyPy se implementa en RPython y Python, Pynie se implementa en PGE, NQP y PIR. (Ah, y todas esas implementaciones tienen compiladores, así que ahí va tu "Python es un lenguaje interpretado".) Similar a Ruby: Rubinius está implementado en Ruby y C ++, JRuby y XRuby están implementados en Java, IronRuby y Ruby.NET están implementado en C #, HotRuby implementado en ECMAScript, Red Sun implementado en ActionScript, RubyGoLightly implementado en Go, Cardinal implementado en PGE, NQP y PIR, SmallRuby implementado en Smalltalk / X, MagLev implementado en GemStone Smalltalk and Ruby YARI se implementa en Io. Y para C ++: Clang (que es el front-end C, C ++ y Objective-C para LLVM) se implementa en C ++ (los tres front-end se implementan en C ++).
Un lenguaje de programación es un estándar. Su intérprete o compilador es una implementación de este estándar.