Clipper On Line • Ver Tópico - Harbour++ - Informações, código-fonte e atualizações

Harbour++ - Informações, código-fonte e atualizações

Aqui você poderá oferecer suas Contribuições, Dicas e Tutoriais (Texto ou Vídeo) que sejam de interesse de todos.

Moderador: Moderadores

 

Harbour++ - Informações, código-fonte e atualizações

Mensagempor marcosgambeta » 04 Mai 2022 07:03

Este tópico será usado para disponibilizar informações sobre o desenvolvimento do Harbour++, incluindo o código-fonte para quem quiser baixar, compilar e usar.

Harbour++ é um projeto derivado (fork) do Harbour e tem como principal objetivo a transição da linguagem C para a linguagem C++. É um trabalho em progresso, realizado em etapas, mas mantendo o máximo de compatibilidade possível com o Harbour original, visando facilitar a migração de aplicações. A compilação requer um compilador C++ e o padrão mínimo é o C++11.

O código-fonte corrente está disponível no link abaixo:

https://magsoftinfo.com/files/harbourpp/harbourpp-v1-main-20220504-0632.zip

Veja o arquivo README.md e CHANGES.md para maiores informações.

Atualizações serão disponibilizadas conforme o desenvolvimento do projeto avançar.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 272
Data de registro: 16 Jun 2005 22:53
Curtiu: 2 vezes
Mens.Curtidas: 32 vezes

Harbour++ - Informações, código-fonte e atualizações

Mensagempor marcosgambeta » 21 Mai 2022 14:47

Quem desejar acompanhar o desenvolvimento do projeto mais de perto, poderá fazê-lo no link abaixo:

https://github.com/harbourplusplus/harbourpp-v1

Uma nova biblioteca foi adicionada ao conjunto de bibliotecas do Harbour++, com a função de servir de ponte entre o Harbour++ e a API do Windows. Seu objetivo será expor o máximo possível de recursos da WINAPI, para uso nas aplicações dos usuários.

Esta nova biblioteca está sendo desenvolvida com o auxílio de um gerador de código-fonte, de forma que seu desenvolvimento e manutenção sejam mais rápidos e padronizados.

Futuramente, ela poderá ser utilizada em outros sistemas operacionais através do WINE. Mas por enquanto, ela existirá apenas nas compilações para Windows.

Conforme seu desenvolvimento avançar, os projetos na pasta contrib serão ajustados para usar esta nova biblioteca.

Quanto à biblioteca hbwin, na pasta contrib, continuará disponível também da forma como está.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 272
Data de registro: 16 Jun 2005 22:53
Curtiu: 2 vezes
Mens.Curtidas: 32 vezes

Harbour++ - Informações, código-fonte e atualizações

Mensagempor marcosgambeta » 01 Jun 2022 23:47

Ainda falando sobre a biblioteca de ligação com a API do Windows, as estruturas serão classes e poderão ser utilizadas conforme os exemplos abaixo:

PROCEDURE Main()

   LOCAL oPoint

   oPoint := WINAPI_POINT():new()

   ? "pointer=", oPoint:pointer

   ? "WinApi_GetCursorPos(oPoint)=", WinApi_GetCursorPos(oPoint)

   ? "X=", oPoint:x
   ? "Y=", oPoint:y

RETURN


PROCEDURE Main()

   LOCAL oPoint

   oPoint := WINAPI_POINT():new()

   ? "pointer=", oPoint:pointer

   ? "WinApi_GetCursorPos(oPoint)=", WinApi_GetCursorPos(oPoint)

   ? "X=", oPoint:GetX()
   ? "Y=", oPoint:GetY()

RETURN


Conforme novas classes (estruturas) forem sendo criadas, as funções que utilizam estas estruturas serão implementadas.

Testes usando a biblioteca hbwinapi serão adicionados na pasta tests\winapi.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 272
Data de registro: 16 Jun 2005 22:53
Curtiu: 2 vezes
Mens.Curtidas: 32 vezes

Harbour++ - Informações, código-fonte e atualizações

Mensagempor JoséQuintas » 02 Jun 2022 14:37

Não foi mencionado, mas acredito que o Harbour base tenha sido o 3.2 e não o 3.4, ou estou enganado?
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 18915
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 14 vezes
Mens.Curtidas: 1013 vezes

Harbour++ - Informações, código-fonte e atualizações

Mensagempor marcosgambeta » 02 Jun 2022 14:56

