Skip to content
This repository has been archived by the owner on Jul 11, 2019. It is now read-only.

Releases: mmstick/parallel

0.5.0: Major Overhaul

24 Sep 22:16
Compare
Choose a tag to compare
0.5.0: Input Disk Buffering; Error Handling; & More

This release required a ton of work to accomplish, and about two
weeks of my life, as I wanted to ensure that I wrote it as
efficiently as possible. Additional performance optimizations
will be performed in the future.

There are a significant number of changes in this release, but for
the end user this will mainly improve performance, drastically
reduce memory consumption, and fix the bug that causes the program
to hang when spawning a large number of processes. This bug was
caused by spawned children not automatically releasing their handles
as intended. Errors will now also be logged and re-printed at the
end of the program.

With this release, arguments will first be efficiently buffered
to the disk using a custom `DiskBufferWriter` structure that
works entirely with a fixed-size 8K byte array. The structures
is created from a `DiskBuffer` which transforms into either a
`DiskBufferReader` or a `DiskBufferWriter` depending upon whether
the `read()` or `write()` method was called. When the byte array is
full, the data will be written to the disk. This is significantly
more efficient than using the default BufWriter structure, consuming
far less syscalls.

Once all arguments have been written to the disk, the tokenizer
will generate tokens from the command argument if one was given,
but will now instantly replace instances of `JobTotal` and
`Number` tokens during the tokenizing phase, because this
information is known during initialization.

The end of the initialization phase is now marked by the creation
of an `InputIterator` structure, which contains an `InputBuffer`
with higher level information on an internal `DiskBufferReader`.
The iterator is wrapped inside of an atomic reference-counted
mutex and shared among threads. Threads will continue to consume
from the iterator until the iterator returns `None`.

Finally, the entirety of the codebase was refactored into smaller
modules, which took a large amount of time, but the result is
code being easier to read and manage.

0.4.1: Bug Fix to Permutation Update

07 Sep 04:56
Compare
Choose a tag to compare

Resolves panic when no arguments are provided, and adds a help message for when parsing errors occur.

0.4.0: Permutation Support

07 Sep 03:04
Compare
Choose a tag to compare

This change adds support for permutating inputs when there are multiple input lists provided to the program. Input modes have been updated to work precisely as they do in GNU Parallel, with ::: creating a new list with new input arguments, :::+ appending arguments to the current list, :::: creating a new list with inputs from files, and ::::+ appending inputs from files to the current list.

Update: Found a bug, will update release with fixed packages soon.
Update2: Updated release here

0.3.0: {N} Token Support

04 Sep 04:42
Compare
Choose a tag to compare

With this new major release, Rust Parallel has gained the ability of supporting {N} tokens, which is a placeholder for the Nth input in the input list. The support for this feature was made possible through recursion and pattern matching in the tokenizer() function. The Token::Number token was added, which contains both a number and a Token itself. Pattern matching is done to ensure that the embedded token is not an invalid Token, such as putting a Token::Number inside of a Token::Number.

Additionally, I've made a number of bug fixes along with a newly-added unit test.

0.2.3: File Input Support

02 Sep 18:51
Compare
Choose a tag to compare

This change will modify the parsing code to use an enum for switching between modes, and the new input mode being added is support for files that contain inputs as input arguments. This will also enable support for the abili

seq 1 10 > list
parallel 'echo {}' ::: starting :::: list ::: done

0.2.2: Bug Fixes

02 Sep 04:43
Compare
Choose a tag to compare
0.2.2: Fix Bugs with Verbose & Ungrouped

I swapped the values for the number of threads and inputs in verbose mode. I also caused ungrouped mode to be utterly incapable of executing. This will fix that.

0.2.1: Feature Addition & Bug Fix

02 Sep 03:34
Compare
Choose a tag to compare

This change will fix the test units, add a new test unit, and allow for the parsing of arguments when using --no-shell mode. Before, when using --no-shell, arguments with spaces would be interpreted as completely separate arguments. Now, arguments can contain spaces if they are double quoted, or if the space follows a backslash.

0.2.0: Feature Overhaul

01 Sep 21:07
Compare
Choose a tag to compare
  • Added ability to disable the platform's shell with -n or --no-shell.
  • Added ability to print verbose information with -v or --verbose.
  • When grouping is enabled, the child processes will have their standard output and error piped.
    • Messages will be printed to standard output/error on demand as soon as they become available.

0.1.1: Feature Addition

27 Aug 17:42
Compare
Choose a tag to compare

Runs commands within the operating system's shell to allow for multiple commands within a command:

parallel 'cd {}; echo ==={}===; ls' ::: $(find -type d)

0.1.0: First Release

27 Aug 06:15
Compare
Choose a tag to compare
0.1.0 Release