Introdução
O suporte para múltiplas plataformas tem motivado muitas companhias a migrarem seus projetos para as versões mais recentes do RAD Studio, estejam eles utilizando Delphi ou C++ Builder. Em breve estaremos suportando mais uma plataforma de maneira 100% nativa, Linux 64 bit, e este movimento deve se intensificar.
Pensando nisso, estou iniciando uma série de artigos a respeito de migração, sendo este o primeiro deles. Vou tentar reunir aqui recursos que estão disponíveis e que podem auxiliar no processo de migração, e também compartilhar a experiência de alguns processos de atualização junto a alguns de nossos clientes.
Existem alguns temas recorrentes (e muito sensíveis) em um processo de migração. Abaixo estou listando os principais, sendo que a ordem não necessariamente atribui aos mesmos um grau de importância:
- Suportar Unicode em todo o projeto
- Migrar o framework de acesso a dados
- Passar a compilar para 64 bit no Windows
- Migrar ou remover componentes de terceiros
- Migrar o middleware (quando em uso)
Temos também outros tópicos que não estão exatamente relacionadas a migração, mas sim a expansão da aplicação para outras plataformas, já que no Delphi/C++ temos o benefício de utilizar exatamente o mesmo código-fonte para múltiplas arquiteturas:
- Migrar de uma plataforma de banco de dados para outra
- Suportar múltiplas plataformas de banco de dados simultaneamente
- Passar de uma aplicação originalmente Windows para múltiplas plataformas
Cada um destes macro tópicos será tratado em um ou mais artigos individualmente, e novos poderão ser adicionados de acordo com seu feedback!
Para dar o pontapé inicial, vamos falar de Unicode, um tema abstrato para a maioria da comunidade, o qual pode significar ao mesmo tempo uma enorme dor de cabeça em seu projeto, ou literalmente nada. Tudo vai depender do contexto de sua aplicação. Hoje vamos entender o que é Unicode e sua importância.
Sobre Unicode
Unicode foi criado e segue sendo mantido pelo Unicode Consortium, uma entidade criada por desenvolvedores: http://www.unicode.org/
Em sua definição podemos encontrar a seguinte declaração (em tradução livre):
Unicode fornece um número exclusivo para cada carácter,
Não importa qual plataforma,
Não importa qual aplicação,
Não importa qual linguagem.
Existe também um blog oficial (http://blog.unicode.org/) onde você pode encontrar artigos interessantes sobre padrões e versões da especificação do Unicode, atualmente em sua versão 9.0 (http://www.unicode.org/versions/Unicode9.0.0/).
Definições e Objetivos
Unicode é um padrão para a definição e identificação de caracteres e símbolos em todas as línguas escritas, atribuindo um valor único a cada caractere ou símbolo. O Consórcio Unicode define qual número (ponto de código) representa qual caractere ou símbolo.
Em 1991, obtivemos o Unicode versão 1.0.0, que foi estendido para 1.0.1 e 1.1 de acordo com o padrão ISO-10646. Originalmente, o Unicode 1.1 estava limitado a 64K caracteres e símbolos, o que significava que 2 bytes eram suficientes para codificar todos os caracteres. Infelizmente, o 64K também era insuficiente para suportar todas as línguas escritas no mundo.
Como resultado, o Unicode 2.0, a partir de junho de 1996, estendeu o número de pontos de código para $ 10FFFD caracteres e símbolos (1.114.109 para ser exato). No momento da escrita, o Unicode 9.0 é atual, para o qual o Consórcio Unicode já definiu 128.172 caracteres no padrão.
Formatos de Transformação Unicode
Os dados Unicode (os valores de ponto de código) podem ser apresentados em diferentes formatos, como UTF-8, UTF-16 ou UTF-32. Também podemos opcionalmente comprimir dados Unicode. UTF significa Unicode Transformation Format, e cada UTF define o mapeamento entre um ponto de código para uma série única de bytes que representam esse ponto de código. Assim, onde o próprio Unicode define o caractere ou símbolo que pertence a um ponto de código, o UTF define a representação física (no arquivo no disco ou na memória, por exemplo).
UTF-8
Usando UTF-8, temos entre 1 e 4 bytes para cada caractere Unicode.
UTF-16
Usando UTF-16, obtemos 2 ou 4 bytes para cada caractere Unicode. Esta codificação é mais fácil e mais rápida de processar do que UTF-8.
UTF-32
Usando UTF-32 sempre obtemos exatamente 4 bytes para cada caractere Unicode. Esta é a codificação mais fácil de todas, mas também a que resulta no maior espaço de armazenamento.
API do Windows
Desde Windows NT e 2000, a API do Windows oferece suporte a dois conjuntos de APIs: um para ANSI (A) e um para caracteres Unicode (W), portanto, outra importante razão para você migrar sua aplicação para um compilador mais recente.
Unicode no Delphi/C++ Builder
Feitas as apresentações e formalidades, no próximo artigo iniciaremos por explorar os recursos e técnicas para migração de sua aplicação “Pré-Unicode”, seja tornando-a 100% aderente ao padrão Unicode, ou simplesmente garantindo que ela irá se comportar bem com os novos compiladores e sistemas operacionais, caso você não necessite realmente de suporte a múltiplos idiomas e caracteres estendidos.
Até breve!
Pingback: Windows 10 Store, Android, iOS, OS X, Linux: recursos para migrar sua aplicação Delphi/C++ Builder e suportar TODAS as plataformas! – It's All About Code!
Pingback: Windows 10 Store, Android, iOS, OS X, Linux: recursos para migrar sua aplicação Delphi/C++ Builder e suportar TODAS as plataformas (parte 2) | It's All About Code!
Pingback: Windows 10 Store, Android, iOS, OS X, Linux: recursos para migrar sua aplicação Delphi/C++ Builder e suportar TODAS as plataformas (parte 3) | It's All About Code!
Pingback: Windows 10 Store, Android, iOS, OS X, Linux: recursos para migrar sua aplicação Delphi/C++ Builder e suportar TODAS as plataformas (parte 4) | It's All About Code!
Pingback: Windows 10 Store, Android, iOS, OS X, Linux: recursos para migrar sua aplicação Delphi/C++ Builder e suportar TODAS as plataformas (parte 5) | It's All About Code!