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

From Free Pascal wiki
Jump to navigationJump to search
m
 
(16 intermediate revisions by 3 users not shown)
Line 1: Line 1:
En ocasiones puede resultar útil publicar alguna unit sin su código fuente:
+
{{Releasing units without source code}}[[category:Castellano]][[category:Español]]
 +
 
 +
En ocasiones puede resultar útil publicar alguna unidad sin su código fuente, como pueden ser:
  
 
* El código fuente contiene información propietaria.
 
* 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.
+
* Con fines didácticos, porque de esta manera se fuerza a los estudiantes a utilizar la unidad mediante su interface exclusivamente sin permitir ver como es su implementación.
 +
 
 +
FreePascal permite esto de la siguiente manera:
 +
 
 +
El '''proveedor''' de la unidad (y por tanto propietario del código fuente) debería:
 +
 
 +
* Compilar la unidad por separado; se recomienda el uso de la opción '''-Ur''' del compilador (''Generar los ficheros de la unidad 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 unidad'').
 +
El '''usuario''' de la unidad debería:
 +
 
 +
* Compilar el programa utilizado (el ''cliente''), de tal forma que el compilador pueda encontrar ambos ficheros '''*.ppu''' y '''*.o''' de la unidad (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 unidads 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.
  
FreePascal permite esto de la siguiente manera.
+
* El '''Sistema Operativo Objetivo''' de la unidad aportada debería coincidir con el Sistema Operativo utilizado para compilar el programa cliente.
FreePascal allows you to do so in the following way.
 
  
The '''provider''' of the unit (and owner of its source code) should:
+
* Si la unidad aportada depende a su vez de otra unidad ''U'', entonces la unidad ''U'' en el contexto del cliente necesita ser ''compatible'' con la unidad ''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 unidad ''U'' en el fichero ''*.ppu'' de la unidad en cuestión. El compilador del cliente chequea el checksum incorporado contra el checksum de la unidad ''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 unidades con la opcion ''-vu'' del compilador, de forma que se observa una línea que comienza con: ''Recompiling ..., checksum changed for ...''.
* Compile the unit separately; it is recommended to use the compiler option '''-Ur''' (''Generate release unit files''; see ''User's Manual'' for details)
 
* Publish both the resulting '''*.ppu''' and '''*.o''' files. Also see Section 3.3 of the ''User's Manual'' (''Compiling a unit'').
 
The '''user''' of the provided unit should:
 
* Compile the using program (the ''client''), such that the compiler can find both the '''*.ppu''' and '''*.o''' files of the unit (e.g. through the compiler option '''-Fu''').
 
  
Thus, there are two compiler contexts that matter:
+
* En particular, la unidad '''unidadem''' del contexto del proveedor debería ser ''compatible'' con la unidad ''System'' del contexto del cliente, porque todas las unidades dependen implícitamente de la unidad System.  Por tanto, es recomendable utilizar una ''versión publicada estable'' del compilador para compilar la unidad.
* The compiler installation of the provider
+
* Aquí podrían considerarse otras opciones del compilador (además de establecer el sistema operativo de destino):
* The compiler installation of the user (client)
+
** '''-M''' (''''M'''ode o '''M'''odo')
 +
** '''-C''' ('''''C'''hecking o '''C'''hequeando''), 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''' ('''''O'''ptimization u '''O'''ptimización'')
 +
** '''-gl''' ('''''G'''enerating '''l'''ineinfo code o generando línea de  información de código'')
  
'''Notes'''
+
* Para versiones antiguas del compilador de FreePascal, el nombre del fichero fuente de la unidad aportada debería escribirse enteramente en minúsculas. Para versiones más recientes del compilador esto ya no es un problema. (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í.''').
* The provider and user should use the '''same compiler version'''. Although backwards compatibility between compiled units is never broken on purpose, this regularly happens in order to support new features or to fix bugs.
 
* The '''Target OS''' of the provided unit should match the target OS used for compiling the client program.
 
* If the provided unit depends on another unit ''U'', then the unit ''U'' of the client context needs to be ''compatible'' with the unit ''U'' in the provider context. For that purpose, the providing compiler embeds a checksum of the '''interface section''' of unit ''U'' in the '''*.ppu''' file of the provided unit.  The client compiler checks the embedded checksum against the checksum of unit ''U'' in the client context.  If the checksums differ, then the client compiler will attempt to recompile the provided unit, and this will fail because the source is missing. With the compiler option '''-vu''' you get more information on the handling of unit files, and you can spot a line stating ''Recompiling ..., checksum changed for ...''.
 
* In particular, the '''System unit''' of the provider context should be ''compatible'' with the System unit of the client context, because every unit implicitly depends on the System unit.  Therefore, it is recommended to use a ''stable release'' of the compiler to compile the provided unit.
 
* There may be some other compiler options to consider (besides setting the Target OS):
 
** '''-M''' (''Mode'')
 
** '''-C''' (''Checking''), such as '''-Cr''' (''range checking''), '''-Ci''' (''i/o checking''), '''-Co''' (''overflow checking''), '''-Ct''' (''stack checking'')
 
** '''-Sa''' (''Include assert statements in compiled code'')
 
** '''-O''' (''Optimization'')
 
** '''-gl''' (''Generating lineinfo code'')
 
* For older versions of the FreePascal compiler, the name of the provided unit's source file should be in all lower case letters. For recent versions of the compiler, this is no longer an issue. (The ''User's Manual'' is not up to date on this topic, I believe.  '''If you know more details, e.g. from which version on this changed, then please put it here.''')
 

Latest revision as of 01:36, 8 January 2010

English (en) español (es) Bahasa Indonesia (id) русский (ru)

En ocasiones puede resultar útil publicar alguna unidad 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 unidad mediante su interface exclusivamente sin permitir ver como es su implementación.

FreePascal permite esto de la siguiente manera:

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

  • Compilar la unidad por separado; se recomienda el uso de la opción -Ur del compilador (Generar los ficheros de la unidad 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 unidad).

El usuario de la unidad debería:

  • Compilar el programa utilizado (el cliente), de tal forma que el compilador pueda encontrar ambos ficheros *.ppu y *.o de la unidad (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 unidads 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 unidad aportada debería coincidir con el Sistema Operativo utilizado para compilar el programa cliente.
  • Si la unidad aportada depende a su vez de otra unidad U, entonces la unidad U en el contexto del cliente necesita ser compatible con la unidad 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 unidad U en el fichero *.ppu de la unidad en cuestión. El compilador del cliente chequea el checksum incorporado contra el checksum de la unidad 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 unidades con la opcion -vu del compilador, de forma que se observa una línea que comienza con: Recompiling ..., checksum changed for ....
  • En particular, la unidad unidadem del contexto del proveedor debería ser compatible con la unidad System del contexto del cliente, porque todas las unidades dependen implícitamente de la unidad System. Por tanto, es recomendable utilizar una versión publicada estable del compilador para compilar la unidad.
  • 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 unidad aportada debería escribirse enteramente en minúsculas. Para versiones más recientes del compilador esto ya no es un problema. (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í.).