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+unsubscr...@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.