Slashdot is powered by your submissions, so send in your scoop

 



Forgot your password?
typodupeerror
Programming IT Technology

What Makes a Powerful Programming Language? 1332

Posted by Cliff
from the blueprints-for-next-generation-computing dept.
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:
  • Python (Score:5, Insightful)

    by javaaddikt (385701) on Monday February 11, 2002 @04:33PM (#2989489)
    of course. All of the above, and rapid development. And you'll actually be able to maintain your code base 1 year from now.
    • Re:Python (Score:3, Informative)

      by DeadVulcan (182139)

      I'm working at a software firm where we're using Python and Tk for our GUI development.

      The only big complaint I have about Python is that I would really like to be able to enforce static typing. In python, you can get some "thing" as a parameter and perform operations on it, call methods on it, return it back, without having any idea what it is you're working on until run-time, when your program barfs on the thing it got.

      Of course, the dynamic typing allows fast development, but the maintenance afterwards (especially when the code has changed hands) can be a bit of a chore sometimes.

      Overall, however, I think Python is extremely cool.

    • I can definitely speak for the elegance of Python; I've used it to build some pretty large-scale AI projects, among about a zillion other things.

      If you're looking for the weirder OO features like operator overloading, you'll find them in Python, but the calisthenics you have to go through to do it might make you think twice about using it.

      The only real drawback to Python is the execution speed. One of the AI projects I previously mentioned worked great (and I completed it probably 10 times faster than I would have had I been using C/C++), but it ran very very slowly. The cause of the problem is clear -- no static typing, reference-count garbage collection, a stack-based VM (I ain't knockin' it! It's just hard to optimize)...

      If you are planning to do anything compute-intensive, maybe Python is not the right choice. It's always possible to break out to C/C++ with the Python API (to do your compute-intensive tasks), but there are drawbacks: over time, the Python C-API will probably drift, and you'll have to keep tweaking your native code to keep it working. Also, the inner workings of Python, especially refcounts, can be boggling and the source of bugs and memory leaks that can be fantastically hard to track down.

      If you consider Python, then great. Just keep these points in mind.

  • by mrroot (543673) on Monday February 11, 2002 @04:34PM (#2989505)
    You know, Pure Fcking Magic
  • Simplicity is good (Score:3, Insightful)

    by jdesbonnet (22) on Monday February 11, 2002 @04:34PM (#2989507)
    All those features used together is going
    to make a big mess, IMHO. I think your
    boss needs some education in computer science.

    I'd recommend you look at Java and Python.
    Operator overloading is not a good idea I think.
    • by ubergnome (242049) on Monday February 11, 2002 @04:42PM (#2989610)
      Operator overloading is just fine. As long as you follow the logic of the other uses of the operator. Sometimes you don't even have to do that.

      Look at the '+' operator for strings in the C++ standard library. That is definitely an overloaded operator, and it does something way different. I think that this operator is definitely a good thing (sure beats the pants off of strcat).

      I think operator overloading is a good idea. Just use the power wisely.
      • No, but when developments come to pass, be it in the field of programming languages or building materials, they are tested and applied in ways that approach their potential. If this didn't happen, and wasn't supposed to happen, we'd have nothing more than COBOL, FORTRAN, and LISP (forget about one of the nice lisps, like CL, MacLisp, ISLISP, Scheme - just the original). Maybe Algol-60, but with your reasoning, we would've just stuck with the first three.
      • by pb (1020)
        Actually, Java ITSELF overloads the '+' operator; therefore, it's obviously a good thing just so long as no one ELSE can do it.

        That's one thing I dislike about Java; it intentionally cripples the features available to the user whilst using similar features in the design of the language. For example, you wouldn't want to write Java in Java, because it just isn't functional enough to do a decent job.
    • by felipeal (177452) on Monday February 11, 2002 @04:45PM (#2989663) Homepage
      All those features used together is going to make a big mess, IMHO

      I agree. Most of those requirements does not make sense, they seem to be pure buzzwords bullshit by your boss [dilbert.com]
      Java, for instance, fullfill most of them (except by the multiple inheritance and operator overloading, as already pointed out), but not all. Are you going to discard it just because of these 2 lacking features? Do you really need them? What else does you need that java does not offer, templates?
      • by Anonymous Coward on Monday February 11, 2002 @05:03PM (#2989932)
        Most of those requirements does not make sense, they seem to be pure buzzwords bullshit by your boss

        Exactly right! While reading the long requirement list, I was expecting the last one to be:

        "and a cute animated assistant to help us find our way through the features."
      • Anonymous Coward wrote:

        Most of those requirements does not make sense, they seem to be pure buzzwords bullshit by your boss

        Exactly right! While reading the long requirement list, I was expecting the last one to be:

        "and a cute animated assistant to help us find our way through the features."

        See, that's the problem with AC posting: it was a funny reply moded down to -1...
        (I hope this one does not have the same fate :)

    • > 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.

  • by Anonymous Coward on Monday February 11, 2002 @04:35PM (#2989514)
    More importantly, what is the project, and why is your boss specifying language features rather than project design goals?
  • One question... (Score:3, Insightful)

    by thrash_ (34661) <brad@crocheBLUEt.net minus berry> on Monday February 11, 2002 @04:35PM (#2989515)
    Do all features need to be included in the language, or is an addon a possibility? C++ has all but one. Garbage collection, but that can be found in a 3rd-party library. Java lacks only operator overloading, which isn't really necessary. It is purely syntactic sugar. I cannot speak for the other languages, as I have little experience in those areas. You perhaps should have your boss prioritize the requirements, and pick the one that most meets the goals.
  • Simple. (Score:5, Insightful)

    by PsiPsiStar (95676) on Monday February 11, 2002 @04:35PM (#2989516)
    Hype! hype makes a language powerful! The IT departments are run on hype. It's a hell of a lot easier for business types to understand 'buzz' than actual code. Right? Of course right!
    • Re:Simple. (Score:5, Funny)

      by curunir (98273) on Monday February 11, 2002 @05:51PM (#2990445) Homepage Journal
      For this reason, the language I'd suggest is English. It is entirely compliant with every buzz word listed above and is the only language guaranteed to be compatible with every future over hyped technology.

      It does have a couple of down sides tho...compilers cannot be purchased, only hired. Also, the compilation process can be time consuming depending on the skill of your compilers.

      However the ability to have your product planning team create the .fsd files and pass them directly to the compiler is a big plus.

      Oh...and it is also fairly simple for a trained engineer to port English programs to languages such as French, Spanish, Russian or even Japanese!
  • Python? (Score:2, Redundant)

    by ilias (409618)
    Tried Python?
  • built in "DoThis" command. That parses out any english language command and does it.
    e.g. DoThis("securely connect to the database and return the data on the user"

    or DoThis("delete all spam from my inbox")

    or maybe even this DoThis("Prevent this comment from getting modded down by some jackass")

  • by jc42 (318812) on Monday February 11, 2002 @04:36PM (#2989539) Homepage Journal
    Well, I'd try to get your boss into a discussion with the (unstated) goal of trying to learn what language the boss has already decided is the correct answer.

    When people have a long shopping list of specific details, it almost always means that they have decided and have set up the requirements so that only the one answer is correct.

    This is, of course, a conventional way of doing "open" hiring or purchasing. You just write up the specs so that only one person or product can fit. It works just as well with software.

    • by gartogg (317481)
      If the boss knew, he would have given out a set of criteria that actually defined an extant language, instead of a set of imnpossible criteria.

      I would go back and engage him in a discussion on which of these goals are most important, with the (unstated) goal of trying to convince him that whatever language you think would be best really is best.

      Istead of looking at his criteria, look at the project and the goals, and make your own decision. It seems as though he wants a good language that's also easy enough for all of the programmers to use, so if you randomly pick C++ or java for instance, you could convincve him that it would do fine because almost everyone knows it well enough to code in it anyways, and it fits the requirements as well as any of the languages do. (This isn't an endorsement of C++, Java, or of any other language.)
    • by g1zmo (315166) on Monday February 11, 2002 @04:57PM (#2989873) Homepage
      I have already looked at
      C++, Java, C++, C#, Eiffel, and even VB.net
      Wonder which way he's leaning?
  • by BitwizeGHC (145393) on Monday February 11, 2002 @04:37PM (#2989554) Homepage
    ... is Smalltalk. In its standard form it's missing multiple inheritance, but is powerful enough to tackle just about any OOP task, even without MI. What the IDE is like depends on the environment you get; but I hear great things about VisualAge.
  • for starters (Score:5, Insightful)

    by Sebastopol (189276) on Monday February 11, 2002 @04:38PM (#2989557) Homepage
    Your query is so vast that it demontrates a complete lack of planning or thought. Post more details, or hire someone else to figure them out beforehand.

    This is what pisses me off. If you would put some thought into the product and the design abstraction, this would be an easy question. Instead, people charge off with grandiose ideas and big buzzwords (event handling, GUI, object oriented).

    People wonder why there is so much crap software out there. This is one reason: sitting around discussing the language without discussing the problem.

    I know I'm being kinda mean, but it's how I feel when I read such a newbie question from someone claiming to be attempting such an important task. I hope this post lasts long enough for discussion before being modded down to -1.

  • Ruby (Score:5, Informative)

    by JamesOfTheDesert (188356) on Monday February 11, 2002 @04:38PM (#2989562) Journal
    Don't know of a GUI as nice as, say, VS.net, but here are few in the works that look quite promising. Other than that, Ruby [ruby-lang.org] fits your needs quite well.
    • No Unicode, no cigar (Score:3, Interesting)

      by GCP (122438)
      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 XRayX (325543)
    I would go with Java. It is really object-oriented and clear structured, there are many implementations out there (Sun's Official [sun.com], gcj [gnu.org], IBMs), it is cross-platform and if you tweal it a little it can be fast.
  • Less than 20 comments and already I see three(over +1) that say, "Java does all that!".

    You may feel that java is the answer for the poster, but it doesn't meet the criteria. Even ignoring the vague, flame-provoking concepts of "intuitive and easy to use IDE" and "simplified GUI design and event handling"... Java doesn't do multiple inheritance or operator overloading.

    Perhaps you think that no project needs these... great, at least tell us why in your response, rather that spouting, "Java... Java... Java"

  • by Ars-Fartsica (166957) on Monday February 11, 2002 @04: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.

    • by BitwizeGHC (145393) on Monday February 11, 2002 @04:44PM (#2989658) Homepage
      Smart managers will let their programmers use whatever gets the job done.

      Smart programmers will choose the most powerful tools for their job.

      They don't get the mainstream IT press headlines that Java, C#, .NET, and even Python do, but really "cool" languages like Smalltalk and LISP are seeing heavy use out there in the Real World. The bulk of C# and Java work will be the domain of code monkeys; the really cool stuff is being done with a variety of tools and languages.
  • You want Java (Score:3, Interesting)

    by Gorimek (61128) on Monday February 11, 2002 @04: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.
  • It all depends... (Score:2, Informative)

    by DrPepper (23664)
    ...on what you are writing. I use Java for a lot of work, but I wouldn't use it for anything that needed a *lot* of speed, or low level hardware access. However, Java does have a rich API and good portability.

    The best solution is ultimately probably using two languages - perhaps Java for interface work / portability, but also C for anything that needs to interface to hardware, or needs the performance. I'm only using Java and C as examples - but other languages are the same.

    Most languages can't do everything. Pick the best for the task required and the skills available.
  • Power! (Score:2, Interesting)

    by Pengunea (170972)
    I think that there are 5 main elements that make a programming language powerful.
    Simple sequence
    Do While
    Do Until
    If Then Else
    Case

    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 @04: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 =).

    -Jacques
    jc@cs.washington.edu
    • by Graff (532189)
      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.
  • Fantasy (Score:5, Funny)

    by NiftyNews (537829) on Monday February 11, 2002 @04:40PM (#2989598) Homepage
    "If you were to design a language from the ground up, what features would you include and why?"

    Since we're in a complete fantasy realm here where all of use have the brainpower, patience, trust fund, and buckets of countless free hours required to even BEGIN such a task...

    ...can I have a pony?
  • by Anonymous Brave Guy (457657) on Monday February 11, 2002 @04:41PM (#2989600)

    I don't get it; what's wrong with good ol' C++, according to that list?

    I can only see two possible deficiencies according to your requirements. The first is the lack of a truly portable GUI library (though you can get libraries like Qt that are reasonably cross-platform in some cases). The second is the garbage collection, but (a) you can use a garbage collector for C++ (if you must...) and (b) using the right basic tools and techniques, garbage collection is largely unnecessary in a C++ program anyway.

    The biggest problem with C++ is getting people who program it, as opposed to C-with-bolted-on-classes-here-and-there. But if you've got a half-decent team and someone with smarts in charge, all of your concerns should be non-issues.

  • by sapped (208174) <mstore1&yahoo,com> on Monday February 11, 2002 @04:41PM (#2989605)
    The best programming language is the one that is used by your company's best programmers. If they are intimately familiar with it then they are able to use it to its fullest and will be able to make the language do what you want it to do.
  • by Spankophile (78098) on Monday February 11, 2002 @04:41PM (#2989607) Homepage
    Except I have the added requirement that the language must have an IDE that accepts voice dictation and can create the program for me.

    I think it's the same language that they use to program the holodeck.

    "Computer, make me a map of all the known last locations of Romulan war ships."

    Hmmm. almost looks like AppleScript.
  • by trenton (53581) <trentonl@gmail . c om> on Monday February 11, 2002 @04:42PM (#2989628) Homepage
    You're in a great place because you can choose which language to use. Most aren't that lucky. Instead of choosing a language based on a list of random features, start thinking through the problem and think of language features that would make solving the problem easier. The language you choose will be a natural selection.

    Making a list of neat features won't do you any good. It's this approach to problem that causes bloatware. If a product is guaranteed to solve all your problems, you can be assured, it will solve none. It's all marketing!

    • Choosing the language is a huge economic decision in any project. The language that is most suited to solve the problem may not be the tool that most is the most economical in the long run. Take some exotic minority languages - lisp, prolog, etc. Sure they may seem appealing for solving a group of problems, then you realize that since harldy anyone practices them for a living anymore, you are paying 2x for support over its lifetime, if you can find staff at all.

      Often it simply doesn't pay to use a minority language, even if it seems better suited to the problem.

  • by igrek (127205) on Monday February 11, 2002 @04:45PM (#2989666)
    It's strange that your boss has so many requirements for the language but yet he didn't want chose the language himself.

    You have the difficult choice to buy a car in any color, provided the color is black.
  • by CDWert (450988) on Monday February 11, 2002 @04:45PM (#2989675) Homepage
    Python has all you need, If I were to design a language from the ground up it would act and look alot like Python, that said, there is already something there and no need to push the edge of insanity writing my own language again, I did when I was younger, in the early 80's. No enough caffiene on the planet to try it again.

    Python will, if designed properly handle any load you could want to throw at it, it is portable as it gets, its easy to debug.

    I cannot imagine what you are writing, or your boss thinks youre going to write that needs all that in one place at the same time. My bet is this is a buzzword hyped dude that has no Idea of the actual functional requirments. He wants an IDE and RAD, Im assuming so any 12$ an hour lackey can help support it at a later date as well as speed initial development. If portablity is the least of your concerns(in short term) VB.net would be the choice. In about 2 years VB.net programmers will be like VB programmers are now....a dime a dozen. That has more value than you can imagine on a large scale project whose lifecycle is indeterminite.

    Screw em all and write it in assy, dont let em see any progress and then unleash it upon them complete, debugging is easy, if its wrong it dosent run. Its portable, from same architecture to same architecture(snicker), it actually will scale(buzzword insert)BUT THE SINGULAR MOST IMPORTANT PART is Youll have a job for life, at whatever you want em to pay you to maintain it :)
  • by kabir (35200) on Monday February 11, 2002 @04: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.
  • Jesus Forking Christ (Score:3, Interesting)

    by Snafoo (38566) on Monday February 11, 2002 @04: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.
  • by Jerf (17166) on Monday February 11, 2002 @04:47PM (#2989707) Journal
    Of course they're all missing something! No One Language can be all things to all people. In particular, "intuitive and easy-to-use IDE" and "simplified GUI" is a hard mix. (I'm not going to call Visual Studio intuitive.)

    You probably ought to try to weasel more requirements out of your boss.

    That said, the closest match to your problem is almost certain Python. The only "bullet point" missing is "abstract classes", but in Python, the term "abstract class" is nearly meaningless; they aren't necessary. But if it makes you feel better to create them, do so. Some people do for stylistic reasons.

    Functions are overloadable, you just have to do it by checking types. For paying that price, you also get some cute stuff with *args and **kwargs (look at the docs for those things until you understand them), which can be lifesavers when you want them.

    As for the "simplified GUI coding", you get *many* choices: Tk ships by default, and while ugly, is fast and effective for many uses. wxWindows is well-supported (in all senses of the word), looks native on all supported platforms, and is extremely flexible. (I'd rather program in wxWindows then MFC, even if I were doing a Windows only program! And it's a rare MFC program that couldn't be done in wxWindows.) Various IDEs are available for these things; you often don't need them. And there are many other choices as well.

    If Python lacks the Hype Veneer and you think your boss cares about that, then you've probably got to go Java, along with the purchase of an IDE. You don't get simplified GUI programming, but I don't know of *any* hyped language that has simplified GUI coding.
  • Hold your horses! (Score:5, Insightful)

    by Hard_Code (49548) on Monday February 11, 2002 @04:48PM (#2989737)
    "My boss gave me a set of criteria"

    Hold your horses! Have you really taken the time to understand the *problem* yet? This post is just a laundry list of various programming language features and buzzwords. Choosing a programming language is not like choosing a car, and just adding on all possible accessories and upgrades. More features does not a better language make. I'd have your boss clarify the reason for each and every feature (and yeah, "programmers are familiar with this" probably is a valid response - but there should at least *be* a response). Does your boss even know what multiple inheritence and operator overloading is, and why one would even want it? Until you can justify the features you want, there can't be a debate on "what is the most powerful programming language?". It's like "what is the best religion?", or "what is the best color?".
    • by namespan (225296) <namespan&elitemail,org> on Monday February 11, 2002 @07:39PM (#2991233) Journal
      <I>what is the best religion?</I>

      Dear Slashdot,

      My boss gave me the assignment to find the best religion. Some requirements that he gave me are:

      <UL>
      <LI>Should keep one from everlasting suffering and torment in next life
      <LI>Should help one eventually pass to nirvana-like existence, eternal increase and well-being, perhaps even an all-powerful/omniscient state
      <LI> Should help one to acheive balance, peace of mind, and a strong feeling of being alive within this imperfect world
      <LI> Should enable the occasional performance of miracles when called for
      <LI> Should improve behavior of followers (make them charitable and courteous but zealous in good causes), and help them improve the world
      <LI> Should have limited numbers of flawed adherents
      <LI> Should have a consitent theology that makes total sense to rational minds and mystics alike, yet is accesable to the common man
      <LI> Should provide insurance against armageddon-like scenarios
      <LI> Should have a finite (yea, even small) set of clear, detailed, and consistent directions for acheiving all positive results (Goedel's theorem notwithstanding). Not to mention avoiding bad results.
      <LI> Should be in line with the will of the universe's most powerful entity.
      </UL>

      I've looked at Christianity (Catholic, Eastern Orthodox, Melkite, Coptic, Protestants of several stripes), Islam, Buddhism, Hindu-ish faiths, and primitive animism, Kibology, Shirley Maclain, Scientology, Wiccan groups, secular humanism, and both U.S. political parties, but they all seem to be missing something. Can you point me in the right direction?

  • by ddkilzer (79953) on Monday February 11, 2002 @04:49PM (#2989748)

    A couple other languages/environments you may wish to look at are:

    I don't have much experience with Delphi 6/Kylix or Object Pascal, but Perl 5 will handle most of your requirements.

    Personally, I would go back to your boss and ask why he needs all these features. The list of requirements sounds more like a buzzword-compliant list of programming language features that a typical PHB would come up with than a real requirements list. For example, if a design document hasn't been created, it's likely that this list of requirements is bogus.

    NOTE: I found Cliff's question appended to the end of this story very confusing. It's orthogonal to the original question, at best. At worst, it's going to cause two entirely separate topics of discussion which will be difficult to distinguish when reading comments.

  • Common Lisp (Score:5, Interesting)

    by entrox (266621) <slashdot.entrox@org> on Monday February 11, 2002 @04: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.
  • C++ (Score:5, Informative)

    by yamla (136560) <chris@@@hypocrite...org> on Monday February 11, 2002 @04:52PM (#2989812)
    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;

    Let us take a look at how C++ compares.

    Intuitive, easy-to-use UI, check. This is a stupid requirement for a language, though, as any reasonable language should allow your choice of UIs. I've used Visual Studio for C++ as well as emacs and, currently, KDevelop [kdevelop.org], which I like quite a lot.

    Simplified GUI design and event handling. C++ does not determine how GUIs are handled but we use Qt [trolltech.com] which works very well for what we want. Visual Studio lets you do GUI design inside of it, as does Borland C++ Builder.

    Advanced Error Handling. Define advanced. C++ gives you try-catch, etc. and provided you put a big of work into it, can be pretty good at error handling.

    Advanced object oriented design including multiple inheritance, abstract classes, and garbage collection. Well, C++ is the language most people think of when someone says OO. That said, C++ does not have any built-in garbage collection which is in my opinion a shame. Still, you can plug in garbage collection if you want, though the URLs escape me. In my experience, this has slowed down the execution of my C++ applications considerably but that said, my applications tend to allocate and deallocate memory quite frequently.

    Full support for operator and function overloading. Yes, C++ provides this.

    Portable (at compile-time) across various platforms. Well, C++ is NOT, in my experience, as portable as Java is. That said, if you use a platform independent GUI library such as Qt and you are smart in how you code, you shouldn't have any great problems. Gnu Autoconf, Automake, and Libtool, published by New Riders, will help you out here.

    So is C++ the language for you? That is impossible for me to say. The two major things it is missing is a GUI library (though Qt is excellent for this) and garbage collection (though this may not be a big issue). Personally, I find it easier to code in Java, mostly because Java does not allow things like multiple inheritence or operator overloading. Don't get me wrong, there is good reason to use these (and my C++ code occasionally does) but on the other hand, it can lead to much hassles. Very few projects really need multiple inheritence, for example, and MI can lead to all kinds of nasty problems. Do you really want to sink to the level of virtual inheritence, for example?

    Really, though, we cannot help you out all that much more without knowing what kind of project you are working on. Your requirements seem to indicate this is not a small project. As a result, I'd advise against VB.Net, having spent a year working in VB on a project about a third of a million lines of code long. C# has potential (it is a blunted-scissors version of C++) but really isn't mature enough at the moment. Eiffel I have no experience with. Java is great in SOME circumstances but I'd hesitate to recommend it to you without more information. And then there's C++, which I have spoken about in great length here. But C++ is a tricky language to use correctly.

  • by Lethyos (408045) on Monday February 11, 2002 @04:55PM (#2989846) Journal
    "When all you have is a hammer, everything looks like a nail."

    It's just plain silly to ask "what's the best programming language." That's like asking: "which is better, a hammer or a screw driver?" The reverse of the proverb is also true. If you have a diverse toolkit, and nothing but screws to drive, then everything in your kit looks like a screw driver.

    It comes down to using the right tool for the right job. It's not a simple question to ask, mind you, but your question is too vague to be answered at all. If you are doing text processing, use Perl (ignoring the argument that Perl does everything, of course) or some type of stream editor. If you are writing an operating system, use C. If you are doing artificial intelligence, use Lisp or Prolog. If you're writing a document, use HT/SG/XML or LaTeX. Building a GUI app *really* fast? Use Tcl+Tk.

    Let me rephrase your question with more specifics. "Which is the best programming language: Perl, C++, LaTeX, CSS, Japanese, or ASM?" That's nonsense (although everyone knows that Perl is better ;).

    It still baffles me how such stupid questions get posted as Ask Slashdot topics. The editors are genuinely retarded [slashdot.org].
  • by slag187 (70401) <geoffNO@SPAMzorched.net> on Monday February 11, 2002 @04: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 paulschreiber (113681) on Monday February 11, 2002 @05:22PM (#2990135) Homepage
      really, it does [python.org].

      Paul
  • by Kaz Kylheku (1484) on Monday February 11, 2002 @05:00PM (#2989902) Homepage
    It's not true that there exists some simple linear power spectrum along which all languages can be neatly lined up.

    What is relevant is this: does the language support all the right abstractions so that the programming solution to a given problem within a given domain can be expressed using elements that closely correspond to the ideal objects understood by the experts in that problem domain.

    Now a language that does this may be very domain-specific, and not flexible at all for solving problems in other domains. Or it may be very flexible so that it allows abstractons to be created to new domains that were not even known when that language was created.

    So, returning to the vague notion of power, when can we at least tentatively say that one language is more powerful than another? When for a large body of different problems, that language can rise to the occasion and provide the ideal abstractions for expressing the solutions for those problems, whereas the other language fails to do so, and only for a few, if any, problems the reverse is true.

    Lastly, what does it mean to have the ideal abstraction? It means not to worry about managing the representational or procedural details of the computation that are not relevant to the solution domain, or having to transform, rename, reshape, reinterpret anything. Unfortunately, this rules out nearly all languages whose only abstraction-making mechanism is making class or function libaries, because not every abstraction in a problem domain neatly corresponds to an object with methods. Only languages which are programmable---meaning that they allow you to write your own sublanguages and provide them as easily as function libraries to other programmers---can support this shape shifting, to produce abstractions to unforseen domains. People can develop custom sublanguages for anything: solving logic problems, querying databases, composing music, generating markup, whatever. You can do these things with object frameworks, but then you lose abstraction; the object programming gadgets rear their ugly head with details like what to instantiate and how to hook it up to something else, etc.

    Think about your while() loop in C or Java. The while loop is an ancient abstraction of control flow that someone had to invent. Yet your objects are not powerful enough to implement even this simple abstraction from scratch; you can't make a ``WhileClass'' whose instances do the job of a while loop.

  • Ridiculous List (Score:4, Insightful)

    by harlows_monkeys (106428) on Monday February 11, 2002 @05:22PM (#2990140) Homepage
    You need to find out what the real requirements are. That thing from your boss is just a list of every language/environment feature and buzzword he has ever heard.
  • by tbien (28401) on Monday February 11, 2002 @05:24PM (#2990158) Homepage
    Hi,

    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
    OpenStep....

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

    Pointers:

    http://www.stepwise.com
    http://www.gnustep.org
  • by bADlOGIN (133391) on Monday February 11, 2002 @05:32PM (#2990248) Homepage
    "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."

    Your boss is most likely a tech ignorant (or worse tech wannabe) that has no business diticating a list of requirements like this and, from the sound of it, has no experience shipping software. If all of these are hard and fast requirements, then C++ fails to make it on the Garbage Collection and advanced error handling, Java fails on the multiple inheritance and operator overloading, and VB.not and C-Hash fail on the cross platform (unless the M$ shills in the audience can point me to the respective Mac || *NIX compilers for them AND assoc. libraries). Don't even get started on the IDE issue - nothing like a three way flame war between DevStudio sheep, Emacs evangelists, and VI virtuosos. If you're even thinking about dictating an IDE for developers to use, you're going to be in for a real fun time.

    Languages/platforms don't even get chosen in for-profit software endevors because they meet a laundry list of requirements like this. For better or (usually) worse, there's the practicality of developer experience, cost of maintainance (inc. compiler/ide licences), and above all market perception (just try to go off and sell that great tool written in Sather with TCL/TK UI bindings that runs on any *BSD desktop).

    Despite this, it's not the things ON the list that disturb me, it's the thinks left OFF the list. No specification of multi-threading support? No question about parsers for XML? Don't need a networking library? How about ODBC drivers? What about support contracts or consulting rates if you run into a big problem and need a hired gun? And dear GOD why the HELL is there no mention of automated build and testing harnesses for any of it?!?!?

    See what you can do to get a boss who's been through an actual product lifecycle. Otherwise, get ready learn what "deathmarch" means firsthand.

  • by lkaos (187507) <anthonyNO@SPAMcodemonkey.ws> on Monday February 11, 2002 @05:36PM (#2990292) Homepage Journal
    To me, the obvious solution seems to write the backend stuff in C++ and the GUI stuff in Java. Java has a great GUI library and while it can't provide all the requirements, C++ can satisify the rest of the requirements. I imagine you are not looking to use MI in a GUI... That would be quite strange... I also imagine you are not looking to use operator overloading in a GUI either (although sadly enough I've seen it done).

    So, here's my list :)
    1. intuitive and easy to use IDE
      Does such a thing exist??? Every language has an IDE. Visual Studios, JBuilder, Emacs, KDevelopers, etc.

    2. simplified GUI design and event handling
      Well, this really depends on the operating system. Java's the good place to go here. If that can't be done, GTK and Qt are good libraries and they use the standard X style callback mechanism which is so much nicer than message based systems. What your really looking though is for a WYSIWYG GUI designer so I'd recommend Glade or whatever comes with the IDE you go with.

    3. advanced error handling
      Such a buzz word... Java and C++ both use exceptions. Good error handling has more to do with a projects design though and not really the particular language...

    4. advanced object oriented design including multiple inheritance, abstract classes, and garbage collection
      Lets get our terminology right :) GC is not an OO feature. GC is a generic programming concept and it is by no way the only way to avoid memory leaks. In C++, reference counting is much preferred over GC and it's probably the better choice since C++ programs tend to not use enough memory for GC to really be effective. Check out boost [boost.org] for some good reference counting classes.

      IMHO, MI is necessary for advanced projects but Java interfaces _almost_ make MI unnecessary. You may do well to evaluate whether you truly need MI. What really matters, is how good your development team is.

    5. full support for operator and function overloading
      This really should be in Java if you ask me but it isn't. You really don't need it. You could use interfaces instead. Of course, C++ support for operator overloading is great. Again though, you should really evaluate if you truly need such an advanced feature. If you just going to use it to concat strings then you don't need it.

    6. and portable (at compile-time) across various platforms
      Java or GCC. C++ is portable as long as it's GCC on both platforms :) Don't expect C++ to be very portable across different compilers though...

    I think I'd have to agree with the general sentiment that you really need to evaluate your requirements because they are extremely unjustified and appear to be either (1) a bad manager, (2) pressure from employees to obtain "resume builder" skills, or (3) a very complicated project which you are not providing very much required information for :)

    No language can satisify all your requirements perfectly. C++ comes closest. A combiniation of C++ and Java would do the job nicely.
  • by Glock27 (446276) on Monday February 11, 2002 @05:41PM (#2990345)
    I've seen lots of posts claiming that "Java doesn't have operator overloading, so it doesn't qualify" (I'll ignore MI, since I think interfaces are a reasonable substitute).

    However, operator overloading is simply syntactic sugar and can be supplied either through an advanced IDE (I may look at jEdit to see how hard it would be to implement there) or through a preprocessor (jpp is one such preprocessor, though it seems hard to find on the net these days).

    When doing operator overloading, it would be good to eliminate temporaries if possible. If a 'c' array object already exists before the assignment, it would be nice if "c = a + b" generated "c.assign(a.plus(b))" rather than the naive "c = new Array(a.plus(b))", which causes heap thrashing and unnecessary overhead. My guess is that this kind of optimization would be easier with an IDE type approach. (I hope that made sense!)

    299,792,458 m/s...not just a good idea, its the law!

  • Kylix (Score:3, Interesting)

    by OverCode@work (196386) <{moc.liamg} {ta} {edocrevo}> on Monday February 11, 2002 @05: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.

    -John
  • by markj02 (544487) on Monday February 11, 2002 @05:58PM (#2990511)
    You want a very expressive object system? Great, but you don't get static type checking anymore. You want overloading? Great, but type inference goes out the window. You want fast executables? Sure, but expect to have to tell the compiler in excrutiating detail what you are doing and how you are doing it.

    Still, given your feature list, CommonLisp may be your best bet (the CMU CommonLisp implementation for Linux is pretty good). It's a very expressive language and compiles into reasonably good code, although it doesn't have much static type checking, the language definition is messy, C-like performance can be hard to achieve, its C interface is a bit cumbersome, its libraries are less than stellar, and its user community is tiny. Bigloo, a compiler for Scheme, interfaces more nicely with the rest of the world and generates reasonably good code, but lacks threads and has a less expressive object system.

    If you want something statically typed, O'Caml is a great language, combining object oriented and functional programming. It generates good code and interfaces reasonably well with C. However, you don't get overloading.

    For great libraries, reasonable performance, and good standardization, Java can't be beat, but the language itself can be a little tedious. C# fixes some of the tedium of Java, but its libraries and performance are nowhere near as good yet, and it's pretty much Microsoft-only for now.

    And don't forget about C++. For complicated numerical algorithms that need to run fast, there is nothing better than C++. For complicated GUIs, and interactive applications there is almost nothing worse, however.

    So, overall, there just isn't a single answer. Every language is an engineering tradeoff. Learn many of them, and you will benefit both from the experience and the choices you have.

  • by augustz (18082) on Monday February 11, 2002 @06:04PM (#2990563) Homepage
    Folks seem to be missing sheer idiocy and irony of this.

    We have a CLASSIC boss who just wants to be buzzword compliant. I mean, look at that list. Reminds me of all the .bombs (and I assume this company is now on that shortlist) who could fill endless pages with buzzwords sometimes without actually knowing a thing about anything.

    So make *SURE* your boss who is making these technical decisions really has the CS degree he has to have to make them.

    There are countless books out there on doing it right. Some key points are:

    - Reuse knowladge of your team.
    - If you think starting from scratch with 300 buzzwords will make a better product, think again.
    - Reuse work that has gone before. If you've listed every major language and found they don't have what you want, perhaps there is a reason. Perhaps folks who designed Java/C# actually thought for a few minutes before they designed the language.
    - Boss can make the decisions about goals, money etc. Make sure the folks making the technical decisions are stakeholders (ie, have to live with it). Why is the boss making this vs the lead developer. He'd better be the guy who'll be coding the most.
    - If you specify the tool you're going to use before laying out the problem, if you pick a hammer you'd better hope the problem is nailing nails and not playing Bach.
    - Give standardized/open source languages a shot (C++/C#/etc) before propriatery (Java etc). - They've renamed Ask Slashdot to Ask to Be Called a Fool. Why? Because folks posting in tend to be. You'll get great advice though, especially with respect to programming/development.

    Sounds like this company is virtually certain to built the garganutan pile of multi-inheritance pile of crap folks who end up having to maintain will loathe. I happen to dislike multi-inheritance except for a relatively limited arena of problems. That's just a personal opinon though.

  • Wrong question (Score:5, Insightful)

    by Lumpish Scholar (17107) on Monday February 11, 2002 @06:07PM (#2990585) Homepage Journal
    You don't want a powerful programming language unless you have a significant budget (say, $2000 US and 1-2 months per person) to train all the would-be developers. The biggest problem with C++ is how little of it most alleged "C++ programmers" really know about the language! Java may be no better. (Larry O'Brien: "Claiming Java is easier than C++ is like saying that K2 is shorter than Everest.")

    If I was picking a programming language from scratch, I would pick a very simple language, such as Python [python.org] (which actually meets most of the boss's criteria) or Smalltalk.

    Like most everyone else, I advise you to ask the boss what he really wants, or at least what's behind his wish list.
  • by DaveWood (101146) on Monday February 11, 2002 @06:39PM (#2990824) Homepage
    The two things it doesn't have that you "think" you want are multiple inheritance and operator overloading.

    Multiple Inheritance: People claim that this isn't a good feature, but I disagree. I've run into times writing Java code where MI just obviously would be the right thing to do. However, A) these cases are rare, and B) there's always a workaround which is almost as good as the MI solution. In trade, not having MI has the added bonus of making your code simpler to understand, but most importantly, preventing people who think they know what they're doing (but don't) from using MI to make a complete mess of your model.

    Operator overloading: I left the best for last. :) Operator overloading is, in my experience, a real nightmare. To be clear: it offers you nothing functionally. It's a purely cosmetic feature. People often like to write a String or Matrix class with a + operator. Well, I take only minor umbrage with Java's special + operator functionality for strings - it hides the underlying work too well (one simple character = potentially a lot of VM activity) - but I can live with it. Otherwise almost every case where an operator could be used is in some way or another ambiguous. This is the equivalent of picking a one-letter function name, with the added bonuses of syntactic complexity and obfuscation with existing arithmetic and logical metaphors.

    I've seen and suffered through abuses of operator overloading often enough to become convinced that it's important not to have it, so that less-than-gifted programmers will never be tempted to use it.

    So I say again, unless you're doing anything inordinately complex with audio or video, use Java. Or use a worse tool, and suffer like everyone else does. :)
  • Delphi (Score:4, Insightful)

    by NDSalerno (465736) on Monday February 11, 2002 @06:41PM (#2990839) Homepage
    Damn! This sucks that there are so many comments already, this probably won't be read. Anyways.

    I am sadened by the fact that nobody cares about Delphi, and that the only comments that mention Delphi aren't moderated up. I have used many languages (and I was impressed to see that this person mentioned looking at Eiffel, a nice language).

    First off I have to say this, even at the risk of being flamed and called a troll. Either the geek culture is just ignorant, scared, or both. Stop feeling so insecure to the point where you have to use a difficult language to boost your ego. What I mean is try using a language that actually makes your life easier. I am so annoyed by these people who suggest C++. I have many years exprerience in C++ and let me tell you that it is not exactly your best friend on large projects, especially with coworkers who do not know the pitfalls of C++ programming.

    Also, all you people suggesting ruby, or other new and/or obscure scripting languages, please give me a break. I like cool languages like Lisp and Snobol as much as the next, but I must admit to the reality that no real business and business project is going to go with these languages as the main development tool. There are some business that use Lisp and Smalltalk, which is cool. However, the reality is that the dominant language is C++, Java, VB, and maybe even C#. Stop suggesting languages that no clueless boss is ever going to approve of (cluesless bosses only know to use C++/Java, the buzzword language).

    Now on to Delphi. Delphi is what you are looking for. First off, your requirements list is too unrealistic. You are going to to have to make some trade offs.

    Delphi doesn't have operator overloading. Guess what? That is not critical. What's the difference between a + b and a.Add(b)? None.

    Delphi doesn't do multiple inheritence. Guess what? If you are a good enough OO designer, you won't need it. Delphi supports single inheritence, multiple interface implementation style, just like Java and Smalltalk. So don't give that shit that multiple inheritence is needed, it is not.

    Here is a quick OO design tip. I have noticed that C++ programmers like the multiple inheritence because they can have a class inherit from one class to gain capability, and then have it inherite from another class to establish communication (usually through an abstract interface). THIS IS A MISTAKE!! Golden rule of thumb, favor aggregation over inheritence. I am not going to exlpain myself on this (it would make this post too long). Take it from me, I have seen this in real projects, don't use inheritence to establish communication between objects. Use inherietence to vary state/behavior of a particular entity. Net result, designs such as these do not require multiple inheritence and are far more flexible and reusable.

    Delphi is natively compiled, not like that p-code shit VB does. Delphi is made by Borland, which employs some of the brightest compiler designers around. Delphi is far more efficient than C++.

    I have used C++ most of my career and I am still learning Delphi. I was skeptical of Delphi at first. But I gave it a try and did performance tests. For example, Delphi's for loops kick the shit out of C++ for loops. Another examle, Delphi's TList kicks the shit out of the STL vector and list containers. Don't be so ignorant, give it a try. I DARE YOU ALL YOU TROLL GEEK C++ PROGRAMMERS WHO FIND IT EASIER TO SAY DELPHI SUCKS RATHER THAN TRY IT!!

    As for GUI, no contest! No contest!. You know easy VB is with GUI development, Delphi is even better (with more components by default than VB). People have mentioned Qt. I like Qt. It is orders of magnitude better than MFC (which is the WORST LIBRARY IN THE WORLD!!). But Delhpi's VCL is better than Qt.

    Delphi does not have garbage collection. That is ok, its interfaces are automatically reference counted ;-) By the way, Delphi's interfaces were modeled after MS COM, and as a result COM programming is a HELL of a lot easier in Delphi than in Visual C++, including MS's stupid ATL crap.

    I thought that Delphi would not be portable, but it turns out that Borland implemented something to simulate a lot of the Windows stuff under Kylix. As a result, porting should not be hard. I will not say that porting is a snap. I would be lying. However, porting should not be that bad, but YMMV.

    End result, I used to love C++. But after using many other languages I started to despise C++. Delphi was the language that made me loathe C++. I do respect Troll Tech for making an excellent product. Qt is very impressive, but MS's MFC library is the cold reality that C++ is very deadly in the wrong hands. Visual C++ with MFC has to have caused more project slippage/failure than any other language in the history of programming (well, that is my opinion). I dare anyone to check out Borland's case studies of Delphi. Check out Deja news list of compilers, where the programmers got to vote. Delphi, despite probably the least used langugae, was voted number 1, followed by Borland's C++ Bulder. Visuall C++ and VB were at the bottom of the list with negative comments too!
  • by eric2hill (33085) <ericNO@SPAMijack.net> on Monday February 11, 2002 @06:49PM (#2990893) Homepage
    As others have stated, look at Delphi/Kylix.

    I work with Delphi on a daily basis. Delphi supports (fully) all of the following:
    • The GUI is simply fabulous. There are also productivity add-ons to make development even faster.
    • Full exception model included, and support for write-your-own exception model.
    • Complete OO design model, however it doesn't support multiple inheritance. Instead, interfaces are fully supported. Abstract classes and interfaces accomplish 99% of what MI supports. I would vote for MI in the next release of Delphi, simply to complete the object model, but I haven't run across a problem yet that can't be easily solved using classes and interfaces.
    • Garbage collection is automatically performed for strings and interfaces, but anything you allocate memory for you need to free.
    • Full support for object inheritance and function overloading. There is no operator overloading.
    • Portable from Win32 to Linux (using QT...)
  • by PhotoGuy (189467) on Monday February 11, 2002 @07: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 :-)

    -me
  • by Jagasian (129329) on Monday February 11, 2002 @08:14PM (#2991460)
    Ok guys, I need help finding a car for a biz project that my company is working on. My boss says that the car must have the following features: side panel wood trim, a hatch back, 60-inch wheels, a blue stick shift, firestone tires, a fiberglass bumber, and oh yeah, to be hip with the latest trends, it has to be a SUV. I am just having so much trouble finding a car that has all of these features.
  • Try Ada-95 (Score:3, Informative)

    by aebrain (184502) <aebrain@webone.com.au> on Tuesday February 12, 2002 @01:15AM (#2992700) Homepage Journal

    URLs To backup my bald assertions below. Browse the sites and you'll see studies and numbers. Facts not Religious opinion. Adapower [adapower.com] is a good start. Or the Ada Information Clearinghouse [adaic.com]

    "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."

    IDE - there's a variety of freeware ones.

    Simplified GUI - there's a variety of bindings to various APIs, from X-windows to SWING to W32. Plus many other simplified freeware ones, some thin, some thick. Pick which one is most appropriate. Ada (the language) doesn't have anything more advanced than stdio - but then again, neither does Java, it relies on the awt and swing libraries *shrug*

    Advanced Error Handling - Java's exceptions contain more info than Ada's. Ada ones are more simple, easy to use, but I think Java's are better in most ways. They should be - both C++ and Java copied their exception handling from Ada's 1983 incarnation. OTOH most of the time all Java programmers (like me) do is make an exception without using any of the internal data, so YMMV.

    Advanced OOD including multiple inheritance and abstract classes - As regards OOD. Ada's the most flexible of the lot. You can do strict OO, but don't have to. Methods are properties of Classes(actually packages) rather than objects, so you can say Wooden.paint(a_wooden_door) or Door.paint(a_wooden_door) rather than a_wooden_door.paint(). So you get all the advantages of multiple inheritance, without the horrendous penalties (which method are you inheriting, the paint for wooden things or the paint for doors?). Abstract classes are used all the time.

    Garbage Collection - Ada doesn't produce garbage in general. You can do most things using statically allocated memory, or dynamic allocation within a statically-defined garbage-collected area. When you want dynamic allocation, you can choose to rely on the compiler's garbage collection, if it exists, but you're also given tools for explicit disposal of garbage. Note that Java has true garbage collection, but even Sun says that you can't rely on it, you should use explicit disposal. This is true not just for Java, but in general.

    Operator/Function Overloading Ada has had this since 1983. Often copied, never bettered

    Portable Stories abound of million- and 100,000-line Ada programs that require a dozen lines changed to make em work on different systems. My own personal war story is of a 20,000 liner developed on a 386 on an Irvine compiler, ported with 3 lines changed to a MicroVax using a DEC compiler, thence to a Vax using another DEC compiler, then to an embedded system using a DDC-I compiler. Was an AI to do anti-missile defence, people's lives depended on it. It's been in service since 1995. Cost less to make than the 7,000 lines of C in its test bed too. I've just help finish a 20,000 line piece of spaceflight avionics that makes not one Operating System call, even though it has 60+ simultaneous threads of execution. Oh yes, there's a shareware (or GNU licence? I forget) Ada compiler that produces Java bytecode, so will run on any Sun JVM.

    So why isn't Ada-95 used by anyone? Because everyone knows it's too big (nearly as many keywords as C++,), needs a huge machine to run (bigger than a 286 running at 4 MHz - which was big in 1983 when Ada-83 was invented), it's designed by a committee (like Linux - one really good designer Jean Ichbiah, then peer review), and it's a product of the US Military (like Unix, and the Web - designed for not by). Oh yes, and expensive (GNAT is open source...) and uses a lot of risky concepts ( to wit, Operator Overloading, Object Oriented Design, Exceptions, all risky and untried in 1983 ). It's also obsolete, (the Ada-95 version being a little younger than C++). And it is used, for Avionics of all modern airliners ( Illyushin, Boeing, Lockheed, Airbus) and many satellites, railway- and air- traffic control systems, where quality is vital. It's not used much elsewhere, as there's a vested interest for software developers and programmers to keep software buggy (so they have job security) and quick to market (it takes a long time to develop reliable software).

    So Ada's perfect, right? Wrong. It's just better than most general-purpose languages for many purposes. BUT It's not language of the month ( C# this month? ) so getting Ada programmers is very difficult. Though it's easy to learn, based like the similar Eiffel, Delphi, Object Pascal and Modula-2/3 on Pascal. If you've programmed hardware design in VDML, or used Oracle's access language, you've used Ada without knowing it.

    • Re:Try Ada-95 (Score:3, Informative)

      by Black Parrot (19622)


      > Simplified GUI - there's a variety of bindings to various APIs, from X-windows to SWING to W32.

      Increasingly popular for Ada is GtkAda [act-europe.fr], a thick, well-documented, OO binding for Gtk+. It is portable between *n*x and Windows.

      > Garbage Collection ... When you want dynamic allocation, you can choose to rely on the compiler's garbage collection, if it exists, but you're also given tools for explicit disposal of garbage.

      IIRC, the language spec makes garbage collection optional, and almost no one implements it.

      > So why isn't Ada-95 used by anyone? Because ... it's designed by a committee (like Linux - one really good designer Jean Ichbiah, then peer review) ...

      "Designed by committed" is the sort of argument prejudice evokes when there aren't any real arguments. People use stuff designed by committee all the time withoug whingeing about it. The argument ought to be about the design, not about the designer(s).

"There is nothing new under the sun, but there are lots of old things we don't know yet." -Ambrose Bierce

Working...