The best programming language: Python vs Ruby vs Java vs C#

There is no silver bullet programming language, but we hope this table can provide you more information.

Python Ruby Java C#
Typing dynamic dynamic static static (with inferencing)
Compile-time type checking Static Analysis tools exist Static Analysis tools exist x x
Runtime type checking x x x x
constants x sortof – final fields x
Object-orientation
Interfaces sort of x x x
Abstract Base Classes sort of in 2.6 and above x x
Multiple Inheritance x sort of
"Everything’s an object." x x Sort of – native types exist, but have wrappers.
Operator Overloading x x x
Properties x x x
private members convention is to prefix members that shouldn’t be accessed outside a class with an underscore x x
protected members x – public fields are not allowed x x
Procedural Stuff
Allows functions not bound to classes x x sort of – nested functions sort of – lambdas and nested functions
Keyword Arguments x
Function Overloading x x
Optional arguments x x
blocks x
Tools
Interactive Shell x x
CPAN-like module archive pypi ruby gems
IDEs Aptana, Eclipse PyDev, Emacs, Vim, Komodo (Edit) Aptana, Eclipse RDT, Emacs, Vim, Komodo (Edit) Eclipse, NetBeans, probably others Visual Studio, SharpDevelop, MonoDevelop
Build tools distutils, setuptools, paver, rc.buildout rake ant nant, MSBuild
Functional-esque features
map/reduce/filter x x
lambdas x – one expression only x – anonymous functions x
Closures sort of x
Continuations x x x
First-class functions x x sort of – delegates
List Comprehensions x x x
built in immutable list x
Practical Concerns
FOSS availability good good good poor
Paid software availability poor poor good good
IIS options FastCGI, isapi_wsgi FastCGI Probably, but I’m not sure what they are. ASP.NET
Apache Options mod_python, mod_wsgi, mod_fastcgi mod_ruby, mod_fastcgi tomcat mod_mono (experimental)
Package system modula-like modula-like modula-like Windows DLLs – can be painful
SQL Server Support mostly mostly mostly x
Oracle Support x x x mostly
Popular frameworks numerous – django, cherrypy, web.py, pylons, and more Rails and Sinatra Numerous MVC, WebForms, MonoRail
Misc
Scoping Determined by indentation end keyword { } { }
Garbage Collection Reference counting and generational Reference counting Generational Generational
Distribution format eggs gems jars msi
Virtual Environment x x
immutable strings x sort of – strings may be "frozen" x x
mutable strings sort of – lists are mutable and may be joined into strings x x x
Boolean None, 0, and empty collections evaluated as false. Everything else is true. None evaluates as false. Everything else is true. *Only* boolean-typed values are evaluated as such *Only* boolean-typed values are evaluated as such. However, implicit and explicit conversions may be specified.

Comments

  1. C# has named arguments.
    In C# everything IS an object.

    More C# IDEs:
    QuickSharp

    “immutable list” – C# array

  2. I stoped reading after the “Everything‚Äôs an object.” row, IN C# EVERYTHING IS AN OBJECT, jesus…

Leave a Reply