trop.in/rde/internship

List of project ideas for internship. For more information drop a message to rde-discuss.

Debugger for Guile

The current guile implementation lacks the tooling for debugging programs. The goal of this project is to implement API for accessing stack, local variables, be able to re-run the program from exception point and later integrate it with Guile Ares/Arei IDE, so all this functionality is available via graphical or textual user interface. At the moment we are considering DAP and nREPL implementations, so the priliminary research and analysis on this topic will be required.

Keywords: Lisp, Scheme, nREPL, CPS, Compilers, Macros, Emacs, DAP

Effort: 2-3 months

Mentors: Andrew Tropin

VSCode extensions for Guile IDE

Ares/Arei Guile IDE consist of two parts, which communicates via nREPL protocol: backend (for all guile-related havy lifting) and fronted (for convinient access to all the functionality provided by Ares). At the moment of writing there only one feature complete client written in Emacs Lisp and there are some progress on NeoVim integration. To make IDE accessible to a wider audience the next step will be the implementation of VSCodium frontend.

The best case scenario is to implement the extension in Guile Hoot (Guile compiled to WebAssembly), the fallback scenario is to do it in JavaScript. JavaScript knowledge is required, the experience with wasm, Scheme, Parsing/Tree-sitter, Calva and VSCode extensions API will be a bonus. For the internship only eval and load-path related operations have to be implemented, other operations are optional.

Keywords: Lisp, Scheme, nREPL, JavaScript, TypeScript, WebAssembly, Tree-sitter.

Effort: 2-3 months

Mentors: Andrew Tropin

Jupyter protocol for Guile Ares RS

Implementing jupyter protocol will allow to use non-nREPL clients for accessing functionality provided by Ares. It's is especially important for Scientific and Research communities, which are very familiar Jupyter Notebooks and its workflow, so they can use the same tools for working with Guile, Guix and RDE.

Keywords: Lisp, Scheme, Jupyter, Python, ZeroMQ.

Effort: 2-3 months

Mentors: Nicolas Graves

Hoot integration for Guile Ares RS

A WebAssembly [re-]implementation of nREPL server (or more likely integration with existing one by adding separate hoot evaluation operations), which will allow to do live modification of the programs running in the browser and other WebAssembly runtimes. This will provide a full-stack guile tooling and probably some not yet explored capabilities beyond that. ClojureScript and nREPL experience will be a bonus for this project.

Effort: 3 months

Keywords: Lisp, Scheme, nREPL, JavaScript, WebSockets, WebAssembly.

Mentors: Andrew Tropin

JavaScript Transitive Pacakage Manager for Guix

A set of APIs for generating Guix packages out of package-lock.json file and applying required transformation for adding native dependencies or other necessary attributes missing in package-lock.

In a spirit similiar to Poetry2Nix, this tool will provide an easy and quick way to build environments and packages using guix based on already existing infrastructure of the project, without manually writing guix package definitions.

Effort: 2-3 months

Keywords: Lisp, Scheme, npm, JavaScript, Nix.

Mentors: Andrew Tropin

arei-guix.el and arei-rde.el

Convinient Emacs UI for accessing information about Guix services and packages, RDE features, navigation to the source code of corresponding modules. Exposing API via Emacs Lisp functions for building packages and other lowerable objects, exploring the content of operating-system and home-environment records.

Effort: 1-2 months

Keywords: Lisp, Scheme, nREPL, Emacs.

Mentors: Andrew Tropin, Nicolas Graves

Schemas Specification library for Guile

A tool similiar to Metosin's malli library, for describing the shape of the data, validating and destructuring it. In the future this library can be used as a foundation for run-time contract system, compile time type system, for generation of sample data conforming to particular specification for testing and other purposes. The good knowledge of Clojure Spec and malli is a prerequisite.

Effort: 3 months

Keywords: Lisp, Scheme, Clojure, Immutable Data Structures, Reader Macros.

Mentors: Andrew Tropin

Tree-sitter based markup parsers for Guile

A conventional guile library for parsing different markup formats. Current parsers are either lacking at all or not compelete and unmaintained, which makes it a huge pain to programmatically deal with so commonly used file formats. The primary output of the project will be Org-mode, Texinfo and Markdown parsers that will be producing SXML, which can be used in static site generators, web servers and documentation tools and corressponding guix package, which will contain all needed native dependencies.

Effort: 2-3 months

Keywords: Lisp, Scheme, Tree-sitter.

Mentors: Andrew Tropin

External Process Library for Guile

A library for spawning and controlling external process and pipelines. There is a (ice-9 popen), which is a low level library for spawning process and handling input/output stream, however it too low level and has a lot of missing functionality and what is more important it leads to deadlock some very basic cases. The goal of this project is to produce a library with user friendly interface for spawning and controlling external processes and their input/output/error streams similiar to babashka/process.

Effort: 1 months

Keywords: Lisp, Scheme, Unix, Threads.

Mentors: Andrew Tropin