7

I have detailed information on the latest developments in functional programming.

I think haskell is quite an advanced and high level programming language. With coq and agda this gets even more complex and advanced.

With "advanced" and "high level" I mean many distinct features, that can only be found in the respective languages.

Like for haskell

  • everything is pure and lazy per default
  • support for advanced concepts like GADTs, Monads, Functors, etc.

For coq / agda

  • a dependent type system

And both haskell and coq are used in academics, a good sign that they are 'state-of-the art'.

However I have no clue what comparable developments in object oriented programming are.

What are some of the latest developments in object oriented programming?

What would be a state-of-the-art OOP language counterpart to haskell / coq?

(I even search for advanced programming language on google, but I found mostly haskell related information. The only language I could think of is D 2.0. Scala is for me mainly a java compatible version of haskell.)

mrsteve
  • 450
  • 3
  • 10
  • 1
    What are you trying to compare? Just saying "advanced and high level" is not enough detail. – Oded Nov 06 '11 at 10:25
  • 1
    "Scala is for me mainly a java compatible version of haskell.)" not at all. Haskell is a pure functional language. Scala mixes functional and object paradigms. – Simon Bergot Nov 06 '11 at 11:03
  • OOP might fit as a language extension and/or library in a pure functional language like Haskell, but each object would have to be manipulated in a monadic way - OOP objects are (normally, if not strictly always) stateful. It may not be an insane idea, though. After all, there are impure functional languages with OOP - Common Lisp has CLOS, Objective CAML and F# in the ML family, ... Not really what you asked, but my first thought in response anyway. –  Nov 06 '11 at 12:12
  • 2
    There isn't really a state-of-the-art OOP evolution I know of, so much as divergent multi-paradigm approaches. C# adds LINQ (borrowing heavily from functional programming) to OOP. Python also deserves a mention for mixing in functional (and other) ideas. The modern C++ standard library *uses* classes, but mostly as a building-block for a more template-oriented style of coding using lots of non-member template functions. –  Nov 06 '11 at 12:23
  • Why, C++x11, of course! – Daniel C. Sobral Nov 06 '11 at 19:56

4 Answers4

5

Subtyping (i.e., any static object-oriented type system) is so much more complex than any "flat" type system typical for the functional languages. It is nearly impossible to formalise it properly. For this reason, no surprise that we have not heard yet about, say, dependent object-oriented type systems.

Probably, a single early example of such an attempt would be this paper.

SK-logic
  • 8,497
  • 4
  • 25
  • 37
0

I would say C# is probably a good language to loo at - it is a high level, general-purpose, managed, garbage-collected and object-oriented programming language.

The current version has generics, lambda expressions, built in parallelism constructs and more.

The next version is supposed to add asynchronous constructs.

Oded
  • 53,326
  • 19
  • 166
  • 181
0

The concept of a "state-of-the-art" language is hard to define. One can consider only the syntax, the toolchain (i.e c++ is not recent, but has powerful compilers), the framework (c# and java are popular because of it).

I don't know coq, but it does not look like it is a general purpose language. The specifity of Haskell is its purity. So my answer is: smalltalk, a pure oop language.

http://en.wikipedia.org/wiki/Smalltalk

Simon Bergot
  • 7,930
  • 3
  • 35
  • 54
  • 2
    Looks like the question about the advanced type systems, and so, dynamically typed Smalltalk does not qualify. – SK-logic Nov 06 '11 at 11:32
0

I find it funny most people are answering you back with programming languages :-) In the world of OO, most advances in the "state-of-the-art" are published at OOPSLA and ECOOP conferences.

You have to understand that in terms of "formal proof" (as with Coq/Adga/etc...), there are fundamental problems yet to be solved in the OO formulation of programs. Subtyping (which SK-logic mentioned), overriding, etc, they are all far from being "tractable" in terms of providing suitable structures than can then be manipulated and reasoned upon. Even so, you can find projects such as ESC-Java or Spec# that are paving the road for that type of research.

In terms of "what's new" in this areas, there are several "trends" that you may find:

  1. DSL's and DSL construction
  2. Model-Driven OO systems
  3. Refactoring
  4. Increasing the strength of type-systems (see Scala)
  5. Incorporating functional aspects into OO (again, Scala and C#)
  6. Tackling the parallelism problems
  7. Meta-Programming and Reflection
  8. ...