JoséQuintas escreveu:Não foi mencionado, mas acredito que o Harbour base tenha sido o 3.2 e não o 3.4, ou estou enganado?


A base foi o Harbour 3.2:

2020-08-19 02:02 UTC+0200 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
  * src/rtl/filesys.c
    ! use _exit() instead of exit() in forked process inside hb_fsPOpen().
      I've noticed that programs linked with QT 5.9.5 does not cleanly ends
      when exit() is used probably due to atexit() procedures.
    * use EXIT_SUCCESS and EXIT_FAILURE macros

  * src/rtl/gtcrs/gtcrs.c
  * src/rtl/hbproces.c
    * use _exit() instead of exit() in forked processes when exec*() fails
    * use EXIT_SUCCESS and EXIT_FAILURE macros

  * src/rtl/gtchrmap.c
    * use 'return 0' instead of 'exit( 0 )' in commented debug code


Está pendente a sincronização com as mudanças ocorridas após esta data.

Quando ao Harbour 3.4, apesar de todas as mudanças que o Viktor fez, eu descartei usar ele como base porque ele parou de sincronizar com o Harbour oficial. A última foi em 12-2017. E o núcleo (core) é a parte mais importante do Harbour (é o coração do projeto).

Então, decidi colocar o código-fonte de ambos lado a lado e ir estudando as diferenças entre eles (3.2 e 3.4), para ir unificando no Harbour++.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 272
Data de registro: 16 Jun 2005 22:53
Curtiu: 2 vezes
Mens.Curtidas: 32 vezes

Harbour++ - Informações, código-fonte e atualizações

Mensagempor JoséQuintas » 03 Jun 2022 16:28

marcosgambeta escreveu:Quando ao Harbour 3.4, apesar de todas as mudanças que o Viktor fez, eu descartei usar ele como base porque ele parou de sincronizar com o Harbour oficial. A última foi em 12-2017. E o núcleo (core) é a parte mais importante do Harbour (é o coração do projeto).
Então, decidi colocar o código-fonte de ambos lado a lado e ir estudando as diferenças entre eles (3.2 e 3.4), para ir unificando no Harbour++.


A alteração no 3.2 pra limite de variáveis absurdamente elevados acho interesssante, e não tem no 3.4.

Puxar pelo git ajudaria mas.....

git clone endereco32
dentro da pasta
git pull endereco34

O próprio git mostra aonde não consegue juntar automático, devido a conflitos, mas e pra saber se estamos indo em frente ou voltando pra trás?
Tem que estar muito acostumado com as mudanças pra não fazer besteira.
Não sei nem mesmo se para o Viktor, se isso já não seria complicado.

Talvez até mais interessante alterar direto no 3.2 pra ter aproveitamento ainda maior, e provável ajuda.

O que gostei foi muita função de API que ficava em gtwvg/gtwvw/etc. serem movidas pra hbwin, e padronizadas nas libs.
E também um tipo de variável (acho que é isso) específica para o uso de formatos do windows, pra facilitar o uso de funções.
Com isso, a hbwin do 3.4 tem muito mais funções do que no 3.2, inclusive as usadas em GUI.
Talvez até tenha a ver com o que anda fazendo pra facilitar o uso de API Windows.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 18915
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 14 vezes
Mens.Curtidas: 1013 vezes

Harbour++ - Informações, código-fonte e atualizações

Mensagempor marcosgambeta » 06 Jun 2022 16:35

JoséQuintas escreveu:Puxar pelo git ajudaria mas.....

git clone endereco32
dentro da pasta
git pull endereco34

O próprio git mostra aonde não consegue juntar automático, devido a conflitos, mas e pra saber se estamos indo em frente ou voltando pra trás?
Tem que estar muito acostumado com as mudanças pra não fazer besteira.
Não sei nem mesmo se para o Viktor, se isso já não seria complicado.

Talvez até mais interessante alterar direto no 3.2 pra ter aproveitamento ainda maior, e provável ajuda.


O melhor caminho é identificar as alterações importantes/interessantes e procurar reproduzi-las, visto que tem a mudança para C++ em andamento. Harbour 3.2, Harbour 3.4 e xHarbour continuarão em C, mas o Harbour++ usará cada vez os recursos da linguagem C++.

