Releases: humbertocsjr/hcbasic
v0.9.7-pre-release
Segunda versão de pré lançamento (Incremental da 0.9.6, por isso estou recolocando o mesmo texto), mais de uma dezena de bugs resolvidos, melhorias na biblioteca e no compilador, deixando mais simples a vida do programador da linguagem HCBasic.
A partir deste momento o compilador é plenamente utilizável e maduro o suficiente para uso comum, não havendo falhas ou recursos faltantes para aplicações simples, a partir de agora é otimizar, fazer pequenas melhorias na linguagem que não mais quebram os códigos já existentes e expandir a biblioteca System, para embarcar recursos como Gráficos e Audio (Aceito sugestões através da Issues do GitHub).
A maioria dos bugs que foram encontrados vieram da criação de um pequeno núcleo de sistema operacional que estou fazendo usando este compilador, por levar a linguagem de programação ao extremo e o compilador ao seu limite, foi possível encontrar bugs muito especificos. Em breve este protótipo será subido para o GitHub.
Novidades:
- Corrigido Bug do + e - que invertiam a ordem dos valores
- Protótipo da biblioteca System.Drawing, implementado CGA 640x200, rotinas CGA.Mode640x200x2, Graphics.Mode80x25x16, Graphics.DrawPixel e Graphics.DrawLine
- Implementado Try Catch completamente funcional
- As rotinas da Biblioteca System foram atualizadas para emitir erros em caso de falhas ao invés de retornar um valor falso, porém para preservar eventual código existente ainda retorna verdadeiro para sucesso.
- Caso de erro gerado e não interceptado, a execução é interrompida
- Foi aperfeiçoada a inteligência da atribuição, onde quando se é atribuido um poteiro para outro, o destino do ponteiro é copiado entre eles, facilitando a duplicação de ponteiros, porém quando é atribuido um número a um ponteiro, este é armazenado no destino do ponteiro.
- Implementado o Módulo String, com comandos de comparação (String.Equals), cópia (String.Copy) e concatenação (String.Concat), onde sempre o primeiro argumento é o destino e o segundo é origem, os tamanhos da string são verificados automaticamente, emitindo um erro de CapacityOverflowError caso se tente copiar/concatenar um conteúdo que não caiba em seu destino
- Implementado a declaração e uso de Structures no nivel Módulo, podendo ser estes estáticos(já alocados automaticamente), ou meros ponteiros(usando um prefixo Pointer antes do Dim, valendo apenas para campos de Módulo, já que todos as variáveis locais do tipo structure já são ponteiros apenas), com isso o comportamento padrão para uma declaração de campo do tipo estrutura em um módulo é de criar ele e automaticamente aloca-lo estaticamente.
- Implementado SizeOf(TIPO/ESTRUTURA/VARIAVEL) que retorna o tamanho ocupado por um tipo, estrutura ou variável, lembrando que ao apontar a uma variavel do tipo estrutura retornará o tamanho de um ponteiro na plataforma atual, para se saber o tamanho que a estrutura ocupa deve-se informar o nome dela
- O alinhamento dentro de uma estrutura é sempre em Byte, portanto ao se definir uma estrutura com três UInt8, esta terá como tamanho 3 bytes, porém o alinhamento de variáveis soltas na memória é sempre no tamanho de uma palavra do processador.
- Melhoria na documentação da linguagem dando exemplos melhores de uso
- Esta versão gera executáveis um pouco maiores, principalmente se usado o Try Catch porém mais seguro e evitando problemas em tempo de execução, por haver vários verificadores impedindo falhas em execução.
- Há uma verificação de estouro de pilha sempre que é chamada uma rotina, impedindo que em algum loop de reentrância de rotina, se estoure a pilha e comece a corromper dados/código.
- Para facilitar para o programador agora há as funções ErrorFile() e ErrorLine() que dentro de um Catch informam o arquivo onde houve o erro e seu respectivo número de linha de código.
v0.9.6-pre-release
Primeira versão de pré lançamento, mais de uma dezena de bugs resolvidos, melhorias na biblioteca e no compilador, deixando mais simples a vida do programador da linguagem HCBasic.
A partir deste momento o compilador é plenamente utilizável e maduro o suficiente para uso comum, não havendo falhas ou recursos faltantes para aplicações simples, a partir de agora é otimizar, fazer pequenas melhorias na linguagem que não mais quebram os códigos já existentes e expandir a biblioteca System, para embarcar recursos como Gráficos e Audio (Aceito sugestões através da Issues do GitHub).
A maioria dos bugs que foram encontrados vieram da criação de um pequeno núcleo de sistema operacional que estou fazendo usando este compilador, por levar a linguagem de programação ao extremo e o compilador ao seu limite, foi possível encontrar bugs muito especificos. Em breve este protótipo será subido para o GitHub.
Novidades:
- Implementado Try Catch completamente funcional
- As rotinas da Biblioteca System foram atualizadas para emitir erros em caso de falhas ao invés de retornar um valor falso, porém para preservar eventual código existente ainda retorna verdadeiro para sucesso.
- Caso de erro gerado e não interceptado, a execução é interrompida
- Foi aperfeiçoada a inteligência da atribuição, onde quando se é atribuido um poteiro para outro, o destino do ponteiro é copiado entre eles, facilitando a duplicação de ponteiros, porém quando é atribuido um número a um ponteiro, este é armazenado no destino do ponteiro.
- Implementado o Módulo String, com comandos de comparação (String.Equals), cópia (String.Copy) e concatenação (String.Concat), onde sempre o primeiro argumento é o destino e o segundo é origem, os tamanhos da string são verificados automaticamente, emitindo um erro de CapacityOverflowError caso se tente copiar/concatenar um conteúdo que não caiba em seu destino
- Implementado a declaração e uso de Structures no nivel Módulo, podendo ser estes estáticos(já alocados automaticamente), ou meros ponteiros(usando um prefixo Pointer antes do Dim, valendo apenas para campos de Módulo, já que todos as variáveis locais do tipo structure já são ponteiros apenas), com isso o comportamento padrão para uma declaração de campo do tipo estrutura em um módulo é de criar ele e automaticamente aloca-lo estaticamente.
- Implementado SizeOf(TIPO/ESTRUTURA/VARIAVEL) que retorna o tamanho ocupado por um tipo, estrutura ou variável, lembrando que ao apontar a uma variavel do tipo estrutura retornará o tamanho de um ponteiro na plataforma atual, para se saber o tamanho que a estrutura ocupa deve-se informar o nome dela
- O alinhamento dentro de uma estrutura é sempre em Byte, portanto ao se definir uma estrutura com três UInt8, esta terá como tamanho 3 bytes, porém o alinhamento de variáveis soltas na memória é sempre no tamanho de uma palavra do processador.
- Melhoria na documentação da linguagem dando exemplos melhores de uso
- Esta versão gera executáveis um pouco maiores, principalmente se usado o Try Catch porém mais seguro e evitando problemas em tempo de execução, por haver vários verificadores impedindo falhas em execução.
- Há uma verificação de estouro de pilha sempre que é chamada uma rotina, impedindo que em algum loop de reentrância de rotina, se estoure a pilha e comece a corromper dados/código.
- Para facilitar para o programador agora há as funções ErrorFile() e ErrorLine() que dentro de um Catch informam o arquivo onde houve o erro e seu respectivo número de linha de código.
v0.9.5-beta
Recompile seu código da v0.9 com esta versão pois corrige vários bugs encontrados, principalmente em ponteiros quando envolve loops ou incremento, devido a falhas na otimização introduzidas na v0.9
Implementações diversas entre elas:
- Corrigido ./compila.sh e compila.bat que apontavam para pasta errada na distribuição anterior
- Correções de falhas antes observadas quando haviam incremento seguido de uso do ponteiro, onde este era incrementado porém devido a otimização, não incrementava a versão carregada do ponteiro
- Corrigido o comando Imports que permitia incluir em duplicidade uma biblioteca fazendo automaticamente o filtro do que já foi importado evitando a criação de algo equivalente ao C de usar diretrizes como #ifndef, #define #endif que apenas gera trabalho extra pro programador.
- Corrigido falha que gerava um loop infinito no compilador se dois modulos fizessem referência cruzada entre si, corrigido pela mesma alteração descrita acima, que impede duplicidades em nivel biblioteca e módulo.
- Criação e implementação de ponteiros para funções e sub-rotinas se inspirando no Func(Of) e Action(Of) do VB.Net e sua forma de chamada usando .Invoke()
- Correções diversas no compilador, e melhorias na Saida.cs, ficando próxima a sua versão final
- Separação da System em System e System.OS, separando o que é do Processador e o que é do Sistema Operacional, para simplificar a implementação de outras plataformas pro mesmo sistema operacional, para o usuário final é transparente bastando ele incluir na lista de diretorios de importação os diretorios da arquitetura e do sistema operacional, o que vai facilitar pra compilar para outros sistemas operacionais bastando substituir este direcionamento.
- Implementado Strings no compilador faltando a biblioteca de apoio para permitir concatenar fazer substring etc.
- Criei um protótipo da Plataforma 8086-kernel, que será usada pra facilitar o inicio de desenvolvimento de sistemas operacionais hobbystas, claro que apenas auxilia no pontapé inicial, e será incluso o código fonte do bootloader para ele, mas isso virá com o tempo.
Estou verificando se é fácil de implementar arrays, se for muito complexo, vou implementar via biblioteca um equivalente a List, para que seja fácil de lidar, ainda não mexi muito nisso por que por enquanto só há alocação na pilha, não havendo HEAP, e além disso não há a parte de implementação de ponteiros no nivel global de forma completa, por exemplo não suportando Structures estaticas globais ainda
Falta pouco para terminar a implementação básica, a biblioteca System mais simples está em sua forma próxima ao final, já implementando o primeiro protótipo de conversões simples de Encoding entre UTF-8 e CP437, se prevê no futuro a implementação da Biblioteca extra chamada System.Drawing com o módulo Graphics, porém ainda está em projeto e não entrará ainda na versão 1.0, provavelmente ficando pra 1.1.
Caso encontre um bug, adicione uma Issue a este projeto assim, será corrigida mais rapidamente.
Já iniciei um protótipo de sistema operacional usando este compilador, e é bootavel via emulador 86Box, em breve subirei o projeto e incluirei referência neste.
v0.9-beta
Primeira versão completamente funcional para criação de programas de console simples.
Por essa versão ser beta, caso encontre algum erro ou falha informe via Issues para que possa corrigir o mais rápido possível, normalmente faço manutenção nesse projeto a noite nos dias de semana e alguns finais de semana
AVISO: Este compilador atualmente tem um comportamento com variáveis próximo a compiladores C, onde ao cria-las, elas tem valores inválidos e não são automaticamente inicializadas, devendo ser inicializada manualmente, e por enquanto não há verificação se o usuário inicializou uma variável antes de usa-la, isto é importante principalmente para Ponteiros e Estruturas que podem ao inicializar apontar para partes indevidas da memoria podendo gerar problemas como corrupção de dados ou crash do sistema operacional.
Nos pacotes já vem todos os arquivos necessários para execução, incluindo a distribuição do .Net requerido, bastando executar o hcbasic passando os argumentos conforme abaixo:
hcbasic ARQUIVO.HCB ARQUIVO.ASM DIRETORIOS_PARA_USO_DO_IMPORTSExemplo: (Testado no Linux)
./hcbasic teste.hcb teste.asm Plataformas/8086-DOS
nasm -f bin -o teste.com teste.asmO Arquivo de exemplo está com o nome errado, estando hellowolrd.hcb ao invés de helloworld.hcb deve ser corrigido para funcionar os compilar.sh e compilar.bat, não deu tempo de recompilar os pacotes para corrigir por levar 1 hora entre o build e upload pro github
v0.8-alpha
Esta versão não está pronta para uso, faltando a Biblioteca System e o suporte a Structures, sendo gerada apenas para teste de distribuição entre todas as plataformas suportadas.
This version isn't ready to use, missing System Library and Structure's support, this is only for distribution test to all supported platforms.