[vox] Who thinks Java is cool?

Norm Matloff matloff at cs.ucdavis.edu
Wed Jun 15 23:41:57 PDT 2011


On Wed, Jun 15, 2011 at 08:49:37PM -0700, Bill Broadley wrote:

> Been busy, but I couldn't represent throwing out a few (er, well it
> started that way) thoughts.

Thanks for the essay, very interesting.

> Python has very nice combination of easy to use, powerful, yet
> structured enough so non-trivial sized programs don't turn into a mess.
> I'm not a big fan of the lack of types, but that's not a major issue
> for me.  I like how the language is growing, still well designed, and
> willing to depreciate the old approach and keeping thing coherent and
> well designed.  While the GIL is gross, python seems relatively unique
> in providing multiprocess safe pipes and queues as part of the language
> standard.  Suddenly having 1-N producers and 1-M consumers safely
> communicating to keep that fancy multicore phone/tablet/laptop/server is
> rather straight forward.

Python is my favorite language for general-purpose programming (R for
data/statistical stuff), but the GIL continues to be a major issue.
They did add the "multiprocessing" package which helps a bit, but only a
bit.

> Oh, for anyone interested in learning python google has a cool 2 day
> class that has 7 lectures, laps, and is rather well done.  You'll
> definitely have a good grasp of the basics by the end if you have any
> familiarity with any programming language.  Hopefully folks can figure
> out how to find said online class.

Or see my own Python tutorial :-) .  It's at

   http://heather.cs.ucdavis.edu/~matloff/python.html 
 
The first unit is on the general language, then there are units on
networks, threading and so on.

> I've recently been tinkering with Go.  It's strongly typed (which I
> like), has a nice clear syntax, and is available compiled or
> interpreted.  It seems to be the most multi-processing friendly language
> I've tried.  I wrote a multithreaded mandlebrot solver that was the
> fastest go implementation for the debian alioth benchmark last I
> checked.  It was shockingly easy (a single sitting) to write a producer
> of chunks, asynchronously talk to N clients that got variable sized
> chunks of work and talk to a single consumer to take the out of order
> chunks of finished work and write them in order to a file.
> Disappointingly my first implementation while elegant, was a bit
> overkill for the example program provided with not much I/O and a fair
> bit of work per pixel.  No points for more efficient I/O, higher
> parallelism, or less sensitivity to highly variable CPU per chunk.
 
> I kind of think of Go as a second generation C designed to be more OO
> and multicore friendly.  I particular I'm really fond of channels.

Unfortunately, I have the opposite point of view.  Thanks for pointing
us to Go (I'd been vaguely aware of it), but the use of channels would
be a big negative for me.  It's generally believed in the parallel
processing community that the shared-memory paradigm makes for clearer
code than does message-passing, and I personally agree.

It's too bad, because I really like coroutines, which I see Go includes
and indeed highlights.  (Python can set them up too, using generators.)
But lack of shared-memory would be a big drawback for me.

Or have a misread the Go Web page?

What is your opinion of the Cilk language?

By the way, thanks to Alex for the info on Sun/Oracle.  Again, this is
something I had only been vaguely aware of.

Norm



More information about the vox mailing list