1 00:00:00,280 --> 00:00:02,400 Hola. En este curso, 2 00:00:02,560 --> 00:00:06,920 nosotros repasaremos cómo funciona la ejecución de Pharo, 3 00:00:07,080 --> 00:00:10,840 qué tipo de archivos se utilizan, cuando y donde. 4 00:00:11,000 --> 00:00:13,040 Hasta ahora has estado usando 5 00:00:13,200 --> 00:00:15,640 .imagen, .source y .changes, 6 00:00:15,800 --> 00:00:18,120 y probablemente no esté claro para ti. 7 00:00:18,280 --> 00:00:22,080 Funciona, pero me gustaría explicar exactamente lo que hace, 8 00:00:22,240 --> 00:00:26,400 para que puedas evitar futuros errores y controlar mejor tu sistema. 9 00:00:27,080 --> 00:00:30,240 En resumen, el modelo de ejecución de Pharo 10 00:00:30,400 --> 00:00:33,200 es una maquina virtual que ejecuta el código compilado. 11 00:00:33,360 --> 00:00:36,920 Esta maquina virtual es específica de la plataforma, 12 00:00:37,080 --> 00:00:42,680 y las máquinas virtuales existen para diferentes versiones de MacOS, Windows, Linux, 13 00:00:42,840 --> 00:00:44,600 iOS, ARM y Android. 14 00:00:44,760 --> 00:00:49,400 Es el mismo modelo de ejecución. como para C# y Java. 15 00:00:49,560 --> 00:00:51,560 En Pharo es exactamente lo mismo. 16 00:00:52,040 --> 00:00:55,200 Tenemos lo que se llama compilación en múltiples etapas. 17 00:00:55,360 --> 00:01:00,080 Esto significa que el código que programas se compila a primero a bytecodes, 18 00:01:00,240 --> 00:01:03,520 que es un conjunto de instrucciones neutrales de la plataforma. 19 00:01:03,680 --> 00:01:09,160 Y la máquina virtual transforma bytecodes en código ensamblador. 20 00:01:09,480 --> 00:01:11,000 Así es como funciona Pharo. 21 00:01:11,160 --> 00:01:14,600 Es lo mismo en otros lenguajes orientados a objetos. 22 00:01:15,560 --> 00:01:17,880 La máquina virtual es el archivo 23 00:01:18,040 --> 00:01:22,120 según tu sistema operativo, un .exe o .app con MAC. 24 00:01:22,280 --> 00:01:23,760 Son máquinas virtuales. 25 00:01:23,920 --> 00:01:26,840 Pueden ejecutarse en dos modos, 26 00:01:27,000 --> 00:01:30,280 ya sea desde una línea de comando, 27 00:01:30,440 --> 00:01:34,200 o en modo interactivo con una interfaz gráfica. 28 00:01:34,360 --> 00:01:38,200 Por ejemplo, con Linux, cuando usas Pharo en un servidor 29 00:01:38,360 --> 00:01:40,440 usualmente usas la línea de comandos. 30 00:01:40,920 --> 00:01:43,720 La máquina virtual ejecuta código compilado 31 00:01:43,880 --> 00:01:46,040 y genera ensamblador al vuelo. 32 00:01:46,200 --> 00:01:48,240 Este código compilado 33 00:01:48,400 --> 00:01:51,960 está empaquetado y almacenado en una imagen. 34 00:01:52,200 --> 00:01:53,960 Una instantánea de memoria. 35 00:01:54,120 --> 00:01:58,960 Esta imagen representa una sistema virtualizado para objetos Pharo. 36 00:01:59,120 --> 00:02:00,720 Lo veremos a continuación. 37 00:02:01,000 --> 00:02:04,880 La máquina virtual necesita solo la imagen para ejecutar programas. 38 00:02:05,040 --> 00:02:10,240 Porque aquí es donde se compila el código y donde están los objetos. 39 00:02:10,640 --> 00:02:13,200 Además, tenemos 3 archivos. 40 00:02:13,360 --> 00:02:16,320 Imagen, cambios y fuentes. 41 00:02:16,480 --> 00:02:19,560 Explicaré cada uno de estos archivos y su papel. 42 00:02:19,840 --> 00:02:25,120 El archivo .image es una instantánea de memoria que contiene los objetos. 43 00:02:25,280 --> 00:02:29,120 Contiene objetos normales como puntos, strings, etc. 44 00:02:29,440 --> 00:02:30,800 Todo lo que usamos. 45 00:02:30,960 --> 00:02:34,200 Pero también contiene métodos compilados 46 00:02:34,360 --> 00:02:37,120 y concretamente clases compiladas. 47 00:02:37,560 --> 00:02:41,920 Entonces, cada vez que guardas tu imagen, todos los objetos se guardan en el disco. 48 00:02:42,080 --> 00:02:46,560 La imagen es realmente un sistema de virtualización. adelantado a su tiempo. 49 00:02:47,280 --> 00:02:49,440 Al iniciar, 50 00:02:49,600 --> 00:02:53,400 recuperas todos los objetos que guardaste. 51 00:02:53,560 --> 00:02:55,440 Concretamente el contador del programa, 52 00:02:55,600 --> 00:02:58,880 que también se guardará 53 00:02:59,040 --> 00:03:02,680 y setá restaurado exactamente donde estaba antes de guardarlo. 54 00:03:03,480 --> 00:03:07,800 Lo importante es que tienes un sistema operativo y una máquina virtual, 55 00:03:07,960 --> 00:03:11,720 y por encima de la máquina virtual, tienes este sistema, 56 00:03:11,880 --> 00:03:15,240 que es un espacio de memoria donde viven tus objetos 57 00:03:15,400 --> 00:03:18,040 y que puedes guardar a tu disco o no. 58 00:03:18,560 --> 00:03:21,440 Y contiene tus objetos compilados. 59 00:03:21,600 --> 00:03:24,360 Es por eso que puse "1s" y "0s". 60 00:03:25,200 --> 00:03:27,440 Adicionalmente, tienes el archivo de cambios. 61 00:03:27,600 --> 00:03:31,440 Un archivo de cambios es un archivo que contiene copias de seguridad. 62 00:03:31,840 --> 00:03:34,600 Todo lo que haces en Pharo se registra 63 00:03:34,760 --> 00:03:38,080 y almacena en una especie de gran cinta virtual, 64 00:03:38,240 --> 00:03:41,800 que contiene todas tus adiciones y modificaciones. 65 00:03:41,960 --> 00:03:44,480 Es como el Gran Hermano, solo que es para Pharo. 66 00:03:44,640 --> 00:03:48,880 Puedes divertirte con él y utilizarlo para reproducir ciertas secuencias. 67 00:03:49,040 --> 00:03:50,680 Es una cinta 68 00:03:51,080 --> 00:03:54,640 que contiene copias de seguridad de cada acción que modifica Pharo. 69 00:03:55,120 --> 00:04:00,080 Lo que sucede es que, un archivo de cambios está asociado a un archivo de imagen. 70 00:04:00,600 --> 00:04:02,160 ¿Cuál es el propósito de esto? 71 00:04:02,320 --> 00:04:04,400 Cuando defines una nueva clase, 72 00:04:04,560 --> 00:04:08,280 el código de la clase no se almacena en el archivo de imagen, 73 00:04:08,440 --> 00:04:11,160 se almacena en el archivo de cambios. 74 00:04:12,960 --> 00:04:16,920 Entonces si desasocias los dos, podrías perder tu código 75 00:04:17,080 --> 00:04:19,000 El programa seguirá ejecutándose, 76 00:04:19,160 --> 00:04:22,760 pero puedes perder el código fuente de tu aplicación. 77 00:04:23,040 --> 00:04:24,440 Si miramos de cerca, 78 00:04:24,600 --> 00:04:26,760 tenemos un archivo de imagen que contiene 79 00:04:27,160 --> 00:04:31,040 mi bytecode y los objetos compilados en forma binaria, 80 00:04:31,200 --> 00:04:35,880 y al lado, un archivo de cambios que contiene una lista de cambios. 81 00:04:36,040 --> 00:04:39,800 Por ejemplo, aquí agregué "counter", increase y decrease. 82 00:04:40,720 --> 00:04:42,680 Del mismo modo con otras clases. 83 00:04:42,840 --> 00:04:46,760 Y tenemos herramientas que te permiten reproducir estos cambios. 84 00:04:46,920 --> 00:04:50,960 En Pharo, puedes navegar por varias versiones de los métodos. 85 00:04:51,120 --> 00:04:54,920 Las herramientas que usan diferentes versiones de los métodos usan el archivo .changes. 86 00:04:55,080 --> 00:04:59,800 Dibujé una línea de puntos alrededor de esta pareja. porque es muy importante 87 00:04:59,960 --> 00:05:04,200 que los .changes y .image permanezcan sincronizados. 88 00:05:04,360 --> 00:05:07,840 No empieces a editar el texto con Emacs dentro del archivo de cambios. 89 00:05:08,000 --> 00:05:10,480 Puedes hacerlo, pero no tiene ningún interés real. 90 00:05:10,640 --> 00:05:12,960 Solo romperás tu archivo .change. 91 00:05:13,400 --> 00:05:15,760 El archivo de imagen continuará ejecutándose 92 00:05:15,920 --> 00:05:19,360 porque solo usa .change para mostrar datos en el modo de programación. 93 00:05:19,520 --> 00:05:20,960 Pero no lo aconsejo. 94 00:05:21,480 --> 00:05:23,760 Generalmente hablando, 95 00:05:23,920 --> 00:05:26,880 las imágenes son útiles para desarrollar. 96 00:05:27,040 --> 00:05:29,520 Estas trabajando y alguien te interrumpe. 97 00:05:29,680 --> 00:05:32,040 Guardas tu imagen y tomas un descanso. 98 00:05:32,200 --> 00:05:36,240 Cuando vuelvas, estás exactamente en la misma situación. 99 00:05:36,400 --> 00:05:40,840 El estado completo de su sistema se almacena en el disco. 100 00:05:41,000 --> 00:05:43,160 Puedes volver 3 años después 101 00:05:43,320 --> 00:05:46,480 y encontrar exactamente el mismo estado que hace 3 años. 102 00:05:46,760 --> 00:05:50,400 Pero para un ingeniero de software, no es una buena práctica. 103 00:05:50,560 --> 00:05:53,560 Está bien para el desarrollo. y prototipos. 104 00:05:53,720 --> 00:05:56,640 Por favor use un sistema de control de versiones. 105 00:05:56,800 --> 00:05:58,320 Tenemos Monticello, 106 00:05:58,480 --> 00:06:00,720 un sistema de control de versiones escrito en Pharo, 107 00:06:00,880 --> 00:06:02,560 y tenemos un backend para Git. 108 00:06:02,720 --> 00:06:07,400 Guarda tu código en un sistema de control de versiones, 109 00:06:07,560 --> 00:06:12,280 y luego usa integración continua con Jenkins o Travis 110 00:06:12,440 --> 00:06:15,560 para construir tus imágenes. 111 00:06:15,720 --> 00:06:19,480 La gente a menudo confunde estas dos cosas en Pharo. 112 00:06:19,640 --> 00:06:22,600 Las imágenes son extremadamente prácticas para desarrollo. 113 00:06:22,760 --> 00:06:24,680 Pero cuando quieras 114 00:06:24,840 --> 00:06:27,800 desarrollo más estructurado y mayor control, 115 00:06:27,960 --> 00:06:30,960 debes usar absolutamente herramientas clásicas. 116 00:06:31,320 --> 00:06:32,480 Funcionan bien. 117 00:06:32,640 --> 00:06:34,280 Hay un modo prototipo, 118 00:06:34,440 --> 00:06:38,560 pero en algún momento debes guardar en un sistema de control de versiones, 119 00:06:38,720 --> 00:06:42,200 entonces puedes acceder a todas las versiones en tu ambiente. 120 00:06:42,360 --> 00:06:46,480 Hay videos que explican la clase Counter, por ejemplo. 121 00:06:46,640 --> 00:06:49,800 Hay un tercer archivo del que no he hablado todavía. 122 00:06:49,960 --> 00:06:51,680 Es el archivo de fuentes. 123 00:06:51,960 --> 00:06:55,400 Un archivo de fuentes es un tipo de archivo de con cambios específicos. 124 00:06:55,560 --> 00:06:59,840 Contiene todas las definiciones textuales del sistema en .0. 125 00:07:00,000 --> 00:07:04,000 Para cada nueva versión de Pharo, hay un nuevo archivo .sources, 126 00:07:04,160 --> 00:07:09,360 y este archivo .sources contendrá definiciones para Array, Set, etc. 127 00:07:09,520 --> 00:07:12,240 Todos los métodos que se definen 128 00:07:12,400 --> 00:07:16,000 en las bibliotecas centrales de Pharo. 129 00:07:16,680 --> 00:07:20,520 Generalmente hablando, querrá compartir este archivo fuente 130 00:07:20,800 --> 00:07:22,160 y estará solo en lectura. 131 00:07:22,360 --> 00:07:26,080 Los archivos de cambios están en modo escritura y hay uno por imagen. 132 00:07:26,240 --> 00:07:28,400 Vamos a ver. 133 00:07:28,560 --> 00:07:31,640 Esta es una instantánea del estado del sistema. 134 00:07:31,800 --> 00:07:34,720 al inicio de la nueva versión de Pharo 4.0, 135 00:07:34,880 --> 00:07:37,880 que correspondía a este universo. 136 00:07:39,040 --> 00:07:43,080 Luego definimos nuevas clases. Definí la clase Node. 137 00:07:43,240 --> 00:07:47,520 Creé nuevos objetos en forma binaria, 138 00:07:47,680 --> 00:07:51,640 y en el archivo de cambios asociado con mi imagen, 139 00:07:51,800 --> 00:07:55,560 agregué mis nuevas definiciones, que se escriben aquí. 140 00:07:55,960 --> 00:07:59,440 Como dije, este archivo está en modo de solo lectura. 141 00:08:00,520 --> 00:08:02,440 Y esta está en modo de escritura. 142 00:08:02,800 --> 00:08:06,760 Una vez más podemos decir eso, conceptualmente hablando 143 00:08:06,920 --> 00:08:10,120 la imagen y los archivos de cambios funcionan juntas. 144 00:08:10,280 --> 00:08:13,920 Espero que esto haya aclarado los roles de estos 3 archivos. 145 00:08:14,080 --> 00:08:18,400 Lo que necesitas saber es que estamos armando 146 00:08:18,560 --> 00:08:21,840 un nuevo sistema de gestión de cambios 147 00:08:22,000 --> 00:08:25,280 para que puedas recuperar tus archivos más fácilmente 148 00:08:25,440 --> 00:08:28,360 o reproducir varias versiones de tu sistema. 149 00:08:28,520 --> 00:08:32,160 En el futuro, habrá una mejor integración con Git, 150 00:08:32,720 --> 00:08:36,880 y ofreceremos nuevas formas para producir imágenes industrialmente.