views:

1967

answers:

10

has anyone ever written an application bigger than its .net luggage? People used to criticize vb6 for its 2 MB runtime but it rarely dwarfed the app it accompanied. Today despite having vista on my machine I had to download 35 MB of the 3.5 framework and reboot to then try out an app half that size.

When you factor in the decreased source code security I wonder why anyone would anyone develop a windows application in .net rather than in a language that allowed for the building of native executables.

What is superior about .net that outshadows these drawbacks when it comes to writing applications to run on windows.

+9  A: 

The "simplicity" of developing complex(and simple) applications using it. A lot of basic stuff is already coded for you in the framework and you can just use it. And downloading 35mb file today is much easier than 2mb file 8-6 years ago.

Alex Reitbort
*than </grammar-nazi>
mannicken
Fixed then/than.
Jon Skeet
It's very simple to develop in delphi and probably realbasic too.Some people say too simple (see vb6)!
kjack
It's simple to develop simple stuff in Visual Basic.
Rauhotz
Compared to any .NET language, Delphi is simpler to develop in.
Osama ALASSIRY
It is simple do develop simple stuff in vb6. But try consuming web services, doing remote communications between processes, writing web applications or web services in it and then compare it to .Net
Alex Reitbort
Well seeing as how vb6 hasn't been updated in 11 years is that so surprising? Might be a different story in delphi though
kjack
Let me add that downloading the runtime is only required once and is typically available through the windows update service. I could see tha argument if every .NET app had to download a separate copy of the framework, but that is not the case.
JohnFx
Unless you started with Delphi (or some other non-C language), it isn't simpler than Java/C#... language wise
sixlettervariables
@JohnFX: Unless: a) you write a .NET app that uses .NET 305, and the user has .NET 2.0, and your app updates to .NET 3.0; b) you have more than one computer, and c) your PC is behind a corporate-mandated proxy that precludes Windows Update. What then?
Ken White
@Ken Obviously that is a problem, if you view it as insurmountable for your app then it's a deal breaker fine. But plenty of cases don't fall into the category. Choice right? Nothing is globally superior, nor will it ever be.
ShuggyCoUk
And I didn't say it was. Read my post below; .NET has it's place. My point is that so does Delphi and straight Win32 programming.
Ken White
I didn't read any of the reasonable answers here as suggesting they weren't
ShuggyCoUk
I guess I was responding to the non-reasonable ones then. <g>
Ken White
I rather liked the Anders++ argument ;)
ShuggyCoUk
So did I. :-) There were some good arguments on both sides here. It's been fun - a great discussion w/o any flaming at all. I'm kinda liking it here. <g>
Ken White
It's a shame they don't provide a way to take something to a forum for discussion. I appreciate it's not the core purpose, I just miss it
ShuggyCoUk
Yeah, I agree. 300 characters isn't quite enough sometimes to cover something someone has said (see my comment to Jon Skeet's post below).
Ken White
+9  A: 

To name a few:

  • Automatic memory management, garbage collection
  • Type safety
  • Bounds checking
  • Access to thousands of classes that you will not have to create
Darin Dimitrov
+1 "thousands of classes that you will not have to create"
sixlettervariables
-1 Type safety. Delphi has had that for decades (TP 1)-1 Bounds checking. TP2 left. GC - questionable. Classes? Delphi has a lot of them too, although I'm not sure they're quite as many as "thousands" (have you actually counted them in Delphi and .NET?)
Ken White
Ken, any language that has dynamic memory allocation that it expects to be reclaimable (no infinite memory) and doesn't have a GC isn'ttype-safe.
Darin Dimitrov
CONTINUED: A single dangling pointer to deallocated memory kills yourtype safety: if a value of a different type gets allocated at the samelocation, you have a type violation
Darin Dimitrov
Darin, you're almost right. <g> A "dangling pointer" certainly isn't type-safe; however, if you're an idiot who leaves a pointer dangling, you shouldn't be programming. And to use the Win32 API (which will be around a long time yet), you need pointers, even in C#.
Ken White
Epic fail here. The author specifically tagged this as a comparison with Delphi. It has type safety, bounds checking, and a very comprehensive runtime. Everything but garbage collection, which IMO causes more problems than it fixes. But if you really need it, you can get it too.
Mason Wheeler
@Mason Wheeler: Check out the number of Delphi questions here on SO about object ownership, interfaces and ref-counting, or how to properly use try finally, and you will see that manual memory management has for many programmers at least as many problems as GC has in your opinion.
mghie
+3  A: 

