Hazel es un entorno de programación funcional en vivo arraigado en los principios de la teoría del tipo. Puede encontrar los documentos relevantes y más motivación en el sitio web de Hazel.
Puede probar Hazel Online: la rama de Dev es la rama principal en este momento. Se puede acceder a todas las demás ramas que han sido empujadas a GitHub y las construcciones con éxito también se puede acceder a:
https://hazel.org/build/<branch_name>
Si ya tiene ocaml versión 5.2.0 y al menos la versión 2.0 de opam instalada, puede construir Hazel ejecutando los siguientes comandos.
git clone [email protected]:hazelgrove/hazel.gitcd hazelmake depsmake dev Para ver a Hazel, debe servirlo en Localhost para el desarrollo (no puede ejecutarlo desde un file:/// URL debido a las restricciones del navegador en los trabajadores web de por ejemplo).
Si tiene python3 en su ruta, puede usar el servidor Python a través de make serve , luego navegue a http://0.0.0.0:8000/ en su navegador.
De lo contrario, ejecute make echo-html-dir , que se eco del directorio que debe servirse utilizando algún otro servidor de su elección.
Si no está familiarizado con ocaml u opam , no los tenga instalados, o simplemente se quede atascado, le recomendamos que siga las instrucciones de instalación paso a paso contenidas en Install.md.
Hazel está escrito en razonml, que es un azúcar sintáctico sobre Ocaml. Este enlace le permite escribir OCAML y ver cuál es la sintaxis de Razón correspondiente: https://Rasterml.github.io/en/try.
Esto es útil si está intentando descubrir la sintaxis razonable para algo para lo que conoce la sintaxis OCAML.
También puede convertir entre la sintaxis OCAML y ReasonML en el terminal usando refmt en el terminal. Consulte refmt --help para los detalles.
La mayoría de nuestro equipo usa el código Visual Studio (VS Código) para escribir código. Si usa el código VS, aquí hay algunas extensiones que podrían ser útiles.
Esta extensión proporciona un soporte completo para editar el código fuente de RauiseML y las herramientas relevantes:
Debido a los malos errores de análisis de la razón, los paréntesis desequilibrados pueden ser difíciles de encontrar. Las siguientes extensiones ayudan con eso.
Además de estas extensiones, habilitar la barra de pan rallado puede facilitar la navegación de una gran base de código. Hay múltiples formas de hacer que la barra de migas de pan sea visible:
Ctrl+Shift+P (MacOS: Cmd+Shift+P ), comience a escribir breadcrumbs y seleccione View: Toggle Breadcrumbs del menú desplegable para activar y desactivar las migas de pan.Ctrl+Shift+. Para comenzar la navegación de migas de pan.Si disfruta de su Vim Binding y Vim Configuración, lo siguiente puede ayudarlo a establecer su Razón IDE en Neovim.
Si usa VIM, le recomiendo que cambie a Neovim, ya que tiene un mejor soporte para múltiples hilos y, por lo tanto, es menos probable que lo bloquee cuando esté programando.
Para configurar el LSP (Protocolo del servidor de idiomas), debe configurar su cliente de idiomas para NEOVIM y Servidor de idiomas para OCAML.
Después de instalar los dos anteriores, es posible que desee copiar lo siguiente en su archivo de configuración Neovim. (suponiendo que npm tenga servidor de lenguaje OCAML instalado en /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>
Hazel se compila en JavaScript para el navegador web a través del compilador js_of_ocaml .
Aunque los objetivos make se proporcionan como una conveniencia, principalmente se traducen en comandos dune .
Invocar make EN LIMIO es equivalente a invocar make dev . Con estos comandos pasamos banderas adicionales a js_of_ocaml que causan la inserción de comentarios que mapean las ubicaciones en las JS generadas en las ubicaciones en los archivos de origen. Esto es útil para fines de depuración.
make dev también los archivos de origen de la razón de los formatos automáticos con refmt (para esto es para el alias @src/fmt ). Esto garantiza el código de todos los contribuyentes sigue el mismo estilo.
Los comandos make dev y make release hacen tres cosas:
menhir ._build/default/src/hazelweb/www/hazel.js ) usando js_of_ocaml . Para una experiencia de desarrollo más suave, use make watch para observar automáticamente los cambios de archivo. Esto puede requerir la instalación de fswatch (ver Install.md). También puede ejecutar make watch-release para construir continuamente la compilación de lanzamiento (lleva más tiempo por compilación).
Para obtener una construcción limpia, es posible que deba:
Clonar el repositorio (si no lo ha hecho) e ingrese la raíz del proyecto de su proyecto Hazel clonado.
git clone [email protected]:hazelgrove/hazel.git
cd hazel Configurar un entorno OCAML local específico para el proyecto y compilar. Si ha configurado un entorno OCAML local (hay un directorio llamado _opam ), es posible que primero desee eliminarlo.
# opam switch remove ./
opam switch create ./ 5.2.0
eval $( opam env )
make deps
makeEsto establece un entorno Ocaml independiente en el proyecto clonado, independientemente del que envió en su directorio de inicio. Esto le permite alternar las dependencias o los cambios en las dependencias de prueba, sin afectar los proyectos OCAML existentes.
Nota: puede ver la siguiente advertencia al 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
Esto se debe a un problema de biblioteca aguas arriba y no causa problemas con Hazel:
OcamlPro/EZJS_IDB#1
Puede imprimir en la consola del navegador utilizando la función estándar print_endline . Este es probablemente el método más fácil en este momento. La mayoría de los tipos de datos en la base de código tienen algo como [@deriving (show({with_path: false}), sexp, yojson)] en ellos. Esto genera funciones auxiliares para imprimir y serializar estos datos. Para un tipo llamado t , la función show se nombrará show . De lo contrario, para un tipo llamado algo más como q , será show_q .
Los mapas de origen para js_of_ocaml deben configurarse al hacer localmente con el perfil de desarrollo ( make ). Esto se configura utilizando las estrofas Env presentes en los archivos dune para cada directorio de nivel superior.
Dado que los mapas de origen se generan las herramientas del desarrollador del navegador deben mostrar el código de razón en el depurador y el árbol de origen. Las trazas de pila también deben incluir números de línea de razón.
Si Hazel está colgando de carga o cuando realiza ciertas acciones, puede cargar en modo de depuración agregando #debug a la URL y la recarga. A partir de ahí, tiene algunos botones que cambiarán la configuración o restablecerán el almacenamiento local. Actualice sin la bandera #debug y esperamos que pueda resolver la situación desde allí.
Puede ejecutar todas las pruebas unitarias ubicadas en test ejecutando make test .
Las pruebas unitarias se escriben utilizando el marco Alcotest.
La cobertura del código es proporcionada por Bisect_PPX. Para recopilar estadísticas de cobertura de las pruebas ejecutando make coverage . Después de generar estadísticas de cobertura, la ejecución de la ejecución make generate-coverage-html generará una página web local en _coverage/index.html que se puede ver para ver la cobertura de línea por módulo.
Cuando empuja su rama al repositorio principal hazelgrove/hazel , tenemos una configuración de acción GitHub (consulte .github/workflows/deploy_branches.yml ) que construirá esa rama (en modo release ) y la implementará en la URL https://hazel.org/build/<branch name> , suponiendo que la construcción suceda.
Por lo general, toma aproximadamente 2 minutos si el caché de entorno de construcción golpea, o más de 20 minutos si no. Puede ver el estado de la pestaña Build en la pestaña Acciones en GitHub.
Las construcciones antes de julio de 2024 se archivan en https://hazel.org/build/<branch name> .
Nota: Si se necesita realizar otro archivo, asegúrese de volver a desplegar las siguientes ramas manualmente, ya que nos referimos a ellos en varios materiales públicos (sitios web y artículos publicados):
Levelits de desarrollo