[Haskell-cafe] Batteries included (Was: GHC is a monopoly compiler)
Joachim Durchholz
jo at durchholz.org
Tue Sep 27 23:14:15 UTC 2016
Am 27.09.2016 um 23:25 schrieb Olaf Klinke:
> Can someone please define what exactly a "batteries included"
> standard library is?
Anything you'll typically need is already available.
For some value of "typically need", so it's slightly squishy - here's a
list of batteries I'd like included:
- Reading/writing files
- Reading over HTTP (reliably - HTTP is surprisingly complex)
- Search&replace in test streams
- Easy-to-use string->string maps
- JSON parsing and printing (bonus points for YAML)
- GUI stuff
- Website stuff
- Sending mails
- Solid ecosystem:
- build system,
- library directory,
- no-brainer automated testing support.
(Complicated testing means more bugs in test code than in
production code - this diverges.)
> IMHO that Python-Haskell comparison is unfair.
> Although both claim to be general-purpose languages, the focus in
> Haskell certainly has been on language research for most of its life.
I do not think that Python actually comes with all batteries included.
And in some areas support is pretty bad.
> I recently hacked together a web client in python, my first project
> in that language. Documentation is excellent. Yet I am still
> horrified I had to use a language that provides so few static
> guarantees to control megawatt machines.
That, and the idea that class and function declarations are executable
statements.
Circular dependencies are "handled" by passing partially-initialized
objects around; the Python interpreter handles this with no problems,
but programmers have fun because nobody assumes incomplete initialization.
I.e. Python's language semantics is broken by design in pretty
fundamental areas.
That said, it's good for banging something together quickly. Been there,
done that, got the t-shirt.
Just don't do anything that you need a team for with it, the lack of
guarantees will really start to hurt.
> What puts me off Haskell nowadays is the direct result of Haskell's
> roots in language research: Often when I come across a package that
> does what I need, it uses the conduit, lens or another idiom, which
> are like a language in a language to learn. In milder ways Python
> seems to suffer the same problem.
I think Python shares that problem with Lisp: it's so easy to add
another meta-idiom that too many people actually do this, and most don't
even think about composability or guarantees.
> So please, developers: Write more
> batteries, but make them expose a neat lambda calculus interface if
> possible that can be combined freely with other batteries.
I sense a conflict of objectives here.
Having many batteries pushes you towards wide APIs.
However, the wider an API, the harder it is to make it combinable. More
surface that must be made to match.
Making an API that's feature-complete *and* narrow is really hard and
takes a huge amount of designer and programmer time, plus the
willingness to lose most of your existing user base for an unproven idea
of improvement. This road is a really hard one, and you need corporate
backing or personal obsession to follow it.
More information about the Haskell-Cafe
mailing list