Skip to content
ylluminate edited this page Dec 13, 2017 · 29 revisions

This roadmap defines the things that we want to have in the language and plan to do.

Language

Stuff that has to do with the language syntax, semantic and runtime.

Concurrency

Add multithreading support, so fibers can run on multiple threads. Ongoing efforts on branch thread-support.

Windows support

Add support for compiling and running on Windows platforms, implementing the required changes in both the languages and the standard library. Ongoing efforts on PR 3582.

WebAssembly (WASM) support

Implement support for running Crystal on the web via WebAssembly (WASM). Some discussion has been started here in order to start feeling through what will be needed for this. This will be particularly useful for web frameworks such as Amber, Lucky and others who could present an isomorphic platform built entirely around Crystal or those simply wanting to build games or other things for the browser in pure Crystal like Opal does for Ruby.

Type system review

Make a review and possible formalisation of Crystal's type system, with a strong emphasis on generics, type restrictions and the meta-model in general.

Macros review

Review the macros intermediate language, to allow for more expressiveness and to provide the compilers with hints with regards to reusing previous runs for incremental compilation.

Exceptions review

Review the exception layout and hierarchy to allow developers to catch more specific errors, and get more information on what exactly went wrong via variables inside the exception.

Incremental compilation

Allow the compiler to re-use information from previous compilations, by defining dependencies between files/modules and only reprocessing changed ones. This feature also opens the door for better IDE integration and tooling.

Standard library

Implement the missing or review the existing following modules from the standard library:

  • OpenSSL (e.g. certificates)
  • File, FileUtils
  • HTTP/2
  • WebSocket
  • Time, Time::Span, TZ support
  • Logger
  • FTP
  • SMTP
  • Random
  • SecureRandom
  • XML
  • Test mocks

Tools

Improvements or developments on either built-in or external tools for the language.

Documentation

Improve not only the documentation itself, but the docs generator as well. Add support for links between documents from different packages, alternate READMEs for the docs, better searching options, and easier docs hosting options.

Shards

Improve Crystal's dependency manager for better dependencies version resolution, provide further metadata on the project, support registering executable tasks, better handling of transitive dependencies, and more. Implement centralised discovery of Crystal shards, sorted by category, and including support for the latest versions of the language, as reported by a CI.

Playground

Improve Crystal's playground by adding shards' workbooks to explore the usage of the project's registered dependencies, and other features to discuss.

IDE support

Make use of Crystal's compile-time type information to develop better IDE tools, such as in-place documentation, autocomplete or refactoring tools.

Shard ideas

Ideas to be developed as Crystal shards, including entire implementations, bindings to existing libraries, drivers or wrappers for external services, etc; ideally to be community-maintained.

  • GraphQL server
  • RethinkDB driver
  • ElasticSearch API wrapper
  • Maxmind GeoIP parser or binding
  • GRPC protocol implementation
  • DSL for writing Ruby extensions
  • GNUPlot (or similar) bindings
  • ImageMagick (or similar) bindings
  • LAPACK (or similar) bindings
  • Desktop UI controls bindings for multiple platforms
  • Machine learning and data science libraries
  • Game development framework

Clone this wiki locally