Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/calvin-l/gen2it
Compiles python-style generators to java-style iterators
https://github.com/calvin-l/gen2it
Last synced: 2 months ago
JSON representation
Compiles python-style generators to java-style iterators
- Host: GitHub
- URL: https://github.com/calvin-l/gen2it
- Owner: Calvin-L
- Created: 2017-01-31T20:48:22.000Z (almost 8 years ago)
- Default Branch: master
- Last Pushed: 2017-02-02T19:40:52.000Z (almost 8 years ago)
- Last Synced: 2024-04-23T02:10:45.401Z (8 months ago)
- Language: Python
- Size: 17.6 KB
- Stars: 6
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Generator to Iterator Converter
This tool compiles generator methods to Java-style iterators.
Generator methods are a very convenient way to write code that produces streams
of values: they are normal functions that periodically yield values to the
caller. In many cases it is easier to express a stream of values as a generator
than to manually write an implementation of
[Iterator](https://docs.oracle.com/javase/8/docs/api/java/util/Iterator.html).For example, a generator method to produce Fibonacci numbers might look like
this:```
int a = 1;
int b = 1;
while (true) {
yield(a); // produce a value
int prev_a = a;
a = b;
b += prev_a;
}
```## Using the tool
I expect you to be running Python 3. Install dependencies with `pip`:
$ pip3 install -r requirements.txt
Invoke the tool by running:
$ python3 -m gen2it INPUT_FILE -o OUTPUT_FILE
The input should be a Java source file with a single class having a
`TypeName generate(args...)` method. That method may call
`yield(TypeName value)` to yield
values. The output is a Java source file with `boolean hasNext()` and
`TypeName next()` methods.Sample inputs for the tool can be found in the examples folder.
## Usage Notes
- The generated iterators are not threadsafe. You will need to manually
synchronize calls to any method on the generated iterator classes.- This style of programming can be [faked in pure Java using threads](https://github.com/mherrmann/java-generator-functions),
however, this tool will avoid the overhead of the extra threads and the risks
of leaking memory through them.- Many features are not yet implemented. Feel free to file issues or open pull
requests to fix missing functionality. A few things that may not work
properly yet:
- try-catch and try-with-resources
- for-loops
- using a for-each loop over an array