blob: 4f58ae334b1e0afcd43995977822c62f47349c64 [file] [log] [blame] [view] [raw]
# Compiler Explorer Road Map
CE was started in 2012 to serve my needs at [my previous employer](https://drw.com) to show how
C++ constructs translated to assembly code. It started out as a `tmux` session with `vi` running in one
pane and `watch gcc -S foo.cc -o -` running in the other. Since then, it became a public website
serving the C++, Rust, Go, Haskell, Ispc, D, Swift and Pascal communities and performs around 50,000 compilations per day.
This document is an attempt to capture thoughts on the future direction of Compiler Explorer.
## Areas to improve
### Mobile client support
CE's UI doesn't work well with mobile clients. The [editor](https://github.com/Microsoft/monaco-editor) doesn't support mobile clients, and the
layout doesn't lend itself well to small screens.
Ideas for improving mobile support include automatically folding up all the panes into a single tab upon
detection of a mobile client. This would require a bunch of fixes in the
underlying [UI library](http://golden-layout.com) as this doesn't properly work with mobile and tabs.
Perhaps a read-only simplified view would work better: the main reason one brings up the CE website is to
look at tweeted links rather than author novel content.
### UI improvements
The UI has a number of things that need improving:
- [ ] Handling the loss of data if one has a work-in-progress CE window open and then clicks another CE link.
### Execution support
Another big ticket item is to allow executing of the user's code. This is fraught with security issues, and
brings up a number of UI and API considerations. Compiling code every time to execute with different params
seems wasteful, so caching seems good; but in a multi-instance setup a shared cache would be needed. Perhaps
a backend system that caches the executables (and makes them downloadable; at least for some compilers where
license allows), and stores the binaries in ephemeral, shared storage. This same backend system could also
be used to store code, and could be part of a whole new way of sending and sharing code (if made permanent
storage).
### Saved state storage
In April 2018, Google announced they were mothballing goo.gl, which is the URL shortening service Compiler Explorer ultimately uses to store its current data. As such a solution to stored state - whether as part of the execution support, or independent of it - is required anyway.
### Support more compilers
Most of the open tickets are to do with adding new compilers, or fixing issues with existing compilers.
Continuing to add more compilers and make it easier for others to submit PRs to add new compilers is
very important. A [separate document](docs/AddingACompiler.md) explains how to add a compiler.
## Tensions
There's an inherent tension between the standalone, run-it-yourself version of CE and the scalable, AWS-backed
CE instance. Care must be taken to keep the standalone version usable.
## Priorities
Above all, the priority is to keep the main CE site up, stable and dependable.
That also means that URLs should live forever once they are created
## Non-goals
CE will remain ad-free, open-source and non-commercial. There's no plans at all to add "freemium" content,
despite the Patreon site where folks can help support the cost of running the servers.
## 2018 goals
With all this in mind, the tentative goals for 2018 are:
- [ ] Replace goo.gl with our own storage solution. ([Project Link](https://github.com/mattgodbolt/compiler-explorer/projects))
- [ ] Design an API that can handle remote code execution and download needs
- [ ] Implement remote execution UIs
These goals will be refined as time ticks on.