*Why* is this good, though?

If "language x implements it" is all that is needed for something to
be good, then no language can be good, because there are just too many
gimmicks in too many languages.

Restated: if we introduce a new primitive type (this range thing) then
the interpreter would have to be built with support for this type in
all primitives that currently take numeric arguments.

That's quite a lot of work (to get an idea of the magnitude of this
effort, note that support for sparse arrays has been stalled "in
progress" for over a decade). So what is the benefit? You wind up
implementing a behind-the-scenes algebra (similar to tacit verbs, in
the general case, though supporting only a scalar addition and an
index vector is an obvious subset of that) which gets executed "as
necessary",

The biggest benefit I can see is better cpu cache management for a few
calculations involving large arrays. But it seems to me that:

[a] The obvious cases where this is a significant benefit tend to be
trivial, and

[b] The non-trivial cases where this is an actual help might benefit
more from the programmer structuring the computation to fit in L2 (or
L3) cache. [Note that this is similar to what you do when you don't
have enough memory for intermediate results.]

But, also, identifying why it is good can help with the specification
process (the nature of that behind-the-scenes algebra which is a
necessary part of the implementation of this proposal).

Thanks,

-- 
Raul


On Mon, Feb 26, 2018 at 2:01 PM, Vijay Lulla <vijaylu...@gmail.com> wrote:
> The "range" idea that James is proposing is a good one!  Julia implements
> range like this.  And, if I recollect correctly this is also one of the
> fundamental changes between Python 2 and Python 3's range function
> behavior!  And if I understand correctly what James is saying is that we
> can do some really clever things with '+ - * %' when i. is not executed.
> For e.g., below is an example of my Julia session explaining what James is
> getting at:
>
> ---- Julia REPL ----
> julia> x = 1:2:15
> 1:2:15
>
> julia> x
> 1:2:15
>
> julia> collect(x)
> 8-element Array{Int64,1}:
>   1
>   3
>   5
>   7
>   9
>  11
>  13
>  15
>
> julia> x*2
> 2:4:30
>
> julia> collect(x*2)
> 8-element Array{Int64,1}:
>   2
>   6
>  10
>  14
>  18
>  22
>  26
>  30
>
> julia> dump(x)
> StepRange{Int64,Int64}
>   start: Int64 1
>   step: Int64 2
>   stop: Int64 15
>
> julia> dump(collect(x))
> Array{Int64}((8,)) [1, 3, 5, 7, 9, 11, 13, 15]
>
> julia>
> ---- End Julia REPL ----
>
> The main thing to notice is that only when you "collect" a "range" object
> is the actual space allocated (used?).
>
>
> On Mon, Feb 26, 2018 at 1:37 PM, Raul Miller <rauldmil...@gmail.com> wrote:
>
>> I guess I'm not sure what you think the word "execution" means, in the
>> context of this proposition.
>>
>> But it's also not clear to me why you think that all use of i. should
>> require extra complexity which is already available through the use of
>> bind.
>>
>> But there's an additional difficulty, here, which is two unrelated
>> proposals making talking about either of them likely to bring in the
>> other unrelated topic.
>>
>> Thanks,
>>
>> --
>> Raul
>>
>>
>> On Mon, Feb 26, 2018 at 1:32 PM, james faure <james.fa...@epitech.eu>
>> wrote:
>> > Bind is not relevant here, since I'm talking about the execution of i.,
>> which must inevitably happen at some point to be of any use.
>> >
>> >
>> > Also, I don't see how there could possibly be a tradeoff between the
>> time taken to write the results of a multiplication and evaluate it. In any
>> event my tests had both python and j print the result of '! y', which
>> should favor j even, since it only writes the first 256 digits, whilst
>> python prints the entire number.
>> >
>> > James Faure
>> >
>> > ________________________________
>> > From: Source <source-boun...@forums.jsoftware.com> on behalf of Raul
>> Miller <rauldmil...@gmail.com>
>> > Sent: Monday, February 26, 2018 7:08:31 PM
>> > To: Source forum
>> > Subject: Re: [Jsource] Propositions
>> >
>> > This is the "sweep it under the rug" design aesthetic - very useful
>> > when dealing with infinities and/or any other calculations which you
>> > really do not want to perform.
>> >
>> > That said, J already supports this kind of thing - albeit with
>> > slightly different syntax.
>> >
>> > For example, you can do:
>> >    i. bind 1e7
>> >
>> > and
>> >    1 + i. bind 1e7
>> >
>> > and J will faithfully not perform the indicated calculations, quite
>> > yet (but still stashes them so that if you later change your mind it
>> > can instead perform them).
>> >
>> > And, yes, the current extended precision implementation is slow for
>> > multiplications (though fast for display). It's a design tradeoff, and
>> > perhaps one which should be reconsidered. (Though memory management
>> > and cross platform stability and support are critical issues which can
>> > take precedence over mere performance.) Or at least: that's how I
>> > understand this issue...
>> >
>> > Thanks,
>> >
>> > --
>> > Raul
>> >
>> > On Mon, Feb 26, 2018 at 12:48 PM, james faure <james.fa...@epitech.eu>
>> wrote:
>> >> I have 2 major propositions:
>> >>
>> >> Recently, I (to my chagrin) demonstarted to a friend that '>: i.1e7'
>> takes almost twice as long as 'i.1e7'. Of course I expected them both to
>> execute instantly, not after a full second. So my suggestion: i. should
>> return a 'range' (or 'i.') object containing three vars: 'start end step'.
>> In this way, '+ - * %' and indeed any linear combination of linear
>> operations can be executed on only 3 variables rather than #y . besides the
>> immediate speed and memory improvements here, other operations (on i.
>> objects), like '+/ */ e. i.' etc.. can now be found by direct calculation,
>> without ever spawning a physical array! Another fascinating possibility
>> becomes available: 'i._'. Thus something like '*/ x * y ^ - i. _' is now
>> able to return the result of the infinite geometric series. In fact in
>> general it may be very profitable to use virtual arrays only, unless forced
>> otherwise. Another concrete example: when searching for the first number to
>> satisfy a certain property, one could use 'i.@u seq i. _' rather than
>> some likely inefficent variation of ^: or while. . Perhaps this 'array only
>> when forced' approach may even void the need for special combinations, a
>> concept which feels suspicious to me.
>> >>
>> >> Secondly: operations on extended precision numbers are unbelievably
>> slow... The most direct example: '! 100000x' takes 50 (!) times longer than
>> python3's math.factorial(100000). It should be well worth looking into
>> llvm's APInt and APfloats http://llvm.org/doxygen/classllvm_1_1APInt.html,
>> or perhaps Cpython's bigint's https://github.com/python/cpython/blob/
>> 65d4639677d60ec503bb2ccd2a196e5347065f27/Objects/longobject.c, I wouldn't
>> think it's necessary to write another custom library.
>> > [https://avatars2.githubusercontent.com/u/1525981?s=400&v=4]<https://
>> github.com/python/cpython/blob/65d4639677d60ec503bb2ccd2a196e
>> 5347065f27/Objects/longobject.c>
>> >
>> > python/cpython<https://github.com/python/cpython/blob/
>> 65d4639677d60ec503bb2ccd2a196e5347065f27/Objects/longobject.c>
>> > github.com
>> > cpython - The Python programming language
>> >
>> > LLVM: llvm::APInt Class Reference<http://llvm.org/
>> doxygen/classllvm_1_1APInt.html>
>> > llvm.org
>> > Class for arbitrary precision integers. APInt is a functional
>> replacement for common case unsigned integer type like "unsigned",
>> "unsigned long" or "uint64_t", but ...
>> >
>> >
>> >>
>> >> James Faure
>> >> ----------------------------------------------------------------------
>> >> For information about J forums see http://www.jsoftware.com/forums.htm
>> > J Forums<http://www.jsoftware.com/forums.htm>
>> > www.jsoftware.com
>> > Forums. The J forum mailing lists give life to the J community. They are
>> the best way to get help, help others, report bugs, and share your interest
>> in J.
>> >
>> >
>> > ----------------------------------------------------------------------
>> > For information about J forums see http://www.jsoftware.com/forums.htm
>> > J Forums<http://www.jsoftware.com/forums.htm>
>> > www.jsoftware.com
>> > Forums. The J forum mailing lists give life to the J community. They are
>> the best way to get help, help others, report bugs, and share your interest
>> in J.
>> >
>> > ----------------------------------------------------------------------
>> > For information about J forums see http://www.jsoftware.com/forums.htm
>> ----------------------------------------------------------------------
>> For information about J forums see http://www.jsoftware.com/forums.htm
>>
>
>
>
> --
> Vijay Lulla, Ph.D.
>
> Assistant Professor,
> Dept. of Geography, IUPUI
> 425 University Blvd, CA-207C.
> Indianapolis, IN-46202
> vlu...@iupui.edu
>
> <http://vijaylulla.com>
> http://vijaylulla.com
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to