Well, the .NET Framework is shared for all .NET applications, so you have it only once on your machine and 35MB are nothing today (compare it to the size of your Vista installation). For your second .NET application you don't have to download it again.

Rauhotz
Well I didn't download vista and the framework will soon have changed again.
kjack
And it's included in Vista,XP/SPx,Win7 and included in Windows Update
Henk Holterman
Some people download Vista ;-)
Rauhotz
Actually I just did windows update yesterday (honest) so how come today I need to download .net?
kjack
You can do that with Delphi's runtime package support, too. I have some apps that are < 250KB because of runtime packages, and they're pretty complex and functional apps.
Ken White
+5  A: 

There are a lot of reasons. I don't know much about RealBasic, but as far as Delphi goes:

  • Less widespread than .NET, smaller development community. Many of the Delphi resources on the net are ancient and outdated.

  • Until Delphi 2009, Delphi didn't have full unicode support.

  • I don't know about Delphi 2009, but 2007 didn't have very good garbage collection. It had some sort of clunky reference counting that required some intervention on behalf of the developer. .NET has a much more advanced GC that does virtually everything for you.

  • .NET has a larger standard library and more up-to-date 3rd party libraries.

  • .NET languages like C# are arguably better, and certainly easier to understand for those new to the language.

Matt Olenik
Delphi less widespread but enough to be viable. Has unicode support.Has a debate on merits of GC, maybe yet provide on an optional basis. 4th point I can't say.IMO Object pascal reads like english as to c# hieroglyphics.Has native executables and a passion to preserve backward compatibility.
kjack
Delphi has no GC. It mixes Manual (Free), Library (Owner) and reference counting (string) memory management. Don not mention "backward compatibility" to people who started anything with Delph4.net recently.
Henk Holterman
Can't all that delphi.net stuff be ported back to win 32. Wasn't that whole idea originally anyway?
kjack
Well, for Delphi/ASP.NET that's going to be difficult. Most other things too.
Henk Holterman
@Henk: Reference counting isn't only strings, but; interfaces too. "Backward compatibility" works for all Win versions (pre D2009/.NET) prior to Delphi 2009 and Unicode.I'm sensing a personal dislike (rather than objective/professional) to Delphi. Care to explain, or do you just want bias to show?
Ken White
kjack, when I said easier to understand, I meant for people who already have experience programming. A lot of people migrate to C# from Java or C-like languages, where C# will be a lot more familiar than Delphi. It also doesn't help that a lot of tutorials for learning Delphi are way out of date.
Matt Olenik
@Ken: I have been a long time Delphi user/trainer/consultant. I still use it - it's the best Win32 tool around. But dotnet has more to offer. I suggest you study it a little better (Prism for instance).
Henk Holterman
@Henk: I've studied it. I just don't agree that the "more to offer" is the be-all-and-end-all that some people think it is - there's still plenty of room for Win32 w/o .NET, and plenty of reasons for using non-.NET languages. Delphi is one of the better ones. :-)
Ken White
Delphi is an example of excellence in backwards compatability. In fact, CodeGear demonstrated recently how their demo app that shipped with Delphi 1 would still compile as-is with Delphi 2009. Delphi v1 came out over 14 years ago! The community is smaller than .NET, but very active.
Mick
Ken: and dynamic arrays. Personally I'd use C# directly if I would go ASP.NET, but for desktop apps I still prefer Delphi (non .NET).
Marco van de Voort
+3  A: 

