[FoRK] Top general purpose languages: Practical choices for app logic / presentation & web / server apps

Damien Morton dmorton at bitfurnace.com
Tue Jan 18 14:31:54 PST 2011

On Tue, Jan 18, 2011 at 4:20 PM, Stephen Williams <sdw at lig.net> wrote:

> A few years ago, I used Visual Studio with C# / .NET along with Emacs doing
> a Java half of the project.  There are some nice things about Visual Studio,
> but a lot I did not like.  Now, a friend of mine has an uber cool plugin
> that shows the entire current source file as sort of a thumb-strip on the
> right.  I'm going to imitate that somewhere some day.  But otherwise, I'm
> just as happy in Eclipse as Visual Studio (except perhaps the GUI speed on
> MacOS).

Whats the name of that plugin?

> And, most of the time, I'm back to Emacs with alternation to the IDE.  I
> toggle back and forth in the same development sessions depending on whether
> I want context sensitive help.  Even those IDEs that can be configured with
> Emacs keystrokes are no match for Emacs.  In any case, since I only boot up
> Windows to run certain programs or test a build, Visual Studio is unlikely
> to help me.  Currently, I develop mobile apps in Java & C++ and desktop apps
> in Qt/C++.  Qt is so good, I can generally work in any of the three
> environments (MacOS X, Linux, or Windows) and be sure that almost everything
> will map well.  You have to keep a few things in mind, but they are minor
> and stable.  (ctrl vs. command, etc.)

Interesting - I have been wanting for a cross platform GUI framework -
looked at Qt a decade ago, and havent had reason to look again. Will do so.

> I did read about LINQ several times.  It reminds me of RDBMS code
> generators I've written in the past.  It's cool, but I'm a little more
> interested in implementing those as libraries that are nearly as easy to
> use.  Unless it is done in a completely general way, and not a task-specific
> Visual Basic-like language hack, it remains a hack.  For example, could I
> implement my own RDF graph query language using the same facilities?
>  (Interesting problems require a lot more than SQL/RDBMS.)  However, it is a
> hack I wouldn't mind having.  I'm not going to switch back to C# just for
> that however.

Its worth downloading Visual Studio Express (the free version of VS) and
having a play with LINQ, It really is done in a completely general way, and
people are doing all kinds of incredible things with it. Think of it as a
language extension that turns an SQL-like sublanguage into parse trees that
can be processed by the language itself at runtime. The simplest version of
it does dumbass processing of collections of objects, for example selecting
a bunch of objects from a collection based on some kind of condition. More
sophisticated versions leverage its power to provide querying
of arbitrary data stores, for example, an LDAP store. In other words, yes
you could do you own RDF query language, by creating a LINQ query provider.

I found this list of LINQ providers:

LINQ is something quite unique to C#. The closest thing I can think of is
some of the LISP meta level programming.

> In your opinion, what is the current viable range for C#/Mono/.NET?  What
> doesn't work yet?  Where can you not use it without headaches (missing key
> libraries, etc.)?  How easy is it to interface with native C++?  With Java?

Last I looked at C#/Mono for windows, it was about 6 or 7 years ago, and was
very incomplete - I was trying to do web development with Mono, and running
up against the "not implemented" stuff over and over again.. More recently I
looked at it for iPhone development, and they had basically written
an excellent bridge and set about providing the whole Cocoa API
set, re-jiggered for .NET. For someone who finds ObjC to hurt my eyes, this
was a real pleasure. I lost interest when Steve Jobs started bopping
non-approved languages, but apparently the project is going great guns now:
Mono-Objc, monotouch

Another place I have been using Mono is as part of the Unity 3D game
development system, which is most excellent.

On windows, interfacing with DLLs is incredibly straightforward. Unlike
Java, this has been designed in from the start. An example:

Interfacing with Java, I don't know anything about. I suppose you would have
to work out some kind of JVM to CLR bridge, with the two virtual machines
co-existing. Ugly.

