1 00:00:01,270 --> 00:00:04,570 Ya has visto pequeños trosos de código javascript 2 00:00:04,570 --> 00:00:08,120 En esta sección, quiero hablar sobre lo que conecta ese mundo 3 00:00:08,120 --> 00:00:11,432 con el código de máquina en el CPU 4 00:00:11,432 --> 00:00:13,596 Así que esto será generalmente sobre el tema de los lenguajes informáticos. 5 00:00:13,596 --> 00:00:18,682 Por lo tanto un programador trabaja en algunos lenguajes de programación. 6 00:00:18,682 --> 00:00:23,080 Y se dice que los lenguajes de programación tienen funciones de alto nivel. 7 00:00:23,080 --> 00:00:27,020 Y eso quiere decir, cosas como, bucles (loops), y si las sentencias "if" 8 00:00:27,020 --> 00:00:30,033 y cadenas (strings) y aquellas facilidades que son más complicadas 9 00:00:30,033 --> 00:00:32,512 y que están en un simple código de máquina en el CPU. 10 00:00:32,512 --> 00:00:36,298 Por lo que el programador escribe lo que se denomina código fuente 11 00:00:36,298 --> 00:00:39,515 en cualquier lenguaje de programación, que estén escribiendo 12 00:00:39,776 --> 00:00:42,498 Aquí hay un ejemplo de algún código fuente de C++. 13 00:00:42,498 --> 00:00:45,769 Esto asigna una cadena (string), a una variable y a continuación pone un 14 00:00:45,769 --> 00:00:48,765 signo de exclamación (!) al final de la cadena. 15 00:00:48,765 --> 00:00:50,218 Esto es un poco similar al código javascript que hemos visto. 16 00:00:50,218 --> 00:00:52,465 Todos estos lenguajes a nivel de sintaxis 17 00:00:52,465 --> 00:00:54,166 son un poco similares. 18 00:00:54,166 --> 00:01:02,805 Así, um, ¿cómo se consigue que el código fuente de C++, digamos, se ejecute en la CPU? 19 00:01:02,805 --> 00:01:06,736 una estrategia utiliza lo que se llama un compilador. 20 00:01:06,736 --> 00:01:09,974 el compilador es un programa separado y lo que el 21 00:01:09,974 --> 00:01:13,597 compilador hace es que mirar todo el código fuente 22 00:01:13,597 --> 00:01:18,577 y hace una traducción mayor para crear un gran cuerpo de código máquina. 23 00:01:18,577 --> 00:01:23,156 Así, por ejemplo, puede ser que haya una parte del código fuente, 24 00:01:23,156 --> 00:01:26,968 donde hay una instrucción "if" y no hay una 25 00:01:26,968 --> 00:01:28,922 instrucción específica de código máquina para una instruccion "if" 26 00:01:28,922 --> 00:01:31,003 pero puede haber una secuencia de 5 instrucciones de código máquina 27 00:01:31,003 --> 00:01:33,726 que de hecho constituyen una sentencia "if" 28 00:01:33,726 --> 00:01:36,516 Por lo que el compilador hace ese tipo de expansión. 29 00:01:36,516 --> 00:01:40,924 Así que, sólo como ejemplo, Firefox está escrito en C++. 30 00:01:40,924 --> 00:01:47,095 Por lo tanto, para hacer una nueva versión de Firefox, alguien corre 31 00:01:47,095 --> 00:01:51,910 el compilador de C++ y este lee en los muchos archivos fuentes, 32 00:01:51,910 --> 00:01:54,594 el "gran cuerpo" de código fuente que conforma a firefox, 33 00:01:54,594 --> 00:01:57,157 y básicamente produce firefox.exe 34 00:01:57,157 --> 00:02:00,159 Firefox.exe es la salida del compilador al 35 00:02:00,159 --> 00:02:03,620 traducir todo ese código fuente. 36 00:02:03,620 --> 00:02:06,859 Un par de cosas a señalar es que, 37 00:02:06,859 --> 00:02:09,880 la compilación sólo tiene que pasar una vez. 38 00:02:09,880 --> 00:02:12,185 Así, algunos cuerpo de código fuente, alguien hace firefox.exe 39 00:02:12,185 --> 00:02:15,886 y, a continuación, sólo puede enviarse firefox.exe 40 00:02:15,886 --> 00:02:18,448 Los usuarios finales no necesita el código fuente y 41 00:02:18,448 --> 00:02:20,610 no necesitan el compilador. Por lo que realmente se realiza la compilación 42 00:02:20,610 --> 00:02:26,124 en la fábrica, de hecho. Otra característica es 43 00:02:26,124 --> 00:02:30,382 no funciona al revés. Por lo que yo puedo distribuir firefox.exe 44 00:02:30,382 --> 00:02:34,296 todas esta máquina código, pero no algo que 45 00:02:34,296 --> 00:02:36,899 puede leer en e ir hacia atrás para darme un gran cuerpo de código fuente. 46 00:02:36,899 --> 00:02:38,880 Al menos no perfectamente, puede hacerlo de modo imperfecto. 47 00:02:38,880 --> 00:02:41,982 Lo ideal, para producir una inversión realmente desea 48 00:02:41,982 --> 00:02:44,761 el código fuente. Por lo tanto, hablemos sobre el código fuente. 49 00:02:44,761 --> 00:02:51,948 Por lo tanto, si desea agregar una funcionalidad o corregir un error en firefox, realmente 50 00:02:51,948 --> 00:02:53,965 la forma de hacerlo es volver al código fuente, 51 00:02:53,965 --> 00:02:56,592 y repasarlo, sólo una que he hecho en java script. 52 00:02:56,592 --> 00:02:58,267 Así que añadir unas líneas o un si instrucción para cambiar algunos 53 00:02:58,267 --> 00:03:01,664 comportamiento de alguna manera, en el código fuente y, a continuación, ejecutar 54 00:03:01,664 --> 00:03:03,654 el compilador una vez más, de hecho para hacer una nueva versión de 55 00:03:03,654 --> 00:03:07,143 Firefox que tiene este pequeño cambio que ha puesto 56 00:03:07,143 --> 00:03:10,971 en el código fuente. Como estamos tomando sobre código fuente, 57 00:03:10,971 --> 00:03:14,415 Esto también le da un buen sentido de qué abierto 58 00:03:14,415 --> 00:03:18,870 software de origen significa. Un software de código abierto es una 59 00:03:18,870 --> 00:03:21,860 formato donde se distribuye el programa, sino también 60 00:03:21,860 --> 00:03:25,742 no hay acceso al código fuente original, a la 61 00:03:25,742 --> 00:03:27,735 programa. Y esto viene normalmente con una licencia, 62 00:03:27,735 --> 00:03:29,714 diciendo: ' Hey, aquí está el código fuente. Si desea 63 00:03:29,714 --> 00:03:32,879 hacer su propia versión o corregir un error o lo que sea, este programa, 64 00:03:32,879 --> 00:03:36,755 Siéntase libre. " Eso de las 2 principales características del software de código abierto 65 00:03:36,755 --> 00:03:42,555 uno, normalmente se distribuye gratuitamente, por lo que saben, su barata. Pero el 66 00:03:42,555 --> 00:03:45,985 otra característica es que viene con una especie de libertad. 67 00:03:45,985 --> 00:03:50,945 Porque si el software es un código cerrado y 68 00:03:50,945 --> 00:03:52,942 desea alguna característica diferente, hay que algunos fallos 69 00:03:52,942 --> 00:03:55,671 necesario se aplique, usted realmente depende del proveedor, quien tiene la 70 00:03:55,671 --> 00:03:58,311 código fuente, como bien-do se sienten como aplicación 71 00:03:58,311 --> 00:04:01,098 ¿esa característica? En contraste con el software de código abierto, 72 00:04:01,098 --> 00:04:04,182 es como que no hay esposas. El código fuente está disponible, 73 00:04:04,182 --> 00:04:06,861 y si hay algo que realmente quieres hacer, 74 00:04:06,861 --> 00:04:10,061 o decir que el proveedor original va fuera del negocio, entonces 75 00:04:10,061 --> 00:04:15,029 porque tienes el código fuente, usted sabe, usted puede puede ser 76 00:04:15,029 --> 00:04:17,321 pagar a alguien para hacer un cambio y producir sus propios 77 00:04:17,321 --> 00:04:19,577 versión personalizada. Por lo que viene con este tipo de profundidad, uh- 78 00:04:19,577 --> 00:04:21,650 puede considerar como una póliza de seguro. 79 00:04:21,650 --> 00:04:26,142 A menudo hay muchos tipos diferentes de los términos de licencia 80 00:04:26,142 --> 00:04:28,796 para un software de código abierto, pero, más a menudo 81 00:04:28,796 --> 00:04:31,016 requieren en algunos casos, que si usted tomar sus 82 00:04:31,016 --> 00:04:34,938 código fuente y agregar alguna característica, entonces debe ofrecer 83 00:04:34,938 --> 00:04:37,564 esos cambios a la comunidad. Así, en el mismo 84 00:04:37,564 --> 00:04:39,767 manera han beneficiado del otro trabajo, puede beneficiarse de su trabajo. 85 00:04:39,767 --> 00:04:43,644 Los detalles de cómo se puede hacer es complicado. 86 00:04:43,644 --> 00:04:45,843 Hay muchas formas diferentes de la misma. 87 00:04:45,843 --> 00:04:47,530 Me vas a hablar del software de código abierto un 88 00:04:47,530 --> 00:04:48,856 poco más tarde, sólo menciono esto ahora, 89 00:04:48,856 --> 00:04:51,187 porque nos da la idea de lo que es el código fuente 90 00:04:51,187 --> 00:04:54,602 del programa vs sólo tener el archivo .exe de algo. 91 00:04:54,602 --> 00:05:01,682 Así que hasta el momento hablé acerca de C++, por lo que es esto 92 00:05:01,682 --> 00:05:04,771 toda otra gran categoría de lenguas, que 93 00:05:04,771 --> 00:05:07,219 Me va a llamar, lenguajes dinámicos o a veces 94 00:05:07,219 --> 00:05:11,393 Idiomas de intérprete. Y esto es una especie de una gran prueba 95 00:05:11,393 --> 00:05:12,436 estrategia y hay muchos idiomas diferentes con 96 00:05:12,436 --> 00:05:15,234 muchas cualidades diferentes y yo apenas estoy va a ordenar de bulto, 97 00:05:15,234 --> 00:05:17,156 tumor les en esta gran categoría. 98 00:05:17,156 --> 00:05:19,453 Ejemplos de lenguajes dinámicos son actualmente Java, 99 00:05:19,453 --> 00:05:24,390 Secuencia de comandos de Java y Python. Por lo tanto, va a una manera de que estos son 100 00:05:24,390 --> 00:05:26,506 el trabajo es que se apliquen por lo que se llama 101 00:05:26,506 --> 00:05:30,293 un intérprete. Supongo que el caso de compilador estaba tomando antes. 102 00:05:30,293 --> 00:05:36,157 Un intérprete es un programa que toma en código escrito en algún lenguaje 103 00:05:36,157 --> 00:05:42,729 y tipo de [inaudible] lo ejecuta. El mejor ejemplo es 104 00:05:42,729 --> 00:05:45,703 hay este lenguaje informático llamado java script, 105 00:05:45,703 --> 00:05:49,272 que realmente han estado utilizando y navegadores que son web 106 00:05:49,272 --> 00:05:52,017 incluye programas como una parte de ellos, un java 107 00:05:52,017 --> 00:05:55,148 intérprete de comandos. Y cuando viene el navegador web 108 00:05:55,148 --> 00:05:57,471 a través de una página con código java script 109 00:05:57,471 --> 00:06:00,604 puede utilizar el intérprete para ejecutar ese código para que sea 110 00:06:00,604 --> 00:06:06,015 hacer todo lo que se va a hacer. Así que la forma del intérprete 111 00:06:06,015 --> 00:06:10,809 obras son que trata con el programa 1 línea a la vez. 112 00:06:10,809 --> 00:06:13,892 Así que aquí es un poco de código de secuencia de comandos de java, 113 00:06:13,892 --> 00:06:16,139 Si el intérprete quería ejecutar este, bien 114 00:06:16,139 --> 00:06:17,727 se verá en la primera línea y a mirar 115 00:06:17,727 --> 00:06:19,669 lo que dice esa línea y, a continuación, el intérprete 116 00:06:19,669 --> 00:06:22,260 lo haría. Así que en este caso, el intérprete dirá, 117 00:06:22,260 --> 00:06:24,182 UH-así que supongo que necesito una variable denominada A, y 118 00:06:24,182 --> 00:06:25,992 Necesito poner un 1 en ella. Así que una vez se realiza con esa línea 119 00:06:25,992 --> 00:06:28,531 luego va hacia adelante, y lo hace la siguiente línea. 120 00:06:28,531 --> 00:06:32,647 Y así sucesivamente. Lo mismo ocurre con el compilador de este gran grueso 121 00:06:32,647 --> 00:06:36,718 traducción del código fuente en el código de máquina 122 00:06:36,718 --> 00:06:38,077 Pero no realmente está ejecutando el código, su justo 123 00:06:38,077 --> 00:06:39,658 haciendo la traducción para ejecutarse en el futuro. 124 00:06:39,658 --> 00:06:42,848 Por el contrario intérprete vive realmente en el momento. 125 00:06:42,848 --> 00:06:45,144 Sólo pasando por el código línea por línea y sólo 126 00:06:45,144 --> 00:06:49,393 hacerlo. Así que permítanme hablar un poco sobre las diferencias 127 00:06:49,393 --> 00:06:53,284 entre estos dos. Debo decir como una renuncia, 128 00:06:53,284 --> 00:06:55,774 Hay muchos lenguajes de programación, no hay ninguna mejor 129 00:06:55,774 --> 00:06:59,419 el viejo chiste de lenguaje, es que realmente saben, 130 00:06:59,419 --> 00:07:00,769 cuando estás en el seminario y cuando estás 131 00:07:00,769 --> 00:07:01,917 argumentando sobre los pros y los contras de algo, 132 00:07:01,917 --> 00:07:04,872 en última instancia, la respuesta es simplemente, depende. 133 00:07:04,872 --> 00:07:08,107 Como no hay ninguna mejores idiomas, pero bien lo que es 134 00:07:08,107 --> 00:07:09,484 los idiomas mejores esta situación, con todos los 135 00:07:09,484 --> 00:07:13,337 características. Tan ampliamente hablando, código de compilador justo 136 00:07:13,337 --> 00:07:16,725 tiende a correr más rápido. Cuando se compila un código de C++ 137 00:07:16,725 --> 00:07:19,426 y producir ese .exe, es una especie de en un sentido magro, 138 00:07:19,426 --> 00:07:23,747 gran cantidad de detalles y decisiones ha sido despojado 139 00:07:23,747 --> 00:07:26,886 tanto como sea posible. Por otro lado dinámico o 140 00:07:26,886 --> 00:07:30,715 idiomas de intérprete, tienden a tener más funciones. 141 00:07:30,715 --> 00:07:32,965 Más funciones que hace el trabajo del programador un 142 00:07:32,965 --> 00:07:35,845 poco más fácil. O puesto de otra manera, ampliamente 143 00:07:35,845 --> 00:07:39,197 hablando, el programador puede tienden a hacer más trabajo 144 00:07:39,197 --> 00:07:41,907 por hora, en lenguajes dinámicos, que lo hacen en la compilación 145 00:07:41,907 --> 00:07:46,812 Idiomas. Sin embargo hay no hay almuerzo gratis, es 146 00:07:46,812 --> 00:07:49,784 también el caso de que el código de lenguaje dinámico tiende a 147 00:07:49,784 --> 00:07:52,660 ejecutar más lento de la CPU en términos de sólo obtener sólo 148 00:07:52,660 --> 00:07:57,232 el trabajo realizado, en comparación con las lenguas de compilador. 149 00:07:57,232 --> 00:07:59,344 Código de fuente del compilador se va a hacer lo mismo. 150 00:07:59,344 --> 00:08:04,848 Así que un ejemplo de esto, es un gran ejemplo de esto, 151 00:08:04,848 --> 00:08:06,885 Administración de memoria. Por lo que la administración de memoria se refiere a la 152 00:08:06,885 --> 00:08:09,869 problema en el código de saber cuántos bytes son 153 00:08:09,869 --> 00:08:12,286 ¿necesarios para almacenar algo y, en particular por cuánto tiempo? 154 00:08:12,286 --> 00:08:16,174 Bueno necesito esos bytes para la línea 6, sabes, pero 155 00:08:16,174 --> 00:08:18,277 quizás en la línea 20, y no necesitan ya 156 00:08:18,277 --> 00:08:20,594 y realmente puedo reutilizarlos para algo más. 157 00:08:20,594 --> 00:08:23,145 Y en realidad es un problema de tipo de complicted. 158 00:08:23,145 --> 00:08:27,007 En c y C++, administración de memoria es un grado 159 00:08:27,007 --> 00:08:29,773 Manual. y eso sólo significa que el programador 160 00:08:29,773 --> 00:08:31,315 se están produciendo todas estas líneas de códigos para cosas 161 00:08:31,315 --> 00:08:33,329 y va a ser a veces, cuando puede tener a 162 00:08:33,329 --> 00:08:35,555 agregar algunas líneas para hacer algún pensamiento, para ayudar a la Guía 163 00:08:35,555 --> 00:08:38,174 la administración de la memoria. Así que hay algunos 164 00:08:38,174 --> 00:08:41,438 esfuerzo de programador requerido. En contraste, la mayoría 165 00:08:41,438 --> 00:08:43,926 lenguajes dinámicos tienen lo que se llama, automático 166 00:08:43,926 --> 00:08:46,870 Administración de memoria. Y esto significa que, no 167 00:08:46,870 --> 00:08:53,009 entrada de programador es necesario. El lenguaje se va 168 00:08:53,009 --> 00:08:56,945 a notar automáticamente, cuando se necesita memoria, 169 00:08:56,945 --> 00:08:58,065 Cuando memoria no es necesaria ya, 170 00:08:58,065 --> 00:09:03,489 puede ser reciclado y eche en ese conjunto 171 00:09:03,489 --> 00:09:04,806 problema. Por lo tanto, esto encaja dentro de la tendencia de 172 00:09:04,806 --> 00:09:06,977 lenguajes dinámicos que estaba mencionando anteriormente, 173 00:09:06,977 --> 00:09:09,406 Por eso, este un ejemplo de cómo, bueno, ya sabes, porque 174 00:09:09,406 --> 00:09:11,736 el programador tiene menos que ver, son capaces de justo 175 00:09:11,736 --> 00:09:13,526 obtener cosas hecho un poco más rápido. Administración de memoria tan 176 00:09:13,526 --> 00:09:15,735 es un gran ejemplo de ello. Sin embargo también se puede imaginar 177 00:09:15,735 --> 00:09:17,190 Esta es una de las cosas que hace dinámico 178 00:09:17,190 --> 00:09:19,060 código de idioma ejecutar un poco más lento. Porque, 179 00:09:19,060 --> 00:09:22,914 la CPU tiene ahora suggestional libro manteniendo el problema, 180 00:09:22,914 --> 00:09:25,292 donde su mirando la memoria y tratando de 181 00:09:25,292 --> 00:09:27,842 figura fuera, cuando puede ser reutilizado. Por lo tanto, muy amplia 182 00:09:27,842 --> 00:09:32,320 hablando, la tendencia para el equipo de programación hoy 183 00:09:32,320 --> 00:09:37,047 es hacia los lenguajes dinámicos. El rasgo que la 184 00:09:37,047 --> 00:09:40,776 programador obtendrá un liitle rápido, cosas 185 00:09:40,776 --> 00:09:43,243 a expensas de utilizar un poco más CPU o más 186 00:09:43,243 --> 00:09:45,931 memoria, es un equilibrio bastante atractivo para 187 00:09:45,931 --> 00:09:49,162 muchos de los problemas. Esto puede ser un poco intuitiva, 188 00:09:49,162 --> 00:09:51,875 pero se puede pensar lo que es la escasa calidad, 189 00:09:51,875 --> 00:09:54,877 para un programa de ordenador y muchas veces es el 190 00:09:54,877 --> 00:09:59,390 programador, que tenga programador experto trabajando 191 00:09:59,390 --> 00:10:01,205 en que, sabes, trabajando en este dominio, mucho 192 00:10:01,205 --> 00:10:06,287 de los tiempos son difíciles de encontrar. Y así 193 00:10:06,287 --> 00:10:09,105 sus horas, es decir, utilizando algunas de sus horas, 194 00:10:09,105 --> 00:10:12,636 luce atractivo, en contraste, la CPU siempre 195 00:10:12,636 --> 00:10:13,929 quiero trabajar tan rápido como sea posible, pero 196 00:10:13,929 --> 00:10:17,425 CPUs son bastante barato y bastante eficaz 197 00:10:17,425 --> 00:10:19,073 y hay incluso este efecto curioso donde esta Moore 198 00:10:19,073 --> 00:10:24,256 Derecho, sigue haciendo más cierto, donde la CPU cada año obtiene más barata 199 00:10:24,256 --> 00:10:27,230 y si pensamos en el equilibrio entre el programador 200 00:10:27,230 --> 00:10:29,185 costo y el costo de CPU de conseguir algo, 201 00:10:29,185 --> 00:10:31,781 Esto significa en términos de la parte del pastel, 202 00:10:31,781 --> 00:10:33,478 el programador de hecho cada vez más caro 203 00:10:33,478 --> 00:10:36,169 cada año, un poco más escaso. Por lo que estos se ajusta 204 00:10:36,169 --> 00:10:41,365 en el patrón. En el conjunto de los lenguajes dinámicos 205 00:10:41,365 --> 00:10:43,830 se están volviendo populares. La última cosa que será 206 00:10:43,830 --> 00:10:46,561 mención es que existe una cosa llamada "JIT", 207 00:10:46,561 --> 00:10:50,144 un compilador Just In Time. Y este tipo de 208 00:10:50,144 --> 00:10:52,646 la síntesis natural del compilador e intérprete 209 00:10:52,646 --> 00:10:54,772 estrategias, de tratar de obtener lo mejor de ambos mundos. 210 00:10:54,772 --> 00:10:56,796 Tan su parecido, bueno, nos gustaría tener un lenguaje dinámico, 211 00:10:56,796 --> 00:10:58,693 con todas estas funciones, todas estas favorables de programador 212 00:10:58,693 --> 00:11:02,020 características, pero nos quieren correr rápido. Y así 213 00:11:02,020 --> 00:11:04,542 Este JIT tomar partes del código y probar 214 00:11:04,542 --> 00:11:07,086 y compilar sobre la marcha. Por lo que trata de una especie de 215 00:11:07,086 --> 00:11:11,831 para casarse con dos de ellos. Resulta funciona 216 00:11:11,831 --> 00:11:14,630 bastante bien. Así que todos los navegadores tienen ahora 217 00:11:14,630 --> 00:11:18,695 JITs para código de secuencia de comandos de Java. Así que realmente cuando usted 218 00:11:18,695 --> 00:11:22,317 está ejecutando código Java Script en esta clase, 219 00:11:22,317 --> 00:11:24,617 dentro del explorador había un JIT que estaba en el 220 00:11:24,617 --> 00:11:28,409 mosca, teniendo esos trozos de código Java Script y 221 00:11:28,409 --> 00:11:31,615 compilarlos sobre la marcha, en el código de máquina. 222 00:11:31,615 --> 00:11:35,363 De todos modos, no obtendrá exactamente los formatos del compilador 223 00:11:35,363 --> 00:11:39,041 código, pero se obtiene bastante estrecha. SO. Esto es realmente 224 00:11:39,041 --> 00:11:41,983 Cómo funciona la mayoría de los lenguajes dinámicos. Es un activo 225 00:11:41,983 --> 00:11:44,390 área de investigación. Pero parece que funciona bastante bien.