Author/s: Ramiro Checa-Garcia
Language: es | Translations:
computing
ocamllinks

Estas semanas he estado aprendiendo otros aspectos de OCaml sin escribir nada aquí. Por una parte he aprendido a usar librerías C dentro de OCaml (de un modo básico) y por otra parte he desarrollado una aplicación útil para mi trabajo que utiliza varios recursos también más avanzados de OCaml (ppx, librerías cmdliner y yojson). Pero antes de explicar estos temas me gustaría escribir acerca de los recursos para aprender OCaml que he encontrado.

Creo que lo más importante a responder es cuando uno se siente cómodo y no frustrado programando en OCaml. En mi caso al principio había cierta frustración: errores con los tipos, falta de conocimiento de la librería estándar... Yo diría que, sino tienes experiencia con otros lenguajes funcionales (por aquello de entender que significa signature y como razonar con este concepto) o amplia experiencia con otros lenguajes te puede llevar semanas. Sin embargo, un día empiezas tu proyecto y te das cuenta que sabes como hacer todo de modo natural (sin tener que consultar cada paso en foros o manuales), y como crear funciones adecuadas y estructura el código. Aun no me siento tan ágil como en Python, pero empiezo a saber entender los errores y desarrollo ideas con cierta soltura.

Aprendiendo lo básico y lo intermedio

Para esto creo que los tutoriales de la página oficial de OCaml son adecuados, mientras que el libro Real World OCaml diría que intermedio (en el sentido de que tiene también conceptos más avanzados) pero la parte inicial puede ser usada para aprender OCaml. Mi recomendación es resolver problemas prácticos y volver de vez en cuando a ellos conforme se tiene más conocimiento. En poco tiempo, el manejo de strings, listas, ficheros, tipos se convierte en algo natural.

OCaml y las ciencias de computación

Una cosa que me gusta de los recursos de OCaml es muchos te enseñan también conceptos de ciencias de la computación. Por ejemplo, el libro sobre Unix en OCamlhttps://ocaml.github.io/ocamlunix/, te acaba enseñando también Unix junto con OC aml. Y con Real World OCaml también aprendes sobre manejo de memoria, compiladores, y algo de structuras de datos de una manera suave. El libro OCaml Programming: Correct + Efficient + Beautiful también te enseña aspectos que van mas allá de OCaml. Creo que disfruto en este momento algo más con Real World OCaml salvo porque algunos contenidos esta muy orientados a uso de Core en lugar de la librería estándar.

Librerías básicas: OCaml viene con una librería estándar que personalmente me parece adecuada para empezar con OCaml y para muchos proyectos con este lenguaje, pero hay alternativas. Un resumen en ingles esta en Standard Libraries. Las librerías Base y Core están desarrolladas por Jane-Street (una compañía que usa OCaml) y son las que usa el libro Real World OCaml.

Usando C en nuestros programas OCaml

Para esto recomiendo empezar con el capítulo sobre esto en Real World OCaml. Hay también un capítulo en el manual oficial de OCaml. Ambos ofrecen aproximaciones diferentes. El manual oficial ofrece una explicación más básica y densa de como proceder a crear bindings (enlaces) a librerías en C, y requiere saber OCaml, C y una idea de como funciona el manejo de memoria en ambos lenguajes. En el caso de Real World OCaml se basan en la librería ctypes que permite simplificar el proceso de modo que no es necesario crear esos bindings de modo manual y una parte importante del proceso es más automática (lo malo es que personalmente el libro Real World OCaml cubre solo unos pocos ejemplos/casos y la documentación de la librería ctypes para mi nivel resulta un poco confusa). También Tsoding tiene en Twitch algunos videos en que implementa C-bindings en OCaml (todo en inglés), es interesante escucharlo. Tsoding utiliza la aproximación del manual oficial, ya que el conoce ampliamente C y el manejo de memoria en OCaml, y enlaza con una librería de representación grafica en C.

Usando Owl

Aquí tienes dos enlaces principales: - El tutorial para cuestiones prácticas - El libro que explica el diseño interno de la librería Architecture of Advanced Numerical Analysis Systems

Luego el API de Owl puede ser útil, pero necesitaras cierta base previa coin OCaml para no sentirse un poco frustrado.

Otros enlaces

Este artículo lo incrementaré poco a poco con más información.