Giter VIP home page Giter VIP logo

limonite's People

Contributors

dancardin avatar dependabot-preview[bot] avatar dependabot-support avatar thedan64 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

limonite's Issues

Make backend configurable

Basically, don't require llvm to be installed (compile time flag) when building. and otherwise set up code gen folder structure and trait to allow for different backends.

As a test of this you could move the print ast flag to instead to just be a backend

Add fault tolerance on Errors

removed skip to end of the line because it wasn't also compatible with matching braces (e.g. ([`{'<" ), which would make it not work particularly well in most cases.

Add this back but with proper support so that the parser can hit an error without barfing immediately.

Lexer uses nth

O(n) operation when it could be O(1) if we were iterating rather than trying to directly index each char

Add non-immediate variable initialization

for now, variables are required to be initialized when they are declared. This is pending static analysis to detect when variable are first accessed to ensure uninitialized variables are not used.

Update to newer LLVM version

Blocked by Inkwell lacking support for versions other than 3.7 at the moment. Will try and update as many newer versions as we can.

Parser doesnt handle mutating assignments

such as MinusEquals, PlusEquals, etc.

What feels right to me, would be a preprocessor which would e.g. consume i += 1 and produce i = i + (1) (the parenthesis are to ensure an arbitrary expression for the rhs gets evaluated before infix operating with the i). This would mean the general parser would only have to handle Equals for assignment.

The problem with wrapping the rhs in parens means it would have to consume all tokens until the expression ends, which means it has to know how to parse expressions. We may (?) be able to separate expression parsing from the parser impl first, since an expression shouldn't need to depend on any program state, like indentation or context.

Coveralls.io is broken

Apparently for the last year. Would like to have an up to date on overall test coverage. Requires fixing the travis build script.

Lex by graphemes not chars

We currently fail to parse some characters(ie yฬ†) when they have additional unicode modifiers. The unicode-segmentation crate should be able to help us here.

Need consistent error handling and formatting

Currently lexer error messages are passed up to the parser, which is probably fine. But I think the parser and code generator should have a format and possibly a supporting format function decided for how to format errors (and eventually warnings). We currently have like 2-3 different functions, I think, all of which are for different formatting?

Also, there should be discussion on whether or not we're handling errors the right way.
Current MO for both the parser and code generator is to just print the error right away and return None. Iirc, the None will just be propagated back to the top level and disregarded. I personally like how this works, but I'm not sure if we should be doing it this way.

The alternative, I suppose, would be to use Rust's Result as intended for error handling, to propagate the error message to the top level and print it there.

I'm kinda more in favor of keeping it as is at the moment, but I'd also like for us to consider any benefits there might be by switching to the Rust practice/standard of using Result for error handling.

Allow variable shadowing

We're going to start with a strict 1to1 mapping between the names of things in a given scope. Ideally though, variable shadowing is possible so allow this.

Replace log with slog

The slog crate seems like the standard for logging in rust these days. We should update from log and env_logger to slog.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.