Want to read Slashdot from your mobile device? Point it at m.slashdot.org and keep reading!


Forgot your password?
Programming IT Technology

What Makes a Powerful Programming Language? 1332

A not-so Anonymous Coward queries: "My company is about to start development on a new project, and I have to decide on a language and development environment. My boss gave me a set of criteria which needs to be filled: intuitive and easy to use IDE; simplified GUI design and event handling; advanced error handling; advanced object oriented design including multiple inheritance, abstract classes, and garbage collection; full support for operator and function overloading; and portable (at compile-time) across various platforms. I have already looked at C++, Java, C++, C#, Eiffel, and even VB.net; I may be missing something but as far as I can tell all of these languages are missing something from this list. Is there a language available that has all of these features? I thought that someone from Slashdot would be able to point me in the right direction?" If you were to design a language from the ground up, what features would you include and why?
This discussion has been archived. No new comments can be posted.

What Makes a Powerful Programming Language?

Comments Filter:
  • by Ars-Fartsica ( 166957 ) on Monday February 11, 2002 @05:39PM (#2989570)
    The powers that be have decided - statically typed, object-oriented languages are what you are going to work with, not because they are better or more productive but for two reasons:

    1. Its what "everyone else" is perceived to be using,

    2. Programming cannot be suitably be turned into a MacJob until the variance in the toolset is reduced.

    Microsoft's .Net and Java are going to occupy 70% of the brainspace for programming in the next ten years, and these languages conform to my description above.

    Sure, Lisp is cool - its also dead in the market, so stop trying to resurrect it based on its coolness. No one cares.

  • You want Java (Score:3, Interesting)

    by Gorimek ( 61128 ) on Monday February 11, 2002 @05:39PM (#2989574) Homepage
    Unless you have pretty strong performance requirements, Java is your language.

    I think it fills all the requrements, except for the somewhat misplaced "full support for operator and function overloading".

    Why operator overloading would be a mission critical feature for a language beats me. It was excluded from Java for a reason! I assume the reason is how hopelessly confusing it can be to read code where + or && doesn't do what you'd expect them to do. It should be clear when a function is called and when it's not.
  • Power! (Score:2, Interesting)

    by Pengunea ( 170972 ) on Monday February 11, 2002 @05:40PM (#2989587)
    I think that there are 5 main elements that make a programming language powerful.
    Simple sequence
    Do While
    Do Until
    If Then Else

    Of course I'm from the school of thought where anything can be solved by using the logic. But what do I know? I'm not even 25 yet.
  • Objective C + Cocoa (Score:3, Interesting)

    by Anonymous Coward on Monday February 11, 2002 @05:40PM (#2989591)
    Objective C and the Cocoa framework provided with Mac OSX is quite possibly the most powerful API I have ever encountered. You can also use Java with Cocoa is you don't want to learn some weird syntax, but I'd reccomend sticking with Objective C since it provides some small and useful benefits over Java.

    Also, all the development tools come free with the operating system(OS X). Project Builder and Interface builder are first rate development tools. WebObjects(not free. 700 bucks) also provides a great medium towards database driven web based applications.

    Obviously this depends on whether or not you want to limit yourself to OS X. Who knows, maybe they'll port OS X to x86 =).

  • by kabir ( 35200 ) on Monday February 11, 2002 @05:46PM (#2989689)
    For instance, if you're looking at languages and find that you like what C++ has to offer but you need garbage collection it can sometimes be reasonable to write a memory manager which takes care of that for you. If programming resources are an issue, or if writing a memory manager is just too daunting (no shame there, that's a tough problem) there are third party memory managers available in the world.

    This is true for at least some of the other features you listed as well. The language doesn't have to do everything natively, you just have to be able to get it done somehow.

    Also, some things that might be missing are really there, just with different names. For instance, multiple inheritence may not exist in java, but it does have interfaces, which sure a very, very similar purpose. Just because it's not multiple inheritance doesn't me it won't meet your needs.

    Ultimately it sounds to me like you boss has heard too many buzzwords recently. It might be helpful to ask him why he chose to put each of those requirements on the list. Knowing what needs to be accomplished rather than how he thinks it should be accomplished might just help you find a solution which will actually meet all the needs of the project.
  • Reeking Requirements (Score:2, Interesting)

    by mirkayn ( 558179 ) on Monday February 11, 2002 @05:46PM (#2989690)
    "Must have multiple inheritance!" That reeks of someone spouting buzzwords. Complex inheritance hierarchies are probably one of the biggest factors working against OOP. Polymorphism is great, but when it takes 20 min to figure out which base class resolved the function call, something is wrong with the design. My favorite cross-platform UI dev environment is QT using KDevelop. No garbage collection, but you can't have everything. BTW, Java does not support multiple inheritance, but its support for interfaces usually does the trick.
  • Jesus Forking Christ (Score:3, Interesting)

    by Snafoo ( 38566 ) on Monday February 11, 2002 @05:46PM (#2989693) Homepage
    This has to be the dumbest, most trollerific Ask Slashdot ever. What's next? 'Which operating system is best?' 'What's the best text editor?' 'Is Bill Gates Cooler, As Cool or Less Cool than Linus?' .... They must be having a really slow news day there over at OSDN.
  • Common Lisp (Score:5, Interesting)

    by entrox ( 266621 ) <slashdot@NosPAM.entrox.org> on Monday February 11, 2002 @05:52PM (#2989799) Homepage
    You can have all those features and many more if you use a commercial Lisp implementation (the free ones have no decent IDE or GUI yet).
    If you have a serious budget, take a look at Allegro Common Lisp [franz.com]. The other choice would be LispWorks [xanalys.com], which is a little cheaper and without run-time fees.
    They both have an excellent IDE and come with Interface Builders using CLIM, meaning your apps run under Windows, Macintosh and Unix (Motif) without a big hassle using native widgets.
  • Powerbuilder (Score:2, Interesting)

    by nrd907s ( 458195 ) <nrduncan@@@gmail...com> on Monday February 11, 2002 @05:53PM (#2989819)
    I know powerbuilder has it's problems...but seriously it has everything you are asking for..
    Basically the best way I've ever been able to describe it is that powerbuilder has the ease of design like VB but the power of VC++ behind it. For those who don't know it's sybase's baby, and I'll admit it does have bugs (but honestly what software doesn't).

    But it's what we're using at my job and I'm happy with it.
  • by slag187 ( 70401 ) <geoff@@@zorched...net> on Monday February 11, 2002 @05:57PM (#2989865) Homepage
    These requirements are terrible. Requirements should not specify implementation details. While abstractly saying things like Object Oriented Design with good GUI tools that supports event handling and good error or exception handling is fine, saying we HAVE to be able to have ths syntax: object1 + object2 is ridiculous.

    1) Advanced OO design.
    Ok, I can understand wanting OOD/OO Programming constructs explicitly supported. Abstract classes (and/or) interfaces and inheritance, etc. are all good OO constructs. But REQUIRING multiple-inheritance? Why? There are many good OO languages that don't do multiple inheritence. And GC has nothing to do with OO - while it might be a good criterion on its own.

    2) Operator overloading.
    This is such a crock. Is there anything that can not be accomplished without Operator Overloading? There are many arguments against using operator overloading in fact even in languages that support it. (Non-intuitive nature of it sometimes, the failure to implement all operators including comparisons, etc.)

    If you take out the 2 dumb requirements above, you open the door to all kinds of languages:
    Java, Python, Smalltalk, etc.

    Then you can truly evaluate them on the availble RADs for the language, performance and suitability to the end project requirements.

    Fire your boss!
  • by cfulmer ( 3166 ) on Monday February 11, 2002 @05:57PM (#2989872) Homepage Journal
    Your boss has obviously taken a bunch of buzzwords with no clue what they mean and is making them requirements.

    For example: "simplified GUI design and event handling;" Simplified compared to *what*? Xt is simpler design and event handling than Xlib. Tk is (imo) simpler than X.

    Why does he know that he's going to need garbage collection or operator overloading?

    The real thing he needs to do is look at the requirements of the project, the skills of the available designers, budget and time and go from there. I'd be really annoyed if my boss came to me and said "You're not supposed to be using C++ because it doesn't have garbage collection built-on."
  • by Black Parrot ( 19622 ) on Monday February 11, 2002 @05:58PM (#2989878)

    > All those features used together is going to make a big mess, IMHO. I think your boss needs some education in computer science.

    Mark me -1, Redundant on the many comments already posted about the symptoms of PHB syndrome.

    > Operator overloading is not a good idea I think.

    IMO, operator overloading is wonderful: define a type for vectors, matrices, etc., and overload the arithmetic operators for them. I've even done it for (simulated) robot sensor scans, and for the ">" sign in a system that uses simulated annealing.

    Overloading can make your code much more mathematically intuitive, and hence easier to read.

  • it's the programmer (Score:2, Interesting)

    by SpacePunk ( 17960 ) on Monday February 11, 2002 @06:00PM (#2989911) Homepage
    yes, that's right. The programmer is what makes any programming language powerfull. You might as well ask what color is prettier. It all comes down to the opinion of anybody who uses any particular programming language. There are those that will say Java is better, others will say that C++ is better, and still others that sneer at the C++ crowd and say that C is better. Just pick one that fits most of your criteria that you and/or others in the shop are most familiar with. It would be idiotic to go with a language nobody there knows just because it fits all the criteria since the time spent learning the language well enough to make something good with it will end up costing more than the project is worth.
  • Re:Python (Score:2, Interesting)

    by __past__ ( 542467 ) on Monday February 11, 2002 @06:07PM (#2989974)
    Have a look at OCaml [ocaml.org]. IMHO, it's at least as cool as Python (unfortunatly it lacks the extensive libraries, which might render it unusable in some projects). It has strong, static typing, but it infers the types itself. I.e. you don't have to explicitly say what type a function accepts as an argument, the compiler will figure it out itself, by how you use the arguments.

    Oh, and it's fast - usually somewhere between C and C++, using the GNU compiler...

  • Question about MI (Score:1, Interesting)

    by sean@thingsihate.org ( 121677 ) on Monday February 11, 2002 @06:18PM (#2990102) Homepage
    So I've had this question about multiple inheritance that I've been meaning to ask...

    If Java does NOT support it, then how, for example, does ArrayIndexOutOfBoundsException inherit from IndexOutOfBoundsException which inherits from RuntimeException which inherits from Exception which inherits from Throwable which inherits from Object?

    That looks like multiple inheritance to me. There must be something I don't understand. What is it?
  • by tbien ( 28401 ) on Monday February 11, 2002 @06:24PM (#2990158) Homepage

    do yourself a favour and take a look at
    Objective C and the typical Frameworks
    like Openstep or even more recent Cocoa.

    As a converted Linux, now Mac User I recently
    discovered those goodies and I really don't
    understand why they didn't take off in the past
    (NextStep has been around since the 80ies).

    Objective C is such a powerful dynamic language
    and it is real fun to write programs with it.
    You have a clean and lean Smalltalk-in-C object
    oriented syntax and are able to use all those
    low-level C APIs... I don't know any better.

    PS: For the use with Windows try to get one
    of the OpenStep 4.2 packages one often find
    at ebay. Besides the native Next/Sun/i386
    OpenStep OSes it includes a devkit for
    the use under WinNT... If use ever had to
    use COM and alike, you will really, really love

    PS: There is even a GNU implementation of the
    OpenStep API... -> GNUStep


  • Re:for starters (Score:4, Interesting)

    by Oink.NET ( 551861 ) on Monday February 11, 2002 @06:27PM (#2990191) Homepage
    ... COM ... pragmatic OO design ... prototyped ... UML ...

    As the original post mentioned, be careful you're not just "sitting around discussing the language without discussing the problem." As you just demonstrated, even design has its buzzwords. No one methodology is ideal for solving all problems. Choose the best tool for the task, and this includes methodology.

    Beware of just abstracting the language debate to a higher level.

  • Re:Question about MI (Score:1, Interesting)

    by Anonymous Coward on Monday February 11, 2002 @06:34PM (#2990269)
    > That looks like multiple inheritance to me. There must be something I don't understand. What is it?

    You're confusing a long single-line-of-descent inheiritance chain with MI; MI would be if ArrayIndexOutOfBoundsException inherited from both IndexOutOfBoundsException and ReportExceptionToFile, two base classes at the same level, instead of just from IOOBE.

    In Java, a class X can only have a single base class from which it is derived, but can implement as many interfaces as it wishes. It can't inheirit the implementations from any other class than its single baseclass, so it has to have the implementations in-house, so to speak. X can use delegation, but can't directly inheirit from multiple classes.
  • Kylix (Score:3, Interesting)

    by OverCode@work ( 196386 ) <overcode @ g m a i l.com> on Monday February 11, 2002 @06:43PM (#2990370) Homepage
    Aren't these the exact goals of Kylix? I haven't used it myself, but from what I've seen it is an intuitive programming language suitable for general application development, with a nice GUI system.

  • by wowbagger ( 69688 ) on Monday February 11, 2002 @06:50PM (#2990431) Homepage Journal
    Not quite. As I said, the classes DSP_handler and FileDevice implemented most of the code I needed. As a result, the derived class only needed to implement one function, rather than all the functions that both a DSP_hander and a FileDevice implemented.

    Since a Java interface is akin to a C++ base class with nothing but pure virtual member functions, it cannot provide any *code* to the derived class.

    Now, you COULD implement this by having a DSP_handler_core class that implements the functions, and then having a bunch of statements in the derived class tossing functions to an internal DSP_hander_core object, but now you are writing many trivial routines just to toss the functions.

    Your assignment (should you choose to accept it) it to show how a class can pick functions from two base classes to get a task done.

    You might try a) READING the post and b) LOGGING in next time.
  • by Anonymous Brave Guy ( 457657 ) on Monday February 11, 2002 @07:12PM (#2990633)
    When garbage collection comes along, voila! Your resource is free.

    If garbage collection comes along, voila!

    The biggest single problem with Java's GC set-up is that finalisers may never be called. They are thus completely useless for anything other than a convenient debugging aid. You certainly can't put vital things like resource release code in there. Even if you could, late release of resources due to a GC system that only understands memory is enough to deadlock an application.

  • Well... (Score:3, Interesting)

    by autopr0n ( 534291 ) on Monday February 11, 2002 @07:17PM (#2990680) Homepage Journal
    Say you have: ComplexNumber a, b, c, d, e, f;

    Would you rather have:


    (a.power(b.add(e)).divby(c.multiply(d.add(b.add(a. add(b)))))

  • Re:It should have a (Score:2, Interesting)

    by diesel_jackass ( 534880 ) <travis...hardiman@@@gmail...com> on Monday February 11, 2002 @07:21PM (#2990705) Homepage Journal

    sorry, i don't have moderator status.

  • by PhotoGuy ( 189467 ) on Monday February 11, 2002 @08:19PM (#2991118) Homepage
    Wow. Obviously a hot topic. I read slashdot religiously, and it's seldom I get to a post before a hundred or so posts have been made. But 600 got in ahead of me this time. (No FP! for me!)

    And a good sign of it being an emotional topic is that almost all of the posts are below my viewing threshold. Far more than normal.

    Here's my take: I used to be one of the biggest Java advocates around. (In fact, I was one of the winner's of Sun's Java Cup programming contest.) I fought off learning Perl for years, but today, my language of preference is now Perl. Here's why:
    • Portability - Where Sun brags about "write one, run everywhere", Perl actually delivers. Java's available on a few platforms (and even fewer, supported by Sun). But Perl has *much* wider availability. As one example of many, FreeBSD didn't have a reliable, supported Java implementation until very recently (if even now), whereas Perl has been there for ages. And somewhat disturbing is that the most reliable Java implmentation is on Sparc Solaris. Even I386 Solaris has serious issues. I guess making sure you fix problems on your own platform is a natural tendency, but it does go against the reliable portability that Java promised. (As compared to MS's anti-competitive behaviour, this is small stuff, but an issue nonetheless.)
    • Reliability - I've had JVM's cransh on me, run out of memory inappropriately, and have other ugly problems. I haven't seen this with perl, yet. I've looked to IBM, Sun, Symantec, TowerJ, and others, for a solid, fast JVM, and they all seem to have fatal weaknesses.
    • Consistency - I've found far greater consistentcy in the behaviour, performance, and reliability of Perl across platforms, than Java. I've seen Java seriously choke under pressure, and run out of memory. It might be fine for lightweight, run-once applications. But for heavy-duty stuff, it's repeatedly disappointed me.
    • String Manipulation - In the majority of applications I've come across, *especially* web application, most of the work you end up doing is string parsing and manipulation. Perl's regular expression functions far outshine Java in this aspect. A one liner replaces a fifty-liner. Yes, the person maintaining the code has to know Perl regular expressions inside out, but I don't have a problem with that requirement.
    • API's - CPAN seems to have far more exhaustive support for standard API's, well in advance of Sun's. They are usually more fragmented initially, and I would prefer the centralized approach of Sun, if it could just keep up. But it can't (or at least doesn't).
    • Open Source - While Sun talks a lot about being open source advocates, Java's source is far more restrictive and harder to get or legally use, than Perl's. (Although I am against the non-commercial restriction of GPL. Hmmm, Perl is GPL, isn't it? Have to check that, as I'm not 100% sure, but it's a good guess.)
    • GUI - AWT was efficient, but hard to use. Swing is very cool looking, with great features, but *slow*. Perl/TK is fast, efficient, portable, easy to use. It's by far my preferred rapid GUI environment. (A bit of foreshadowing perhaps: On my winning JavaOne entry, I used PackerLayout [I think], which was a port of the Tk layout mechanism to Java. Okay, okay, packer actually originated with Tk, not Perl, but since Perl/Tk is more or less the defacto Perl GUI, it's not complete out of context :-)
    • Multithreading - This is actually one point where Java shines over Perl. Perl has no standard multithreading, which truly, truly, sucks.
    • Elegance - This is another area where Perl fails, but another area where it doesn't matter :-) Perl is ugly, Java is elegant and beautiful to look at. But I can do more with perl, more quickly. And super-efficient hashes as a core part of the langauge allow passing arguments as key-value types, as is encouraged in their object programming model. This, I find more elegant. So at the surface, Java is prettier. But one layer down, where it really counts, Pelr is more elegant.
    So in short, I've "been there, done that" with Java. Perl is liberating me from a lot of the problems I had with Java.

    (And on a rather irrelevant, but rather appropriate bit of symbolism: I happened to be wearing a JavaOne Long Sleeved T-Shirt tonight as I wrote this. The wrists were a bit tight, shrunk from washing, I guess, so I tugged on them to loosen them a bit. The whole sleeve ripped. Kind of symbolizes my experiences with java. Shoddy merchandise, all around :-)

  • Re:for starters (Score:2, Interesting)

    by Ivan the Terrible ( 115742 ) <vladimir@NoSpAM.acm.org> on Monday February 11, 2002 @08:28PM (#2991173) Homepage
    In general I agree with your comment, but there is one significant aspect where choosing a language is important:
    People seem to be limited in what they can conceive by their choice of language.

    Paul Graham discusses this in an article called Beating the Averages [paulgraham.com] that was posted on /. a while back (here [slashdot.org])

    Look at it this way: All the common languages are Turing complete, so they are all fundamentally equivalent. Do you then conclude that your choice of language is irrelevant? I think most people would disagree. Some things are a lot easier in some languages than in others.

    So, although you're certainly partially justified in your rant, there is a germ of rationality in the original query.

  • by Graff ( 532189 ) on Monday February 11, 2002 @08:33PM (#2991200)
    I'll have to agree with ease-of-use and a powerful API. I've just begun programming with Obj-C and Cocoa and I can already see how simple it is to use. When you can make a decent, simple text editing program with about 3 lines of code you know you're in for a treat.

    The Project Builder application gives you just about everything you'd need in an IDE. The Interface Builder makes it simple to set up the user interface. It's actually fun to use, it gives you plenty of freedom to lay stuff out as you want but it also offers some great tools to simplify the process.

    Right now the only thing holding me back from using it all the time is the fact that whatever I code using the Cocoa APIs are going to be MacOS X only. On the other hand I see MacOS X going far in the next few years so maybe that's so bad.
  • Re:Why doesn't... (Score:3, Interesting)

    by Tattva ( 53901 ) on Monday February 11, 2002 @09:02PM (#2991375) Homepage Journal
    Why would they ever add operator overloading? It's a feature which has little use, and causes confusion galore because its easily abused. That is the reason it's not in there now. I don't see that changing.

    Amen, brother

    The worst are casting operators, such as "operator const char*()", that can really lead to bizarre code and hard-to-catch errors because if your finger slips on the keyboard while entering an operator, you will all of a sudden vastly change the semantics of your code while the syntax, at a glance, appears the same. And who outside of the secret, special cadre of C++ gurus can fully predict the results when you have a combination of casting operator overloading and method overloading on a call? I end up explicitly casting objects such as _bstr_t that misuse this behavior and do not provide an alternative named method to avoid confusion in my code.

    The totally weirdest is, of course, in STL, where they have the function operator such as "result_type operator()(const argument_type& y) const;" where for object foo you would call "foo(argument_type_obj)", and the object reference behaves like a function pointer. This can create some really cool algorithmic constructs like a "for each" in C++, at the mere expense of zapping your noodle with pyschodelic hippie mind rays.

  • by bentini ( 161979 ) on Monday February 11, 2002 @09:58PM (#2991753)
    *sigh* This is slashdot, so I doubt that anyone's going to take notice of this, but...
    this paper [sun.com]explains why people want to ADD operator overloading to Java. Oh, and this isn't just some hack, this is Guy Steele. He has been heavily involved in the design and/or standaradization of C, Lisp and Java. Yeah. He's smart.
    People want Operator Overloading as a choice in language design. All the other objections to Overloading in this thread has been about C++ overloading. You don't need to have constructors or whatever or not being able to find out what the call actually is. That's a limitation of the language, not the concept.
  • by Anonymous Coward on Monday February 11, 2002 @10:01PM (#2991768)
    If you were to design a language from the ground up, what features would you include and why?

    Designing a language from the ground up is a fool's errand, but assuming I'm that kind of fool, I'd categorize the above features as follows:

    Features to include at all cost:

    • abstract classes
    • well-designed error handling
    • garbage collection
    • portable semantics
    Features that are nice, especially if you don't have to implement them yourself:
    • support for OO programming model
    • well-designed libraries for GUI, event handling, etc.
    • visual GUI editor
    • intuitive and easy to use IDE
    • already-ported compiler implementations

    Features that are annoying and should be avoided if possible:

    • operator overloading
    • function overloading

    Features to avoid at all cost:

    • multiple inheritance
    • event model, or other specialized subsystems, built into the language design, rather than being provided as libraries
  • Re:C++ (Score:3, Interesting)

    by elflord ( 9269 ) on Monday February 11, 2002 @10:07PM (#2991807) Homepage
    Reference counting does not count as true garbage collection, because 1) it does not deal with cyclic references (such as you would get with a doubly-linked list, or with an Observer pattern)

    In both of these examples, reference counted memory models just don't make sense. In the case of the doubly linked list, the obvious ownership strategy is for the list to own its nodes. The nodes should not own other nodes. In the observer pattern example, one approach would be for the observer to own everything. This approach makes sense since the observer sees everything.

    C++ allows you to choose a memory management model that fits the problem domain. In some cases, reference counting is a terrible model. GUI programming is a great example of where it would be a bad model (which is why Qt uses a tree based memory management strategy)

  • by KidSock ( 150684 ) on Monday February 11, 2002 @10:28PM (#2991887)
    OO is only one attempted solution to the larger problem of making programming easier on the programmer.

    No. You're thinking of MSVC++ and drag and drop programming. OO is about modeling and it can be very effective.

    It does this by trying to compartmentalize functionality and seperate implementation from usage.

    This is the stuff trolls are made of Jayson. OO does not "compartmentalize" and it is not about contract programming. You have a very superficial understanding of OO principles.

    Each instance of an object in a program is a model. You think about what it is conceptually that you are modeling and derive classes for those concepts. In practice these objects usually have hierarchial and recursive relationships. For example a stock is a security but a security is not a stock because it could be a fund. Or a WWW document has elements and frames where frames may be sub documents. These relationships are found everywhere and can be modeled most effectively using OO priciples. That's not to say you should use OO for everything (e.g. you wouldn't want to represent each character in a document using a separate object). Indeed I don't beleive 9 out of 10 developers using an OO language are actually writing OO code. It's modular at best. To use it effectively is non-trivial.

    To see how OO has eschewed its own features just look at how delegation is favored over inheritance. This is a functional way of programming.

    Like I was saying above, the results of OO are most effective when used strategically. The highest level superstructure benifits greatly from an OO organization. But using OO to a fine degree is not necesarily good.
  • Which language (Score:1, Interesting)

    by Anonymous Coward on Tuesday February 12, 2002 @04:17AM (#2992924)
    My experience as long time professional developer:

    For small to medium sized projects use Visual Basic, PHP, Python or Perl.

    For medium projects consider Delphi, Python, Java, C#. But know that Java and C# are slow compared to native machine code.

    For large projects consider C++ and Ada95. Both compile to native machine code. Use C++ because of the many tools available for it. Use Ada95 because it was designed to write reliable long-time used software in large projects. Ada95 can be compiled to Java Bytecode, too (with JGNAT).

    Note: An IT professor told me that there is no 100% error free C++ compiler in the world! AFAIK only for Ada 95 exist valided error free compilers. There exist very good development tools both for C++ and Ada 95.

  • Re:Common Lisp (Score:2, Interesting)

    by Patrick May ( 305709 ) on Tuesday February 12, 2002 @05:16AM (#2993020)
    This is exactly what I was thinking when I read the original poster's list of criteria. I've worked extensively with C++ and Java and less exetensively with Perl and Python. The only language system in my experience that meets all of the specified criteria is Common Lisp with CLOS (the Common Lisp Object System).

    I suspect that if the original poster were to present his boss with the suggestion to use LispWorks, for example, new requirements would be forthcoming.

  • No Unicode, no cigar (Score:3, Interesting)

    by GCP ( 122438 ) on Tuesday February 12, 2002 @07:34AM (#2993252)
    All serious next-gen GUI platforms are Unicode now. If you're not using C++ for other reasons, don't pick a language that isn't fundamentally Unicode-based if your goal is GUI apps.

    Ruby is like Perl. It's for parsing and filtering byte streams, and like Perl it's great for that sort of app.

    Such languages are not ideal for interactive GUI apps that are all about visual display and interaction. Go for Java or C# or VB.Net or C++/KDE and forget the MI or overloading nonsense. That's not how you pick a language.

  • by Ginsu2000 ( 556427 ) on Tuesday February 12, 2002 @10:30AM (#2993814)
    Take a look at Jade. It was designed and built by Aoraki Corporation, whose previous succes was Link(?). This includes an integrated object orientated, transaction based, distributed computing alternative. Just Another Development Environment.
  • by Anonymous Coward on Tuesday February 12, 2002 @07:49PM (#2997252)
    The programming language wars are not over. Off the top of my head I can think of two companies using LISP in their deployed apps, which are quite successful thank you. They attribute some of their success in rapidly addressing market needs to the flexibility of the language.

    Python is the only more-recent language I can think of which offers many of the same advanced features together with a sensible syntax. Python also offers some features that LISP doesn't, like some of the libraries for XML and text processing, but LISP is substantially faster than Python in many cases.

    I'm unhappy about Python's speed, since I'd like to use Python for more things than I do use it for. Has anyone tried speedup techniques like JIT compilers for Python?

The Macintosh is Xerox technology at its best.