For Windows app, .NET (using C# or whatever) gives you more direct access to the latest and greatest Windows features. It's also very well supported by Microsoft, has a huge community and lots of books written about it.

REALbasic is for cross-platform apps. Using it just on Windows can sometimes be useful, but that would not be its strength (which is that it's amazingly easy to use).

I don't know much about Delphi.

Paul Lefebvre
"its strenth" </grammar nazi> :)
Thomas Tempelmann
it's "strength" </spelling nazi> :-)
Paul Lefebvre
Grammar and spelling Nazis need to learn capitalization of proper nouns like "Nazi". :-)Seriously, people: get a life.
Ken White
"</spelling_Nazi>", "</grammar_Nazi>" </tag_Nazi>
Philip Regan
Even then, the use of a closing tag without an opening tag is questionable. Really, shouldn't it be an empty tag? <tag_Nazi />
Philip Regan
+25  A: 

Delphi has some considerable advantages for Win32. Not that .NET apps are inherently bad, but try:

  • running a .NET app (any version) on Win95/ME, where .NET doesn't exist (AFAIK)
  • distributing any small ( < 1.5 MB) .NET app (yes, floppy drives still exist)
  • providing any .NET app on a system that has no Internet access (yes, they exist)
  • distributing your .NET apps in countries without widespread high bandwidth
  • keep people from seeing your source code without spending a ton of dough (Reflection, anyone?)

Garbage collection in .NET might be really nice, but anyone who knows anything about programming can also handle manual allocation/deallocation of memory easily with Delphi, and GC is available with reference-counted interfaces. Isn't one of the things that brought all of the non-programmers to proliferation the pseudo-GC of VB? IMO, GC is one of the things that makes .NET dangerous, in the same way VB was dangerous - it makes things too easy and allows people who really have no clue what they're doing to write software that ends up making a mess. (And, before I get flamed to death here, it's great for the people who do know what they're doing as well, and so was VB; I'm just not so sure that the advantage to the skilled outweights the hazards to us from the unskilled. )

Delphi Prism (AKA Rem Objects Oxygene, formerly Chrome) provides the GC version of Delphi that those who need it are looking for, along with ASP.NET and WPF/Silverlight/CE, with the readability (and lack of curly braces) of Delphi. For those (like me) for which Unicode support isn't a major factor, Delphi 2007 provides ASP.NET and VCL.NET, as well as native Win32 support. And, at a place like where I work, when workstations are only upgraded (at a minimum) every three years, and where we just got rid of the last Win95 machine because it wasn't a priority to upgrade, the .NET framework is an issue. (Especially with company proxy requirements only allowing Internet access to a handful of people, limiting bandwidth and download capabilities, and proper non-admin accounts with no USB devices allowed, all still running across a Netware network - no such thing as Windows Update, and never a virus so far because nothing gets in.)

I work some in .NET languages (C#, Delphi Prism), but the bread and butter both full-time and on the side, comes from Win32 and Delphi.

Ken White
.NET 2.0 (base version) runs on Win 98/ME, although .NET 2.0 SP1 and higher are not.It is simple to package the .NET runtime along with the app on a CD for systems without Internet access.I disagree that GC makes .NET dangerous for unskilled developers. Most of the time it just works.
Mike
That's what makes it dangerous. Just like VB, there's the possibility of proliferation of crappy, badly written, junky applications because of the ease of GC. If the people who wrote those apps had to work to do so, that wouldn't be as easy to do.
Ken White
If you think that useful programming tools should be denied to me (and by inference you) because idiots will misuse them then I can't say I share your view. Don't employ idiots, if this is a problem for you work someplace else.
ShuggyCoUk
You're both misunderstanding what I said. <g> GC itself isn't dangerous; it's the ease that GC offers to idiots to enable them to produce software that is worrysome. Like I said, think about all of the VB apps that were written - there was a lot more garbage than gold. :-)
Ken White
@ShuggyCoUK: Trust me - I've fired plenty of idiots over the years. <g> This has nothing to do with employing them or working with them; it has to do with the trashy apps they release into the public that I have to clean up after. My mother and siblings aren't computer-literate.
Ken White
You're definitely in the minority.
Robert S.
I don't understand how GC makes it easier to write bad code. If someone is writing bad code in .NET, throwing them into an unmanaged environment will surely be a trainwreck.
Matt Olenik
You're probably right. It's not GC so much as .NET in general. It's like VB that way; while I know some VB developers that I respect and that write good code, they're vastly outnumbered by the people who shouldn't be allowed anywhere near an IDE. :-)
Ken White
@Ken White: Ouch, claiming the moral high ground from a GC perspective is kinda uninformed. On average the percentage of bad programs out there have nothing to do with GC - the percentage of excellent program has. There is just more time to be spent on features instead of manual GC. ;)
Tobias Hertkorn
@Tobias: You obviously didn't read the comment just before yours, when I admitted it wasn't GC's fault. <g> The percentage of bad programmers has to do with the simplicity of .NET itself (like VB before it); GC is just a part of it. And no, I'm not "uninformed". Defensive, maybe, after VB. <g>
Ken White
Number of bad programs will not be reduced (if not increased) if you remove GC. Also some of the mistakes(yes, even good programmers do mistakes) of allocating and dealocating memory can be handled simply by using GC.
Tanmoy
@anothersilverlight: You should read comments before yours first. <g> GC isn't the problem; it's just another enabler. Yes, it avoids allocation errors; .NET (and VB before) make it too easy for idiots to pretend they're programmers. That's all I'm sayin'. :-)
Ken White
I'll take Delphi over C# every day of the week. I don't understand the love of GC. It's not that hard. If you create an object, free it when you are done. It really is that easy.
Mick
Man, yes, there's a lot of disvantages on .NET framework, like all other tecnologies has its owns, but, make things easy like GC does, doesn't make the programmer a stupid one. That's my only one disagree point of your tought.
Gedean Dias
@Gedean: I never said GC made programmers stupid. Read the other comments above yours, where I specifically address this (pay particular attention to my reply to Tobias about 5 above yours).
Ken White
You get what you pay for. Expecting to run free or 99 cent apps without either a lot of computer knowledge or introducing problems into your system is stupid. That's like comparing going to the junk yard for a cheap car part and installing it yourself or paying the money for a mechanic.
Jeff O
+4  A: 

