Skip to content

GSoC 2022 Project ideas

Jeremie Vandenplas edited this page Feb 18, 2022 · 33 revisions

Introduction

The project ideas on this page are grouped by parent repository. Please familiarize yourself with each repository before exploring the ideas here.

Fortran Package Manager (fpm)

Version constraint resolution

See 2021 project idea

Local package repository

This project would entail designing and implementing a hosted repository of fpm packages for secure and persistent downloads. It would involve, but not limited to, ensuring that the package

  • is available, even if its upstream GitHub repository is moved or deleted
  • compiles and tests successfully
  • is secure, i.e. no malware was introduced

See also 2021 project idea

fpm-ize the Fortran ecosystem

This project would entail researching the Fortran library and application ecosystem (on GitHub and beyond) and collaborate with package maintainers on making their package fpm-compatible.

Tree shaking

Building a large dependency (such as stdlib, for example) is both slow and increases the size of the produced object and executable binaries. "Tree shaking" is an optimization technique commonly used in the JavaScript ecosystem. It allows a build system to exclude unused modules and procedures from dependencies. For example, if a small fpm project uses only optval() from stdlib_optval, fpm should only need to build stdlib_optval and stdlib_kinds (dependency of stdlib_optval). While initially perhaps negligible, this problem will become more apparent as the fpm ecosystem grows and more large packages become fpm-compatible.

Mentors: Laurence Kedward (@lkedward)

Fortran Standard Library (stdlib)

OS integration: File system

Currently, file system operations such as listing contents of directories, traversing directories, and similar, are restricted to 3rd party libraries and compiler extensions that are platform-specific and not portable. This project will entail designing and implementing a cross-platform solution for file system operations.

Related issues:

  • stdlib#201: File system operations
  • stdlib#220: API for file system operations, directory manipulation

WIP implementation:

Mentors:

OS integration: Subprocesses

Cross-platform solution to abstract POSIX and Windows API for creating subprocesses.

Related issue:

Discourse thread:

Mentors:

Sparse matrices

Implementing a standardized API for procedures to handle (COO and CSR) sparse matrices. Both non-OO low level API and OO API should be implemented.

Related:

WIP implementation:

Mentors:

LFortran (lfortran)

Compile stdlib, fpm, and other Fortran-lang projects

In this project, the student would work on implementing LFortran features toward successfully compiling stdlib, fpm, and other Fortran-lang projects.

The project can be any one of the following,

  1. Compile with --symtab-only mode (Recommended for 18 hours/week sized projects)
  2. Compile with normal lfortran i.e., without using any extra flags - stdlib already compiles with --symtab-only mode (though stdlib/tests don't work as of now but other than that everything works). For compiling without any flags, the work is in progress. This gist contains instructions to find out the current state. You can do something similar for fpm and other Fortran-lang projects. Note that, it would be good to use a specific commit of stdlib, fpm through out the project, instead of always using the master/main branches. (Recommended for 36 hours/week sized projects. For stdlib we will consider 18 hours/week sized projects because, --symtab-only mode is already working to a great extent).
  3. Adding support to LLVM backend for stdlib - This cannot be done without significantly making progress on second idea (i.e., the above point). So, it is recommended for 36 hours/week sized projects.

Mentors - Gagandeep Singh (Gitlab - @czgdp18071)

Allow running Fortran in the browser

This project would entail working with LFortran, LLVM, Emscripten, and Webassembly to allow running Fortran in the browser.

  • use LLVM and Emscripten to compile Fortran code to Webassembly
  • create custom Webassembly backend for LFortran and compile LFortran itself to Webassembly

Parser + ASR (for F2PY)

Enhance the frontend parser to allow for more generic extensions and keywords. In particular, parsing the pyf or signature file format consumed by F2PY. This would mean that SciPy can be directly transformed to the ASR representation without a fixed form parser.

This also involves adding nodes to the ASR itself.

Mentors: Rohit Goswami (@HaoZeke)

Language Server

This project would be used to first serialize the ASR and then use it within a language server.

Other

Modernize one or more classic Fortran libraries ("PACKs") from Netlib

This project would involve modernizing one or more widely used classic Fortran libraries ("PACKs") from Netlib. Activities may include but not limited to

  • Writing a test suite
  • Documenting installation, API, how-to tutorials
  • Transitioning to maintenance under Fortran-lang on GitHub
  • Enabling building and running for major OSs via CI

See this Discourse thread for more info.

Port fortran-lang.org to Sphinx

This project would involve porting the Fortran-lang website from the current framework (Jekyll) to Sphinx+Myst parser for internationalization support and ease of maintenance.

Build or embed online playground for fortran-lang.org

An online (in-browser) Fortran playground on the landing page of fortran-lang.org would allow visitors to try out Fortran immediately, without having to install the compiler locally. There are different possible approaches:

  • Send source code to a server that compiles and runs the code and returns the output
  • Compile and run a subset of Fortran in the browser via Webassembly and Emscripten
  • Embed a reduced version of an LFortran Jupyter notebook
  • Embed an existing playground like Repl.it or Compiler Explorer

Get fortran-lang/minpack to be used in SciPy

fortran-lang/minpack #14

The participant would work with Fortran-lang and SciPy teams toward implementing fortran-lang/minpack in SciPy.