In my own tests, I drew the conclusion that simply paralellising functions over the arrays, and doing so on a function by function basis results in too much time wasted on bookkeeping and waiting for each step to finish.
In my own prototype implementation, I implemented this by having functions not return a result, but rather a descriptor. These descriptors can then be merged together into a single job that can easily be parallelised. The drawback offers this approach is that setting up the job takes much more time, meaning that small operations becomes slower. It's also a lot of more complex. Finally, in my prototype all arrays are immutable, which neatly fixes the copying problem, but this is approach isn't compatible with APL semantics, so it's effectively a different language. Before anyone asks, no, my prototype is exactly that. Just an implementation of some of the fundamental functions so I could test my idea's. It's not an actual implementation. Regards, Elias On 5 Jul 2017 00:15, "Blake McBride" <blake1...@gmail.com> wrote: > Hi Ellas, > > I remember your earlier work and comments. In fact, that is the source of > my knowledge of this. > > Putting more features on a base with known issues is problematic for the > following reasons: > > 1. The time and effort it would take to secure the base is being spent > elsewhere. > > 2. Adding new features is, in effect, ignoring the problem and moving on. > > 3. APL is good and useful as it is. If it's not being used as-is, then > there is some other issue (like efficiency). I remember another post about > unnecessary bloat because of the unnecessary copying. This was causing his > machine to page unnecessarily. The unnecessary coping is major in terms of > performance and memory efficiency. This is big. > > 4. APL was developed with the promise of parallel processing. This is > something that wasn't practical back then, but is now. I am under the > impression that this was one of the big reasons Juergen created GNU APL - > to take advantage of parallel processing. > > Just one opinion. > > Blake > > > On Tue, Jul 4, 2017 at 11:01 AM, Elias Mårtenson <loke...@gmail.com> > wrote: > >> Hello Blake, >> >> I agree those are important points too. Some time ago, I spent time >> trying to improve those things. Unfortunately, my approach turned out to be >> a dead end. I have some other ideas but those require a significantly >> different underlying architecture. Essentially, it requires a garbage >> collector, which changes things quite a bit. >> >> I'm sure Jürgen can go into more detail, but my impression is that >> avoiding copying is much harder than it seems. >> >> Regards, >> Elias >> >> On 4 Jul 2017 22:57, "Blake McBride" <blake1...@gmail.com> wrote: >> >>> My list would be different: >>> >>> 1. don't clone arrays unnecessarily >>> >>> 2. improve support for parallel processing >>> >>> With these, GNU APL would be much more efficient. I think moving the >>> focus to CPU and memory efficiency is much more important than adding >>> extensions of any sort. >>> >>> --blake >>> >>> >>> On Tue, Jul 4, 2017 at 1:59 AM, Elias Mårtenson <loke...@gmail.com> >>> wrote: >>> >>>> Thank you Jürgen, >>>> >>>> I think we understand each others positions, and agree that they are >>>> not entirely the same. >>>> >>>> That said, your points are very well taken, and for the most part I >>>> actually agree with you. >>>> >>>> I have a wishlist of features that I personally believe are important. >>>> For the most part, these have been discussed previously but here they are >>>> for completeness sake: >>>> >>>> 1. Bignums >>>> 2. Lexical binding. >>>> 3. First-class functions. >>>> 4. Rational numbers >>>> 5. Some kind of easy-to-use imperative structure (i.e. something >>>> better than the horrific :If :Then :Else structure in Dyalog) >>>> 6. Some kind of complex datastructure (again, something better than >>>> the Dyalog classes) >>>> >>>> Note that out of these, the only feature that would change the >>>> semantics compared to the ISO spec is the first, bignums. At least if it's >>>> implemented in the "natural" way. >>>> >>>> I've considered working on some of these myself, but I have no >>>> intention of doing so if you're against these ideas in principle. I >>>> certainly have no desire to maintain my own version. >>>> >>>> Regards, >>>> Elias >>>> >>>> On 4 July 2017 at 03:21, Juergen Sauermann < >>>> juergen.sauerm...@t-online.de> wrote: >>>> >>>>> Hi Elias, >>>>> >>>>> thanks for explaining your position. >>>>> >>>>> My concern about free software is not so much political but more >>>>> practical. >>>>> >>>>> If I look at programming languages, then my impression is that those >>>>> languages that make the >>>>> exchange of software simple are more successful than those that do not. >>>>> >>>>> Historically it has always been possible to exchange APL software from >>>>> one interpreter to another, >>>>> but it was never easy. Most of the code can be exchanged via *.ATF* >>>>> files, but the problems were >>>>> often tiny incompatibilities. These incompatibilities are spread all >>>>> over the code, so getting some >>>>> APL workspace to work on a different machine is still an adventure. >>>>> >>>>> That is why I prefer to stick to the ISO standard, no matter how bad >>>>> it is. As long as you use only >>>>> standardised APL functions you have very few compatibility problems. >>>>> There are some, but they >>>>> are well known. But every new function that is not standardised moves >>>>> you away from portability. >>>>> If I object to implementing some new function than this is not for >>>>> political reasons, but because I >>>>> am afraid that the additional incompatibility makes the exchange of >>>>> APL software more difficult. >>>>> >>>>> In some cases the function is so important that the incompatibility >>>>> has to be accepted. Examples >>>>> for that are certainly ⎕SQL, ⎕FIO, and maybe dyadic ⎕CR and ⎕DLX. >>>>> These functions are almost >>>>> impossible to implement efficiently by APL's own means. >>>>> >>>>> On the other end (from my point of view) we have things like the KEY >>>>> function. I still believe that it >>>>> rather fits into the FinAPL Idiom Library than into GNU APL. It is >>>>> shorter than one APL line and if >>>>> you make it an idiom then it remains portable between all APL >>>>> interpreters while otherwise it is only >>>>> portable between GNU APL and Dyalog APL. >>>>> >>>>> I am open to implementing a feature if it is really useful, but only >>>>> then. Becoming a leader in >>>>> implementing new feature is not one of my priorities. There are enough >>>>> other APLs that are >>>>> keen on that (e.g. Dyalog and NARS, see http://www.nars2000.org). The >>>>> ambition of GNU APL >>>>> has always been to become a stable standard interpreter some day. That >>>>> is difficult enough, and >>>>> we have learned from PL/I how too many features can kill a language. >>>>> And I have seen too many >>>>> software projects that failed due to being overly ambitious. I simply >>>>> do not want to share their fate. >>>>> >>>>> Regarding emacs, I can't help to note that I am not using it, because >>>>> it is, for my taste, too complex. >>>>> I rather prefer something simpler like vi. Sometimes less is just more. >>>>> >>>>> Best Regards, >>>>> /// Jürgen >>>>> >>>>> >>>>> On 07/03/2017 04:00 PM, Elias Mårtenson wrote: >>>>> >>>>> Hello Jürgen, and thanks for your thorough reply. >>>>> >>>>> In terms of the usefulness of Key, I don't disagree with you. I'd >>>>> certainly like to see even more flexible solutions. >>>>> >>>>> Where we do disagree is what the goal of free software is. Arguably >>>>> there are probably as many goals as there are people. >>>>> >>>>> What follows below is an explanation as to why I disagree with your >>>>> assessment as to what is the best for Free Software. Please don't take it >>>>> as personal criticism. You know that I have the deepest respect for you as >>>>> the maintainer and author of GNU APL. >>>>> >>>>> After spending quite some time on the Emacs Development mailing list, >>>>> I have learned quite a bit about what the FSF's goals are with regards to >>>>> what they call "Free Software". Time and time again, RMS has stated that >>>>> the goal of GNU is to make people use commercial software less. In order >>>>> words, if a project can implement a feature that draws people away from >>>>> commercial software towards Free Software, then that is what the project >>>>> should do. >>>>> >>>>> At this point, I'd like to clarify that I am not completely in >>>>> agreement with RMS on this. In the Emacs project, this position has >>>>> prevented Emacs from gaining certain important features, simply because >>>>> they would have made it easier to use "non-free" software together with >>>>> Emacs. This is a position I don't agree with. >>>>> >>>>> I'd really like to see GNU APL become a leader in implementing new >>>>> features. That way perhaps we get more people to switch. The point I'm >>>>> making here is that by implementing useful features that would make people >>>>> choose GNU APL before any alternative, then the project would better serve >>>>> the GNU goals. >>>>> >>>>> Regards, >>>>> Elias >>>>> >>>>> On 3 July 2017 at 21:36, Juergen Sauermann < >>>>> juergen.sauerm...@t-online.de> wrote: >>>>> >>>>>> Hi Elias, >>>>>> >>>>>> thaks. The explanation is a bit clearer but the problems remain. >>>>>> >>>>>> Key is a non-standard APL function and we should be careful with the >>>>>> implementation >>>>>> of non-standard functions. >>>>>> >>>>>> Every function in GNU APL is an invitation to use it. If the function >>>>>> is obviously useful then it improves >>>>>> the language. If it merely solves a particular programming case, then >>>>>> it may improve GNU APL a little, >>>>>> but at the price of incompatibility. Programs using it become less >>>>>> portable and that undermines the >>>>>> goal of free software. >>>>>> >>>>>> So the question in such cases is how useful is a function and is that >>>>>> usefulness worth the incompatibility? >>>>>> >>>>>> In the case of the key function I would say no. >>>>>> >>>>>> First of all the key function can only be used if the data it >>>>>> operates on is organized in a specific way: that >>>>>> the first column is the key. That may be the case but the fact that >>>>>> this is needed is somewhat contrary to >>>>>> how other APL function work. You could also call that arbitrary. >>>>>> >>>>>> That goal can easily achieved by other means. If I have a single >>>>>> *KEY* then something along the lines of >>>>>> >>>>>> *((DATA[1;]≡KEY)⌿KEY)[1;]* >>>>>> >>>>>> will give me the first row (or all rows if I remove the right [1;]) >>>>>> in an array that has that KEY. I suppose that is >>>>>> more or less what the key function does (plus applying some function >>>>>> on that expression). The expression is >>>>>> even superior to a function because it can be used at the left side >>>>>> of an assignment. >>>>>> >>>>>> If that is so then the key function is only one of several APL idioms >>>>>> (see http://aplwiki.com/FinnAplIdiomLibrary >>>>>> for a rather famous list of more than 700 such idioms). Each of the >>>>>> 700+ idioms is useful and would deserver >>>>>> its own symbol, but if we would do so (which is technically possible >>>>>> due to Unicode) then we would have turned >>>>>> GNU APL into an unreadable mess. >>>>>> >>>>>> Best Regards, >>>>>> Jürgen Sauermann >>>>>> >>>>>> >>>>>> >>>>>> >>>>>> On 07/03/2017 05:50 AM, Elias Mårtenson wrote: >>>>>> >>>>>> The key function is better described in the Dyalog reference manual, >>>>>> on page 153 here: http://docs.dyalog.com/1 >>>>>> 6.0/Dyalog%20APL%20Language%20Reference%20Guide.pdf >>>>>> >>>>>> Essentially, it's a grouping function. It's used to create groups of >>>>>> similar things, and apply a function on the individual instances. The >>>>>> examples in the section I referenced above should be pretty clear, I >>>>>> think. >>>>>> >>>>>> Regards, >>>>>> Elias >>>>>> >>>>>> On 3 July 2017 at 00:51, Juergen Sauermann < >>>>>> juergen.sauerm...@t-online.de> wrote: >>>>>> >>>>>>> Hi Elias, >>>>>>> >>>>>>> I am not quite in favour of it and it has problems. >>>>>>> >>>>>>> It is not on my keyboard (even though I am using a Dyalog keyboard). >>>>>>> Not to talk about other keyboards. >>>>>>> >>>>>>> It does not really look like need-to-have function and I suppose it >>>>>>> can be >>>>>>> efficiently performed by a short combination of other APL primitives. >>>>>>> >>>>>>> In my opinion adding primitives for every imaginable use case (and >>>>>>> there are certainly use cases for the key function) leads to an >>>>>>> overloading >>>>>>> of the APL language in the long run and does not improve the >>>>>>> language. >>>>>>> >>>>>>> Another problem is that after reading the description several times, >>>>>>> I still >>>>>>> can't explain in simple terms what the function is actually doing. >>>>>>> That makes it >>>>>>> a good candidate for a never used function if it should ever be >>>>>>> implemented. >>>>>>> >>>>>>> Best Regards, >>>>>>> Jürgen Sauermann >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On 07/02/2017 06:24 PM, Elias Mårtenson wrote: >>>>>>> >>>>>>> How about implementing the key function, ⌸? >>>>>>> >>>>>>> It's described in this article on the Dyalog site: >>>>>>> https://www.dyalog.com/blog/2015/04/exploring-key/ >>>>>>> >>>>>>> Jürgen, are you in favour of this function? >>>>>>> >>>>>>> Regards, >>>>>>> Elias >>>>>>> >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>> >>>>> >>>> >>> >