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.

Java.NETPHPJavaScript
Unit TestingJUnitNUnit, NMock, TestDriven.NETPhpUnitJSUnit
Code DocumentationJavadocXML Code Comments + NDocPHPDoctorJSDoc
Build toolsAntNAntn/an/a
PersistenceHibernate, iBATISNHibernate, Olero ORM, iBATIS, NPersist; Article about Solutions for object persistence in the .NET architecturePropeln/a
Web ApplicationsSpring Framework, Struts, Velocity, JavaServerFacesSpring.NET, ASP.NET, Castle Projectn/an/a
Smart ClientsJFC/SwingWindows FormsPHP-GTKXUL
Aspect-Oriented ProgrammingAspectJAspectSharp, SetPointaoPHPJavaScript and AOP
AJAXFor Java, JSON-RPCFor .NETJPSPAN, Flexible AJAX, AjaxACn/a
Logginglog4jlog4netlog4phpn/a
IDESun Java Studio Creator, Eclipse, Borland JBuilder, IntelliJ IDEA, Apple Xcode, NetBeans, JCreator, BlueJ, NetComputing AnyJ, DrJavaVisual Studio.NET, Macromedia Dreamweaver, Eclipse, Borland Delphi, #develop, Mainsoft Visual MainWin for Linux, ASP.NET WebMatrix, CodeSmithStudioEclipse, NuSphere, IDE.PHP, Macromedia DreamweaverEclipse, Macromedia Dreamweaver
Business Rules EngineJESS, JxBRE, ILOGNxBRE, InRule, ILOGn/an/a
Apple MacintoshMicrosoft AlternativeC++Ruby on Rails
Unit TestingOCUnitVisual Studio Team SystemCppUnitTest::Unit
Code DocumentationHeaderDocn/aCppDocRDoc
Build toolsAntMSBuildGNU MakeRant
PersistenceCoreData, DataCruxObjectSpacesProgress EdgeXtendRuby on Rails
Web ApplicationsWebObjectsClassic ASP (unsupported & unsupportable)ASP.NET, C++ Server PagesRuby on Rails, Comparison of Ruby on Rails against Spring + Hibernate
Smart ClientsCocoaAvalon + XAML, MFCn/an/a
Aspect-Oriented ProgrammingAspectCocoaNative .NET functionalityAspectC++AspectR
AJAX(idem Java)Announcedn/aRuby on Rails
Logginglog4cocoaEnterprise Library's Logging Application Blocklog4cpplog4r
IDEApple Xcode, Metrowerks CodeWarriorn/aEclipse, Apple Xcode, Metrowerks CodeWarrior, Microsoft Visual C++, Borland C++ Builder, Bloodshed Software Dev-C++Mondrian, Arachno Ruby, Eclipse
Business Rules Enginen/an/aILOGn/a

Global information

Some information about the object-oriented application frameworks above:

PlatformMain Programming LanguagesMultiplatformSingle InheritanceLate-bindingOpen sourceISO StandardInspired from
JavaJavaNeXT OpenStep, C++
.NETC#, Visual Basic.NET, Java, JavaScript, C++ (C#: ISO 23270, CLI: ISO 23271 & 23272)Java, COM
PHPPHPC
JavaScriptJavaScript (ISO 16262)Self, C (NOT from Java!)
CocoaObjective-C, Java, C++NeXT OpenStep, Smalltalk
C++ STL + GCCC++ (ISO 14882)C
Ruby on RailsRubyEiffel, Ada, Perl

(Useless) Comments

As you can see, there are common patterns appearing in the table above:

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.