Na série 1 (versões 1.#.#), tenho de restringir o uso do C++ por causa da compatibilidade. Este série serve como porta de entrada para quem decidir passar de Harbour/xHarbour para Harbour++.

Mas na série 2 (versões 2.#.#), poderei intensificar o uso do C++. E deixar a compatibilidade em segundo plano, podendo então mexer no conjunto de comandos, classes e funções. isto inclui, inclusive, aproveitar ideias de outros produtos xBase (Flagship, Recital, VFP, dBase, etc...)

Mas nada drástico, que obrigue o desenvolvedor a ficar reescrevendo seu código-fonte. Seriam novos recursos e ajustes para acompanhar o desenvolvimento do Harbour++.

JoséQuintas escreveu:O que gostei foi muita função de API que ficava em gtwvg/gtwvw/etc. serem movidas pra hbwin, e padronizadas nas libs.
E também um tipo de variável (acho que é isso) específica para o uso de formatos do windows, pra facilitar o uso de funções.
Com isso, a hbwin do 3.4 tem muito mais funções do que no 3.2, inclusive as usadas em GUI.
Talvez até tenha a ver com o que anda fazendo pra facilitar o uso de API Windows.


Na hbwin, o uso de estruturas foi resolvido desta forma:

. os dados são armazenados em variáveis do tipo HASH
. antes de chamar uma função do Windows, é criado uma estrutura e os valores são copiados do hash para a estrutura
. a função da winapi é chamada usando a estrutura recém criada
. se necessário, os valores são copiados da estrutura para o hash
. a estrutura é descartada

Na hbwinapi, optei por criar a estrutura na criação do objeto (usando o new do C++). O endereço da estrutura fica armazenado na propriedade 'pointer'. É este valor que é passado para as funções da API do Windows. Os valores são obtidos e alterados diretamente na estrutura. Enquanto o objeto existir, a estrutura existirá. Com o fim do objeto, a estrutura é destruída no 'destructor' da classe (usando o delete do C++).

Conforme a hbwinapi evoluir, os projetos da pasta contrib (exceto hbwin) serão alterados para usarem os recursos dela. Funções duplicadas serão marcadas como obsoletas, mas continuarão disponíveis para que os desenvolvedores continuem usando, se desejarem.

De certa forma, é semelhante ao processo que ocorreu no Harbour 3.4.

Os recursos que se tornarem obsoletos numa série poderão ser removidos na série seguinte. Por exemplo: funções que se tornarem obsoletas na série 1 poderão ser removidas na série 2. Assim, haverá tempo para acompanhar as mudanças e fazer os devidos ajustes.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 272
Data de registro: 16 Jun 2005 22:53
Curtiu: 2 vezes
Mens.Curtidas: 32 vezes

Harbour++ - Informações, código-fonte e atualizações

Mensagempor marcosgambeta » 17 Jun 2022 06:47

As bibliotecas gtwvg, gtwvw e hbwin, do Harbour 3.4, foram adicionadas ao Harbour++. Para não entrarem em conflito com as versões que vieram do Harbour 3.2, receberam o sufixo "34" ficando assim:

gtwvg
gtwvg34
gtwvw
gtwvw34
hbwin
hbwin34

Desta forma, quem desejar migrar do Harbour 3.4 para o Harbour++ poderá usar as bibliotecas com o sufixo "34", conforme a necessidade.

A compilação delas no Harbour++ ocorreu sem problemas, sendo necessário apenas alguns ajustes nos scripts e nos testes. Caso faça testes e encontre algum problema, basta informar que será revisado o mais breve possível. Apenas se lembre de que não é possível combinar a versão vinda do Harbour 3.2 com a vinda do Harbour 3.4. Ou seja, nada de gtwvg + gtwvg34 ou gtwvw + gtwvw34 ou hbwin + hbwin34 na mesma aplicação.

Conforme o tempo permitir, poderei responder as dúvidas que forem colocadas na seção sobre o Harbour:

http://www.pctoledo.com.br/forum/viewforum.php?f=4

Visto que a seção acima já é usada para Harbour 3.2/3.4 e xHarbour, acredito que não haverá nenhum problema se for usada também para o Harbour++. Apenas se lembre de informar que a dúvida é relacionada com o Harbour++.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 272
Data de registro: 16 Jun 2005 22:53
Curtiu: 2 vezes
Mens.Curtidas: 32 vezes

Harbour++ - Informações, código-fonte e atualizações

Mensagempor mmarcondes » 17 Jun 2022 17:39

Estou acompanhando suas mensagens com bastante empolgação, não sou um excelente programador mas gosto de programar.
Só estou com uma dúvida, o que você vai usar para criar sistemas gráficos " for Windows " ? qual lib ?
mmarcondes
Usuário Nível 1

Usuário Nível 1
 
Mensagens: 44
Data de registro: 02 Jul 2021 15:06
Cidade/Estado: witmarsum
Curtiu: 20 vezes
Mens.Curtidas: 1 vez

Harbour++ - Informações, código-fonte e atualizações

Mensagempor marcosgambeta » 18 Jun 2022 08:44

mmarcondes escreveu:Estou acompanhando suas mensagens com bastante empolgação, não sou um excelente programador mas gosto de programar.
Só estou com uma dúvida, o que você vai usar para criar sistemas gráficos " for Windows " ? qual lib ?


Se você se refere ao meu uso pessoal, eu não desenvolvo mais sistemas comerciais para terceiros. Desenvolvo somente para uso pessoal/interno. Meu foco está no desenvolvimento de ferramentas de programação para serem usadas por outros desenvolvedores. O Harbour++ é um alicerce para outros projetos que estão em desenvolvimento, incluindo bibliotecas para desenvolvimento usando Qt Framework e GTK+. Para desenvolvimento gráfico, minha preferência é o Qt por ser multiplataforma. Se fosse somente para uso no Windows, provavelmente usaria a HWGUI.

Estas adaptações que estão sendo feitas tem por objetivo facilitar a adoção do Harbour++ por outros desenvolvedores. Mesmo quem já usa HWGUI ou MiniGUI Extended, por exemplo, poderá adotar o Harbour++ se assim desejar. Para ficar mais claro, estou fazendo para outros usarem, mas não necessariamente para o meu uso.

Mas falando ainda sobre o meu uso pessoal/interno, o que mais uso aqui ainda é console (gtwvt, por exemplo) e cgi's (gtcgi).

Espero ter respondido corretamente sua dúvida, mas se ainda precisar de mais informações basta perguntar.
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 272
Data de registro: 16 Jun 2005 22:53
Curtiu: 2 vezes
Mens.Curtidas: 32 vezes

Harbour++ - Informações, código-fonte e atualizações

Mensagempor marcosgambeta » 02 Jul 2022 14:59

Resolvi fazer uma experiência com a versão da HMG Extended lançada recentemente e o Harbour++. Quem quiser acompanhar, basta seguir o repositório abaixo:

https://github.com/harbourplusplus/hmgextpp

O código-fonte original não compila diretamente em C++. Foram necessários diversos ajustes e correções para passar na compilação. mas enfim foi possível compilar o núcleo e executar alguns testes.

Estando com o Harbour++ compilado, basta seguir estes passos:

hbmk2 hmgextpp.hbp
cd tests
hbmk2 test1 ..\hmgextpp.hbc
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 272
Data de registro: 16 Jun 2005 22:53
Curtiu: 2 vezes
Mens.Curtidas: 32 vezes

Harbour++ - Informações, código-fonte e atualizações

Mensagempor JoséQuintas » 02 Jul 2022 19:03

Tudo isso funciona com mingw 7.3, ou precisa ser mais novo?
Como está seu conhecimento do github?
Consigo criar tarefas, e posso ajudar nisso: o github gerar tudo compilado pronto pra usar
Só ainda não peguei o jeito pro resultado ficar visível ao público, por enquanto fica visível só pro dono do repositório.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 18915
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 14 vezes
Mens.Curtidas: 1013 vezes

Harbour++ - Informações, código-fonte e atualizações

Mensagempor marcosgambeta » 04 Jul 2022 14:19

JoséQuintas escreveu:Tudo isso funciona com mingw 7.3, ou precisa ser mais novo?


De acordo com a documentação do GCC, o padrão C++11 é suportado de forma completa desde a versão 4.8.1. Teoricamente, o Harbour++ seria compatível com qualquer versão >= 4.8.1.

Mas vou testar a compilação com a versão 7.3 e depois informo o resultado. Acredito que não haverá nenhum problema.

https://gcc.gnu.org/projects/cxx-status.html#cxx11

JoséQuintas escreveu:Como está seu conhecimento do github?
Consigo criar tarefas, e posso ajudar nisso: o github gerar tudo compilado pronto pra usar
Só ainda não peguei o jeito pro resultado ficar visível ao público, por enquanto fica visível só pro dono do repositório.


Do GitHub, uso apenas os recursos de gerenciamento do código-fonte. Mas vou reservar um tempo para estudar estes outros recursos.

Para meu uso, a compilação precisa ser local mesmo, pois tenho de testar as mudanças no código-fonte em diferentes variações. Tomando como exemplo apenas o Windows:

. testar com MinGW e MSVC
. testar em 32-bit e em 64-bit
. testar com C++11, C++14, C++17, C++20, ...

E tem os compiladores C++ que estão na fila de pendências: compiladores da llvm.org (clang), da Embarcadero e da Intel (oneAPI).
Atenciosamente,
Marcos Antonio Gambeta
marcosgambeta
Usuário Nível 3

Usuário Nível 3
 
Mensagens: 272
Data de registro: 16 Jun 2005 22:53
Curtiu: 2 vezes
Mens.Curtidas: 32 vezes

Harbour++ - Informações, código-fonte e atualizações

Mensagempor JoséQuintas » 04 Jul 2022 14:53

marcosgambeta escreveu:Para meu uso, a compilação precisa ser local mesmo, pois tenho de testar as mudanças no código-fonte em diferentes variações. Tomando como exemplo apenas o Windows:
. testar com MinGW e MSVC
. testar em 32-bit e em 64-bit
. testar com C++11, C++14, C++17, C++20, ...
E tem os compiladores C++ que estão na fila de pendências: compiladores da llvm.org (clang), da Embarcadero e da Intel (oneAPI).


Mais um motivo pra usar o github, apesar que testaria apenas compilação.

Como funciona:

o github te deixa máquinas à vontade, um ambiente pra ser usado via batch/power shell/etc.
Pode escolher o sistema operacional, pra CADA TAREFA.
Tanto faz quantas máquinas vai usar, público é grátis, particular é por tempo/tamanho com limite.

Por default é uma máquina com ferramentas pré-instaladas, como o MSYS2 sempre atualizado, mingw última versão.
A máquina SEMPRE vém assim, LIMPA, e com esses softwares pré-instalados

Com as ferramentas pré-instaladas pode configurar o uso, e até baixar outras coisas de outros lugares.

Então o workflow/batch vai configurar a máquina, baixar/instalar ferramentas, fazer o que o workflow mandar.

Se criar algum programa de teste, pode incluir no workflow pra que ele execute o programa de teste.

Você NÃO tem acesso à máquina, mas pode acompanhar tudo que acontece on-line, ou ver depois.
Pode configurar pra executar seu workflow diariamente, mensalmente, a cada commit, ao clicar no link, etc. até todas as opções de uma vez.

Se for pra testar compilações, passa a ter isso automático.

Que eu me lembre, tem máquinas Windows e Ubuntu, e pode até definir uma versão anterior, ou deixar o default pra última versão (ou próxima, se existir).
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 18915
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 14 vezes
Mens.Curtidas: 1013 vezes

Harbour++ - Informações, código-fonte e atualizações

Mensagempor JoséQuintas » 04 Jul 2022 15:03

Aqui faço uso de outro repositório, onde salvei o mingw0703 como resultado de outro workflow.
De certa forma, isso sai do uso normal do github, mas criaram ferramenta pra ajudar.

https://github.com/JoseQuintas/addons/blob/main/.github/workflows/hb34_0703.yml

aqui faço uso desse anterior + mingw pra compilar várias coisas.

https://github.com/JoseQuintas/addons/blob/main/.github/workflows/hb34pack.yml

Nem é um bicho de 7 cabeças, fez o primeiro faz qualquer um.
Se fosse com o mingw pré-instalado, seria menor, porque não precisaria pegar de outro lugar.

Agora começando a procurar sobre como salvar releases automaticamente.
Na prática, eu e milhares de outros usuários kkkk
O ZIP do workflow resolveria, se ficasse disponível ao público, mas fica visível só pro dono.
Pesquisei na internet e fazem anos que o pessoal pede esse recurso visível ao público.
José M. C. Quintas
Harbour 3.4, mingw, gtwvg, multithread, dbfcdx, ADO+MySql, hbnetio, PNotepad
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"
Avatar de usuário

JoséQuintas
Colaborador

Colaborador
 
Mensagens: 18915
Data de registro: 26 Fev 2007 11:59
Cidade/Estado: São Paulo-SP
Curtiu: 14 vezes
Mens.Curtidas: 1013 vezes




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 3 visitantes


Ola Amigo, espero que meu site e forum tem lhe beneficiado, com exemplos e dicas de programacao.
Entao divulgue o link da Doacao abaixo para seus amigos e redes sociais ou faça uma doacao para o site forum...
MUITO OBRIGADO PELA SUA DOACAO!
Faça uma doação para o forum
cron
v
Olá visitante, seja bem-vindo ao Fórum Clipper On Line!
Efetue o seu login ou faça o seu Registro