paulo1205
(usa Ubuntu)
Enviado em 21/09/2019 - 14:33h
DeuRuimDotCom escreveu:
Sempre bom conhecer as exceções, mas essas ainda vigoram? Quero dizer, corre-se o risco de topar com elas em algum trabalho nos dias de hoje? (Pergunto a título de curiosidade apenas.)
Mainframes da IBM e produtos relacionados ainda usam EBCDIC nativamente. Eu não consegui descobrir se o XL C/C++ para z/OS, que é o compilador C e C++ oferecido pela IBM
para seus
mainframes atuais, usa EBCDIC nativamente ou se é apenas capaz de interagir com ele por meio de camadas de conversão, até porque é difícil encontrar referências ao XL C/C++ que não incluam menções ao subsistema do z/OS de compatibilidade com UNIX. Um dos
sites da IBM que menciona o produto (
https://www-01.ibm.com/common/ssi/cgi-bin/ssialias?infotype=AN&subtype=CA&htmlfid=897/ENUS21...) diz o seguinte.
The z/OS XL C/C++ V2.3.1 compiler supports English messages and EBCDIC and ASCII execution character sets, and generates AMODE 64 code, making it ideal for z/OS UNIX users porting applications from distributed platforms.
Na outra ponta do espectro, como eu mesmo mencionei PETSCII, existem comunidades de entusiastas que procuram manter vivos seus computadores antigos, inclusive produzindo novo
software e novo
hardware para eles ou a partir deles, bem como emuladores desses computadores. Eu costumo assistir a alguns canais no YouTube de
retro computing, e boa parte do material que se produz é sobre Commodore 64, que é uma máquina que usa PETSCII. Eu não sei o quanto essa comunidade usa C — não apenas porque usar C não seria considerado
retro por alguns de seus membros, embora a linguagem em si seja mais antiga do que seus computadores, mas também porque processadores antigos, tais como o 6502 do C64, Apple II e Atari, ou mesmo o Z80 do CP/M, TRS-80 e MSX, não oferecem recursos muito amigáveis para conversão de programas em C — mas produtos como o cc65 (
https://cc65.github.io/) estão disponíveis para criar código para essas máquinas, e existem desenvolvedores que usam compiladores como esse.
[Edição:] Outra questão que aventei, agora não apenas a título de curiosidade: como ficam, por ex., funções de conversão de tipo diante dessas exceções?
Quais funções de conversão de tipos?
strtol() e semelhantes?
E já que tocou no assunto da generalidade, outra coisa que vislumbrei aqui é que me parece haver implementações que não aceitam reduzir escopo de variável em bloco que não seja o construtivo de uma função, de modo que a declaração da variável incremental, em relação a essas, deveria ter sido feita no início da main e não no corpo do loop-for.
Isso é questão de versão do padrão do C. O C89/C90 e implementações anteriores a esse padrão de fato só aceitam declarações de variáveis no início de um bloco (não necessariamente apenas o bloco da função, mas os de condicionais e laços de repetição também), mas os mais novos permitem declarações dentro dos parênteses do
for e intercalados com comandos dentro do bloco. Nesse caso, portanto, não é exatamente uma questão de conformidade entre plataformas distintas, mas entre versões de padrões suportados.
... “Principium sapientiae timor Domini, et scientia sanctorum prudentia.” (Proverbia 9:10)