Skip to content

Create a new category for "language interpreters, compilers or run-times" #1412

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
cipriancraciun opened this issue Jun 5, 2018 · 10 comments · Fixed by #2983
Closed

Create a new category for "language interpreters, compilers or run-times" #1412

cipriancraciun opened this issue Jun 5, 2018 · 10 comments · Fixed by #2983
Labels
A-categories C-enhancement ✨ Category: Adding new behavior or a change to the way an existing feature works

Comments

@cipriancraciun
Copy link

I am developing a Scheme interpreter and I want to publish my project on crates.io. However when trying to file my project under a category none actually matches (not even closely) the actual nature of the project.

For example, from the current category index on crates.io:

  • command line utilities -- although my Scheme interpreter is used as a command line tool, it's not an actual "command line utility", just as rustc or python are not;
  • development tools -- one might say that any interpreter or language compiler is just a "development tool", however no one is referring to rustc or python as a "development tool";
  • emulators -- one might say that an interpreter "emulates" an abstract language, however most crates in this category are actually native assembler emulators;

Therefore I think a new category should be added for proper "interpreters, compilers and run-times" for various languages people are implementing in Rust.

@sgrif
Copy link
Contributor

sgrif commented Jun 6, 2018

Can you give some examples of other crates which would fall under this category? While there are a handful of categories that are exceptionally small, we generally try to avoid having them.

@cipriancraciun
Copy link
Author

Bellow are around 20 Scheme/Lisp implementations in Rust, organized in no particular order, ranging from small to large. (For reference in the "emulators" group there are currently only 13 crates.)

I'm not sure how many are present on crates.io, but if needed I'll make a list of those also. (The current list was gathered a few moths ago when I did my initial research into the topic.)


However I bet there are at least twice as many when taking into account other "languages" that are non-Lisp-derivatives. For example the following are two examples on crates.io, none of which has any "category" assigned:


Moreover there is currently a young working-group dedicated to exactly this topic:

https://github.com/rust-hosted-langs/runtimes-WG

@brendanzab
Copy link
Member

I haven't yet published https://github.com/brendanzab/pikelet to crates.io, but when I do I'd also use this category if it existed!

@brendanzab
Copy link
Member

Not sure if parser generators like LALRPOP count. I think there are also a number of templating languages out there too.

@cipriancraciun
Copy link
Author

@brendanzab it seems there already exists specific categories for parsers (either "Parser implementations" and also "Parsing"), and also for templating languages ("Template engine" or "Value formatting").

@carols10cents carols10cents added C-enhancement ✨ Category: Adding new behavior or a change to the way an existing feature works A-categories labels Jun 27, 2018
@brson
Copy link
Contributor

brson commented Jul 28, 2018

+1. I was just looking for languages implement in Rust on Cargo, and instead came here to commiserate.

Thanks to @cipriancraciun, @brendanzab , @chengchangwu for the lists.

Here's a compilation of everything I see here and on crates.io.

Original languages

https://crates.io/crates/gluon - I believe this one has the most mindshare in the community
https://crates.io/crates/dyon
https://github.com/brendanzab/pikelet
https://github.com/jonathandturner/rhai - This one is created by a Rust/Servo team member. Was dead for a long time but seems in active development.
https://github.com/JohnBSmith/moss
https://github.com/willcrichton/lia
https://github.com/BourgondAries/teko

Schemes

https://github.com/Arcterus/iron-lang
https://github.com/chenyukang/rust-scm
https://github.com/DemiMarie/rusty_scheme
https://github.com/fitzgen/oxischeme
https://github.com/hawkw/seax
https://github.com/hawkw/seax_scheme
https://github.com/jsdf/lisp.rs
https://github.com/JunSuzukiJapan/macro-lisp
https://github.com/kenpratt/rusty_scheme
https://github.com/kimhyunkang/r5.rs
https://github.com/kimhyunkang/r6.rs
https://github.com/matklad/s
https://github.com/murarth/ketos
https://github.com/nham/radicle
https://github.com/ruse-lang/ruse
https://github.com/rustyhorde/nail
https://github.com/shybyte/risp
https://github.com/swgillespie/rust-lisp
https://github.com/vitvakatu/selfish

