commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Bruno P. Kinoshita" <>
Subject Re: [functor] CharacterRange, FloatRange, DoubleRange and open/closed intervals
Date Tue, 14 Feb 2012 21:00:03 GMT
Hi all, 

Looks like the initial code [1] for the Generators API in Apache Commons Functor was created
based on the Python generators [2].

After playing for a while with Python generators, I realized many examples have a 'generator',
a 'range' and a 'yield' statement. Then I looked for existing Java API's with generators,
ranges and/or *yields* to have more ideas for [functor]'s Generator API. 

I found one [3] that requires some bytecode manipulation, and another one [4] that uses a
threading mechanism to yield objects. 

I tried both of them [5] and the latter, java-yielder, seems to provide a useful Yield API,
as well as Generator and Ranges. There are few modifications that I would like to see in its
Range, like the possibility to make the boundary values inclusive or exclusive (like in Google
Guava). As well as include a StoppableGenerator interface to the Generator API, so we could
maintain the existing implementations in [functor] of Generators.

If there are no objections, I will fill an issue in JIRA for enhancements on the Generator
API in [functor], where we can further discuss on this issue as well as attach patches :-)
I believe we could have similar separation in [functor], Generators, Ranges, and maybe, Yields.
However, it would be good if someone else could have a look on java-yielder and other existing
Yields implementations for Java.

And if everybody thinks it is appropriate and the API is good enough, maybe we could ping
the author of java-yielder and see if he would be willing to donate the code to ASF? It is
licensed under the BSD-License [6], not sure if it is compatible with the Apache License.

Looking forward to hearing your thoughts on this!






Bruno P. Kinoshita

> From: Adrian Crum <>
>To: Commons Developers List <> 
>Sent: Tuesday, 24 January 2012 7:21 PM
>Subject: Re: [functor] CharacterRange, FloatRange, DoubleRange and open/closed intervals
>After looking at the Lang 3 Range API, I realized an Iterator factory 
>should be kept external to the Range class:
>Range<Date> dateRange = Range.between(thisMonth, nextMonth);
>Iterator<Date> dayIterator = RangeIteratorFactory.getInstance(dateRange, 
>Range<Integer> intRange = Range.between(firstInt, lastInt);
>Iterator<Integer> intSeqIterator = 
>RangeIteratorFactory.getInstance(intRange, 3);
>On 1/24/2012 9:10 PM, Bruno P. Kinoshita wrote:
>> Sounds great for me too :)
>> Cheers,
>> Bruno P. Kinoshita
>> ----- Mensagem original -----
>>> De: Adrian Crum<>
>>> Para: Commons Developers List<>
>>> Cc:
>>> Enviadas: Terça-feira, 24 de Janeiro de 2012 18:30
>>> Assunto: Re: [functor] CharacterRange, FloatRange, DoubleRange and open/closed
>>> On 1/24/2012 8:15 PM, Matt Benson wrote:
>>>>    Thanks for your interest, Adrian!  Comments inline:
>>>>    On Tue, Jan 24, 2012 at 1:58 PM, Adrian Crum
>>>>    <>   wrote:
>>>>>    On 1/24/2012 6:58 PM, Matt Benson wrote:
>>>>>>    IMO the difference between [lang]'s and [functor]'s range
>>> concepts is that
>>>>>>    those in [lang] are intended to be able to say whether a given
>>> value is in
>>>>>>    the Range, but, with the exception of CharRange (this class
is not
>>> even
>>>>>>    public), they make no provision for iterating over members of
>>> range. I
>>>>>>    would therefore design a [functor]-targeted Range builder API
>>> allow the
>>>>>>    user to specify how next values are obtained. Range may not
even be
>>> the best
>>>>>>    word to describe the behavior we are trying to model here, so
>>> let's be open
>>>>>>    to reinterpretation as we proceed.
>>>>>    From my perspective, Range + Step = Sequence.
>>>>    I'll buy that if noone else objects.  :)
>>>>>    A Range iterator would be
>>>>>    useful for implementing mathematical sets.
>>>>    e.g. integer range a..b step 3 yields the sequence of integers n
>>>>    greater than or equal to a and less than or equal to b where (n - a)
>>>>    3 == 0 ?  Is this useful?
>>>>    Matt
>>> It would be useful for a mathematician. Another possibility is a Range
>>> of Dates, with a step of one hour, or one day or...
>>> The Range class could accept an Iterator factory so various steps can be
>>> implemented in client code.
>>> -Adrian
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail:
>>> For additional commands, e-mail:
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail:
>> For additional commands, e-mail:
>To unsubscribe, e-mail:
>For additional commands, e-mail:

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message