Ya has visto pequeños trosos de código javascript
En esta sección, quiero hablar sobre lo que conecta ese mundo
con el código de máquina en el CPU
Así que esto será generalmente sobre el tema de los lenguajes informáticos.
Por lo tanto un programador trabaja en algunos lenguajes de programación.
Y se dice que los lenguajes de programación tienen funciones de alto nivel.
Y eso quiere decir, cosas como, bucles (loops), y si las sentencias "if"
y cadenas (strings) y aquellas facilidades que son más complicadas
y que están en un simple código de máquina en el CPU.
Por lo que el programador escribe lo que se denomina código fuente
en cualquier lenguaje de programación, que estén escribiendo
Aquí hay un ejemplo de algún código fuente de C++.
Esto asigna una cadena (string), a una variable y a continuación pone un
signo de exclamación (!) al final de la cadena.
Esto es un poco similar al código javascript que hemos visto.
Todos estos lenguajes a nivel de sintaxis
son un poco similares.
Así, um, ¿cómo se consigue que el código fuente de C++, digamos, se ejecute en la CPU?
una estrategia utiliza lo que se llama un compilador.
el compilador es un programa separado y lo que el
compilador hace es que mirar todo el código fuente
y hace una traducción mayor para crear un gran cuerpo de código máquina.
Así, por ejemplo, puede ser que haya una parte del código fuente,
donde hay una instrucción "if" y no hay una
instrucción específica de código máquina para una instruccion "if"
pero puede haber una secuencia de 5 instrucciones de código máquina
que de hecho constituyen una sentencia "if"
Por lo que el compilador hace ese tipo de expansión.
Así que, sólo como ejemplo, Firefox está escrito en C++.
Por lo tanto, para hacer una nueva versión de Firefox, alguien corre
el compilador de C++ y este lee en los muchos archivos fuentes,
el "gran cuerpo" de código fuente que conforma a firefox,
y básicamente produce firefox.exe
Firefox.exe es la salida del compilador al
traducir todo ese código fuente.
Un par de cosas a señalar es que,
la compilación sólo tiene que pasar una vez.
Así, algunos cuerpo de código fuente, alguien hace firefox.exe
y, a continuación, sólo puede enviarse firefox.exe
Los usuarios finales no necesita el código fuente y
no necesitan el compilador. Por lo que realmente se realiza la compilación
en la fábrica, de hecho. Otra característica es
no funciona al revés. Por lo que yo puedo distribuir firefox.exe
todas esta máquina código, pero no algo que
puede leer en e ir hacia atrás para darme un gran cuerpo de código fuente.
Al menos no perfectamente, puede hacerlo de modo imperfecto.
Lo ideal, para producir una inversión realmente desea
el código fuente. Por lo tanto, hablemos sobre el código fuente.
Por lo tanto, si desea agregar una funcionalidad o corregir un error en firefox, realmente
la forma de hacerlo es volver al código fuente,
y repasarlo, sólo una que he hecho en java script.
Así que añadir unas líneas o un si instrucción para cambiar algunos
comportamiento de alguna manera, en el código fuente y, a continuación, ejecutar
el compilador una vez más, de hecho para hacer una nueva versión de
Firefox que tiene este pequeño cambio que ha puesto
en el código fuente. Como estamos tomando sobre código fuente,
Esto también le da un buen sentido de qué abierto
software de origen significa. Un software de código abierto es una
formato donde se distribuye el programa, sino también
no hay acceso al código fuente original, a la
programa. Y esto viene normalmente con una licencia,
diciendo: ' Hey, aquí está el código fuente. Si desea
hacer su propia versión o corregir un error o lo que sea, este programa,
Siéntase libre. " Eso de las 2 principales características del software de código abierto
uno, normalmente se distribuye gratuitamente, por lo que saben, su barata. Pero el
otra característica es que viene con una especie de libertad.
Porque si el software es un código cerrado y
desea alguna característica diferente, hay que algunos fallos
necesario se aplique, usted realmente depende del proveedor, quien tiene la
código fuente, como bien-do se sienten como aplicación
¿esa característica? En contraste con el software de código abierto,
es como que no hay esposas. El código fuente está disponible,
y si hay algo que realmente quieres hacer,
o decir que el proveedor original va fuera del negocio, entonces
porque tienes el código fuente, usted sabe, usted puede puede ser
pagar a alguien para hacer un cambio y producir sus propios
versión personalizada. Por lo que viene con este tipo de profundidad, uh-
puede considerar como una póliza de seguro.
A menudo hay muchos tipos diferentes de los términos de licencia
para un software de código abierto, pero, más a menudo
requieren en algunos casos, que si usted tomar sus
código fuente y agregar alguna característica, entonces debe ofrecer
esos cambios a la comunidad. Así, en el mismo
manera han beneficiado del otro trabajo, puede beneficiarse de su trabajo.
Los detalles de cómo se puede hacer es complicado.
Hay muchas formas diferentes de la misma.
Me vas a hablar del software de código abierto un
poco más tarde, sólo menciono esto ahora,
porque nos da la idea de lo que es el código fuente
del programa vs sólo tener el archivo .exe de algo.
Así que hasta el momento hablé acerca de C++, por lo que es esto
toda otra gran categoría de lenguas, que
Me va a llamar, lenguajes dinámicos o a veces
Idiomas de intérprete. Y esto es una especie de una gran prueba
estrategia y hay muchos idiomas diferentes con
muchas cualidades diferentes y yo apenas estoy va a ordenar de bulto,
tumor les en esta gran categoría.
Ejemplos de lenguajes dinámicos son actualmente Java,
Secuencia de comandos de Java y Python. Por lo tanto, va a una manera de que estos son
el trabajo es que se apliquen por lo que se llama
un intérprete. Supongo que el caso de compilador estaba tomando antes.
Un intérprete es un programa que toma en código escrito en algún lenguaje
y tipo de [inaudible] lo ejecuta. El mejor ejemplo es
hay este lenguaje informático llamado java script,
que realmente han estado utilizando y navegadores que son web
incluye programas como una parte de ellos, un java
intérprete de comandos. Y cuando viene el navegador web
a través de una página con código java script
puede utilizar el intérprete para ejecutar ese código para que sea
hacer todo lo que se va a hacer. Así que la forma del intérprete
obras son que trata con el programa 1 línea a la vez.
Así que aquí es un poco de código de secuencia de comandos de java,
Si el intérprete quería ejecutar este, bien
se verá en la primera línea y a mirar
lo que dice esa línea y, a continuación, el intérprete
lo haría. Así que en este caso, el intérprete dirá,
UH-así que supongo que necesito una variable denominada A, y
Necesito poner un 1 en ella. Así que una vez se realiza con esa línea
luego va hacia adelante, y lo hace la siguiente línea.
Y así sucesivamente. Lo mismo ocurre con el compilador de este gran grueso
traducción del código fuente en el código de máquina
Pero no realmente está ejecutando el código, su justo
haciendo la traducción para ejecutarse en el futuro.
Por el contrario intérprete vive realmente en el momento.
Sólo pasando por el código línea por línea y sólo
hacerlo. Así que permítanme hablar un poco sobre las diferencias
entre estos dos. Debo decir como una renuncia,
Hay muchos lenguajes de programación, no hay ninguna mejor
el viejo chiste de lenguaje, es que realmente saben,
cuando estás en el seminario y cuando estás
argumentando sobre los pros y los contras de algo,
en última instancia, la respuesta es simplemente, depende.
Como no hay ninguna mejores idiomas, pero bien lo que es
los idiomas mejores esta situación, con todos los
características. Tan ampliamente hablando, código de compilador justo
tiende a correr más rápido. Cuando se compila un código de C++
y producir ese .exe, es una especie de en un sentido magro,
gran cantidad de detalles y decisiones ha sido despojado
tanto como sea posible. Por otro lado dinámico o
idiomas de intérprete, tienden a tener más funciones.
Más funciones que hace el trabajo del programador un
poco más fácil. O puesto de otra manera, ampliamente
hablando, el programador puede tienden a hacer más trabajo
por hora, en lenguajes dinámicos, que lo hacen en la compilación
Idiomas. Sin embargo hay no hay almuerzo gratis, es
también el caso de que el código de lenguaje dinámico tiende a
ejecutar más lento de la CPU en términos de sólo obtener sólo
el trabajo realizado, en comparación con las lenguas de compilador.
Código de fuente del compilador se va a hacer lo mismo.
Así que un ejemplo de esto, es un gran ejemplo de esto,
Administración de memoria. Por lo que la administración de memoria se refiere a la
problema en el código de saber cuántos bytes son
¿necesarios para almacenar algo y, en particular por cuánto tiempo?
Bueno necesito esos bytes para la línea 6, sabes, pero
quizás en la línea 20, y no necesitan ya
y realmente puedo reutilizarlos para algo más.
Y en realidad es un problema de tipo de complicted.
En c y C++, administración de memoria es un grado
Manual. y eso sólo significa que el programador
se están produciendo todas estas líneas de códigos para cosas
y va a ser a veces, cuando puede tener a
agregar algunas líneas para hacer algún pensamiento, para ayudar a la Guía
la administración de la memoria. Así que hay algunos
esfuerzo de programador requerido. En contraste, la mayoría
lenguajes dinámicos tienen lo que se llama, automático
Administración de memoria. Y esto significa que, no
entrada de programador es necesario. El lenguaje se va
a notar automáticamente, cuando se necesita memoria,
Cuando memoria no es necesaria ya,
puede ser reciclado y eche en ese conjunto
problema. Por lo tanto, esto encaja dentro de la tendencia de
lenguajes dinámicos que estaba mencionando anteriormente,
Por eso, este un ejemplo de cómo, bueno, ya sabes, porque
el programador tiene menos que ver, son capaces de justo
obtener cosas hecho un poco más rápido. Administración de memoria tan
es un gran ejemplo de ello. Sin embargo también se puede imaginar
Esta es una de las cosas que hace dinámico
código de idioma ejecutar un poco más lento. Porque,
la CPU tiene ahora suggestional libro manteniendo el problema,
donde su mirando la memoria y tratando de
figura fuera, cuando puede ser reutilizado. Por lo tanto, muy amplia
hablando, la tendencia para el equipo de programación hoy
es hacia los lenguajes dinámicos. El rasgo que la
programador obtendrá un liitle rápido, cosas
a expensas de utilizar un poco más CPU o más
memoria, es un equilibrio bastante atractivo para
muchos de los problemas. Esto puede ser un poco intuitiva,
pero se puede pensar lo que es la escasa calidad,
para un programa de ordenador y muchas veces es el
programador, que tenga programador experto trabajando
en que, sabes, trabajando en este dominio, mucho
de los tiempos son difíciles de encontrar. Y así
sus horas, es decir, utilizando algunas de sus horas,
luce atractivo, en contraste, la CPU siempre
quiero trabajar tan rápido como sea posible, pero
CPUs son bastante barato y bastante eficaz
y hay incluso este efecto curioso donde esta Moore
Derecho, sigue haciendo más cierto, donde la CPU cada año obtiene más barata
y si pensamos en el equilibrio entre el programador
costo y el costo de CPU de conseguir algo,
Esto significa en términos de la parte del pastel,
el programador de hecho cada vez más caro
cada año, un poco más escaso. Por lo que estos se ajusta
en el patrón. En el conjunto de los lenguajes dinámicos
se están volviendo populares. La última cosa que será
mención es que existe una cosa llamada "JIT",
un compilador Just In Time. Y este tipo de
la síntesis natural del compilador e intérprete
estrategias, de tratar de obtener lo mejor de ambos mundos.
Tan su parecido, bueno, nos gustaría tener un lenguaje dinámico,
con todas estas funciones, todas estas favorables de programador
características, pero nos quieren correr rápido. Y así
Este JIT tomar partes del código y probar
y compilar sobre la marcha. Por lo que trata de una especie de
para casarse con dos de ellos. Resulta funciona
bastante bien. Así que todos los navegadores tienen ahora
JITs para código de secuencia de comandos de Java. Así que realmente cuando usted
está ejecutando código Java Script en esta clase,
dentro del explorador había un JIT que estaba en el
mosca, teniendo esos trozos de código Java Script y
compilarlos sobre la marcha, en el código de máquina.
De todos modos, no obtendrá exactamente los formatos del compilador
código, pero se obtiene bastante estrecha. SO. Esto es realmente
Cómo funciona la mayoría de los lenguajes dinámicos. Es un activo
área de investigación. Pero parece que funciona bastante bien.