Crystal: Roadmap(wiki) page needs to be updated

Created on 19 Mar 2018  路  12Comments  路  Source: crystal-lang/crystal

The roadmap states that the following are not implemented:

OpenSSL(openssl.cr)
Logger(logger.cr)
XML(xml/reader.cr)
WebSocket(http/web_socket.cr)
Test mocks(https://github.com/waterlink/mocks.cr)
File, FileUtils(file.cr)
Time, Time::Span(time.cr)

I have used crystal's XML, Mocks, File & Time in my projects. They work perfectly fine. I have not tested the rest, but their implementation does exist in stdlib. Can we edit the roadmap to remove these lines?

It would be much easier for me to convince fellow devs to adopt crystal if we have more up-to-date information on these features.

docs discussion

Most helpful comment

@jirutka because we started out by copying the API from ruby, which has an OpenSSL module. The interface will change to be implementation-agnostic before 1.0, i'm planning on it. Then we can use whatever TLS/crypto library is best for the situation.

All 12 comments

The description of this section states this is a list of modules missing implementation or a review.
OpenSSL bindings still don't cover all features, mocks are not implemented in the stdlib, XML could perhaps get some kind of mapping feature like JSON and YAML, File and Fileutils need API refactoring etc.

Maybe Time can be removed from the list (TZ support is implemented, but still there are some issues).

This Roadmap is merely an internal list of things that have been identified as needing attention. Most of them are already usable and this is entirely encouraged. But there is a difference between "we have a (rough) implementation" and "we're sure that's how we want it to look like in the long term".

Maybe this could be communicated better, but in general, it doesn't make sense to remove items from that list until they have been consolidated.

Exactly, those are the list of features to review and possible redesign or tweak the API, not the features to be written.

The roadmap is out of date though, it could probably use another look. (any input from manas?)

Just a minor thing that occured to me: Windows support, exceptions and concurrency from the language section are actually mostly stdlib.

The text Implement the missing or review the existing modules reads like (Implement the missing) or (review the existing modules). From the current list one may assume that XML is missing altogether. Maybe we should change that text to Existing modules missing a few features or a review.

About OpenSSL, why did you decide to write bindings for notoriously crappy and vulnerable OpenSSL with its insanely shitty API instead of some of better TLS implementation, such as mbed TLS (formerly PolarSSL), Botan, BearSSL or GnuTLS? Having support for some better TLS library in Crystal would be great benefit!

@jirutka Even if this is true, OpenSSL id the defacto installation of SSL\TLS stack in the Unix world.
You cannot force the user to start researching what is better, and also we want crystal to build on any system as painlessly as possible, this will be countering that.

@jirutka because we started out by copying the API from ruby, which has an OpenSSL module. The interface will change to be implementation-agnostic before 1.0, i'm planning on it. Then we can use whatever TLS/crypto library is best for the situation.

The roadmap is in the top 10 of most viewed pages on this Github repo. I don't know if that's only temporary, but it needs an update whatsoever.

The main roadmap entries might probably need a lengthy discussion about changing anything. But we can already make a few improvements to less-critical aspects.

So here come a few suggestions:

  • Concurrency: Delete Ongoing efforts on branch thread-support. This branch is far from ongoing with the most recent commit 2 years ago. Maybe we could have a meta-issue (like for windows) or project to link to.
  • Windows support: Could be added that cross-compiling already works for simple programs. Next steps are fibers/IO and porting the compiler.
  • Standard library:

    • replace OpenSSL with TLS library

    • What's left for WebSocket?

    • TZ support is done. The APIs for Time and Time::Zone are IMO also pretty much complete.

    • FTP - do we really need an FTP library for the stdlib on our TODO-list? I can't recall this has ever been requested.

    • SMTP doesn't look like stdlib either

    • Random and SecureRandom can be deleted from this list.

    • a review of the Sockets API could be added

    • also maybe add a note about shrinking the stdlib

  • The section Shard ideas can be removed entirely. I don't see any reason why these ideas should even be crystal-org projects. There is https://github.com/crystal-community/crystal-libraries-needed for this.

Update: I've removed the outdated parts from the roadmap as suggested in the previous comment.

Seems reasonably up to date now, suggest closing this issue.

Thanks. Unrelated, but does crystal mean to do its own internal "home made" TLS library? Or just polish up the OpenSSL implementation?

The idea is to have a generic API which can be backed by openssl or other implementations. Currently, we're just wrapping openssl API very specifically, but it should be decoupled for more flexibility.

Was this page helpful?
0 / 5 - 0 ratings

Related issues

ezrast picture ezrast  路  84Comments

asterite picture asterite  路  139Comments

RX14 picture RX14  路  62Comments

asterite picture asterite  路  70Comments

xtagon picture xtagon  路  132Comments