Thank you for your supportive words. I do hope that this will get the ball 
rolling.

On Sunday, October 11, 2020 at 12:11:23 AM UTC+3 rcore...@gmail.com wrote:

> Those are good points and FWIW I would be excited to use the proposed 
> indexing functions and agree that they are a big part of the issue, 
> independent of the operator overloading. There has been a lot of discussion 
> about supporting multidimensional indexing etc so this has been a major 
> issue over the years, so maybe this will go forward!
>
> - Randy
>
> > On Oct 8, 2020, at 2:18 AM, Raanan Hadar <rha...@gmail.com> wrote:
> > 
> > So the first paragraph in my answer to Jon addresses this. But I think I 
> could have been clearer: I think 80% of the readability problem is 
> addressed by index operator methods, which is the critical part. Full 
> operator overloading is nice to have in my opinion and I argue people will 
> gladly live without it given all the other benefits Go brings to the table 
> in software engineering. I think its a very similar approach to what Go did 
> with pointers: Is full pointer arithmetic beneficial? yes, but it would no 
> longer be in the spirit of Go.
> > 
> > I think that using languages such as Matlab and Python as a starting 
> point, or "prototyping languages" is becoming less and less relevant today. 
> This might have been the way we developed algorithms ten years ago but 
> today its just like any software development. The reality many data 
> scientists and engineers face today is that data pipelines are constantly 
> changing and increasing in complexity. They need to be maintainable and 
> allow for quick iteration, integration and deployment. These are the 
> qualities that Go excels at. A language that can effectively achieve a 
> prototype in 80% the syntax efficiency but can sustain quality over time is 
> much more important than having the richest syntax possible. Another point 
> is that even while in the "prototyping" phase, big data challenges which 
> data scientist face today, unlike ten years ago, will require the data 
> scientist to do some heavy lifting to get efficient compute, network and IO 
> to get that initial result. So in many cases the "prototype" is often a 
> complex pipeline that is deployed in k8s for example. 
> > 
> > I think that a Go-Python integration is excellent but as I noted, it 
> leaves a lot to be desired. A lot has been written about the "infinite loop 
> of sadness" (here is a good link: 
> https://medium.com/pachyderm-data/sustainable-machine-learning-workflows-8c617dd5506d).
>  
> I think this is a big problem with companies like Google having an 
> excellent understanding of challenges of sustaining data pipelines at 
> scale. Its a lot of what they do in their day to day. This is why, I think 
> the synergy in a single language will be amazing.
> > 
> > As for Julia, I was also excited when I first learned about it and I 
> hope I am not offending anyone using Julia here. Because on paper its 
> marketed as the killer language for this, but Julia has two big problems (I 
> sample Julia regularly):
> > 1. Julia is nowhere near ready. Julia has a few more years before it 
> gets its basics down. I think it has made a lot of progress in the last few 
> years but someone trying Julia out in 2020 is guaranteed to hit some really 
> annoying hurdles from day one. I'll give you a trivial example, lets say 
> you want an IDE for Julia. Your best bet today is probably a text editor 
> like vim or emacs. You have JUNO for atom which is nice but no longer 
> developed or the vscode IDE, which might be amazing in a few years but is 
> far from stable (https://github.com/julia-vscode/julia-vscode/issues). 
> And this is just one critical issue out of many.
> > 2. My second issue with Julia is more troublesome because unlike the 
> first, I don't think it will ever be solved. Julia is a language that was 
> designed to be very rich syntax and feature wise. But its toolchain was 
> completely neglected. Go has an amazing toolchain, its not the sexiest part 
> of the language, but its critical and it was designed to encourage good 
> software engineering. As Rob Pike said: "Although tools like these are 
> rarely mentioned in the context of language design, they are an integral 
> part of a language's ecosystem and the fact that Go was designed with 
> tooling in mind has a huge effect on the development of the language, its 
> libraries, and its community". Julia has poor package management and 
> tooling which make it a pain to deploy in production compared to Go.
> > 
> > In summary, If Go were to implement this, I really believe that it will 
> run circles around Julia even in a few years from now when it reaches 
> puberty. Because Go is a better language when it comes to software 
> engineering.
> > On Thursday, October 8, 2020 at 7:46:16 AM UTC+3 rcore...@gmail.com 
> wrote:
> > I think we all agree that Python has some major issues.. :) 
> > 
> > But the point of Jon's argument which struck me as very compelling is 
> that Go would really need full operator overloading to serve as a serious 
> competitor given the standards to which people have become accustomed. I 
> didn't see in your replies a clear response to that, but maybe I missed it? 
> > 
> > The really tricky issue is that everyone wants something like Python *as 
> a starting point* when just messing around, because it is so easy and 
> flexible to just write simple expressions etc. But then once things start 
> to scale up, all the "issues" start to outweigh those initial advantages. 
> And for a huge number of Python users, they never scale up and don't care 
> about anything more than getting their immediate needs solved, mostly by 
> copy / paste / modify programming.. 
> > 
> > That's why I think the Python / Go hybrid approach could be good -- 
> end-user type people can mess around in Python, but the same functionality 
> is available in Go, and as stuff starts to get scaled up to the point of 
> requiring more libraries, those can hopefully be done in Go, so that Python 
> always remains on the "messing around" scale of things, while the deeper 
> infrastructure gets built out in Go.. This probably requires a fair bit of 
> extra work and motivation on the part of the Go-side developers to keep up 
> with things and support the developing needs of their users, so it may not 
> be plausible for a larger-scale community, but it is working pretty well 
> for my small-scale biological neural network modeling community.. 
> > 
> > Functionally, it is sort of similar to having a transpiler, in that 
> Python is just providing a simple front-end syntax for accessing the deeper 
> Go functionality. 
> > 
> > Anyway, wasn't Julia supposed to solve all these issues? I don't know 
> much about it in detail, but I googled just to see what the latest 
> discussion there is relative to Python -- this thread is informative and 
> current: 
> > 
> > 
> https://discourse.julialang.org/t/why-is-python-not-julia-still-used-for-most-state-of-the-art-ai-research/45896/17
>  
> > 
> > The basic thrust is that people don't care and just go with what 
> everyone else is doing. This was the best quote IMO: 
> > 
> > > There are countries that still do not use the metric system, you 
> figure it out. 
> > 
> > Also this is informative: 
> > 
> > > For my subjective idea I would also say Python, as someone mentioned 
> here, is much easier language than Julia. Coming from MATLAB looking at 
> packages of Julia seems to me as an act of wizard. 
> > 
> > Python hits a sweet spot of simplicity and power.. Julia apparently does 
> not. Go hits a different such sweet spot, but not with the same kind of 
> transparent syntactic expressions needed for data science / ML etc. 
> > 
> > - Randy 
> > 
> > > On Oct 7, 2020, at 5:49 PM, Raanan Hadar <rha...@gmail.com> wrote: 
> > > 
> > > So we respectfully disagree here, so the best thing I can do is add 
> some quality arguments. I think this is an important discussion that might 
> cement Go as a broad DSL in the sense that it does a lot of things 
> exceptionally well, but this issue will remain a blind spot. 
> > > 
> > > I fully understand the need to keep Go "pure and simple". Its the key 
> to its success. But this is an important area where Go does not have enough 
> features to be effective. Secondly, I think that solving this issue can be 
> achieved while maintaining orthogonality and not hurting experience of the 
> majority. Third, as I answered Jon, I think that looking at this proposal, 
> or more generally, this problem, from the Go programmer's perspective, is 
> like trying to optimize a local optima. Go programmers don't have much to 
> gain from this. But from a global perspective that seeks to optimize 
> software development as a whole, there's a huge benefit that is overlooked 
> here. Go was not designed to cater the needs of the programmer but software 
> engineering as an end to end process (
> https://talks.golang.org/2012/splash.article). 
> > > 
> > > With regards to Python, I've detailed common examples in my proposal, 
> where Python for numerical computing leaves a lot to be desired. 
> Fundamental issues which Go solves by design and are not addressed 
> effectively by putting the two together as you suggested. Secondly, I am 
> not the only one saying that there is a real need for a better language 
> than Python. To name two good examples: Yann LeCun said this last year: 
> https://venturebeat.com/2019/02/18/facebooks-chief-ai-scientist-deep-learning-may-need-a-new-programming-language/
>  
> and Jeremy Howard, former president and chief scientist of Kaggle and the 
> author of the fast.ai, strongly advocates that Python is not the way to 
> go in long run: https://www.youtube.com/watch?v=c-KAf2g6YN4 
> > > 
> > > 
> > > On Thursday, October 8, 2020 at 1:10:22 AM UTC+3 rcore...@gmail.com 
> wrote: 
> > > Jon's points probably sink this proposal. Go is a very different 
> language, and making it less self-consistent to solve some fraction of 
> syntactic readability is almost certainly not going to get over the very 
> high threshold for changing the language. 
> > > 
> > > If you're going to switch over to Go, you'll have to learn a LOT of 
> new concepts and change the way you approach things. In the end, it is 
> better that Go remain "pure and simple" -- the simpler it remains, the 
> easier it is for anyone to learn it, no matter where they are coming from. 
> > > 
> > > Another strategy, which I'm pursuing, is to support Python as a 
> scripting language on top of Go backend code that does all the heavy 
> lifting. That is how Python is used in most cases already, except with C / 
> C++ backends. So, keep Python Python, and keep Go Go, but allow people to 
> interoperate more easily. This way, people can get some exposure to the 
> virtues of Go, and maybe decide to switch over at some point.. 
> > > 
> > > This tool makes it relatively easy: https://github.com/go-python/gopy 
> I've also written a GoToPy converter https://github.com/goki/gotopy (will 
> be moving over to go-python soon -- no time right now), so you can write 
> 'main' programs in Go, then easily convert them over to Python (Go -> 
> Python is very easy, the other way not so much), which provides a point of 
> departure for Python folks to start using your code.. 
> > > 
> > > - Randy 
> > > 
> > > > On Oct 6, 2020, at 12:56 AM, Raanan Hadar <rha...@gmail.com> wrote: 
> > > > 
> > > > Lets start with saying that I think this is a valid criticism. 
> > > > 
> > > > Although it does not solve things 100%, it does solve the heart of 
> the problem for me at least: 
> > > > There is a mixture of index operators with functional operators in 
> the syntax: 
> > > > The [] operator gives the reader the 'where' context and the () 
> gives the reader the 'what' context. If you are using all your arguments 
> via () causes the readability problem. So while not having full operator 
> overloading, you still have to use .Add() instead of '+', the grammar is 
> now consistent and concise and separates the 'where' from the 'what'. 
> > > > 
> > > > Also, please consider that different users have a different 'value 
> scale' to gain from this proposal: 
> > > > To a gonum user, this proposal is about a 20% improvement and 
> nothing to run home about. 
> > > > To a matlab/python programmer, this solves about 80% of their 
> problems and combining this with the other benefits of Go is enough to 
> strongly consider switching to Go. 
> > > > 
> > > > Realistically, I don't think that I can convince the Go core dev 
> team to add full operator overloading and that is 
> > > > probably the only way to achieve what you are suggesting... if you 
> have another way to achieve this, I am open 
> > > > In the end of the day, the question to ask is whether or not we 
> > > > are better off in implementing this. 
> > > > On Tuesday, October 6, 2020 at 9:33:17 AM UTC+3 jonr...@gmail.com 
> wrote: 
> > > > i think this looks nice but realistically only cleans up v simple 
> cases. a lot of the very-verbose-and-not-so-elegant-looking 
> multidimensional math stuff looks "worse" than other languages because go 
> doesn't have operator overloading. it is not clear to me this improves 
> syntax too much in practice on it's own. (this is not a request to add 
> operator overloading but merely the non-controversial statement that 
> operator overloading can help math-heavy code look more "hand drawn" 
> sometimes). 
> > > > 
> > > > the gorgonia example is indicative of the issue: nil may be less 
> aesthetically pleasing than ":" (or not) but it's unlikely the surrounding 
> code looks anything like the math as expressed on paper by hand either. 
> > > > 
> > > > gonum is quite convenient even with this...code that uses it can 
> look a bit more 1960s than other languages but it is simple and 
> super-clear. i like that i am never (read: rarely) confused by () or , or 
> [] etc characters in go. if you could find a way to cover more ground the 
> change would look more compelling to me. 
> > > > 
> > > > On Mon, Oct 5, 2020 at 12:04 PM Raanan Hadar <rha...@gmail.com> 
> wrote: 
> > > > It actually didn't change that much, I just applied your valuable 
> feedback. Thanks alot! 
> > > > 
> > > > Its critical to communicate clearly. 
> > > > so I changed the before and after part of the proposal to be more 
> approachable to people who 
> > > > are less familiar with numerical libraries in Go. 
> > > > 
> > > > Its not a trivial proposal in that the main audience will probably 
> use it in a library and not in vanilla Go. 
> > > > But it was still a very valid point. 
> > > > 
> > > > thanks again. 
> > > > 
> > > > On Monday, October 5, 2020 at 3:19:02 AM UTC+3 jake...@gmail.com 
> wrote: 
> > > > The examples I was looking at are gone now. That section has been 
> completely rewritten. So its kind of moot. Its possible that I was 
> confusing the 'before' and 'after' examples, since they were not clearly 
> labeled. In any case the rewritten version seems to make sense now. 
> > > > 
> > > > On Sunday, October 4, 2020 at 4:50:10 PM UTC-4 kortschak wrote: 
> > > > On Sun, 2020-10-04 at 09:06 -0700, jake...@gmail.com wrote: 
> > > > > I stopped reading at the " Show example code before and after the 
> > > > > change " because many of the examples of "before the change" code 
> > > > > seem to be invalid in go, and the others do not do what you seem 
> to 
> > > > > imply they do. Am I misinterpreting this section in some way? 
> > > > > 
> > > > 
> > > > I'm curious as to which examples of "before the change" you think 
> are 
> > > > invalid. From what I can see there, one is borderline (in the last 
> > > > example there is no package selector, but it could have been a dot 
> > > > import and is likely this way for brevity). The rest look like 
> normal 
> > > > method invocations, which are the standard way for this kind of 
> thing 
> > > > to be done in the current implementations of matrix and tensor 
> > > > operations in Go. 
> > > > 
> > > > Dan 
> > > > 
> > > > 
> > > > 
> > > > -- 
> > > > You received this message because you are subscribed to the Google 
> Groups "golang-nuts" group. 
> > > > To unsubscribe from this group and stop receiving emails from it, 
> send an email to golang-nuts...@googlegroups.com. 
> > > > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/f49975aa-5a76-45b7-a158-b1067b1dc580n%40googlegroups.com.
>  
>
> > > > 
> > > > -- 
> > > > You received this message because you are subscribed to the Google 
> Groups "golang-nuts" group. 
> > > > To unsubscribe from this group and stop receiving emails from it, 
> send an email to golang-nuts...@googlegroups.com. 
> > > > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/ee94ef0a-c461-4262-99fe-25a52ee11646n%40googlegroups.com.
>  
>
> > > 
> > > 
> > > -- 
> > > You received this message because you are subscribed to the Google 
> Groups "golang-nuts" group. 
> > > To unsubscribe from this group and stop receiving emails from it, send 
> an email to golang-nuts...@googlegroups.com. 
> > > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/c475d7e6-3724-409d-9532-6b933b67cf2dn%40googlegroups.com.
>  
>
> > 
> > 
> > -- 
> > You received this message because you are subscribed to the Google 
> Groups "golang-nuts" group.
> > To unsubscribe from this group and stop receiving emails from it, send 
> an email to golang-nuts...@googlegroups.com.
> > To view this discussion on the web visit 
> https://groups.google.com/d/msgid/golang-nuts/82947d3c-e7ad-4f3b-8358-50d6809c040fn%40googlegroups.com
> .
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/2e562bd7-063a-495d-875f-c52a6258e49fn%40googlegroups.com.

Reply via email to