Difference between revisions of "Releasing units without source code/es"

From Free Pascal wiki
Jump to navigationJump to search
Line 23: Line 23:
 
* El '''Sistema Operativo Objetivo''' de la unit aportada debería coincidir con el Sistema Operativo utilizado para compilar el programa cliente.
 
* El '''Sistema Operativo Objetivo''' de la unit aportada debería coincidir con el Sistema Operativo utilizado para compilar el programa cliente.
  
* Si la unit aportada depende a su vez de otra unit ''U'', entonces la unit ''U'' en el contexto del cliente necesita ser ''compatible'' con la unit ''U'' en el contexto del proveedor. Para este propósito, el compilador que provee incorpora un checksum de la ''sección de interface'' de la unit ''U'' en el fichero '''*.ppu''' de la unit en cuestión. El compilador del cliente chequea el checksum incorporado contra el checksum de la unit ''U'' en el contexto del cliente. Si dichos checksum difieren, entonces el compilador del cliente tratará de recompilar la unidad y fallará porque la fuente estará perdida. Se puede obtener más información sobre el manejo de unit's con la opcion '''-vu'' del compilador, de forma que se observa una línea que comienza con: ''Recompiling ..., checksum changed for ...''.
+
* Si la unit aportada depende a su vez de otra unit ''U'', entonces la unit ''U'' en el contexto del cliente necesita ser ''compatible'' con la unit ''U'' en el contexto del proveedor. Para este propósito, el compilador que provee incorpora un checksum de la ''sección de interface'' de la unit ''U'' en el fichero ''*.ppu'' de la unit en cuestión. El compilador del cliente chequea el checksum incorporado contra el checksum de la unit ''U'' en el contexto del cliente. Si dichos checksum difieren, entonces el compilador del cliente tratará de recompilar la unidad y fallará porque la fuente estará perdida. Se puede obtener más información sobre el manejo de unit's con la opcion ''-vu'' del compilador, de forma que se observa una línea que comienza con: ''Recompiling ..., checksum changed for ...''.
  
 
* En particular, la '''System unit''' del contexto del proveedor debería ser ''compatible'' con la System unit del contexto del cliente, porque todas las unit's dependen implícitamente de la System unit.  Por tanto, es recomendable utilizar una ''versión publicada estable'' del compilador para compilar la unit.
 
* En particular, la '''System unit''' del contexto del proveedor debería ser ''compatible'' con la System unit del contexto del cliente, porque todas las unit's dependen implícitamente de la System unit.  Por tanto, es recomendable utilizar una ''versión publicada estable'' del compilador para compilar la unit.

Revision as of 00:31, 7 April 2009

En ocasiones puede resultar útil publicar alguna unit sin su código fuente, como pueden ser:

  • El código fuente contiene información propietaria.
  • Con fines didácticos, porque de esta manera se fuerza a los estudiantes a utilizar la unit mediante su interface exclusivamente sin permitir ver como es su implementación.

FreePascal permite esto de la siguiente manera:

El proveedor de la unit (y por tanto propietario del código fuente) debería:

  • Compilar la unit por separado; se recomienda el uso de la opción -Ur del compilador (Generar los ficheros de la unit liberada; ver el Manual de Usuario para más detalles).
  • Publicando ambos ficheros resultantes *.ppu y *.o. Ver además la sección 3.3 del Manual de usuario (Compilando una unit).

El usuario de la unit debería:

  • Compilar el programa utilizado (el cliente), de tal forma que el compilador pueda encontrar ambos ficheros *.ppu y *.o de la unit (e.g. a través de la opción -Fu).

Así, hay dos contextos que son importantes:

  • La instalación del compilador del proveedor.
  • La instalación del compilador del usuarior (cliente)

Notas

  • El proveedor y el usuario deberían utilizar la misma versión de compilador. Aunque la compatibilidad hacia atrás entre units compiladas nunca se rompe a propósito, si que suele suceder cuando se necesitan nuevas características o bien se requiere la corrección de errores.
  • El Sistema Operativo Objetivo de la unit aportada debería coincidir con el Sistema Operativo utilizado para compilar el programa cliente.
  • Si la unit aportada depende a su vez de otra unit U, entonces la unit U en el contexto del cliente necesita ser compatible con la unit U en el contexto del proveedor. Para este propósito, el compilador que provee incorpora un checksum de la sección de interface de la unit U en el fichero *.ppu de la unit en cuestión. El compilador del cliente chequea el checksum incorporado contra el checksum de la unit U en el contexto del cliente. Si dichos checksum difieren, entonces el compilador del cliente tratará de recompilar la unidad y fallará porque la fuente estará perdida. Se puede obtener más información sobre el manejo de unit's con la opcion -vu del compilador, de forma que se observa una línea que comienza con: Recompiling ..., checksum changed for ....
  • En particular, la System unit del contexto del proveedor debería ser compatible con la System unit del contexto del cliente, porque todas las unit's dependen implícitamente de la System unit. Por tanto, es recomendable utilizar una versión publicada estable del compilador para compilar la unit.
  • Aquí podrían considerarse otras opciones del compilador (además de establecer el sistema operativo de destino):
    • -M ('Mode o Modo')
    • -C (Checking o Chequeando), tal como -Cr (range checking o chequeo de rango), -Ci (i/o checking o chequeo de entrada/salida), -Co (overflow checking o chequeo de desbordamiento), -Ct (stack checking o chequeo de pila)
    • -Sa (Include assert statements in compiled code o Incluir declaraciones del código compilado)
    • -O (Optimization u Optimización)
    • -gl (Generating lineinfo code o generando línea de información de código)
  • Para versiones antiguas del compilador de FreePascal, el nombre del fichero fuente de la unit aportada debería escribirse enteramente en minúsculas. Para versiones más recientes del compilador esto ya no es una incidencia. (El Manual de Usuario creo que no está actualizado en este tópico Si conoces más detalles, por ejemplo, con que versión cambió esto, entonces por favor pon un comentario aquí.).