0:00:01.270,0:00:04.570 Ya has visto pequeños trosos de código javascript 0:00:04.570,0:00:08.120 En esta sección, quiero hablar sobre lo que conecta ese mundo 0:00:08.120,0:00:11.432 con el código de máquina en el CPU 0:00:11.432,0:00:13.596 Así que esto será generalmente sobre el tema de los lenguajes informáticos. 0:00:13.596,0:00:18.682 Por lo tanto un programador trabaja en algunos lenguajes de programación. 0:00:18.682,0:00:23.080 Y se dice que los lenguajes de programación tienen funciones de alto nivel. 0:00:23.080,0:00:27.020 Y eso quiere decir, cosas como, bucles (loops), y si las sentencias "if" 0:00:27.020,0:00:30.033 y cadenas (strings) y aquellas facilidades que son más complicadas 0:00:30.033,0:00:32.512 y que están en un simple código de máquina en el CPU. 0:00:32.512,0:00:36.298 Por lo que el programador escribe lo que se denomina código fuente 0:00:36.298,0:00:39.515 en cualquier lenguaje de programación, que estén escribiendo 0:00:39.776,0:00:42.498 Aquí hay un ejemplo de algún código fuente de C++. 0:00:42.498,0:00:45.769 Esto asigna una cadena (string), a una variable y a continuación pone un 0:00:45.769,0:00:48.765 signo de exclamación (!) al final de la cadena. 0:00:48.765,0:00:50.218 Esto es un poco similar al código javascript que hemos visto. 0:00:50.218,0:00:52.465 Todos estos lenguajes a nivel de sintaxis 0:00:52.465,0:00:54.166 son un poco similares. 0:00:54.166,0:01:02.805 Así, um, ¿cómo se consigue que el código fuente de C++, digamos, se ejecute en la CPU? 0:01:02.805,0:01:06.736 una estrategia utiliza lo que se llama un compilador. 0:01:06.736,0:01:09.974 el compilador es un programa separado y lo que el 0:01:09.974,0:01:13.597 compilador hace es que mirar todo el código fuente 0:01:13.597,0:01:18.577 y hace una traducción mayor para crear un gran cuerpo de código máquina. 0:01:18.577,0:01:23.156 Así, por ejemplo, puede ser que haya una parte del código fuente, 0:01:23.156,0:01:26.968 donde hay una instrucción "if" y no hay una 0:01:26.968,0:01:28.922 instrucción específica de código máquina para una instruccion "if" 0:01:28.922,0:01:31.003 pero puede haber una secuencia de 5 instrucciones de código máquina 0:01:31.003,0:01:33.726 que de hecho constituyen una sentencia "if" 0:01:33.726,0:01:36.516 Por lo que el compilador hace ese tipo de expansión. 0:01:36.516,0:01:40.924 Así que, sólo como ejemplo, Firefox está escrito en C++. 0:01:40.924,0:01:47.095 Por lo tanto, para hacer una nueva versión de Firefox, alguien corre 0:01:47.095,0:01:51.910 el compilador de C++ y este lee en los muchos archivos fuentes, 0:01:51.910,0:01:54.594 el "gran cuerpo" de código fuente que conforma a firefox, 0:01:54.594,0:01:57.157 y básicamente produce firefox.exe 0:01:57.157,0:02:00.159 Firefox.exe es la salida del compilador al 0:02:00.159,0:02:03.620 traducir todo ese código fuente. 0:02:03.620,0:02:06.859 Un par de cosas a señalar es que, 0:02:06.859,0:02:09.880 la compilación sólo tiene que pasar una vez. 0:02:09.880,0:02:12.185 Así, algunos cuerpo de código fuente, alguien hace firefox.exe 0:02:12.185,0:02:15.886 y, a continuación, sólo puede enviarse firefox.exe 0:02:15.886,0:02:18.448 Los usuarios finales no necesita el código fuente y 0:02:18.448,0:02:20.610 no necesitan el compilador. Por lo que realmente se realiza la compilación 0:02:20.610,0:02:26.124 en la fábrica, de hecho. Otra característica es 0:02:26.124,0:02:30.382 no funciona al revés. Por lo que yo puedo distribuir firefox.exe 0:02:30.382,0:02:34.296 todas esta máquina código, pero no algo que 0:02:34.296,0:02:36.899 puede leer en e ir hacia atrás para darme un gran cuerpo de código fuente. 0:02:36.899,0:02:38.880 Al menos no perfectamente, puede hacerlo de modo imperfecto. 0:02:38.880,0:02:41.982 Lo ideal, para producir una inversión realmente desea 0:02:41.982,0:02:44.761 el código fuente. Por lo tanto, hablemos sobre el código fuente. 0:02:44.761,0:02:51.948 Por lo tanto, si desea agregar una funcionalidad o corregir un error en firefox, realmente 0:02:51.948,0:02:53.965 la forma de hacerlo es volver al código fuente, 0:02:53.965,0:02:56.592 y repasarlo, sólo una que he hecho en java script. 0:02:56.592,0:02:58.267 Así que añadir unas líneas o un si instrucción para cambiar algunos 0:02:58.267,0:03:01.664 comportamiento de alguna manera, en el código fuente y, a continuación, ejecutar 0:03:01.664,0:03:03.654 el compilador una vez más, de hecho para hacer una nueva versión de 0:03:03.654,0:03:07.143 Firefox que tiene este pequeño cambio que ha puesto 0:03:07.143,0:03:10.971 en el código fuente. Como estamos tomando sobre código fuente, 0:03:10.971,0:03:14.415 Esto también le da un buen sentido de qué abierto 0:03:14.415,0:03:18.870 software de origen significa. Un software de código abierto es una 0:03:18.870,0:03:21.860 formato donde se distribuye el programa, sino también 0:03:21.860,0:03:25.742 no hay acceso al código fuente original, a la 0:03:25.742,0:03:27.735 programa. Y esto viene normalmente con una licencia, 0:03:27.735,0:03:29.714 diciendo: ' Hey, aquí está el código fuente. Si desea 0:03:29.714,0:03:32.879 hacer su propia versión o corregir un error o lo que sea, este programa, 0:03:32.879,0:03:36.755 Siéntase libre. " Eso de las 2 principales características del software de código abierto 0:03:36.755,0:03:42.555 uno, normalmente se distribuye gratuitamente, por lo que saben, su barata. Pero el 0:03:42.555,0:03:45.985 otra característica es que viene con una especie de libertad. 0:03:45.985,0:03:50.945 Porque si el software es un código cerrado y 0:03:50.945,0:03:52.942 desea alguna característica diferente, hay que algunos fallos 0:03:52.942,0:03:55.671 necesario se aplique, usted realmente depende del proveedor, quien tiene la 0:03:55.671,0:03:58.311 código fuente, como bien-do se sienten como aplicación 0:03:58.311,0:04:01.098 ¿esa característica? En contraste con el software de código abierto, 0:04:01.098,0:04:04.182 es como que no hay esposas. El código fuente está disponible, 0:04:04.182,0:04:06.861 y si hay algo que realmente quieres hacer, 0:04:06.861,0:04:10.061 o decir que el proveedor original va fuera del negocio, entonces 0:04:10.061,0:04:15.029 porque tienes el código fuente, usted sabe, usted puede puede ser 0:04:15.029,0:04:17.321 pagar a alguien para hacer un cambio y producir sus propios 0:04:17.321,0:04:19.577 versión personalizada. Por lo que viene con este tipo de profundidad, uh- 0:04:19.577,0:04:21.650 puede considerar como una póliza de seguro. 0:04:21.650,0:04:26.142 A menudo hay muchos tipos diferentes de los términos de licencia 0:04:26.142,0:04:28.796 para un software de código abierto, pero, más a menudo 0:04:28.796,0:04:31.016 requieren en algunos casos, que si usted tomar sus 0:04:31.016,0:04:34.938 código fuente y agregar alguna característica, entonces debe ofrecer 0:04:34.938,0:04:37.564 esos cambios a la comunidad. Así, en el mismo 0:04:37.564,0:04:39.767 manera han beneficiado del otro trabajo, puede beneficiarse de su trabajo. 0:04:39.767,0:04:43.644 Los detalles de cómo se puede hacer es complicado. 0:04:43.644,0:04:45.843 Hay muchas formas diferentes de la misma. 0:04:45.843,0:04:47.530 Me vas a hablar del software de código abierto un 0:04:47.530,0:04:48.856 poco más tarde, sólo menciono esto ahora, 0:04:48.856,0:04:51.187 porque nos da la idea de lo que es el código fuente 0:04:51.187,0:04:54.602 del programa vs sólo tener el archivo .exe de algo. 0:04:54.602,0:05:01.682 Así que hasta el momento hablé acerca de C++, por lo que es esto 0:05:01.682,0:05:04.771 toda otra gran categoría de lenguas, que 0:05:04.771,0:05:07.219 Me va a llamar, lenguajes dinámicos o a veces 0:05:07.219,0:05:11.393 Idiomas de intérprete. Y esto es una especie de una gran prueba 0:05:11.393,0:05:12.436 estrategia y hay muchos idiomas diferentes con 0:05:12.436,0:05:15.234 muchas cualidades diferentes y yo apenas estoy va a ordenar de bulto, 0:05:15.234,0:05:17.156 tumor les en esta gran categoría. 0:05:17.156,0:05:19.453 Ejemplos de lenguajes dinámicos son actualmente Java, 0:05:19.453,0:05:24.390 Secuencia de comandos de Java y Python. Por lo tanto, va a una manera de que estos son 0:05:24.390,0:05:26.506 el trabajo es que se apliquen por lo que se llama 0:05:26.506,0:05:30.293 un intérprete. Supongo que el caso de compilador estaba tomando antes. 0:05:30.293,0:05:36.157 Un intérprete es un programa que toma en código escrito en algún lenguaje 0:05:36.157,0:05:42.729 y tipo de [inaudible] lo ejecuta. El mejor ejemplo es 0:05:42.729,0:05:45.703 hay este lenguaje informático llamado java script, 0:05:45.703,0:05:49.272 que realmente han estado utilizando y navegadores que son web 0:05:49.272,0:05:52.017 incluye programas como una parte de ellos, un java 0:05:52.017,0:05:55.148 intérprete de comandos. Y cuando viene el navegador web 0:05:55.148,0:05:57.471 a través de una página con código java script 0:05:57.471,0:06:00.604 puede utilizar el intérprete para ejecutar ese código para que sea 0:06:00.604,0:06:06.015 hacer todo lo que se va a hacer. Así que la forma del intérprete 0:06:06.015,0:06:10.809 obras son que trata con el programa 1 línea a la vez. 0:06:10.809,0:06:13.892 Así que aquí es un poco de código de secuencia de comandos de java, 0:06:13.892,0:06:16.139 Si el intérprete quería ejecutar este, bien 0:06:16.139,0:06:17.727 se verá en la primera línea y a mirar 0:06:17.727,0:06:19.669 lo que dice esa línea y, a continuación, el intérprete 0:06:19.669,0:06:22.260 lo haría. Así que en este caso, el intérprete dirá, 0:06:22.260,0:06:24.182 UH-así que supongo que necesito una variable denominada A, y 0:06:24.182,0:06:25.992 Necesito poner un 1 en ella. Así que una vez se realiza con esa línea 0:06:25.992,0:06:28.531 luego va hacia adelante, y lo hace la siguiente línea. 0:06:28.531,0:06:32.647 Y así sucesivamente. Lo mismo ocurre con el compilador de este gran grueso 0:06:32.647,0:06:36.718 traducción del código fuente en el código de máquina 0:06:36.718,0:06:38.077 Pero no realmente está ejecutando el código, su justo 0:06:38.077,0:06:39.658 haciendo la traducción para ejecutarse en el futuro. 0:06:39.658,0:06:42.848 Por el contrario intérprete vive realmente en el momento. 0:06:42.848,0:06:45.144 Sólo pasando por el código línea por línea y sólo 0:06:45.144,0:06:49.393 hacerlo. Así que permítanme hablar un poco sobre las diferencias 0:06:49.393,0:06:53.284 entre estos dos. Debo decir como una renuncia, 0:06:53.284,0:06:55.774 Hay muchos lenguajes de programación, no hay ninguna mejor 0:06:55.774,0:06:59.419 el viejo chiste de lenguaje, es que realmente saben, 0:06:59.419,0:07:00.769 cuando estás en el seminario y cuando estás 0:07:00.769,0:07:01.917 argumentando sobre los pros y los contras de algo, 0:07:01.917,0:07:04.872 en última instancia, la respuesta es simplemente, depende. 0:07:04.872,0:07:08.107 Como no hay ninguna mejores idiomas, pero bien lo que es 0:07:08.107,0:07:09.484 los idiomas mejores esta situación, con todos los 0:07:09.484,0:07:13.337 características. Tan ampliamente hablando, código de compilador justo 0:07:13.337,0:07:16.725 tiende a correr más rápido. Cuando se compila un código de C++ 0:07:16.725,0:07:19.426 y producir ese .exe, es una especie de en un sentido magro, 0:07:19.426,0:07:23.747 gran cantidad de detalles y decisiones ha sido despojado 0:07:23.747,0:07:26.886 tanto como sea posible. Por otro lado dinámico o 0:07:26.886,0:07:30.715 idiomas de intérprete, tienden a tener más funciones. 0:07:30.715,0:07:32.965 Más funciones que hace el trabajo del programador un 0:07:32.965,0:07:35.845 poco más fácil. O puesto de otra manera, ampliamente 0:07:35.845,0:07:39.197 hablando, el programador puede tienden a hacer más trabajo 0:07:39.197,0:07:41.907 por hora, en lenguajes dinámicos, que lo hacen en la compilación 0:07:41.907,0:07:46.812 Idiomas. Sin embargo hay no hay almuerzo gratis, es 0:07:46.812,0:07:49.784 también el caso de que el código de lenguaje dinámico tiende a 0:07:49.784,0:07:52.660 ejecutar más lento de la CPU en términos de sólo obtener sólo 0:07:52.660,0:07:57.232 el trabajo realizado, en comparación con las lenguas de compilador. 0:07:57.232,0:07:59.344 Código de fuente del compilador se va a hacer lo mismo. 0:07:59.344,0:08:04.848 Así que un ejemplo de esto, es un gran ejemplo de esto, 0:08:04.848,0:08:06.885 Administración de memoria. Por lo que la administración de memoria se refiere a la 0:08:06.885,0:08:09.869 problema en el código de saber cuántos bytes son 0:08:09.869,0:08:12.286 ¿necesarios para almacenar algo y, en particular por cuánto tiempo? 0:08:12.286,0:08:16.174 Bueno necesito esos bytes para la línea 6, sabes, pero 0:08:16.174,0:08:18.277 quizás en la línea 20, y no necesitan ya 0:08:18.277,0:08:20.594 y realmente puedo reutilizarlos para algo más. 0:08:20.594,0:08:23.145 Y en realidad es un problema de tipo de complicted. 0:08:23.145,0:08:27.007 En c y C++, administración de memoria es un grado 0:08:27.007,0:08:29.773 Manual. y eso sólo significa que el programador 0:08:29.773,0:08:31.315 se están produciendo todas estas líneas de códigos para cosas 0:08:31.315,0:08:33.329 y va a ser a veces, cuando puede tener a 0:08:33.329,0:08:35.555 agregar algunas líneas para hacer algún pensamiento, para ayudar a la Guía 0:08:35.555,0:08:38.174 la administración de la memoria. Así que hay algunos 0:08:38.174,0:08:41.438 esfuerzo de programador requerido. En contraste, la mayoría 0:08:41.438,0:08:43.926 lenguajes dinámicos tienen lo que se llama, automático 0:08:43.926,0:08:46.870 Administración de memoria. Y esto significa que, no 0:08:46.870,0:08:53.009 entrada de programador es necesario. El lenguaje se va 0:08:53.009,0:08:56.945 a notar automáticamente, cuando se necesita memoria, 0:08:56.945,0:08:58.065 Cuando memoria no es necesaria ya, 0:08:58.065,0:09:03.489 puede ser reciclado y eche en ese conjunto 0:09:03.489,0:09:04.806 problema. Por lo tanto, esto encaja dentro de la tendencia de 0:09:04.806,0:09:06.977 lenguajes dinámicos que estaba mencionando anteriormente, 0:09:06.977,0:09:09.406 Por eso, este un ejemplo de cómo, bueno, ya sabes, porque 0:09:09.406,0:09:11.736 el programador tiene menos que ver, son capaces de justo 0:09:11.736,0:09:13.526 obtener cosas hecho un poco más rápido. Administración de memoria tan 0:09:13.526,0:09:15.735 es un gran ejemplo de ello. Sin embargo también se puede imaginar 0:09:15.735,0:09:17.190 Esta es una de las cosas que hace dinámico 0:09:17.190,0:09:19.060 código de idioma ejecutar un poco más lento. Porque, 0:09:19.060,0:09:22.914 la CPU tiene ahora suggestional libro manteniendo el problema, 0:09:22.914,0:09:25.292 donde su mirando la memoria y tratando de 0:09:25.292,0:09:27.842 figura fuera, cuando puede ser reutilizado. Por lo tanto, muy amplia 0:09:27.842,0:09:32.320 hablando, la tendencia para el equipo de programación hoy 0:09:32.320,0:09:37.047 es hacia los lenguajes dinámicos. El rasgo que la 0:09:37.047,0:09:40.776 programador obtendrá un liitle rápido, cosas 0:09:40.776,0:09:43.243 a expensas de utilizar un poco más CPU o más 0:09:43.243,0:09:45.931 memoria, es un equilibrio bastante atractivo para 0:09:45.931,0:09:49.162 muchos de los problemas. Esto puede ser un poco intuitiva, 0:09:49.162,0:09:51.875 pero se puede pensar lo que es la escasa calidad, 0:09:51.875,0:09:54.877 para un programa de ordenador y muchas veces es el 0:09:54.877,0:09:59.390 programador, que tenga programador experto trabajando 0:09:59.390,0:10:01.205 en que, sabes, trabajando en este dominio, mucho 0:10:01.205,0:10:06.287 de los tiempos son difíciles de encontrar. Y así 0:10:06.287,0:10:09.105 sus horas, es decir, utilizando algunas de sus horas, 0:10:09.105,0:10:12.636 luce atractivo, en contraste, la CPU siempre 0:10:12.636,0:10:13.929 quiero trabajar tan rápido como sea posible, pero 0:10:13.929,0:10:17.425 CPUs son bastante barato y bastante eficaz 0:10:17.425,0:10:19.073 y hay incluso este efecto curioso donde esta Moore 0:10:19.073,0:10:24.256 Derecho, sigue haciendo más cierto, donde la CPU cada año obtiene más barata 0:10:24.256,0:10:27.230 y si pensamos en el equilibrio entre el programador 0:10:27.230,0:10:29.185 costo y el costo de CPU de conseguir algo, 0:10:29.185,0:10:31.781 Esto significa en términos de la parte del pastel, 0:10:31.781,0:10:33.478 el programador de hecho cada vez más caro 0:10:33.478,0:10:36.169 cada año, un poco más escaso. Por lo que estos se ajusta 0:10:36.169,0:10:41.365 en el patrón. En el conjunto de los lenguajes dinámicos 0:10:41.365,0:10:43.830 se están volviendo populares. La última cosa que será 0:10:43.830,0:10:46.561 mención es que existe una cosa llamada "JIT", 0:10:46.561,0:10:50.144 un compilador Just In Time. Y este tipo de 0:10:50.144,0:10:52.646 la síntesis natural del compilador e intérprete 0:10:52.646,0:10:54.772 estrategias, de tratar de obtener lo mejor de ambos mundos. 0:10:54.772,0:10:56.796 Tan su parecido, bueno, nos gustaría tener un lenguaje dinámico, 0:10:56.796,0:10:58.693 con todas estas funciones, todas estas favorables de programador 0:10:58.693,0:11:02.020 características, pero nos quieren correr rápido. Y así 0:11:02.020,0:11:04.542 Este JIT tomar partes del código y probar 0:11:04.542,0:11:07.086 y compilar sobre la marcha. Por lo que trata de una especie de 0:11:07.086,0:11:11.831 para casarse con dos de ellos. Resulta funciona 0:11:11.831,0:11:14.630 bastante bien. Así que todos los navegadores tienen ahora 0:11:14.630,0:11:18.695 JITs para código de secuencia de comandos de Java. Así que realmente cuando usted 0:11:18.695,0:11:22.317 está ejecutando código Java Script en esta clase, 0:11:22.317,0:11:24.617 dentro del explorador había un JIT que estaba en el 0:11:24.617,0:11:28.409 mosca, teniendo esos trozos de código Java Script y 0:11:28.409,0:11:31.615 compilarlos sobre la marcha, en el código de máquina. 0:11:31.615,0:11:35.363 De todos modos, no obtendrá exactamente los formatos del compilador 0:11:35.363,0:11:39.041 código, pero se obtiene bastante estrecha. SO. Esto es realmente 0:11:39.041,0:11:41.983 Cómo funciona la mayoría de los lenguajes dinámicos. Es un activo 0:11:41.983,0:11:44.390 área de investigación. Pero parece que funciona bastante bien.