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: 270
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: 270
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: 270
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: 18906
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: 270
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: 18906
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: 270
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: 270
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: 19 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: 270
Data de registro: 16 Jun 2005 22:53
Curtiu: 2 vezes
Mens.Curtidas: 32 vezes




Retornar para Contribuições, Dicas e Tutoriais

Quem está online

Usuários vendo este fórum: Nenhum usuário registrado online e 1 visitante


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