1 00:00:00,820 --> 00:00:03,960 Voy a grabar esta segunda parte, ¿vale? 2 00:00:04,019 --> 00:00:07,780 Entonces, si habláis, me dais el consentimiento de grabaros. 3 00:00:07,919 --> 00:00:09,859 Esto lo diré cada vez que grabo, ¿eh? 4 00:00:09,859 --> 00:00:13,320 Para que quede grabado y no podáis pillarme en el juzgado. 5 00:00:15,900 --> 00:00:16,719 Eso es. 6 00:00:17,320 --> 00:00:22,660 Entonces, hemos visto distintos tipos de lenguajes, no los hemos entendido, 7 00:00:22,760 --> 00:00:27,899 pues que no los conocemos, pero la idea es que el mismo programa aparece de formas distintas. 8 00:00:27,899 --> 00:00:32,640 Teniendo en cuenta que esta es una cosa que viene por ahí en la teoría de la informática 9 00:00:32,640 --> 00:00:37,659 Todos los lenguajes que hemos visto ahora pueden hacer sustancialmente lo mismo 10 00:00:37,659 --> 00:00:43,179 Yo puedo hacer un programa en C++ o un programa en Java 11 00:00:43,179 --> 00:00:45,920 Y que hagan exactamente lo mismo 12 00:00:45,920 --> 00:00:50,119 Lo que pasa es que a lo mejor en uno sufro más que en otro 13 00:00:50,119 --> 00:00:53,020 En uno me requiere más código que en otro 14 00:00:53,020 --> 00:00:56,179 En otro una parte ya está desarrollada, la puedo reutilizar 15 00:00:56,179 --> 00:00:59,299 Y en el otro en vez me tengo que escribir todo yo 16 00:00:59,299 --> 00:01:02,000 O sea, puede haber diferencias de ese estilo 17 00:01:02,000 --> 00:01:05,859 Pero a nivel de potencia de los lenguajes 18 00:01:05,859 --> 00:01:07,739 Son todos equivalentes 19 00:01:07,739 --> 00:01:08,980 ¿Sí? 20 00:01:10,040 --> 00:01:14,200 Entonces, dentro de este mundo de la programación 21 00:01:14,200 --> 00:01:15,400 De los lenguajes programaciones 22 00:01:15,400 --> 00:01:20,439 Encontramos dos métodos 23 00:01:20,439 --> 00:01:23,680 Para que un lenguaje de alto nivel 24 00:01:23,680 --> 00:01:26,359 Sea entendido por el procesador 25 00:01:26,359 --> 00:01:28,560 Hemos dicho que el procesador 26 00:01:28,560 --> 00:01:30,439 Solo entiende ceros y unos 27 00:01:30,439 --> 00:01:34,439 Y nosotros no estamos escribiendo ceros y unos 28 00:01:34,439 --> 00:01:36,519 Estamos escribiendo palabras y cosas por el estilo 29 00:01:36,519 --> 00:01:39,599 Estamos escribiendo printf para que tú escribas en pantalla 30 00:01:39,599 --> 00:01:43,060 O scanf para que tú leas un dato 31 00:01:43,060 --> 00:01:44,260 Que te mando yo por teclado 32 00:01:44,260 --> 00:01:47,260 El procesador esta cosa no la entiende 33 00:01:47,260 --> 00:01:52,359 Necesito un mecanismo que pille mi alto nivel 34 00:01:52,359 --> 00:01:55,680 Porque yo como programador quiero trabajar a alto nivel 35 00:01:55,680 --> 00:01:57,340 De hecho, lo que decíamos antes 36 00:01:57,340 --> 00:01:59,739 Mi sueño como programador 37 00:01:59,739 --> 00:02:03,439 Es que yo ni siquiera necesite saber el lenguaje de programación 38 00:02:03,439 --> 00:02:08,060 Que yo hable en lenguaje natural al ordenador 39 00:02:08,060 --> 00:02:09,960 Le explique, mira, quiero una función 40 00:02:09,960 --> 00:02:11,479 Que pilla dos números 41 00:02:11,479 --> 00:02:14,159 El siguiente número es la suma de los dos anteriores 42 00:02:14,159 --> 00:02:15,659 Y así cada vez 43 00:02:15,659 --> 00:02:17,939 Y yo te digo el número que quiero 44 00:02:17,939 --> 00:02:20,960 Y tú me dices, me haces los cálculos 45 00:02:20,960 --> 00:02:23,939 Y que él me saque los ceros y unos suficientes 46 00:02:23,939 --> 00:02:24,740 Para que se ejecute 47 00:02:24,740 --> 00:02:26,240 Ese es el sueño 48 00:02:26,240 --> 00:02:27,860 Que todos seamos programadores 49 00:02:27,860 --> 00:02:30,319 Y que podamos hablar directamente con el ordenador 50 00:02:30,319 --> 00:02:32,060 Unos 10 años 51 00:02:32,060 --> 00:02:35,680 Lo está ya haciendo 52 00:02:35,680 --> 00:02:37,719 El problema es que muchas veces se equivoca 53 00:02:37,719 --> 00:02:40,659 Entonces todavía no estamos allí 54 00:02:40,659 --> 00:02:42,960 Todavía a veces tú le dices una cosa 55 00:02:42,960 --> 00:02:43,960 Y él hace lo que le da la gana 56 00:02:43,960 --> 00:02:45,060 Diciendo es esta la solución 57 00:02:45,060 --> 00:02:46,139 Y luego no es la solución 58 00:02:46,139 --> 00:02:47,400 Cuanto más sencillo sí 59 00:02:47,400 --> 00:02:49,960 Pero si te metes a hacer un programa muy complejo 60 00:02:49,960 --> 00:02:52,240 no lo aguanta 61 00:02:52,240 --> 00:02:53,400 ¿vale? entonces 62 00:02:53,400 --> 00:02:56,120 ¿cómo se puede hacer esta traducción de 63 00:02:56,120 --> 00:02:57,840 he escrito un programa de alto nivel 64 00:02:57,840 --> 00:02:59,939 porque yo soy un programador y quiero escribir 65 00:02:59,939 --> 00:03:01,819 a alto nivel porque me quiero olvidar 66 00:03:01,819 --> 00:03:03,860 de los detalles de 67 00:03:03,860 --> 00:03:05,860 oye, esta operación la podría utilizar 68 00:03:05,860 --> 00:03:08,159 en este procesador o no, yo quiero escribir 69 00:03:08,159 --> 00:03:09,620 pero escribo en pantalla 70 00:03:09,620 --> 00:03:11,120 y luego ¿qué se ocupe? 71 00:03:11,659 --> 00:03:14,219 necesito este mecanismo que pille este alto nivel 72 00:03:14,219 --> 00:03:16,259 y lo transforme en ceros y unos 73 00:03:16,259 --> 00:03:18,039 y que sean ceros y unos 74 00:03:18,039 --> 00:03:19,939 que se puedan ejecutar en este ordenador 75 00:03:19,939 --> 00:03:21,900 Y que este ordenador diga, vale, lo entiendo 76 00:03:21,900 --> 00:03:23,280 Y me haga lo que yo le he pedido 77 00:03:23,280 --> 00:03:26,780 Y hay sustancialmente 78 00:03:26,780 --> 00:03:28,599 Dos formas de hacer esto 79 00:03:28,599 --> 00:03:30,259 La compilación 80 00:03:30,259 --> 00:03:31,659 Y la interpretación 81 00:03:31,659 --> 00:03:32,599 ¿Vale? 82 00:03:34,319 --> 00:03:36,379 Cuando se habla de interpretación 83 00:03:36,379 --> 00:03:38,060 Se necesita 84 00:03:38,060 --> 00:03:39,659 Otro programita 85 00:03:39,659 --> 00:03:42,620 Este otro programita se llama intérprete 86 00:03:42,620 --> 00:03:43,819 Alguien 87 00:03:43,819 --> 00:03:45,500 Se ha pasado la vida 88 00:03:45,500 --> 00:03:47,479 A escribir un programa 89 00:03:47,479 --> 00:03:51,000 Que lee código de alto nivel 90 00:03:51,000 --> 00:03:52,259 Lee Java 91 00:03:52,259 --> 00:03:55,280 Y lo transforma 92 00:03:55,280 --> 00:03:56,819 En los equivalentes 93 00:03:56,819 --> 00:03:57,939 Ceros y unos 94 00:03:57,939 --> 00:04:00,280 Del procesador que está en su ordenador 95 00:04:00,280 --> 00:04:02,340 Este programa 96 00:04:02,340 --> 00:04:03,860 Se arranca 97 00:04:03,860 --> 00:04:05,120 Está allí 98 00:04:05,120 --> 00:04:07,300 Y lo que pasa es que 99 00:04:07,300 --> 00:04:09,020 Tú le dices 100 00:04:09,020 --> 00:04:12,360 Oye mira, intérpretame este programa de aquí 101 00:04:12,360 --> 00:04:14,340 Que es el programa que has escrito tú 102 00:04:14,340 --> 00:04:16,839 Y él se va a leer ese fichero 103 00:04:16,839 --> 00:04:19,560 Pilla instrucción por instrucción 104 00:04:19,560 --> 00:04:27,220 Y la interpreta con las correspondientes instrucciones a nivel máquina 105 00:04:27,220 --> 00:04:31,740 Que tiene que hacer el procesador para poder hacer esa instrucción de código 106 00:04:31,740 --> 00:04:38,540 Cuidado, no es que cada instrucción de alto nivel corresponde a una instrucción del procesador 107 00:04:38,540 --> 00:04:47,579 A lo mejor una sola línea de código tuya se interpreta con 50 instrucciones del procesador 108 00:04:47,579 --> 00:04:48,860 Pero yo no lo sé 109 00:04:48,860 --> 00:04:55,660 Yo tengo este intermediario, esta persona en el medio, este programita que se llama el intérprete 110 00:04:55,660 --> 00:05:01,579 Que sostancialmente puede leer un programa escrito en un lenguaje de más alto nivel 111 00:05:01,579 --> 00:05:04,819 Interpretar lo que quiere decir 112 00:05:04,819 --> 00:05:09,779 Y ejecutarlo materialmente dentro del procesador 113 00:05:09,779 --> 00:05:13,459 Tienen en cuenta también que el intérprete tiene que estar arrancado 114 00:05:13,459 --> 00:05:14,639 Tiene que funcionar 115 00:05:14,639 --> 00:05:18,480 Si yo no lanzo este programa no me va a funcionar 116 00:05:18,480 --> 00:05:20,259 No hay nadie que hace esta traducción 117 00:05:20,259 --> 00:05:26,079 Y que el intérprete suele traducir línea por línea 118 00:05:26,079 --> 00:05:27,480 Instrucción por instrucción 119 00:05:27,480 --> 00:05:30,399 Pilla una instrucción, la interpreta, la ejecuta 120 00:05:30,399 --> 00:05:31,860 pilla otra instrucción 121 00:05:31,860 --> 00:05:33,579 la interpreta y la ejecuta 122 00:05:33,579 --> 00:05:39,939 ¿sabes de Java? 123 00:05:40,360 --> 00:05:42,040 ¿sabes que es la Java Virtual Machine? 124 00:05:42,819 --> 00:05:43,939 ese es el intérprete de Java 125 00:05:43,939 --> 00:05:45,199 Java Virtual Machine 126 00:05:45,199 --> 00:05:51,379 lo veremos en Java 127 00:05:51,379 --> 00:05:53,160 hay un programa 128 00:05:53,160 --> 00:05:56,079 tú cuando instalas Java 129 00:05:56,079 --> 00:05:58,259 cuando quieres usar Java 130 00:05:58,259 --> 00:06:00,860 necesitas instalar una parte 131 00:06:00,860 --> 00:06:02,220 que se llama el JRE 132 00:06:02,220 --> 00:06:03,360 el Java Runtime 133 00:06:03,360 --> 00:06:08,000 que sostantivamente te lanza 134 00:06:08,000 --> 00:06:09,779 lo que es la Java Virtual Machine 135 00:06:09,779 --> 00:06:12,579 La Java Virtual Machine es un programita que se ejecuta 136 00:06:12,579 --> 00:06:14,620 Y que es el intérprete de Java 137 00:06:14,620 --> 00:06:16,360 Entonces luego 138 00:06:16,360 --> 00:06:18,300 La Java Virtual Machine lo que hace es interpretar 139 00:06:18,300 --> 00:06:19,279 Tu código Java 140 00:06:19,279 --> 00:06:22,600 Ahora veremos que es de verdad 141 00:06:22,600 --> 00:06:23,839 Y lo interpreta 142 00:06:23,839 --> 00:06:27,100 Si tú no tienes instalado en tu ordenador 143 00:06:27,100 --> 00:06:28,360 La Java Virtual Machine 144 00:06:28,360 --> 00:06:30,839 El JRL, Java Runtime and Verbal 145 00:06:30,839 --> 00:06:32,399 No puedes ejecutar Java 146 00:06:32,399 --> 00:06:39,290 El entorno de desarrollo 147 00:06:39,290 --> 00:06:40,990 Puede ser cualquier cosa 148 00:06:40,990 --> 00:06:42,389 Hasta el bloque de notas 149 00:06:42,389 --> 00:06:45,829 Pero cuando tú has escrito el código 150 00:06:45,829 --> 00:06:48,350 Le tienes que hacer algo 151 00:06:48,350 --> 00:06:49,949 Ahora lo veremos en Java Studio 152 00:06:49,949 --> 00:06:53,110 Porque imaginamos que sea interpretado puro 153 00:06:53,110 --> 00:06:55,410 Pues tú este aquí lo guardas en un fichero 154 00:06:55,410 --> 00:06:57,670 Y ahora llamas a otro programa 155 00:06:57,670 --> 00:06:59,970 Que lo que va a hacer es leerte el fichero 156 00:06:59,970 --> 00:07:01,250 Y traducirlo 157 00:07:01,250 --> 00:07:02,730 Pero este programa aquí 158 00:07:02,730 --> 00:07:04,350 El intérprete no lo hace 159 00:07:04,350 --> 00:07:06,629 El intérprete que viene dado 160 00:07:06,629 --> 00:07:08,689 Por quien desarrolla el programa 161 00:07:08,689 --> 00:07:17,769 El intérprete podría ser 162 00:07:17,769 --> 00:07:20,209 que tenga varios pasos 163 00:07:20,209 --> 00:07:21,290 y que intérprete 164 00:07:21,290 --> 00:07:22,930 traduca cada 165 00:07:22,930 --> 00:07:25,689 instrucción 166 00:07:25,689 --> 00:07:26,730 de alto nivel 167 00:07:26,730 --> 00:07:28,670 la transforme en 168 00:07:28,670 --> 00:07:30,970 ensemblador y que luego haya 169 00:07:30,970 --> 00:07:31,629 un ejecutor 170 00:07:31,629 --> 00:07:34,790 alguien que pueda ejecutar 171 00:07:34,790 --> 00:07:36,410 el ensemblador más a bajo nivel 172 00:07:36,410 --> 00:07:38,810 puede ser en dos pasos, puede ser en tres, puede ser en cinco 173 00:07:38,810 --> 00:07:40,329 eso sí que se puede hacer 174 00:07:40,329 --> 00:07:43,029 pero en principio tú podrías hacer 175 00:07:43,029 --> 00:07:45,329 un programa, porque alguien lo ha desarrollado 176 00:07:45,329 --> 00:07:46,910 quien desarrolla ese intérprete 177 00:07:46,910 --> 00:07:48,910 Podría hacerlo que directamente lo pase 178 00:07:48,910 --> 00:07:50,370 En ceros y unos 179 00:07:50,370 --> 00:07:53,029 Y que se ejecutaría directamente el lenguaje max 180 00:07:53,029 --> 00:07:57,410 Depende también de la eficiencia que buscas 181 00:07:57,410 --> 00:07:58,350 De lo que estás buscando 182 00:07:58,350 --> 00:08:03,110 Pero aquí hay un intérprete 183 00:08:03,110 --> 00:08:04,730 Hay un programa extra 184 00:08:04,730 --> 00:08:07,009 Que podéis desarrollar vosotros, sin duda 185 00:08:07,009 --> 00:08:09,449 Que no soléis desarrollar vosotros 186 00:08:09,449 --> 00:08:10,730 Que ha desarrollado alguien 187 00:08:10,730 --> 00:08:12,269 Que ya me lo ha dado hecho 188 00:08:12,269 --> 00:08:14,370 Ha dicho, si quieres usar mi lenguaje de programación 189 00:08:14,370 --> 00:08:15,689 Este es el intérprete 190 00:08:15,689 --> 00:08:17,129 Python creo que hace lo mismo 191 00:08:17,129 --> 00:08:17,750 ¿Vale? 192 00:08:17,910 --> 00:08:21,389 Tienes que instalar Python para que luego funcione Python 193 00:08:21,389 --> 00:08:23,089 Si no tienes instalado Python 194 00:08:23,089 --> 00:08:24,529 No tienes el intérprete de Python 195 00:08:24,529 --> 00:08:25,829 No te va a funcionar 196 00:08:25,829 --> 00:08:29,910 Y este programita que se ejecuta 197 00:08:29,910 --> 00:08:32,730 Cuando tú quieres ejecutar tu programa 198 00:08:32,730 --> 00:08:35,149 Lo que hace es ir a leerse 199 00:08:35,149 --> 00:08:36,830 Línea por línea tu programa 200 00:08:36,830 --> 00:08:38,750 Y por cada línea la traduce y la ejecuta 201 00:08:38,750 --> 00:08:39,970 Línea, traduce, ejecuta 202 00:08:39,970 --> 00:08:41,789 Ese es como funciona un intérprete 203 00:08:41,789 --> 00:08:45,330 La otra opción es la compilación 204 00:08:45,330 --> 00:08:50,850 La compilación es, dame tu código fuente, lo que tú has escrito 205 00:08:50,850 --> 00:08:57,049 Yo voy con otro programa, al principio de una sola vez 206 00:08:57,049 --> 00:09:04,309 A analizar todo tu código y lo voy a traducir al lenguaje máquina 207 00:09:04,309 --> 00:09:08,950 Y esta traducción al lenguaje máquina la guardo en un fichero 208 00:09:08,950 --> 00:09:12,649 Una vez que he hecho este proceso 209 00:09:12,649 --> 00:09:15,110 He traducido todo tu lenguaje 210 00:09:15,110 --> 00:09:16,289 Todo tu programa 211 00:09:16,289 --> 00:09:17,769 En lenguaje máquina 212 00:09:17,769 --> 00:09:20,370 El compilador se acaba 213 00:09:20,370 --> 00:09:22,470 No hago nada más 214 00:09:22,470 --> 00:09:23,870 Ya no funciona 215 00:09:23,870 --> 00:09:26,730 Ya no tengo que lanzar otra vez el compilador 216 00:09:26,730 --> 00:09:27,990 Ya está compilado 217 00:09:27,990 --> 00:09:30,169 Y ahora tú puedes 218 00:09:30,169 --> 00:09:33,129 Ejecutar el programa objeto 219 00:09:33,129 --> 00:09:35,350 La cosa final que has creado 220 00:09:35,350 --> 00:09:36,990 Y este de aquí 221 00:09:36,990 --> 00:09:38,190 Es un fichero 222 00:09:38,190 --> 00:09:39,409 Ejecutable 223 00:09:39,409 --> 00:09:42,090 Haces doble clic sobre ello 224 00:09:42,090 --> 00:09:43,929 Y el procesador 225 00:09:43,929 --> 00:09:45,929 Tiene dentro ceros y unos 226 00:09:45,929 --> 00:09:48,309 Y puede entender como se ejecuta 227 00:09:48,309 --> 00:09:51,330 El intérprete 228 00:09:51,330 --> 00:09:53,690 Lo hacía línea por línea 229 00:09:53,690 --> 00:09:56,389 Y tiene que estar activo 230 00:09:56,389 --> 00:09:57,169 El intérprete 231 00:09:57,169 --> 00:10:00,610 Mientras está ejecutando tu programa 232 00:10:00,610 --> 00:10:02,149 Si lo lanzo otra vez 233 00:10:02,149 --> 00:10:02,789 Tu programa 234 00:10:02,789 --> 00:10:04,529 El intérprete tiene que seguir allí 235 00:10:04,529 --> 00:10:06,049 Si el intérprete se para 236 00:10:06,049 --> 00:10:07,190 No funciona 237 00:10:07,190 --> 00:10:10,269 El compilador 238 00:10:10,269 --> 00:10:12,090 Lanzo el compilador una vez 239 00:10:12,090 --> 00:10:14,090 Hago la traducción 240 00:10:14,090 --> 00:10:15,830 Y una vez traducido 241 00:10:15,830 --> 00:10:19,350 El compilador no lo tengo que tocar nunca jamás 242 00:10:19,350 --> 00:10:21,549 Tengo mi código ejecutable 243 00:10:21,549 --> 00:10:23,850 Y para ejecutar ese código 244 00:10:23,850 --> 00:10:25,330 Puedo ejecutarlo directamente 245 00:10:25,330 --> 00:10:27,149 El ordenador lo entiende 246 00:10:27,149 --> 00:10:29,490 Porque dentro lo he escrito en ceros y unos 247 00:10:29,490 --> 00:10:31,610 Es una versión de lo que has escrito tú 248 00:10:31,610 --> 00:10:33,350 Pero ha escrito en lenguaje Mac 249 00:10:33,350 --> 00:10:36,850 ¿Se entiende la diferencia? 250 00:10:37,190 --> 00:10:39,970 Claro que si yo hago ahora una modificación 251 00:10:39,970 --> 00:10:41,169 En mi código fuente 252 00:10:41,169 --> 00:10:44,309 Tendré que lanzar otra vez el compilador 253 00:10:44,309 --> 00:10:46,370 Para que cree una nueva 254 00:10:46,370 --> 00:10:48,769 La versión ejecutable 255 00:10:48,769 --> 00:10:50,110 De lo que 256 00:10:50,110 --> 00:10:51,409 De lo que he escrito 257 00:10:51,409 --> 00:10:52,990 De la nuevo programa que he hecho yo 258 00:10:52,990 --> 00:10:53,889 Porque he cambiado algo 259 00:10:53,889 --> 00:10:56,070 Y a este punto tendré el ejecutable 260 00:10:56,070 --> 00:10:59,129 ¿Habéis visto alguna vez un fichero .exe? 261 00:11:00,169 --> 00:11:01,590 Esos son ficheros compilados 262 00:11:01,590 --> 00:11:03,250 ¿Sí? 263 00:11:03,450 --> 00:11:04,669 Son ejecutables 264 00:11:04,669 --> 00:11:08,309 Cuando vosotros tenéis un programita 265 00:11:08,309 --> 00:11:09,970 Le pasáis el compilador 266 00:11:09,970 --> 00:11:12,529 Este de aquí crea un fichero ejecutable 267 00:11:12,529 --> 00:11:14,190 Que podría ser un .exe 268 00:11:14,190 --> 00:11:16,230 Y a este punto vosotros tenéis el fichero allí 269 00:11:16,230 --> 00:11:18,769 Le hacéis doble clic y esto ejecuta 270 00:11:18,769 --> 00:11:19,309 Directamente 271 00:11:19,309 --> 00:11:20,870 Se ejecuta el programa 272 00:11:20,870 --> 00:11:26,210 Vamos a verlo 273 00:11:26,210 --> 00:11:28,889 Más en detalle 274 00:11:28,889 --> 00:11:30,110 Por ejemplo 275 00:11:30,110 --> 00:11:31,570 C++ 276 00:11:31,570 --> 00:11:34,330 Son programas compilados 277 00:11:34,330 --> 00:11:36,210 Son lenguajes programaciones compilados 278 00:11:36,210 --> 00:11:37,629 ¿Qué quiere decir esto? 279 00:11:37,950 --> 00:11:40,570 Que yo escribo un código fuente 280 00:11:40,570 --> 00:11:43,590 Una vez que he escrito el código fuente 281 00:11:43,590 --> 00:11:46,289 Tengo que hacer una compilación 282 00:11:46,289 --> 00:11:47,269 ¿Vale? 283 00:11:47,429 --> 00:11:48,669 Con este programita aquí 284 00:11:48,669 --> 00:11:50,669 Este programita aquí 285 00:11:50,669 --> 00:11:53,029 Que viene en el pack de las cosas de CE 286 00:11:53,029 --> 00:11:53,610 Por ejemplo 287 00:11:53,610 --> 00:11:56,450 Lo que hace es pillarme un código fuente 288 00:11:56,450 --> 00:11:59,809 Y traducirlo al lenguaje máquina 289 00:11:59,809 --> 00:12:02,590 Y lo mete en un fichero 290 00:12:02,590 --> 00:12:03,889 ¿Sí? 291 00:12:04,330 --> 00:12:12,070 Ahora, en este fichero de aquí, algunas cosas están escritas directamente. 292 00:12:13,210 --> 00:12:15,350 Otras cosas, ¿vale? 293 00:12:15,769 --> 00:12:17,950 No las puede escribir directamente. 294 00:12:18,690 --> 00:12:20,889 Por ejemplo, escribir en pantalla. 295 00:12:22,110 --> 00:12:25,789 Cuando yo escribo en pantalla, printf, ¿vale? 296 00:12:26,450 --> 00:12:30,289 El comando a alto nivel es ese ahí, printf de hola. 297 00:12:30,509 --> 00:12:31,070 Fenomenal. 298 00:12:31,070 --> 00:12:40,629 Pero cuando luego quiero hacer un ejecutable, ¿cómo se hacen las operaciones para escribir en pantalla? 299 00:12:41,029 --> 00:12:43,409 Dependen del ordenador en el que estoy. 300 00:12:44,590 --> 00:12:55,289 No es lo mismo escribir en pantalla en un ordenador con procesador Intel y sistema operativo Windows, 301 00:12:55,289 --> 00:13:00,549 Que en un ordenador que tiene un procesador AMD 302 00:13:00,549 --> 00:13:02,429 Y que tiene instalado Linux 303 00:13:02,429 --> 00:13:07,110 O que tiene un Mac y que tiene OSX 304 00:13:07,110 --> 00:13:10,289 Cada uno de estos sistemas operativos 305 00:13:10,289 --> 00:13:13,850 El sistema operativo, lo que tenéis en Windows, Linux y cosas por el estilo 306 00:13:13,850 --> 00:13:19,049 Es una capa de abstracción entre usuario y hardware 307 00:13:19,049 --> 00:13:24,629 Me permite usar un ordenador sin saber si aquí dentro hay un disco duro 308 00:13:24,629 --> 00:13:26,870 Dos discos duros, si el disco duro es 309 00:13:26,870 --> 00:13:28,409 Disco rotante 310 00:13:28,409 --> 00:13:30,289 Si es con un SSD 311 00:13:30,289 --> 00:13:32,450 Si es cuanta RAM tengo 312 00:13:32,450 --> 00:13:34,610 Pues tengo todo escondido detrás del 313 00:13:34,610 --> 00:13:36,929 Del sistema operativo 314 00:13:36,929 --> 00:13:38,169 Yo le digo, crea un fichero 315 00:13:38,169 --> 00:13:40,490 Donde se crea y como se crea 316 00:13:40,490 --> 00:13:41,250 No tengo ni idea 317 00:13:41,250 --> 00:13:44,230 Pero cuando yo le digo, crea un fichero 318 00:13:44,230 --> 00:13:46,870 El sistema operativo va a hablar con el disco duro 319 00:13:46,870 --> 00:13:48,730 Le dice, vaya disco duro, empieza a rotar 320 00:13:48,730 --> 00:13:50,230 Asumiendo que sea un disco de los 10 321 00:13:50,230 --> 00:13:51,909 Empieza a rotar 322 00:13:51,909 --> 00:13:55,149 Cuando has llegado a esta velocidad de rotación 323 00:13:55,149 --> 00:13:57,470 Mueve la cabecera a este sector 324 00:13:57,470 --> 00:13:59,210 Cuando pasa por debajo 325 00:13:59,210 --> 00:14:01,250 Este sector que yo he marcado que está libre 326 00:14:01,250 --> 00:14:02,429 Empieza a escribir 327 00:14:02,429 --> 00:14:04,509 Esto 0101110 328 00:14:04,509 --> 00:14:06,289 Y todo esto 329 00:14:06,289 --> 00:14:08,809 Es distinto si es un Windows 330 00:14:08,809 --> 00:14:10,250 Que si es un Linux 331 00:14:10,250 --> 00:14:11,529 Que si es un 332 00:14:11,529 --> 00:14:14,309 Mac OS, que si es un Android 333 00:14:14,309 --> 00:14:15,250 Que si es un 334 00:14:15,250 --> 00:14:17,789 ¿Se entiende esto? 335 00:14:18,490 --> 00:14:20,450 Ahora, cuando yo aquí en mi 336 00:14:20,450 --> 00:14:22,470 programa, le he dicho, escribe en pantalla 337 00:14:22,470 --> 00:14:23,529 ¿vale? 338 00:14:23,990 --> 00:14:26,370 y él dice, vale, muy bien, entiendo 339 00:14:26,370 --> 00:14:28,149 que aquí tengo que imprimir en pantalla 340 00:14:28,149 --> 00:14:30,429 pero la operación de imprimir en pantalla 341 00:14:30,429 --> 00:14:31,049 real 342 00:14:31,049 --> 00:14:34,450 está en algún lado 343 00:14:34,450 --> 00:14:36,509 en una librería 344 00:14:36,509 --> 00:14:39,009 en una colección de funciones 345 00:14:39,009 --> 00:14:40,450 proporcionadas 346 00:14:40,450 --> 00:14:42,110 por el propio sistema operativo 347 00:14:42,110 --> 00:14:44,690 entonces, Windows 348 00:14:44,690 --> 00:14:46,529 proporcionará una serie 349 00:14:46,529 --> 00:14:48,330 de funciones para escribir en pantalla 350 00:14:48,330 --> 00:14:50,789 Funciones distintas de Linux 351 00:14:50,789 --> 00:14:53,710 Que tendrá otras funciones para escribir en pantalla 352 00:14:53,710 --> 00:14:55,169 Distintas de Android 353 00:14:55,169 --> 00:14:57,730 Que tendrá otras funciones para escribir en pantalla 354 00:14:57,730 --> 00:15:00,730 Y yo no sé cuáles 355 00:15:00,730 --> 00:15:03,269 Hasta que llegue a esta fase de aquí 356 00:15:03,269 --> 00:15:07,730 He hecho una primera traducción de lo que podía 357 00:15:07,730 --> 00:15:09,070 De tu lenguaje 358 00:15:09,070 --> 00:15:10,409 Al lenguaje mágico 359 00:15:10,409 --> 00:15:12,809 Y todo lo que no he podido hacer aquí 360 00:15:12,809 --> 00:15:16,429 Porque son cosas que dependen del sistema en el que estoy 361 00:15:16,429 --> 00:15:18,929 Lo hago en una segunda parte 362 00:15:18,929 --> 00:15:20,389 Que se llama enlazado 363 00:15:20,389 --> 00:15:22,250 Aquí yo he dejado 364 00:15:22,250 --> 00:15:24,009 Algunas partes vacías 365 00:15:24,009 --> 00:15:26,730 Diciendo, aquí tendrás que poner el código 366 00:15:26,730 --> 00:15:28,330 Que me permite escribir en pantalla 367 00:15:28,330 --> 00:15:30,750 Aquí me tendrás que poner el código 368 00:15:30,750 --> 00:15:32,649 Que me permite recibir teclas 369 00:15:32,649 --> 00:15:33,409 Desde teclado 370 00:15:33,409 --> 00:15:36,870 Aquí tendrás que poner el código 371 00:15:36,870 --> 00:15:39,149 Para poder acceder a un fichero 372 00:15:39,149 --> 00:15:40,490 De un disco duro 373 00:15:40,490 --> 00:15:42,990 Y ahora 374 00:15:42,990 --> 00:15:44,070 Huecos aquí 375 00:15:44,070 --> 00:16:05,470 En esta segunda parte, que es el enlazado, el compilador va a buscar aquellos trozos de códigos referidos a un determinado sistema operativo con un determinado procesador 376 00:16:05,470 --> 00:16:08,909 Y rellenará estos agujeros 377 00:16:08,909 --> 00:16:11,769 Con los códigos 378 00:16:11,769 --> 00:16:13,509 A nivel de lenguaje a máquina 379 00:16:13,509 --> 00:16:14,629 Correcto 380 00:16:14,629 --> 00:16:16,730 Correcto 381 00:16:16,730 --> 00:16:18,210 Para este sistema 382 00:16:18,210 --> 00:16:22,340 ¿Me seguís? 383 00:16:23,600 --> 00:16:24,179 Entonces 384 00:16:24,179 --> 00:16:26,720 Tenía mi lenguaje 385 00:16:26,720 --> 00:16:28,659 Mi programa que he escrito yo 386 00:16:28,659 --> 00:16:31,059 Traduzco lo que puedo 387 00:16:31,059 --> 00:16:33,259 Le añado, le enlazo 388 00:16:33,259 --> 00:16:35,860 Las librerías dependientes del sistema 389 00:16:35,860 --> 00:16:37,080 Y a este punto 390 00:16:37,080 --> 00:16:38,000 Yo tengo un ejecutable. 391 00:16:38,379 --> 00:16:41,120 ¿Un ejecutable que se puede ejecutar dónde? 392 00:16:51,350 --> 00:16:53,129 Se puede ejecutar en cualquier ordenador. 393 00:16:53,370 --> 00:17:05,019 En un sistema que tenga el sistema operativo que he utilizado para la compilación 394 00:17:05,019 --> 00:17:09,519 y el procesador que he utilizado para esta compilación. 395 00:17:09,519 --> 00:17:17,259 Ahora, es posible que en los Windows, Windows 7, Windows 10, Windows 8, Windows 10, 396 00:17:17,259 --> 00:17:21,240 Tengan 397 00:17:21,240 --> 00:17:24,079 Una compatibilidad hacia atrás 398 00:17:24,079 --> 00:17:25,960 Y que 399 00:17:25,960 --> 00:17:28,359 No obstante yo la haya compilado 400 00:17:28,359 --> 00:17:29,400 Para Windows 7 401 00:17:29,400 --> 00:17:30,740 Windows 10 402 00:17:30,740 --> 00:17:32,759 Tenga sus propias funciones 403 00:17:32,759 --> 00:17:35,640 Pero mantenga algunas funciones 404 00:17:35,640 --> 00:17:37,839 Legacy del pasado 405 00:17:37,839 --> 00:17:41,539 Y que aun si yo lo he compilado 406 00:17:41,539 --> 00:17:43,720 Para Windows 7 me funcione Windows 10 407 00:17:43,720 --> 00:17:44,980 Puede ser 408 00:17:44,980 --> 00:17:46,700 No es seguro 409 00:17:46,700 --> 00:17:49,380 Como también los procesadores 410 00:17:49,380 --> 00:17:52,299 No es que cada procesador que sale nuevo 411 00:17:52,299 --> 00:17:58,420 Tiene un juego de funciones completamente nuevo 412 00:17:58,420 --> 00:17:59,500 Y cambian cada uno 413 00:17:59,500 --> 00:18:02,259 Al máximo añadirán funciones nuevas 414 00:18:02,259 --> 00:18:03,859 Las viejas las tienen 415 00:18:03,859 --> 00:18:11,480 Entonces si he utilizado funciones de un procesador de séptima generación 416 00:18:11,480 --> 00:18:14,740 Ahora que estamos en la décimo cuarta 417 00:18:14,740 --> 00:18:16,980 de 14 generación 418 00:18:16,980 --> 00:18:19,220 pues a lo mejor sigue teniendo las mismas 419 00:18:19,220 --> 00:18:20,759 operaciones, entonces a lo mejor funciona 420 00:18:20,759 --> 00:18:23,720 lo que si no va a funcionar 421 00:18:23,720 --> 00:18:25,480 es si yo pillo un ejecutable 422 00:18:25,480 --> 00:18:27,380 para Windows e intento ejecutarlo 423 00:18:27,380 --> 00:18:29,619 en Linux, pues no va a funcionar 424 00:18:29,619 --> 00:18:31,660 porque no comparte 425 00:18:31,660 --> 00:18:33,279 Linux con Windows 426 00:18:33,279 --> 00:18:35,480 las mismas funciones 427 00:18:35,480 --> 00:18:37,200 si vosotros bajáis 428 00:18:37,200 --> 00:18:39,240 ¿habéis bajado alguna vez un programa 429 00:18:39,240 --> 00:18:40,900 que a un cierto momento dice 430 00:18:40,900 --> 00:18:42,579 ¿qué versión quieres bajar? 431 00:18:42,640 --> 00:18:44,700 ¿la de Windows, la de Linux o la de 432 00:18:44,700 --> 00:18:45,099 Mac 433 00:18:45,099 --> 00:18:47,160 Tienes que elegir la tuya 434 00:18:47,160 --> 00:18:50,980 Probad a bajar una de Mac y a darle doble clic en vuestro Windows 435 00:18:50,980 --> 00:18:51,900 ¿Qué pasa? 436 00:18:54,220 --> 00:18:54,740 Funciona 437 00:18:54,740 --> 00:18:57,140 Porque los 0 y 1 que están allí dentro 438 00:18:57,140 --> 00:18:58,900 Vuestro procesador y vuestro sistema 439 00:18:58,900 --> 00:19:00,799 No son en grado de interpretarlo 440 00:19:00,799 --> 00:19:04,160 No pongáis una máquina virtual 441 00:19:04,160 --> 00:19:07,079 O instaláis intérpretes de esa cosa 442 00:19:07,079 --> 00:19:08,440 Para que traduzca 443 00:19:08,440 --> 00:19:10,400 El binario de Windows 444 00:19:10,400 --> 00:19:13,299 En binario del sistema en el que estáis vosotros 445 00:19:13,299 --> 00:19:14,279 Lo complicado es la cosa 446 00:19:14,279 --> 00:19:18,900 Entonces, este es uno de los problemas de la compilación 447 00:19:18,900 --> 00:19:23,859 Cuando yo compilo, he hecho mi juego y lo compilo para Windows 448 00:19:23,859 --> 00:19:25,940 Eso no funciona en Linux 449 00:19:25,940 --> 00:19:31,039 Y si os fijáis, hoy en día los juegos son para Windows 450 00:19:31,039 --> 00:19:35,079 Hay pocos juegos para Windows 451 00:19:35,079 --> 00:19:38,259 Y para poder jugar en Linux, si alguno de vosotros juega en Linux 452 00:19:38,259 --> 00:19:40,519 Hay como emuladores 453 00:19:40,519 --> 00:19:47,819 Pero directamente no se producen juegos para ser jugados en Linux 454 00:19:47,819 --> 00:19:48,259 ¿Por qué? 455 00:19:49,599 --> 00:20:08,109 Porque el target de los videojuegos no son los que usan Linux 456 00:20:08,109 --> 00:20:10,930 Normalmente Linux se usa en ámbito profesional 457 00:20:10,930 --> 00:20:13,049 ¿Cuántos de vosotros tenéis instalado Linux en casa? 458 00:20:14,089 --> 00:20:15,369 Uno, dos 459 00:20:15,369 --> 00:20:19,890 Ahora, si yo hago un videojuego y quiero que jueguen 460 00:20:19,890 --> 00:20:20,910 Y digo, lo hago en Linux 461 00:20:20,910 --> 00:20:22,609 Me lo compran ellos dos 462 00:20:22,609 --> 00:20:24,950 y yo no hago BigDolla 463 00:20:24,950 --> 00:20:47,779 se está mejorando esta cosa 464 00:20:47,779 --> 00:20:48,980 en el sentido que ahora 465 00:20:48,980 --> 00:20:52,559 habrá compilaciones 466 00:20:52,559 --> 00:20:54,640 o programas 467 00:20:54,640 --> 00:20:57,079 que directamente compilan en las dos versiones 468 00:20:57,079 --> 00:20:58,799 y luego cuando tú te lo bajas 469 00:20:58,799 --> 00:21:00,240 te bajará la versión correcta 470 00:21:00,240 --> 00:21:01,539 sin que tú ni siquiera lo sabes 471 00:21:01,539 --> 00:21:03,180 porque sabe la versión 472 00:21:03,180 --> 00:21:06,500 de todas formas, normalmente los videojuegos 473 00:21:06,500 --> 00:21:08,779 Están testeados y probados para Windows 474 00:21:08,779 --> 00:21:09,640 Más que para Linux 475 00:21:09,640 --> 00:21:11,920 A lo mejor te puedan funcionar 476 00:21:11,920 --> 00:21:13,880 O porque tú has hecho algo 477 00:21:13,880 --> 00:21:15,779 Como instalarte un emulador 478 00:21:15,779 --> 00:21:16,920 Que intenta 479 00:21:16,920 --> 00:21:20,380 Hay algunas distribuciones de Linux 480 00:21:20,380 --> 00:21:21,579 En las que puedes jugar 481 00:21:21,579 --> 00:21:24,319 Pero porque probablemente por debajo tiene un emulador 482 00:21:24,319 --> 00:21:25,339 Entonces 483 00:21:25,339 --> 00:21:27,720 Si el emulador funciona bien, bien 484 00:21:27,720 --> 00:21:29,539 Si el emulador funciona de golem 485 00:21:29,539 --> 00:21:31,640 Pues posiblemente te van peor que son en Windows 486 00:21:31,640 --> 00:21:33,619 Porque no están normalmente probados 487 00:21:33,619 --> 00:21:36,859 En ningún momento he dicho 488 00:21:36,859 --> 00:21:38,079 No se puede hacer 489 00:21:38,079 --> 00:21:40,539 Te haces tú un emulador 490 00:21:40,539 --> 00:21:41,799 Te haces tú un intérprete 491 00:21:41,799 --> 00:21:42,700 Pues lo puedes hacer 492 00:21:42,700 --> 00:21:45,160 Pero claramente las grandes distribuidoras 493 00:21:45,160 --> 00:21:46,519 Van al mercado más grande 494 00:21:46,519 --> 00:21:49,519 Y sabemos que normalmente el usuario estándar 495 00:21:49,519 --> 00:21:51,099 El que no es informático tiene Windows 496 00:21:51,099 --> 00:21:53,640 Si tengo que desarrollar un juego o un programa 497 00:21:53,640 --> 00:21:55,480 Para que la gente lo use 498 00:21:55,480 --> 00:21:57,000 Pues prefiero ir 499 00:21:57,000 --> 00:22:01,059 Una cosa un poquito distinta 500 00:22:01,059 --> 00:22:02,380 Es por ejemplo Mac 501 00:22:02,380 --> 00:22:05,059 Porque más que se hace su propio ecosistema 502 00:22:05,059 --> 00:22:07,279 Dice el hardware es mío 503 00:22:07,279 --> 00:22:09,700 Los programas que creo son míos 504 00:22:09,700 --> 00:22:11,920 Te garantizo que funcionan fenomenal 505 00:22:11,920 --> 00:22:14,099 Porque todo es compatible conmigo mismo 506 00:22:14,099 --> 00:22:15,740 Porque lo pruebo solo conmigo 507 00:22:15,740 --> 00:22:18,259 Y no tiene que ser como en el PC 508 00:22:18,259 --> 00:22:19,960 Que yo puedo montarlo con piezas 509 00:22:19,960 --> 00:22:21,279 De distintos fabricantes 510 00:22:21,279 --> 00:22:23,599 Y tiene que interactuar con todo 511 00:22:23,599 --> 00:22:24,759 Y tiene que funcionar con todo 512 00:22:24,759 --> 00:22:27,339 Pues no, yo te garantizo que el hardware 513 00:22:27,339 --> 00:22:29,099 Lo he hecho yo, por lo tanto funciona bien 514 00:22:29,099 --> 00:22:30,660 Si, a cambio 515 00:22:30,660 --> 00:22:32,099 Paga 516 00:22:32,099 --> 00:22:45,319 Claro, pero Mac 517 00:22:45,319 --> 00:22:46,599 Es un 518 00:22:46,599 --> 00:22:48,579 Es un 519 00:22:48,579 --> 00:22:51,539 No sé exactamente las 520 00:22:51,539 --> 00:22:54,140 La parte de mercado 521 00:22:54,140 --> 00:22:55,720 Que tiene, pero no es la mayoría 522 00:22:55,720 --> 00:22:57,700 La mayoría de la gente 523 00:22:57,700 --> 00:22:59,740 Es en Android 524 00:22:59,740 --> 00:23:01,839 Entonces si tú quieres vender algo 525 00:23:01,839 --> 00:23:03,279 Y lo quieres vender a un euro 526 00:23:03,279 --> 00:23:05,400 Y te lo compra y tienes 527 00:23:05,400 --> 00:23:07,400 Un millón de posible gente 528 00:23:07,400 --> 00:23:09,099 Te lo compra o tienes 10 millones 529 00:23:09,099 --> 00:23:10,400 De posibles compradores 530 00:23:10,400 --> 00:23:12,119 Allí tienes que 531 00:23:12,119 --> 00:23:14,500 Claro, también allí está marketing 532 00:23:14,500 --> 00:23:16,019 Y está un montón de otras cosas 533 00:23:16,019 --> 00:23:18,119 Sabes también que si alguien se ha comprado un iPhone 534 00:23:18,119 --> 00:23:20,859 Posiblemente está más dispuesto a pagar algo 535 00:23:20,859 --> 00:23:22,839 Porque el dinero no es importante 536 00:23:22,839 --> 00:23:24,920 Y se enciende puros 537 00:23:24,920 --> 00:23:26,660 Con billetes de 50 euros 538 00:23:26,660 --> 00:23:27,680 ¿No? 539 00:23:28,680 --> 00:23:30,539 A lo mejor, hoy en día ya menos 540 00:23:30,539 --> 00:23:33,160 Ahora también Android que cuesta más 541 00:23:33,160 --> 00:23:33,799 Pero bueno 542 00:23:33,799 --> 00:23:36,500 Es más complejo, ¿se entiende esto? 543 00:23:37,660 --> 00:23:38,079 Entonces 544 00:23:38,079 --> 00:23:40,440 El compilador se compila una vez 545 00:23:40,440 --> 00:23:42,599 He hecho mi programa, he acabado 546 00:23:42,599 --> 00:23:44,940 Esta es la versión definitiva, no tiene errores 547 00:23:44,940 --> 00:23:45,700 Lo compilo 548 00:23:45,700 --> 00:23:49,680 Pero lo tengo que compilar en base a un determinado sistema 549 00:23:49,680 --> 00:23:51,960 Y tendré un ejecutable para ese sistema 550 00:23:51,960 --> 00:23:54,380 Luego lo puedo compilar también en Linux 551 00:23:54,380 --> 00:23:56,019 Y tendré el ejecutable para Linux 552 00:23:56,019 --> 00:23:58,940 Y lo puedo compilar también en macOS 553 00:23:58,940 --> 00:24:01,000 Y tendré el ejecutable para macOS 554 00:24:01,000 --> 00:24:02,460 Lo puedo hacer 555 00:24:02,460 --> 00:24:05,640 Pero cada vez que cambio algo aquí 556 00:24:05,640 --> 00:24:09,779 Debería volver a compilarlo para los tres 557 00:24:09,779 --> 00:24:13,000 ¿Sí? Esta es la compilación 558 00:24:13,000 --> 00:24:17,329 Ten en cuenta también que 559 00:24:17,329 --> 00:24:19,630 Tengo un programa fuente 560 00:24:19,630 --> 00:24:21,450 En el primer paso 561 00:24:21,450 --> 00:24:23,529 Creo lo que se llama un programa objeto 562 00:24:23,529 --> 00:24:27,630 ¿Qué es el programa objeto? 563 00:24:27,809 --> 00:24:28,509 Y luego 564 00:24:28,509 --> 00:24:31,289 Al programa objeto 565 00:24:31,289 --> 00:24:34,490 Le añado las librerías propias 566 00:24:34,490 --> 00:24:36,349 De un sistema, de un sistema operativo 567 00:24:36,349 --> 00:24:37,950 De un entorno, de un... 568 00:24:37,950 --> 00:24:38,869 ¿Dónde lo voy a ejecutar? 569 00:24:39,349 --> 00:24:41,250 Y el linkado 570 00:24:41,250 --> 00:24:42,750 El link, ¿vale? 571 00:24:42,750 --> 00:24:44,470 De el código objeto 572 00:24:44,470 --> 00:24:45,990 Que es lo que he producido yo 573 00:24:45,990 --> 00:24:48,569 Con las librerías que he utilizado aquí 574 00:24:48,569 --> 00:24:50,769 Como por ejemplo printf, scanf 575 00:24:50,769 --> 00:24:51,910 Y cosas por el estilo 576 00:24:51,910 --> 00:24:54,630 Pues esto de aquí me da el programa ejecutable 577 00:24:54,630 --> 00:24:56,029 Que se ejecuta 578 00:24:56,029 --> 00:24:57,670 En base a las librerías 579 00:24:57,670 --> 00:25:00,930 Utilizadas en un sistema concreto 580 00:25:00,930 --> 00:25:01,869 Entonces he usado 581 00:25:01,869 --> 00:25:03,450 La librería de Windows 582 00:25:03,450 --> 00:25:05,750 Si he usado la librería de Linux 583 00:25:05,750 --> 00:25:06,650 Se usará en Linux 584 00:25:06,650 --> 00:25:10,349 ¿Cuál sería el concepto de librería? 585 00:25:11,029 --> 00:25:12,210 La librería son 586 00:25:12,210 --> 00:25:14,289 Estas funciones que no has 587 00:25:14,289 --> 00:25:16,910 Desarrollado tú, pero que utilizas 588 00:25:16,910 --> 00:25:18,990 Como por ejemplo, escribir en pantalla 589 00:25:18,990 --> 00:25:20,049 ¿Cómo se escribe en pantalla? 590 00:25:20,150 --> 00:25:20,869 Con printf 591 00:25:20,869 --> 00:25:23,569 Este printf dentro 592 00:25:23,569 --> 00:25:27,450 Va a llamar 593 00:25:27,450 --> 00:25:28,690 Las librerías 594 00:25:28,690 --> 00:25:30,170 De sistemas que son 595 00:25:30,170 --> 00:25:32,569 Un conjunto de funciones 596 00:25:32,569 --> 00:25:34,910 Que proporciona el sistema operativo 597 00:25:34,910 --> 00:25:36,890 Para que los lenguajes 598 00:25:36,890 --> 00:25:38,390 De alto nivel los puedan utilizar 599 00:25:38,390 --> 00:25:41,549 ¿Con métodos y tal? 600 00:25:41,549 --> 00:25:43,970 son conjuntos 601 00:25:43,970 --> 00:25:45,650 una librería son 602 00:25:45,650 --> 00:25:47,029 paquetes 603 00:25:47,029 --> 00:25:49,630 de funcionalidades 604 00:25:49,630 --> 00:25:52,150 paquetes para input y output 605 00:25:52,150 --> 00:25:54,250 paquetes para gestión de red 606 00:25:54,250 --> 00:25:55,210 paquetes para 607 00:25:55,210 --> 00:25:57,609 y tú vas allí, te cargas 608 00:25:57,609 --> 00:25:59,490 las librerías 609 00:25:59,490 --> 00:26:00,910 que necesitas 610 00:26:00,910 --> 00:26:02,549 si tu programa no va en internet 611 00:26:02,549 --> 00:26:05,710 o en red, no te cargas la librería 612 00:26:05,710 --> 00:26:06,930 de internet de red 613 00:26:06,930 --> 00:26:09,869 y una vez que tienes las librerías 614 00:26:09,869 --> 00:26:12,269 correcta, pues puedes utilizar 615 00:26:12,269 --> 00:26:14,109 estos programas sin tener que 616 00:26:14,109 --> 00:26:16,029 desarrollarlo tú, printf 617 00:26:16,029 --> 00:26:18,069 te escribe en pantalla sin que 618 00:26:18,069 --> 00:26:19,869 tú hayas tenido que comunicar con 619 00:26:19,869 --> 00:26:21,769 la tarjeta video 620 00:26:21,769 --> 00:26:24,089 y con el monitor diciendo como se 621 00:26:24,089 --> 00:26:26,069 escribe esa cosa, pues quien te da 622 00:26:26,069 --> 00:26:28,210 ese código, pues la librería 623 00:26:28,210 --> 00:26:30,009 del sistema operativo que te dice, mira yo 624 00:26:30,009 --> 00:26:32,009 tengo aquí esta función y si tú me la das 625 00:26:32,009 --> 00:26:32,829 yo escribo en pantalla 626 00:26:32,829 --> 00:26:35,009 ¿sí? 627 00:26:36,589 --> 00:26:37,029 ¿dudas? 628 00:26:37,029 --> 00:26:40,940 Y esta 629 00:26:40,940 --> 00:26:42,640 Nosotros, presidente, ni la vemos 630 00:26:42,640 --> 00:26:43,980 ¿Sí? 631 00:26:44,480 --> 00:26:47,099 Aquí, a menos que tú no vayas 632 00:26:47,099 --> 00:26:49,039 A hurgar 633 00:26:49,039 --> 00:26:51,099 En las entrañas 634 00:26:51,099 --> 00:26:52,880 De los programas para mejorar 635 00:26:52,880 --> 00:26:55,359 La velocidad, para que ocupen menos espacio 636 00:26:55,359 --> 00:26:56,400 Y cosas por el estilo, entonces dice 637 00:26:56,400 --> 00:26:58,500 Quito esta librería, quito estas funciones 638 00:26:58,500 --> 00:27:00,700 O me reescribo una función aquí 639 00:27:00,700 --> 00:27:02,500 Para hacerla más eficiente o más 640 00:27:02,500 --> 00:27:03,819 Que haga lo que yo quiero 641 00:27:03,819 --> 00:27:06,220 Pues esta parte aquí tú no la ves nunca 642 00:27:06,220 --> 00:27:09,099 Tú ves sólo esta parte aquí 643 00:27:09,099 --> 00:27:12,859 Y luego tienes un programita 644 00:27:12,859 --> 00:27:14,000 Que te han dado ellos 645 00:27:14,000 --> 00:27:15,559 Que te compila 646 00:27:15,559 --> 00:27:18,500 Esto es 647 00:27:18,500 --> 00:27:19,759 Por ejemplo, C++ 648 00:27:19,759 --> 00:27:21,500 ¿Sí? 649 00:27:22,220 --> 00:27:24,240 Y si no, está el intérprete 650 00:27:24,240 --> 00:27:25,640 ¿Cómo funciona el intérprete? 651 00:27:25,740 --> 00:27:27,180 Pues el intérprete es un programa 652 00:27:27,180 --> 00:27:29,480 Se lanza este programa y está ahí ejecutándose 653 00:27:29,480 --> 00:27:30,779 Ahora funciona este programa 654 00:27:30,779 --> 00:27:34,059 Y a este programa le paso como parámetro 655 00:27:34,059 --> 00:27:35,960 Mi código fuente 656 00:27:35,960 --> 00:27:38,539 Le digo, oye, programa 657 00:27:38,539 --> 00:27:43,019 Píllate este fichero donde yo he escrito una serie de instrucciones 658 00:27:43,019 --> 00:27:45,920 Y vete línea por línea a ejecutarlo 659 00:27:45,920 --> 00:27:49,579 Y él lo ejecuta y lo transforma en ceros y unos 660 00:27:49,579 --> 00:27:51,720 Se lo da al procesador y el procesador hace cosas 661 00:27:51,720 --> 00:27:55,400 Si ahora lo quiero lanzar otra vez en mi programa 662 00:27:55,400 --> 00:27:58,579 El intérprete tiene que volver a ejecutarse 663 00:27:58,579 --> 00:28:03,599 Mientras el compilador se hace una vez 664 00:28:03,599 --> 00:28:05,579 Y luego tengo el ejecutable 665 00:28:05,579 --> 00:28:07,299 Y lanzo solo esto 666 00:28:07,299 --> 00:28:08,920 El compilador no lo vuelvo a utilizar 667 00:28:08,920 --> 00:28:11,160 Hasta que no modifique esto 668 00:28:11,160 --> 00:28:13,359 El compilador no me sirve más 669 00:28:13,359 --> 00:28:15,220 Lo puedo hasta no instalar 670 00:28:15,220 --> 00:28:17,720 Sin embargo 671 00:28:17,720 --> 00:28:20,180 En el campo de la interpretación 672 00:28:20,180 --> 00:28:22,980 Yo siempre necesito el intérprete 673 00:28:22,980 --> 00:28:24,539 Si no está el intérprete 674 00:28:24,539 --> 00:28:26,680 No puede hacer funcionar mi programa 675 00:28:26,680 --> 00:28:28,640 Entonces, ¿cómo se hace? 676 00:28:29,039 --> 00:28:30,500 Pues, quien quiere utilizar 677 00:28:30,500 --> 00:28:31,619 Un lenguaje programado 678 00:28:31,619 --> 00:28:33,380 Interpretado 679 00:28:33,380 --> 00:28:35,359 Lo que hace es que 680 00:28:35,359 --> 00:28:37,539 Se tiene que instalar un programita 681 00:28:37,539 --> 00:28:39,640 Este requisito 682 00:28:39,640 --> 00:28:41,839 Tengo que instalar el JRE 683 00:28:41,839 --> 00:28:43,640 Para poder ejecutar programas en Java 684 00:28:43,640 --> 00:28:45,140 O el intérprete de Python 685 00:28:45,140 --> 00:28:47,880 Para poder ejecutar programas en Python 686 00:28:47,880 --> 00:28:49,420 Cuando lo tengo instalado 687 00:28:49,420 --> 00:28:52,339 En mi sistema 688 00:28:52,339 --> 00:28:54,000 Cada vez que ejecutaré 689 00:28:54,000 --> 00:28:54,960 Un programa en Java 690 00:28:54,960 --> 00:28:57,819 El sistema en automático sabe que tiene que arrancar 691 00:28:57,819 --> 00:28:58,740 La máquina virtual 692 00:28:58,740 --> 00:29:00,140 La Java Virtual Machine 693 00:29:00,140 --> 00:29:02,920 El JRE, el entorno de ejecución de Java 694 00:29:02,920 --> 00:29:04,619 Y pasarle como parámetro 695 00:29:04,619 --> 00:29:05,720 El programa que le estoy dando 696 00:29:05,720 --> 00:29:08,400 Y lo hará de forma pseudocompleta 697 00:29:08,400 --> 00:29:09,700 ¿Sí? 698 00:29:15,380 --> 00:29:15,940 Comparación 699 00:29:15,940 --> 00:29:16,500 ¿Vale? 700 00:29:22,519 --> 00:29:23,640 Sobre la entrada 701 00:29:23,640 --> 00:29:24,220 ¿Vale? 702 00:29:25,099 --> 00:29:27,819 Para poder hacer una compilación 703 00:29:27,819 --> 00:29:29,819 Se necesita un programa completo 704 00:29:29,819 --> 00:29:32,299 Porque la compilación es toda de golpe 705 00:29:32,299 --> 00:29:34,279 Porque si yo tengo mi programa completo 706 00:29:34,279 --> 00:29:35,279 Lo compil 707 00:29:35,279 --> 00:29:38,059 Sin embargo el intérprete 708 00:29:38,059 --> 00:29:40,660 Como va leyendo línea de per código 709 00:29:40,660 --> 00:29:41,900 Línea de código, línea de código 710 00:29:41,900 --> 00:29:46,480 En teoría puede hasta tener un trozo de programa 711 00:29:46,480 --> 00:29:49,220 Y yo se lo doy al intérprete 712 00:29:49,220 --> 00:29:51,720 Y él empieza a leer esto, esto, esto y esto 713 00:29:51,720 --> 00:29:53,200 Y va de una línea en una línea 714 00:29:53,200 --> 00:29:56,660 Esto facilita lo que se llama el debugging 715 00:29:56,660 --> 00:30:01,920 La fase de, tengo un programa que funciona 716 00:30:01,920 --> 00:30:03,299 Pero tiene errores 717 00:30:03,299 --> 00:30:06,319 No errores semánticos, lo he escrito bien 718 00:30:06,319 --> 00:30:08,700 Pero tiene errores, perdón, sintáticos 719 00:30:08,700 --> 00:30:10,140 Sino tiene errores semánticos 720 00:30:10,140 --> 00:30:12,099 Yo quiero que me calcule una cosa 721 00:30:12,099 --> 00:30:14,259 Y de vez en cuando con ciertos datos 722 00:30:14,259 --> 00:30:15,819 El resultado está mal 723 00:30:15,819 --> 00:30:18,299 Entonces tengo que ver donde me he equivocado 724 00:30:18,299 --> 00:30:19,480 ¿Vale? 725 00:30:21,319 --> 00:30:23,180 Si yo intento hacer un debugging 726 00:30:23,180 --> 00:30:24,799 Y buscar los errores 727 00:30:24,799 --> 00:30:27,220 Aquí, cada vez que hago un cambio 728 00:30:27,220 --> 00:30:28,480 En el código fuente 729 00:30:28,480 --> 00:30:30,859 Tengo que compilarlo desde cero 730 00:30:30,859 --> 00:30:33,160 Y ejecutarlo para ver si es solucionado o no 731 00:30:33,160 --> 00:30:34,759 Mientras esto 732 00:30:34,759 --> 00:30:37,319 Tiene técnicas de debugging avanzadas 733 00:30:37,319 --> 00:30:39,460 En el que puedo modificar el código 734 00:30:39,460 --> 00:30:41,160 Mientras se está ejecutando 735 00:30:41,160 --> 00:30:43,859 Lo que es 736 00:30:43,859 --> 00:30:45,640 Interesante 737 00:30:45,640 --> 00:30:49,960 La salida 738 00:30:49,960 --> 00:30:52,420 Esto cuando hago un compilador 739 00:30:52,420 --> 00:30:55,119 Genera un código objeto intermedio 740 00:30:55,119 --> 00:30:56,279 Que luego se hará el linking 741 00:30:56,279 --> 00:30:58,259 Con las librerías del sistema 742 00:30:58,259 --> 00:31:00,299 Y desde aquí no produce nada 743 00:31:00,299 --> 00:31:04,880 El intérprete se lee el código fuente 744 00:31:04,880 --> 00:31:05,599 Y lo ejecuta 745 00:31:05,599 --> 00:31:07,119 Pero no crea un nuevo fichero 746 00:31:07,119 --> 00:31:13,299 Mecanismo de trabajo 747 00:31:13,299 --> 00:31:15,779 La compilación se realiza antes de la ejecución 748 00:31:15,779 --> 00:31:17,619 Antes se compila 749 00:31:17,619 --> 00:31:19,119 Luego se ejecuta 750 00:31:19,119 --> 00:31:20,460 Mientras aquí 751 00:31:20,460 --> 00:31:23,220 En el intérprete 752 00:31:23,220 --> 00:31:25,339 Sostancialmente se está compilando 753 00:31:25,339 --> 00:31:26,480 Ejecutando a la vez 754 00:31:26,480 --> 00:31:28,500 Pillo una sola línea 755 00:31:28,500 --> 00:31:31,059 La compilo en código máquina 756 00:31:31,059 --> 00:31:32,700 Y la ejecuto 757 00:31:32,700 --> 00:31:33,900 Pillo otra línea 758 00:31:33,900 --> 00:31:36,619 Código máquina y la ejecuto 759 00:31:36,619 --> 00:31:41,490 Esto es más rápido 760 00:31:41,490 --> 00:31:46,190 Porque una vez he hecho la compilación 761 00:31:46,190 --> 00:31:47,789 Ya todo está traducido 762 00:31:47,789 --> 00:31:49,069 Y no tengo que hacer trabajo 763 00:31:49,069 --> 00:31:51,869 Este es más lento 764 00:31:51,869 --> 00:31:53,890 Si yo tengo un programa que ejecuta 765 00:31:53,890 --> 00:31:55,950 50 veces la misma instrucción 766 00:31:55,950 --> 00:31:59,190 Por 50 veces se compilará 767 00:31:59,190 --> 00:32:00,470 Y luego ejecutará 768 00:32:00,470 --> 00:32:02,490 Y cuando tengo que volver a hacer 769 00:32:02,490 --> 00:32:03,650 La misma instrucción 770 00:32:03,650 --> 00:32:05,309 La compilaré otra vez 771 00:32:05,309 --> 00:32:06,269 Y la ejecutaré 772 00:32:06,269 --> 00:32:09,430 Por lo tanto, si me importa 773 00:32:09,430 --> 00:32:11,289 La velocidad con que se ejecutan 774 00:32:11,289 --> 00:32:12,049 Mis programas 775 00:32:12,049 --> 00:32:15,369 Compilar es mejor que interpretar 776 00:32:15,369 --> 00:32:16,809 Interpretación es más lenta 777 00:32:16,809 --> 00:32:20,170 Memoria 778 00:32:20,170 --> 00:32:22,289 El requisito de memoria 779 00:32:22,289 --> 00:32:24,910 Es más debido a la creación de código objeto 780 00:32:24,910 --> 00:32:26,670 ¿Vale? Como se crea el fichero 781 00:32:26,670 --> 00:32:29,569 Pues necesita más memoria que este de aquí 782 00:32:29,569 --> 00:32:30,970 Porque este de aquí 783 00:32:30,970 --> 00:32:33,089 No necesita crear el código fuente 784 00:32:33,089 --> 00:32:34,210 Y un código objeto 785 00:32:34,210 --> 00:32:36,789 ¿Vale? Se utiliza directamente el código fuente 786 00:32:36,789 --> 00:32:37,390 Para trabajar 787 00:32:37,390 --> 00:32:41,970 muestra todos los errores 788 00:32:41,970 --> 00:32:43,710 después de la compilación 789 00:32:43,710 --> 00:32:45,430 todo al mismo tiempo 790 00:32:45,430 --> 00:32:45,970 muestra 791 00:32:45,970 --> 00:32:49,430 este de aquí, tú haces la compilación 792 00:32:49,430 --> 00:32:51,329 y al final te viene un listado 793 00:32:51,329 --> 00:32:52,029 de todos los errores