Forths

https://github.com/chengchangwu/rtforth
https://github.com/zack-bitcoin/forth-in-rust
https://github.com/mattico/forth-rs
https://github.com/andrey-gvrd/basic-forth-interpreter
https://github.com/NickErrant/Thermite
https://github.com/my-flow/forth
https://github.com/fluency-in/rust-forth
https://github.com/tdoylend/mikron
https://github.com/scott-linder/forth-rs
https://github.com/howerj/rust-embed-forth
https://github.com/eloraiby/rust-toy-forth
https://github.com/AnchoviesHat/frankfurter
https://github.com/tdoylend/greengold
https://github.com/zanesterling/rforth
https://github.com/mneumann/toyforth
https://github.com/Church-/RFORTH
https://github.com/timmartin/rorth

Other

https://github.com/shinglyu/RustPython - Python
https://github.com/RustPython/RustPython - Python
https://github.com/mitnk/cicada - Functional
https://bitbucket.org/SoniEx2/prexcl
https://github.com/chip8-rust/chip8-vm.git - CHIP-8 VM (dead)
https://github.com/sunjay/turtle

Transpilers

https://github.com/joncatanio/cannoli - Python to Rust
https://github.com/brain-lang/brain - Rust to Brainfuck
https://github.com/uwplse/crust - Rust to C
https://github.com/rust-lang-nursery/rust-bindgen - Convert C/C++ to Rust. Always needs improvement, depended on by lots of critical projects, particularly Servo.
https://gitlab.com/tspiteri/rox - Rox -> VHDL

Brainfuck

https://github.com/brain-lang/brainfuck
https://github.com/LeoTindall/sbrain

Well there's a few of these. Dosen't seem worth enumerating now.

Shells

https://github.com/mitnk/cicada
https://github.com/redox-os/ion - Good mindshare. Part of Redox OS.


Might want to make it cleat that markup languages nor templating languages don't belong in this category. I might call it "Programming languages", or "Programming language compilers". Not sure of the value of "runtimes" in the op's wording - I at least find it confusing.

Seems like a pretty big group, and a compelling argument for a catagory. My must sucessful search was for "programmng language" but it didn't raise the best stuff to the top.

cc @alexcrichton @carols10cents what do you think of this analysis - is it reasonable to add a "Programming languages" category?

At could be worth distinguishing between standalone languages and embedded languages. Also this list doesn't take into account bindings to existing languages (maybe that already has a category). Regardless, yays or nays?

@cipriancraciun
Copy link
Author

Might want to make it cleat that markup languages nor templating languages don't belong in this category. I might call it "Programming languages", or "Programming language compilers". Not sure of the value of "runtimes" in the op's wording - I at least find it confusing.

The issue with "Programming language compilers" is that it excludes those that don't compile but interpret. I guess that just "Programming languages" would be a sufficiently big umbrella for everything. (I initially added also "runtimes" because some projects aren't actually "compilers" nor "interpreters", but instead they would provide the actual "implementation" of the builtin functionality that is used by another crate which is the actual "compiler / interpreter".)

Also this list doesn't take into account bindings to existing languages (maybe that already has a category).

This set of crates would fit the "run-time" part of my initial proposal.


At could be worth distinguishing between standalone languages and embedded languages.

I would say that "embedded" has two meanings depending on how your perspective:

  • one would be a language targeting "embedded devices" like Arduinos and such;
  • and another would be a language being used to "extend" an application written in Rust just like EmacsLisp is used to extend Emacs;

Moreover in the second case, most languages that can be used to "extend" Rust can also be used as a "standalone" version.

@Turbo87
Copy link
Member

Turbo87 commented Oct 23, 2020

to anyone interested in adding such a category: it would be awesome if one of you could open a PR to update https://github.com/rust-lang/crates.io/blob/master/src/boot/categories.toml with the proposed new category.

@Turbo87
Copy link
Member

Turbo87 commented Feb 10, 2021

FYI #2983 got merged and was pushed to production today, so there is now a https://crates.io/categories/compilers category available

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
A-categories C-enhancement ✨ Category: Adding new behavior or a change to the way an existing feature works
Projects
None yet
Development

Successfully merging a pull request may close this issue.

7 participants