There's a lot of supposed advantages cited by .NET developers here that shouldn't be in that comparison, simply because Delphi has them as well:

  • Type safety
  • Bounds checking
  • Access to thousands of classes (components) that you will not have to create

There are however some things in .NET that Delphi doesn't have out-of-the box, and only some of those can be added by libraries and own code. To name a few:

  • Support for multiple languages working on top of the same runtime - allowing to choose the matching language for the problem (e.g. functional programming using F#)
  • Dynamic source code generation and compilation - this is something so alien to Delphi programmers that they probably don't even see how it could be useful [1]
  • Multicast events
  • Better multi-threading support (for example BackgroundWorker class, asynchronous delegates)
  • Seamless support for both 32 and 64 bit processes
  • Weak references

[1] If you don't know but are interested, check out the home page of Marc Clifton, especially the articles about declarative programming.

Edit: I'd like to respond to the comment by Mason Wheeler:

  1. Re dynamic code: I know that there are solutions to have Pascal scripting embedded in the application. There is however a distinct difference between making parts of your internal object hierarchy available to the scripting engine, and having the same compiler that is used for your code available at runtime as well. There are always differences between the Delphi compiler and the compiler of the scripting engine. Anyway, what you get with .NET goes far beyond anything that is available for Delphi. And anyway, it's not the point whether one would be able to code similar infrastructure for Delphi, the point is that with .NET it's already there for you, when you need it.

  2. Re Multicast events: Exactly, there's ways to code it, but it's not part of Delphi / the VCL out-of-the-box. That's what I was saying above.

  3. Re weak references: You are sadly mistaken. Try to use interfaces in a non-trivial way, creating circular references on the way. Then you have to start to use typecasts and wish for weak references.

mghie
Dynamic code: I'm aware of at least 2 powerful, mature Object Pascal scripting engines just off the top of my head. Multicast events: http://blogs.codegear.com/abauer/2008/08/15/38865 Weak references: Who cares? Those only matter if you're using GC.
Mason Wheeler
@Mason: You're right. There are more than two, although I don't sell mine anymore. We had one of the early ones (TCFEvaluator, in the Clipper Functions for Delphi library) back in the days of Delphi 2. You could even reference properties of the form it was on if you wanted.) And way pre-.NET. :-)
Ken White
@Ken: Do you really not see how different this is from using the very same tools used for developing, at runtime? Using the power of reflection that goes way beyond a few published properties?
mghie
Re: your edit, specifically part 3: First off, interface reference counting is a form of GC. Second, interfaces were created for COM--for your EXE to talk to external code. They don't make sense for anything else, unless you're using them specifically for the reference counting. (continued)
Mason Wheeler
There are various GC tricks that depend on this. None of them require circular interface references that I'm aware of. And if you've got circular *external* references, then either you or the person who created the code you're interfacing with is doing something very, very wrong.
Mason Wheeler
Your idea that interfaces make no sense except for COM or a poor way of doing GC is so wrong it's not even funny. Discussing this just makes no sense if you are starting on such a wrong premise. If you are able to question your assumptions then have a look at for example the Delphi OTAPI.
mghie
If you want support for dynamic, you better dump .net and go straight to smalltalk. There you have the advantages of dynamic, without the straightjacket. Better object persistence (Gemstone), better web framework (Seaside)
Stephan Eggermont
@Stephan: Sure, there are more interesting dev environments still. But that was not what I was writing about, I just wanted (as a long time Delphi developer) hint at that there are indeed things .NET does better than Delphi.
mghie
Umm... that's exactly what the Open Tools API is: Delphi's EXE talking to external code through interfaces. If it doesn't specifically use COM servers, the basic idea is still the same, and that's what I meant when I wrote that: Interfaces only make sense for external code.
Mason Wheeler
Of course Mason. Maybe you would read http://dn.codegear.com/article/20384: [cjazdzewski on interfaces] "It allows us to more cleanly separate functionality in the IDE as well as support add-ins through the OpenTools API." But what would the Delphi developers know about it, compared to you...
mghie
+9  A: 