> Stephen
> On 1/18/11 1:37 AM, Damien Morton wrote:
>> Its worth reconsidering C#, both .NET and Mono. Its more than Java with a
>> few tweaks. I find it a much more pleasant experience than Java. In
>> particular, its worth familiarising yourself with the LINQ part of the
>> language, which is something  extremely powerful and unique to C#. Its
>> also
>> worth considering Visual Studio as a huge bonus, possibly the best IDE on
>> the market.
>> For me the languages of choice are: Python, C#, and C/C++, in order of
>> speed.
>> On Mon, Jan 17, 2011 at 11:20 PM, Stephen Williams<sdw at lig.net>  wrote:
>>  Additions and comments on these points would be helpful.  In the
>>> following,
>>> proprietary-ish choices are filtered out (Visual Basic, .Net, etc.)
>>> except
>>> when they have a very privileged spot in a hot market (Objective-C/Cocoa)
>>> and are at least mostly open.  (And, no, Mono isn't going to make .Net
>>> attractive.  It is just Java with a few tweaks and a different library.
>>>  Not
>>> worth the headaches.)
>>> I'm working on building and documenting some architecture and coding
>>> techniques and examples.  Due to recent activity, and also breadth of
>>> market
>>> footprint for at least certain kinds of apps, my main targets are
>>> Java/Android and Qt/C++, with Objective-C/Cocoa when I get time.  These
>>> days, frameworks / libraries are so important and torque the design so
>>> much
>>> that I think of language/framework combinations as independent language
>>> points.  For instance, C++/Qt is distinct from C++/STL/Boost which is
>>> miles
>>> away from C++/MS-whatever, even though generic C++ code would work with
>>> any
>>> of them.
>>> For desktop app development, the obvious choices are: C++/Qt (possibly
>>> with
>>> OpenFrameworks or OpenGL additions), Java (Swing or SWT or Processing),
>>> or
>>> Flash/Air/Flex.  There doesn't seem to be a strong reason do go with
>>> Objective-C/Cocoa for desktop applications, unless you only want to
>>> target
>>> Mac OS and iOS/iPhone/iPod/iPad.  PyQt is interesting as it leverages
>>> cross-platform Qt and Python in a powerful way.  Mostly secondary to
>>> C++/Qt
>>> so far though.
>>> For mobile development, current front-runners in terms of market and/or
>>> technology: Android, iOS/Objective-C, and Qt (either directly for Nokia
>>> smartphones or as an emerging method for Android).
>>> For web development, Javascript via various libraries (Node.js, etc.) and
>>> with Java via GWT doing HTML5 seem tops currently, plus Flash as a
>>> separate
>>> strong option and Java applets as a weaker, but sometimes important
>>> option.
>>>  For instance, I'm finishing a Java-based PC emulator that runs as an
>>> applet, similar to but better than JPC (JavaPC) which is uber cool.
>>> For server development, the top candidates are Java, Python, Ruby, and
>>> PHP.
>>>  With current licensing, I wouldn't be surprised to see the rise of
>>> C++/Qt
>>> as a server development environment.  A lot of server environments
>>> (Apache,
>>> etc.) are written in C or C++, but few applications.  Qt provides a nice
>>> enough application environment (like effortless reference counted auto
>>> shallow/deep copy objects and templates along with one of the best
>>> thread-safe signaling mechanisms) that it would be a good alternate
>>> choice
>>> to Java and Python.  Javascript has been getting some server play too.
>>>  And
>>> Perl is still there, but not growing or interesting anymore.  I'm not too
>>> hot on Ruby: While there is great buzz, momentum, and fast-start
>>> frameworks,
>>> there seems to be a fatal shallowness that is a turnoff.
>>> I mostly count the j* (jython, jruby, scala, etc.) languages as part of
>>> Java, although few of them would work with Android/Dalvik.
>>> There are some interesting emerging languages: Go, etc.  What are the
>>> best
>>> possibilities here?
>>> In order of interestingness for client/desktop:
>>> Java - Client: Android&  Processing/SWT, Web: GWT, raw to JS libraries
>>> C++ - Client: C++/Qt, Web: C++/Wt (GPL/commercial) or similar for web
>>> Objective-C: Client: Objective-C/Cocoa
>>> Python - Client: PyQt, Web: various frameworks [1], web2py for instance
>>> PHP - Web: Various frameworks [2], Symfony for instance
>>> For web development, the order is:
>>> Java/GWT, possibly with a C++ layer
>>> Python/web2py et al, possibly with a C++ layer
>>> C++/Wt, possibly with a Java layer
>>> PHP, Symfony et al
>>> PHP, while popular, venerable, and having grown past the simple start, is
>>> still hard to take as seriously as Java/C++/Python/Objective-C for
>>> potentially large, complex, and/or scalable projects.
>>> Now that it is easy to do rich Java-C++ integration (I'm publishing /
>>> presenting soon!), the line is a little more blurred between Java/C++
>>> both
>>> for Android and other client environments and for server apps, GWT for
>>> instance.  However, Qt is a far better GUI framework than anything
>>> available
>>> for Java.
>>> [1] http://wiki.python.org/moin/WebFrameworks
>>> [2]
>>> https://secure.wikimedia.org/wikipedia/en/wiki/Comparison_of_web_application_frameworks
>>> sdw
>>> --
>>> Stephen D. Williams sdw at lig.net stephendwilliams at gmail.com LinkedIn:
>>> http://sdw.st/in V:650-450-UNIX (8649) V:866.SDW.UNIX V:703.371.9362
>>> F:703.995.0407 AIM:sdw Skype:StephenDWilliams Yahoo:sdwlignet Resume:
>>> http://sdw.st/gres Personal: http://sdw.st facebook.com/sdwlig
>>> twitter.com/scienteer
>>> _______________________________________________
>>> FoRK mailing list
>>> http://xent.com/mailman/listinfo/fork
>>>  _______________________________________________
>> FoRK mailing list
>> http://xent.com/mailman/listinfo/fork
> --
> Stephen D. Williams sdw at lig.net stephendwilliams at gmail.com LinkedIn:
> http://sdw.st/in
> V:650-450-UNIX (8649) V:866.SDW.UNIX V:703.371.9362 F:703.995.0407
> AIM:sdw Skype:StephenDWilliams Yahoo:sdwlignet Resume: http://sdw.st/gres
> Personal: http://sdw.st facebook.com/sdwlig twitter.com/scienteer
> _______________________________________________
> FoRK mailing list
> http://xent.com/mailman/listinfo/fork

More information about the FoRK mailing list