Conforme apresentado no post anterior, os r-codes (programas Progress compilados) não são portáveis entre todos os ambientes.
Neste post abordaremos mais duas regras para portabilidade dos r-codes: versão do Progress e plataforma (32/64-bit).
Os r-codes podem ser executados em ambientes que possuam a mesma versão principal (major version) do Progress. As versões 10.0B e 10.1A possuem a mesma versão principal, e portanto os r-codes gerados em uma versão são compatíveis para execução na outra. As versões 9.1D e 9.1E também possuem a mesma versão principal.
Ao tentar executar r-codes gerados em versões incompatíveis do Progress, será gerado o erro 2888:
Invalid version, 908 (expected 1005) in object file alias.r. (2888)
É importante ressaltar que r-codes que utilizem funcionalidades novas não executarão em versões mais antigas. Por exemplo, a versão 10.1C introduziu tratamento estruturado de erros, com os blocos CATCH / FINALLY. R-codes que utilizem este recurso não funcionarão adequadamente em versões anteriores, ainda que a versão principal seja igual.
A outra regra aplica-se apenas para as versões 10.1A e superiores. Até a versão 10.0B, inclusive, todos os r-codes eram gerados com estrutura interna de 32-bit, independente da plataforma utilizada para compilação. A partir do OpenEdge 10.1A, as versões de Progress 64-bit geram e executam somente r-codes 64-bit.
O r-code deve ser compatível com a versão / plataforma do client Progress utilizado, e não do banco de dados. Um client 10.1A 32-bit executando em Windows precisa de um r-code 32-bit, mesmo que o banco de dados esteja em um servidor Itanium com HP-UX 64-bit.
A ilustração a seguir representa a portabilidade de r-codes entre algumas versões de Progress / OpenEdge.
Em ambientes Windows esta preocupação entre 32-bit e 64-bit não é relevante, pois até a versão 10.1C não existe Progress 64-bit para este sistema operacional. Para unix/linux existe Progress 64-bit e deve-se utilizar um r-code compatível com a versão de Progress.
A Datasul disponibiliza os programas compilados em plataforma 64-bit, com o client texto, no diretório hpuxitanium64. Apesar do nome do diretório sugirir HP-UX, estes programas podem ser utilizados em qualquer client texto 64-bit. Os programas existentes nos demais diretórios são compilados com client 32-bit.
Os seguintes KBases da Progress possuem informações adicionais:
How to compile 64-bit r-code?
Is r-code compiled in 10.0X compatible with 10.1A?
Is it necessary to recompile when moving Progress r-code from a 32-bits to a 64-bits version and vice versa?