OK first up, No one language/platform is ever going to be universally superior.

  • Specialization will always provide a better use case in certain areas but general purpose languages will be applicable to more domains.
  • Multi-paradigm languages will suffer from complex boundary cases between paradigms e.g.
    • Type inference in any functional language that also allows OOP when presented with sub classes
    • The grammar of C++ is astonishingly complex, This has a direct effect on the abilities of its tool chain.
    • The complexities of co/contra variance coupled with generics in c# is very hard to understand.

Older languages will have existing code bases that work, this is both positive (experience, well tested, extensive supporting literature) but also a negative (the resulting inertia against change, multiple different ways to do things leading to confusion for new entrants).

The selection/use of both languages and platforms is, as are most things, a balancing of the pros and cons.

In the following lists Delphi has some of the same pros and cons, but differs on many too.

Potential Negatives of .Net (if they are not an issue to you they aren't negatives)

  • Yes, you need the runtime deployed (and installed), and it's big.
  • If you wanted a language with multiple inheritance you're not going to get it
  • The BCL collections library has some serious flaws
  • Not widely supported outside the MS universe (mono is great but it lags the official implementation significantly)
  • Potential patent/copyright encumbrance
  • Jitted (ignoring ngen) start up time is always going to be slower and more memory will be needed.

There are more but these are the highlights.

Potential Positives (again if they don't matter to you)

  • A universal GC, no reference counting that prevents certain data structures being usable, I know of no widely used Functional language without GC, I can't think of significant language of the last 10 years without at least optional GC. If you believe this is not a big deal you would appear to be in a minority.
  • A large BCL (some parts not so good as others but it's very broad)
  • Vast numbers of languages (and a surprising number of paradigms) can be used and interact with each other (I use c#, f#, C++/CLI within one wider application using each where it makes most sense but able to easily use aspects of one from another).
  • Full featured introspection combined with declarative programming support. A wide variety of frameworks become much simpler and easy to use in this manner.
  • Jitted - alterations in underlying CPU architecture can be largely transparent, sophisticated runtime optimizations not available to pre-compiled languages are possible (java is doing rather better on this currently)
  • memory access safety
  • Fusion dll loading and the GAC for system dlls

Likewise specifically for c#

Con:

  • Syntax based on C underpinnings
  • (pre 4.0) late binding solely via inheritance
  • More verbose than some imperative languages
  • poor handling of complex embedded literals (regexes/xml/multi line strings)
  • variable capture within closures can be confusing
  • nested generators are both cumbersome and perform appallingly

Pro:

  • Syntax based on C underpinnings
  • Much functional support through lambdas
  • Expressions allowing compile time validation of non code areas such as Linq to SQL
  • Strongly typed but with some Type inference to make this easier
  • if you really need to unsafe is there for you
  • interaction with existing C++ ABI code via P/Invoke is both simple and clear.
  • multicast event model built in.
  • light weight runtime code generation

The C underpinnings really is a pro and con. It is understandable by a vast number of programmers (compared to pascal based style) but has a certain amount of cruft (switch statements being a clear example).

Strong/Weak/Static/Dynamic type systems are a polarising debate but it is certainly not contentious to say that, where the type system is more constraining it should strive to not require excessive verbosity as a result, c# is certainly better than many in that regard.

For many internal Line of Business applications a vast number of the .Net platform Cons are absolutely immaterial (controlled deployment being a common and well solved problem within corporations). As such using .Net (and this does largely mean c#, sorry VB.Net guys) is a pretty obvious choice for new development within a windows architecture.

ShuggyCoUk
+13  A: 

Okay, I doubt this will persuade you as you don't want to be persuaded, but here's my view of the advantages of .NET over older technologies. I'm not going to claim that every advantage applies to every language you mentioned in the question, or that .NET is perfect, but:

  • A managed environment catches common errors earlier and gives new opportunities:

    • Strong typing avoids treating one type as another improperly
    • Garbage collection largely removes memory management concerns (not totally, I'll readily admit)
    • "Segmentation fault" usually translates to "NullReferenceException" - but in a much easier to debug manner!
    • No chance of buffer overruns (aside from the potential for CLR bugs, of course) - that immediately removes a big security concern
    • A declarative security model and a well-designed runtime allows code to be run under a variety of trust levels
    • JITting allows the CLR to take advantage of running on a 64 bit machine with no recompilation necessary (other than for some interop situations)
    • Future processor developments can also be targeted by the JITter, giving improvements with no work on the part of the developer (including no need to rebuild or distribute multiple versions).
    • Reflection allows for all kinds of things which are either impossible or hard in unmanaged environments
  • A modern object-oriented framework:

    • Generics with execution time knowledge (as opposed to type erasure in Java)
    • Reasonable threading support, with a new set of primitives (Parallel Extensions) coming in .NET 4.0
    • Internationalisation and Unicode support from the very start - just one string type to consider, for one thing :)
    • Windows Presentation Framework provides a modern GUI framework, allowing for declarative design, good layout and animation support etc
    • Good support for interoperating with native libraries (P/Invoke is so much nicer than JNI, for example)
    • Exceptions are much more informative (and easier to deal with) than error codes
    • LINQ (in .NET 3.5) provides a lovely way of working with data in-process, as well giving various options for working with databases, web services, LDAP etc.
    • Delegates allow a somewhat-functional style of coding from VB and C#; this is better in C# 3.0 and VB9 due to lambda expressions.
    • LINQ to XML is the nicest XML library I've used
    • Using Silverlight as an RIA framework allows you to share a lot of code between your lightweight client and other access methods
    • A mostly-good versioning story, including binding redirection, runtime preference etc
  • One framework targeted by multiple languages:

    • Simpler to share components than with (say) COM
    • Language choice can be driven by task and team experience. This will be particularly significant as of .NET 4.0: where a functional language is more appropriate, use F#; where a dynamic language is more appropriate, use IronRuby or IronPython; interoperate easily between all languages
    • Frankly, I just think C# is a much cleaner language than VB or C++. (I don't know Delphi and I've heard good things about it though - and hey, you can target .NET with Delphi now anyway.)

The upshot of most of this - and the soundbite, I guess - is that .NET allows faster development of more robust applications.

To address the two specific issues you mentioned in the question:

  • If your customer is running Vista, they already have .NET 3.0. If they're running XP SP2 or SP3, they probably have at least .NET 2.0. Yes, you have to download a newer version of the framework if you want to use it, but I view that as a pretty small issue. I don't think it makes any sense to compare the size of your application with the size of the framework. Do you compare the size of your application with the size of the operating system, or the size of your IDE?
  • I don't view decompilation as nearly such a problem as most people. You really need to think about what you're afraid of:
    • If you're afraid of people copying your actual code, it's usually a lot easier to code from scratch if you're aware of the basic design. Bear in mind that a decompiler won't give local variable names (assuming you don't distribute your PDB) or comments. If your original source code is only as easy to understand as the decompiled version, you have bigger problems than piracy.
    • If you're afraid of people bypassing your licensing and pirating your code, you should bear in mind how much effort has gone into stopping people from pirating native applications - and how ineffective it's been.
    • A lot of the use of .NET is on the server or for internal applications - in neither of these cases is decompilation an issue.
    • I've written more on this topic in this article about decompilation and obfuscation.
Jon Skeet
++ rather better written than mine too, guess if I get two more votes I get to get a disciplined badge.
ShuggyCoUk
@Shuggy: Heck no! Please don't delete yours - it gives way more of the "pros *and* cons" than my answer. I'm sure there's plenty of non-duplication there as well.
Jon Skeet
@Jon: Nice post. I'd debate a couple of points, but there's no room in the comments for anything worthwhile. :-) FYI, though, Delphi has a pretty nice OOP framework (not as extensive, I admit), and as of D2009 supports generics and anonymous methods. It's fully Unicode aware, as well.
Ken White
Yes, I guessed that Delphi would be the hardest of those to argue, especially as it can target .NET. Unfortunately I know almost nothing about Delphi beyond it being another work of Anders, and it having a sort of "static polymorphism". (I know what the concept is roughly, but not its name.)
Jon Skeet
I quite like the futures/async concept backed into Delphi Prism. That the product is only available on a commercial basis means I am unlikely to try it.
ShuggyCoUk
@Jon: I'm not sure what you mean by "static polymorphism"; Delphi supports polymorphism, inheritance, and encapsulation the same way any other OOP language does. And yes, it was Anders brainchild, but the current development team is pretty good too, IMO.
Ken White
@ShuggyCoUk: Prism is new to CodeGear. They're reportedly working on new versions of the Turbo product line; while I haven't heard anything about Prism or Delphi for PHP inclusion, I wouldn't be surprised to see them there - everything else Delphi or C++ Builder related is part of it.
Ken White
@Ken: I mean polymorphism of type methods (static methods in C#). You can't override static methods in C#, but I believe there's some rough equivalent in Delphi which allows it. Again, I wish I had the right terminology :(
Jon Skeet
Delphi has "class references" which, among other things, permit static virtual members. Most useful is the use for virtual constructors.
Henk Holterman
@Henk: Yup, that's the one I meant :)
Jon Skeet
+1  A: 

From what I can see RealBASIC doesn't have much (if anything) in the way of Object Relational tools and probably wouldn't be as good a choice for n-tier, database-centric applications.

Alan B