State of the Art
This article is a copy of a research work I did today, to draw a map of today’s development technologies. It is not finished (it will never be, actually) but I think it is rather interesting. Hope you find it interesting too :)
Technology Chart
Because software development is an art… the following table gives a quick overview of available object-oriented application blocks & frameworks, with references. This list is not intensive and will most likely change in the future.
Apple Macintosh | Microsoft Alternative | C++ | Ruby on Rails | |
---|---|---|---|---|
Unit Testing | OCUnit | Visual Studio Team System | CppUnit | Test::Unit |
Code Documentation | HeaderDoc | n/a | CppDoc | RDoc |
Build tools | Ant | MSBuild | GNU Make | Rant |
Persistence | CoreData, DataCrux | ObjectSpaces | Progress EdgeXtend | Ruby on Rails |
Web Applications | WebObjects | Classic ASP (unsupported & unsupportable) | ASP.NET, C++ Server Pages | Ruby on Rails, Comparison of Ruby on Rails against Spring + Hibernate |
Smart Clients | Cocoa | Avalon + XAML, MFC | n/a | n/a |
Aspect-Oriented Programming | AspectCocoa | Native .NET functionality | AspectC++ | AspectR |
AJAX | (idem Java) | Announced | n/a | Ruby on Rails |
Logging | log4cocoa | Enterprise Library’s Logging Application Block | log4cpp | log4r |
IDE | Apple Xcode, Metrowerks CodeWarrior | n/a | Eclipse, Apple Xcode, Metrowerks CodeWarrior, Microsoft Visual C++, Borland C++ Builder, Bloodshed Software Dev-C++ | Mondrian, Arachno Ruby, Eclipse |
Business Rules Engine | n/a | n/a | ILOG | n/a |
Global information
Some information about the object-oriented application frameworks above:
Platform | Main Programming Languages | Multiplatform | Single Inheritance | Late-binding | Open source | ISO Standard | Inspired from |
---|---|---|---|---|---|---|---|
Java | Java | ![]() |
![]() |
![]() |
![]() |
![]() |
NeXT OpenStep, C++ |
.NET | C#, Visual Basic.NET, Java, JavaScript, C++ | ![]() |
![]() |
![]() |
![]() |
![]() |
Java, COM |
PHP | PHP | ![]() |
![]() |
![]() |
![]() |
![]() |
C |
JavaScript | JavaScript | ![]() |
![]() |
![]() |
![]() |
![]() |
Self, C (NOT from Java!) |
Cocoa | Objective-C, Java, C++ | ![]() |
![]() |
![]() |
![]() |
![]() |
NeXT OpenStep, Smalltalk |
C++ STL + GCC | C++ | ![]() |
![]() |
![]() |
![]() |
![]() |
C |
Ruby on Rails | Ruby | ![]() |
![]() |
![]() |
![]() |
![]() |
Eiffel, Ada, Perl |
(Useless) Comments
As you can see, there are common patterns appearing in the table above:
- Eclipse can build whatever you want
- .NET-related project names tend to begin with the letter N
- PHP-related project names tend to begin with the letter P
- JavaScript-related project names tend to begin with JS
- Ruby-related project names tend to begin or end with R
- Logging frameworks have all the same log4xxx name
- Java-related project names tend to… come from Indonesia :)
From an historical point of view, however, the fact that most object-oriented frameworks (that is, those not based on a scripting language) use single inheritance is interesting, and not casual: Objective-C, used for the development of the software created for the NeXT workstation, introduced the notion of “interfaces” first (originally named “protocols”), and this idea was taken lately to Java and .NET.