Hazel é um ambiente de programação funcional ao vivo enraizada nos princípios da teoria do tipo. Você pode encontrar os documentos relevantes e mais motivação no site da Hazel.
Você pode experimentar a Hazel online: a filial do Dev é a filial principal no momento. Todos os outros ramos que foram empurrados para o Github e as construções com sucesso também podem ser acessados em:
https://hazel.org/build/<branch_name>
Se você já possui a versão 5.2.0 ocaml e pelo menos a versão 2.0 do opam instalada, poderá criar a Hazel executando os seguintes comandos.
git clone [email protected]:hazelgrove/hazel.gitcd hazelmake depsmake dev Para ver Hazel, você deve servir, no Host para o desenvolvimento (você não pode executá -lo de um file:/// URL devido a restrições do navegador em EG Works Workers.)
Se você tiver python3 no seu caminho, poderá usar o servidor Python via make serve , em seguida, navegue para http://0.0.0.0:8000/ no seu navegador.
Caso contrário, Run make echo-html-dir que ecoará o diretório que precisa ser servido usando algum outro servidor de sua escolha.
Se você não estiver familiarizado com ocaml ou opam , não os instale ou fique preso, recomendamos que você siga as instruções de instalação passo a passo contidas no install.md.
Hazel está escrito em RazãoML, que é um açúcar sintático no topo da OCAML. Este link permite que você digite o OCAML e veja o que a sintaxe RAINCOML correspondente é: https://reonml.github.io/en/try.
Isso é útil se você estiver tentando descobrir a sintaxe do RazãoML para algo para o qual você conhece a sintaxe da OCAML.
Você também pode converter entre o OCAML e a sintaxe do RAOTEML no terminal usando refmt no terminal. Consulte refmt --help para obter os detalhes.
A maioria da nossa equipe usa o Código do Visual Studio (vs Code) para escrever código. Se você usa o código VS, aqui estão algumas extensões que podem ser úteis.
Esta extensão fornece suporte total para editar o código -fonte do RAOTML e as ferramentas relevantes:
Devido aos maus erros de análise da razão, podem ser difíceis de encontrar parênteses desequilibrados. As seguintes extensões ajudam com isso.
Além dessas extensões, ativar a barra de farinha de rosca pode facilitar a navegação de uma base de código grande. Existem várias maneiras de tornar visíveis a barra de rosca:
Ctrl+Shift+P (MacOS: Cmd+Shift+P ), comece a digitar breadcrumbs e selecione View: Toggle Breadcrumbs do menu suspenso para alternar e desativar as migalhas de pão.Ctrl+Shift+. Para iniciar a navegação por migalhas.Se você gostar da sua ligação do VIM e da configuração do VIM, o seguinte poderá ajudá -lo a configurar seu motivo IDE em Neovim.
Se você usa o VIM, recomendo que você mude para o Neovim, pois ele tem um suporte melhor para o multi-thread e, portanto, menos provável que o bloqueie quando estiver programando.
Para configurar o LSP (Protocolo do Servidor de Idiomas), você precisa configurar seu cliente de idioma para Neovim e Language Server para OCAML.
Depois de instalar os dois anteriores, convém copiar o seguinte para o seu arquivo de configuração Neovim. (Supondo que npm tenha o servidor de língua ocaml instalado em /usr/bin )
let g:LanguageClient_serverCommands = {
'ocaml': ['/usr/bin/ocaml-language-server', '--stdio'],
'reason': ['/usr/bin/ocaml-language-server', '--stdio']
}
" LanguageClient-neovim
nnoremap <F5> :call LanguageClient_contextMenu()<CR>
" Or map each action separately
nnoremap <silent> K :call LanguageClient#textDocument_hover()<CR>
nnoremap <silent> gd :call LanguageClient#textDocument_definition()<CR>
nnoremap <silent> gr :call LanguageClient#textDocument_references()<CR>
nnoremap <silent> gf :call LanguageClient#textDocument_formatting()<cr>
nnoremap <silent> <F2> :call LanguageClient#textDocument_rename()<CR>
A Hazel é compilada em JavaScript para o navegador da Web através do compilador js_of_ocaml .
Embora make alvos sejam fornecidos como uma conveniência, eles se traduzem principalmente em comandos dune .
Invocar make por si só é equivalente a invocar make dev . Com esses comandos, passamos sinalizadores adicionais para js_of_ocaml que causam a inserção de comentários que mapeiam os locais nos JS gerados nos locais nos arquivos de origem. Isso é útil para fins de depuração.
make dev também os arquivos de origem dos formatos automáticos usando refmt (é para isso que serve o alias @src/fmt ). Isso garante que o código de todos os colaboradores siga o mesmo estilo.
Os comandos make dev and make release fazem três coisas:
menhir ._build/default/src/hazelweb/www/hazel.js ) usando js_of_ocaml . Para uma experiência de desenvolvimento mais suave, use, make watch para assistir automaticamente para alterações de arquivo. Isso pode exigir a instalação fswatch (consulte o install.md). Você também pode executar make watch-release para criar continuamente a construção de liberação (leva mais tempo por compilação).
Para obter uma construção limpa, pode ser necessário:
Clone o repositório (se você não tiver) e insira a raiz do projeto do seu projeto Hazel clonado.
git clone [email protected]:hazelgrove/hazel.git
cd hazel Configure um ambiente OCAML local específico para o projeto e compile. Se você configurou um ambiente OCAML local (existe um diretório chamado _opam ), convém removê -lo primeiro.
# opam switch remove ./
opam switch create ./ 5.2.0
eval $( opam env )
make deps
makeIsso configura um ambiente de OCAML independente no projeto clonado, independentemente da que você enviou no diretório doméstico. Isso permite que você alterne as dependências ou as alterações de dependências de teste, sem afetar os projetos de OCAML existentes.
Nota: Você pode ver o seguinte aviso ao construir:
Warning 58 [no-cmx-file]: no cmx file was found in path for module Ezjs_idb, and its interface was not compiled with -opaque
Isso se deve a um problema da biblioteca a montante e não causa problemas com Hazel:
OCAMLPRO/EZJS_IDB#1
Você pode imprimir no console do navegador usando a função print_endline padrão. Este é provavelmente o método mais fácil agora. A maioria dos tipos de dados na base de código tem algo como [@deriving (show({with_path: false}), sexp, yojson)] neles. Isso gera funções auxiliares para imprimir e serializar esses dados. Para um tipo chamado t , a função show será nomeada show . Caso contrário, para um tipo chamado outra coisa como q , ele será show_q .
Os mapas de origem para js_of_ocaml devem ser configurados ao fazer localmente com o perfil de desenvolvimento ( make ). Isso é configurado usando as estrofes ENV presentes nos arquivos dune para cada diretório de nível superior.
Como os mapas de origem são as ferramentas de desenvolvedor de navegador geradas devem mostrar o código da razão no depurador e na árvore de origem. Os rastreamentos de pilha também devem incluir números de linha de raiva.
Se a Hazel estiver pendurada na carga ou quando você executar determinadas ações, poderá carregar no modo de depuração anexando #debug ao URL e recarregando. A partir daí, você tem alguns botões que alterarão as configurações ou redefinirão o armazenamento local. Atualize sem a bandeira #debug e espero que você possa resolver a situação a partir daí.
Você pode executar todos os testes de unidade localizados em test , executando make test .
Os testes de unidade são gravados usando a estrutura Alcotest.
A cobertura do código é fornecida pelo bisect_ppx. Para coletar estatísticas de cobertura dos testes executados, make coverage . Depois que as estatísticas de cobertura forem geradas, a execução make generate-coverage-html gerará uma página da Web local em _coverage/index.html que pode ser visualizada para ver a cobertura da linha por módulo.
Ao empurrar sua filial para o principal repositório hazelgrove/hazel , temos uma configuração de ação do GitHub (consulte .github/workflows/deploy_branches.yml ) que construirá essa filial (no modo release ) e implantá -lo no URL https://hazel.org/build/<branch name> , assumindo.
Geralmente, leva cerca de 2 minutos se o cache do ambiente de construção acertar ou mais de 20 minutos, se não. Você pode visualizar o status da guia Build in the Actions no GitHub.
As construções antes de julho de 2024 são arquivadas em https://hazel.org/build/<branch name> .
Nota: Se outro arquivo precisar ser realizado, reimplante as seguintes filiais manualmente, pois nos referimos a eles em vários materiais públicos (sites e artigos publicados):
Dev Livelits