[Haskell-cafe] off-topic question: how well do you think linguistic relativity applies to PLs and programming?
Richard A. O'Keefe
ok at cs.otago.ac.nz
Thu Jan 23 02:52:54 UTC 2014
On 23/01/2014, at 1:36 PM, KC wrote:
> I would say it is more the concepts one uses than the programming language that has an effect on the programmer.
>
> After learning one OOP language it is not that hard to pick up another OOP language
It's not clear to me that that's true.
Consider: my first OO language was Smalltalk.
- everything is an object
- there is no pointer arithmetic
- bounds checking is obligatory
- integers are bounded
- single inheritance
- no static types
- anonymous functions used *extensively* and nest
- classes are objects
- you can define a variable in a class that belongs to the *class*
(not its instances) but such that its subclasses (not their instances)
have their own copy; inherited methods work on the receiver's copy
My third OO language was C++
- numbers are not objects
- there is pointer arithmetic
- bounds checking was not available
- integers have machine-dependent bounds
- multiple inheritance
- statically typed
- no anonymous functions and no function nesting
- classes were not objects
- class instance variables are not available
At least half the design patterns in the Gang Of Four book either
make no sense for or are trivial in Smalltalk.
What C++ programmer would ever think of passing a class as a
parameter to a function so it could create instances of different
classes? What C++ programmer, finding _that_ couldn't be done,
would next try to pass an object-creating function? Answer:
a Smalltalk or Lisp programmer writing C++.
What Smalltalk programmer, faced with let's say a parsing
problem, would ever say "I'll define a combinator for that"?
Answer: one who knows Haskell and is about to switch back to it.
What I see here is that a programming language has *many* aspects
and exposure to native style in several of them definitely
enlarges what you find easy to _think_ of, whereas the one you
are using right now affects what is _easy to express_ once thought
of.
One thing we're seeing is a lot of convergence: current Fortran is
an OO language with modules _and_ good array-crunching support,
there are C, C++, and Objective C compilers that support anonymous
functions (and Java, we keep being told, will get them Real Soon Now),
LINQ in C# was inspired by functional programming, ...
Right now, there are just three surviving languages where I trust
myself to do concurrent programming without stupid blunders that
take ages to fix: Ada, Erlang, and Haskell. We still need *new*
ideas.
More information about the Haskell-Cafe
mailing list