Skip to content

Commit

Permalink
Prune dependencies (#95)
Browse files Browse the repository at this point in the history
* Remove dependency bigint

It is deprecated (in favor of 'uint') and dependabot flagged it
with a security vulnerability.

I don't expect people to rely on bigint for any of our exercises,
so I'm opting not to replace it with 'uint'. We can add it later
if people request it.

* Remove dependency rug

This is an arbitrary precision arithmetic library.
It could technically be useful for the 'decimal' exercise,
although just wrapping a library is probably not the point.

But it has a system dependency on gmp-mpfr, which I can't even
figure out how to install on my system and it's breaking the build.
I doubt this is useful to newcomers of the language.

I also remember from my attempt to use sccache that the compilation
of this dependency took a large amount of space in the container.

* Remove dependency enum-utils

unmaintained for 4 years and flagged with a security vulnerability

* Remove dependency num-digitize

This has been unmaintained for 6 years and deep within its dependency
tree is rustc-serialize, which is actually flagged for containing
unsound code that will be rejected by future versions of rustc.

* Remove dependency chashmap

unmaintained for 4 years, pulls in ancient depencencies
with soundness issues.

* Remove dependency workerpool

Unmaintained for 4 years, pulls in other outdated dependencies.

The alternative to use is rayon.

* Remove dependency scoped-pool

unmaintained for 7 years

* Remove dependency alloc_counter

This is a profiling tool. If students want to use it, they can do so
locally. There is no need to be able to use it in our test runner.

* Remove array_tool

last update 5 years ago, seems to be a weak version of itertools.
this doesn't seem useful anymore as the ecosystem has moved on.

* Remove assert_float_eq

last update 5 years ago

Our exercises mostly avoid floating point arithmetic becuase
of how error prone it is.
Therefore, our students shouldn't need this.

* Remove as-slice

This only provides a trait for super niche use cases.
This is not useful to students.

* Remove bencher

last update 6 years ago.
This could theoretically be useful locally, but not in the test runner.

* Remove binomial-iter

our exercises don't deal with the binomial coefficient

* Remove bit-vec

We have 'bitvec' already, which is 1.0, has more recent updates
and almost equal download numbers.

* Remove boolinator

very outdated, last update > 7 years ago.
it seems pointless.

* Remove case_insensitive_hashmap

seems pointless, download numbers are poor.

one can simply use a case insensitive string type with the
regular hashmap instead.

* Remove string case manipulation libraries

Students probably don't need any of these,
but let's keep one for now.

remove:
- case        (age: 5y, downloads: 2m)
- change-case (age: 3y, downloads: 8k)
- Inflector   (age: 5y, downloads: 24M)

keep:
- convert_case (age: 1y, downloads 46M)

* Remove unicode-case-mapping

This has very niche use cases by its own admission.

* Remove test-case

We used to use such macro crates for test case defintions. (rstest)
It increased compile times so much that the test runner timed out
for these exercises. We therefore removed that dependency and shouldn't
use this one either.

* Remove caseless

'unicode' should be preferred. it is maintained, documented and popular.

* Remove char-iter

barely any downloads, over 8 years old

* Remove char_stream

old and obscure

* Remove compare

old, experimental by its own admission

* Remove conv

old, not popular (anymore), not helpful for our exercises

* Remove counted-array

old, unpopular, seems like a worse version of arr_macro

* Remove cow-utils

not that popular and not helpful for our exercises

* Remove defaultmap

not very popular, doesn't provide much value over std lib functionality

* Remove derivative

similar to derive_more, but that one is more popular and actively
maintained

* Remove deunicode

This crate turns unicode text into some ascii representation.
It's neat, but not useful for our exercises.

* Remove dia-time

only 6k all-time downloads.

it doesn't seem like this provides anything that 'chrono' doesn't

* Remove encode_unicode

our exercises do not require messing with encodings

* Remove enum_derive

very old and less than 1M total downloads

seems like a mix of derive_more and enum-iterator

* Remove enumflags2

This seems fine, but it's too similar to the more dominant 'bitflags'.

* Remove eval

old and unpopular, our exercises don't require something like this

* Remove evalexpr

this is a little embedded scripting language.
we don't need this for our exercises.

* Remove factor

old and unpopular

* Remove factorial

This is not very popular and mainly concerned with performance.
Not relevant to our students.

* Remove fancy-regex

non-fancy-regex has plenty of features

* Remove fasteval

a library for evaluating arithmetic expressions, we don't need this

* Remove flame & flamer

These two profiling libraries may be useful locally,
but not in our test runner.

* Remove fnv

This is just a speicifc hash function.
Our exercises don't require optimization at this level.

* Remove foreach

unmaintained, only 5k total downloads, seems useless

* Remove free-ranges

old and obscure

* Remove generational-arena

our exercises don't need such low-level memory-management optimization

* Remove grapheme

less than 1k total downloads

this is literally an empty crate (checked the source)

probably a name-squatter (5 years ago)

* Remove humantime

Our exercises don't require this.
"human" date representations are hard to define and therefore test anyway

* Remove incremental-topo

very few downloads. our exercises don't need this.

* Remove inflections

another case conversion library and an old one at that.
we prefer convert_case.

* Remove lazysort

old and obscure

* Remove libm

this is a rust implementation of a C standard library ?

* Remove modulo

old and obscure

looks completely useless

* Remove ordered-float

our exercises don't require ordering floats

* Remove pathfinding

our exercises don't cover graph algorithms

* Remove permutator

I don't think our exercises need permutation, but if they do,
itertools has perfectly fine, basic permutations.

* Remove petgraph

our exercises don't require graph algorithms

* Remove pprof

this is a profiling tool
the test runner doesn't need it

* Remove prime number libraries

These are potentially useful for the prime number exercises,
but those would be immediately ruined by using these libraries.

* Remove queues

downloads trending toward zero.

the standard VecDeq should cover most of the same use cases.
the remaining is basically the circular buffer.
which we have an exercise for, but we want students to do it themselves.

* Remove recurse-fn

old and obscure

* Remove reikna

old and obscure

* Remove rs_poker

I don't think we want our students to implement our poker
exercise based on a library.

* Remove rustc-hash

our exercises don't require optimizing the used hash function

* Remove scan_fmt

our exercises are not interactive programs

* Remove scoped_threadpool

old, doesn't get many downloads anymore.
should probably use rayon instead.

* Remove sparse-bitfield

barely any downloads, should probably use bitflags or flagset instead

* Remove tramp

old and obscure

* Remove unic-char-range

The functionality of this crate was since stabilized in the
standard library.

* Remove unic-normal

should use unicode-normalization instead

* Remove unicode_reader

barely any downloads

* Remove unicode-reverse

barely any downloads

* Remove unidecode

extremely old, not useful for us

* Remove watch

barely any downloads
  • Loading branch information
senekor authored Nov 22, 2023
1 parent 6bf3e06 commit 607999e
Show file tree
Hide file tree
Showing 3 changed files with 134 additions and 1,757 deletions.
Loading

0 comments on commit 607999e

Please sign in to comment.