[TYPES] The type/object distinction and possible synthesis of OOP and imperative programming languages

Robert Harper rwh at cs.cmu.edu
Thu Apr 18 17:15:15 EDT 2013

The term "declarative" never meant a damn thing, but was often used, absurdly, to somehow lump together functional programming with logic programming, and separate it from imperative programming.  It never made a lick of sense; it's just a marketing term.

Bob Harper

On Apr 18, 2013, at 2:48 PM, Jason Wilkins wrote:

> [ The Types Forum, http://lists.seas.upenn.edu/mailman/listinfo/types-list ]
> Warning, this is a bit of a rant.
> That paragraph from Wikipedia seems to be confused.  It gives the fourth
> paradigm as "declarative" but then says "first order logic for logic
> programming".  It seems somebody did an incomplete replacement of
> "declarative" for "logic".  Wikipedia is often schizophrenic like that.
> Personally, I think that object oriented and logical programming only
> became official paradigms because there was a certain level of hype for
> them in the 1980s and nobody has thought to strike them off the list after
> the hype died down.
> Object-oriented, as constituted today, is just a layer of abstraction over
> imperative programming (or imperative style programming in functional
> languages, because objects require side-effects).  What "object-oriented"
> language actually in use now isn't just an imperative language with fancy
> abstraction mechanisms?
> The problem with having declarative languages as a paradigm (which logical
> languages would be a part) is that it feels like it should be a
> "miscellaneous" category.  Being declarative doesn't tell you much except
> that some machine is going to turn your descriptions of something into some
> kind of action.  In logical programming it is a set of predicates, but it
> could just as easily be almost anything else.  In a way all languages are
> "declarative", it is just that we have some standard interpretations of
> what is declared that are very common (imperative and functional).
> My wish is that the idea of there being four paradigms would be abandoned
> the same we the idea of four food groups has been abandoned (which may
> surprise some of you).  We have more than four different modes of thinking
> when programming and some are much more important than others and some are
> subsets of others.  We should teach students a more sophisticated view.
> Ironically Wikipedia also shows us this complexity.  The
> programming language paradigm side bar actually reveals the wealth
> of different styles that are available.  There is simply no clean and
> useful way to overlay the four paradigms over what we see there, so it
> should be abandoned because it gives students a false idea.
> On Wed, Apr 17, 2013 at 9:42 AM, Andreas Abel <andreas.abel at ifi.lmu.de>wrote:
>> [ The Types Forum, http://lists.seas.upenn.edu/**
>> mailman/listinfo/types-list<http://lists.seas.upenn.edu/mailman/listinfo/types-list>]
>> On 17.04.2013 11:30, Uday S Reddy wrote:
>>> Mark Janssen writes:
>>> From:  en.wikipedia.org: Programming_paradigm:
>>>> "A programming paradigm is a fundamental style of computer
>>>> programming. There are four main paradigms: object-oriented,
>>>> imperative, functional and declarative. Their foundations are distinct
>>>> models of computation: Turing machine for object-oriented and
>>>> imperative programming, lambda calculus for functional programming,
>>>> and first order logic for logic programming."
>> I removed the second sentence relating paradigms to computation models
>> and put it on the talk page instead.  It does not make sense to connect
>> imperative programming to Turing machines like functional programming to
>> lambda calculus.  A better match would be random access machines, but the
>> whole idea of a connection between a programming paradigm and a computation
>> model is misleading.
>> While I understand the interest in purely theoretical models, I wonder
>>>> two things:  1)  Are these distinct models of computation valid?  And,
>>>> 2) If so, shouldn't a theory of types announce what model of
>>>> computation they are working from?
>>> These distinctions are not fully valid.
>>> - Functional programming, logic programming and imperative programming are
>>> three different *computational mechanisms*.
>>> - Object-orientation and abstract data types are two different ways of
>>> building higher-level *abstractions*.
>>> The authors of this paragraph did not understand that computational
>>> mechanisms and higher-level abstractions are separate, orthogonal
>>> dimensions
>>> in programming language design.  All six combinations, obtained by
>>> picking a
>>> computational mechanism from the first bullet and an abstraction mechanism
>>> from the second bullet, are possible.  It is a mistake to put
>>> object-orientation in the first bullet.  Their idea of "paradigm" is vague
>>> and ill-defined.
>>> Cheers,
>>> Uday Reddy
>> --
>> Andreas Abel  <><      Du bist der geliebte Mensch.
>> Theoretical Computer Science, University of Munich
>> Oettingenstr. 67, D-80538 Munich, GERMANY
>> andreas.abel at ifi.lmu.de
>> http://www2.tcs.ifi.lmu.de/~**abel/ <http://www2.tcs.ifi.lmu.de/~abel/>

More information about the Types-list mailing list