-
Notifications
You must be signed in to change notification settings - Fork 68
GSoC 2022 Project ideas
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)
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
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.
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.
Fortran Standard Library (stdlib)
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:
Cross-platform solution to abstract POSIX and Windows API for creating subprocesses.
Related issues:
- stdlib#22: Interface to POSIX I/O API
- stdlib#308: Subprocesses and Multiprocessing
Discourse thread:
Mentors:
LFortran (lfortran)
In this project, the student would work on implementing LFortran features toward successfully compiling stdlib, fpm, and other Fortran-lang projects.
This project would entail working with LFortran, LLVM, Emscripten, and Webassembly to allow running Fortran in the browser.
This project would involve modernizing one or more widely used classic Fortran libraries ("PACKs") from Netlib.
See this Discourse thread for more info.
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.
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