Slashdot Mirror


What Makes a Powerful Programming Language?

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?

1,098 comments

  1. Why doesn't... by L-Wave · · Score: 1, Troll

    Why doesn't java fit the bill? *blinks*

    --
    I SURVIVED THE GREAT SLASHDOT BLACKOUT OF 2002!
    1. Re:Why doesn't... by Gkeeper80 · · Score: 3, Informative

      no operator overloading

    2. Re:Why doesn't... by Scaba · · Score: 3, Informative

      No multiple inheritance. No operator overloading.

    3. Re:Why doesn't... by jeffy124 · · Score: 1

      java lacks multiple inheritance and operator overloading

      --
      The One Rule Of Chess You'll Ever Need: Don't play someone who carries a kit in their bookbag.
    4. Re:Why doesn't... by Anonymous Coward · · Score: 0

      because it doesn't have proper overloading, retard.

    5. Re:Why doesn't... by ADRA · · Score: 2, Insightful

      Doesn't support multiple inheritance, only interface polymophism. The GUI isn't as intuitive and straight forward as one would hope, but at least a tool like Jbuilder can reduce this somewhat.

      Java or C++ is probably the best fit for the job, especially when portability is a concern.

      --
      Bye!
    6. Re:Why doesn't... by Anonymous Coward · · Score: 0

      Java doesn't do multiple inheritence.

      At least, it didn't two years ago.

    7. Re:Why doesn't... by Anonymous Coward · · Score: 0

      Java doesn't support operator overloading.

    8. Re:Why doesn't... by Anonymous Coward · · Score: 0

      No operator overload support maybe?

    9. Re:Why doesn't... by Suppafly · · Score: 2

      you can do both those in java if you know how..

    10. Re:Why doesn't... by hereticmessiah · · Score: 1

      Is that a bad thing? Classes that use multiple inheritence can easily be a pain to maintain.

      --
      I don't like trolls and mod against me if you like, but I'd prefer if you'd reply.
    11. Re:Why doesn't... by Anonymous Coward · · Score: 0

      Multiple inheritance. However, lack of MI is a feature, not a bug. Why does your boss think that multiple inheritance should be on the requirements list?

    12. Re:Why doesn't... by sdwr98 · · Score: 2, Insightful

      Yes, but perhaps one should examine the reasons for wanting operator overloading and multiple inheritance. If this is just so that the project is fully "buzzword-compliant", then perhaps the priority list should be tweaked a little.

      I have found that being able to do multiple inheritance often leads to more confusion than help when doing software development.

    13. Re:Why doesn't... by NitsujTPU · · Score: 2

      Operator Overloading
      Multiple Inheritance

      You CAN however code aggressive garbage collection for C++. A quick search over the net should yeild a HEARTY list of garbage collection routines. It just doesn't come built in...

    14. Re:Why doesn't... by Hard_Code · · Score: 2

      No. You cannot.

      --

      It's 10 PM. Do you know if you're un-American?
    15. Re:Why doesn't... by RevAaron · · Score: 2

      Through ugly hacks. You can support all of the features Java provides in assembly using similar ugly hacks, but you're still stuck using ugly hacks.

      --

      Working toward a usable PDA environment in the spirit of Newton OS: Dynapad
    16. Re:Why doesn't... by jo44 · · Score: 1

      I can see why someone may want multiple inheritance, but operator overloading, I dunno...

      I can't think of a good reason why someone would really need it. Except maybe to make things more confusing.

    17. Re:Why doesn't... by Trelane · · Score: 1

      operator overloading can be critical to some applications. It's annoying to have to use my_complex_number.multiply(another_complex_number) instead of simply doing my_complex_number*another_complex_number. Same with vectors (although you need to make sure you know what * does, is it vector or scalar product), usw. Operator overloading, when done correctly, can vastly simplify programming, especially for scientific application.

      --

      --
      Given enough personal experience, all stereotypes are shallow.
    18. Re:Why doesn't... by Arachn1d · · Score: 1

      > 1.) Java lacks "real" socket classes. Java's threading classes stink, compared to CLR as well. True that Java doesn't support the lowest level of sockets, but that's because it has to be platform independant. What stinks about Java's threading? >3.) Java doesn't let you pass things by reference. All objects are passed by reference. Primitives are passed by value, but that is easily remedied by assigning it to a local primitive and working with that. >5.) Java is not truly object oriented... ie primitives are not objects and niether are literals. In CLR, everything is an object. Even primitives and literals. 'True' OO as you refer to it is overrated. Forcing everything to be an object simply adds extra, unneeded overhead. Besides, if you really want to, you could do everything with Java's object wrappers for primitives. >10.) I really hate how you have to declare that your methods throws something, and be forced at compile time to catch them. Any developer worth their beans will already be aware of exceptions and how to deal with them. When you force developers to catch everything, too many people get lazy and catch an exception, just to throw it away, which is truly heinous. And CLR's System.Diagnostic classes are very nice ;) That's up to you, but IMHO it's a point in Java's favor - the gentleman said he wanted good error handling. The way Java deals with it, you should be aware of any and all errors that you will need to handle.

    19. Re:Why doesn't... by Anonymous Coward · · Score: 1, Informative

      Imagine utility classes. I could very easily have:

      class MyClass : public Queue, public Session, public Thread
      {
      yada:
      }

      Easy to maintain... as a matter of fact, I haven't touched those three base classes in a year and the ability to use their features like like that is wonderful! No reference passing, no single-inheritence "chains", no pointers to maintain. It's all handled on the "inside"

      One base class is a custom, thread-safe queue. Another is an ORACLE OCI session. And yet another is a Thread.

      Very useful!

      Best Regards!

    20. Re:Why doesn't... by Arachn1d · · Score: 1

      Ugh. My apologies to all reading the parent message for my lack of consideration in not hitting [Preview] first!

    21. Re:Why doesn't... by FatherOfONe · · Score: 1

      Kinda like...

      int i=0;
      System.out.println("hello" + i);

      hmm....

      I believe that more operator overloads will be available in the future 1.4? or 1.5.

      My question is why do you HAVE to have them?

      First I don't belive this post. I belive that it is a slow news day and somebody wanted to start a holy war, but I believe that your boss should have each criteria weighted on how much of an importance it is to the project. Then evaluate all the current languages and pick one.

      This kinda reminds me of an idiot that I worked for that made the coders work night and day on integrating Java with Windows. In our case it would have made sense to either program in VB and commit to Microsoft totally, or do it right with Java.

      Steve Michael

      --
      The more I learn about science, the more my faith in God increases.
    22. Re:Why doesn't... by dnoyeb · · Score: 1

      While operator overloading may beautify syntax, it most certainly is a source of confusion. I can see no technical reason why that is a language requirement on his list.

    23. Re:Why doesn't... by Trelane · · Score: 1

      Provided it's used properly, I don't see the confusion.

      --

      --
      Given enough personal experience, all stereotypes are shallow.
    24. Re:Why doesn't... by Anonymous Coward · · Score: 0

      Beautifying syntax is reason enough. Humans have to read source code, not machines. "X*Y*Z" reads better than X.Multiply(Y).Multiply(Z).

      Not disagreeing that it is a source of confusion. So is bad programming. Improper operator overloading is a source of confusion because it is bad programming.

    25. Re:Why doesn't... by dnoyeb · · Score: 1

      You certainly sound like a c# pusher. Not that I disagree with you totally, but you dont seem to have a problem with exagerating to the detriment of Java. 1. Java provides the sockets which are available on the OS. nothign in Java is 'real' in case you didnt notice, as its all in a VM.
      Provide a reason why java's threading stinks. just saying it does not make it so.
      2. OK, I am unsure why it would lack such a thing as it provides what is available on the OS, but if you say so.
      3. Who needs to pass by reference when everything is already a reference. You dont seem to have used java because this is certainly not an issue.
      4. I love javas event model, but I cant speak on CLR since I dont know it. You can make your own event model as that is part of the libraries and not the language.
      5. Now your just being petty. Its stupid to have primitives as objects. THAT would be truly slow. if you want to remain so uptight, simply use 'Integer' inplace of 'int', every Java programmer knows that.
      6. and you say your not an ms fan, bah. if its not virtual its not Java. Your arguement is not against java, its against virtual machines. I wouldnt write a game engine in a scripting language either, but I realize thats not what they are for.
      7. boolean is not signed :D
      8. unfamiliar
      9. Java is an ever expanding language. If you want a feature lobby for it on javasoft.com. many people express technical visions and we have good discussions about pros and cons of many features. As for saying you must expressly catch every exception in Java just shows you dont program in Java because its false. When is the last time you cought a dividebyZero exception?


      YOu should not go on, you should review.

    26. Re:Why doesn't... by ChannelX · · Score: 1

      3. Who needs to pass by reference when everything is already a reference. You dont seem to have used java because this is certainly not an issue.
      Actually Java uses pass reference by value. In most cases you get the same behavior. In some you do not. That being said i've never had it be an issue. sounds like someone nitpicking to me.

      --
      My blog: http://jkratz.dyndns.org/~jason/blog/
    27. Re:Why doesn't... by _avs_007 · · Score: 1

      What stinks about Java's threading?

      You have to implement Runnable, and you cannot pass state objects. That means basicaly, that when you spawn a new thread, you also have to instance a new object. Sometimes I would rather just use delegates on the already instanced object. On top of that, there is no thread pool. But that's no big, deal you can do it yourself... Everything is also based on the fact that each object has a monitor. That is not the end-all-be-all synchronization primitive. Sometimes we like having real mutexes, semaphores, reset events, manual reset events, etc etc. Speaking of synchronization stuff, I hate how in Java, you can have a HashMap or LinkedList, and you can call Collections.SynchronizedList or Map, but the methods are different for IList and IMap then LinkedList and HashMap. In CLR, you call Hashtable.Synchronized(new Hashtable()), etc etc. So the synchronized object is the same type as the unsynchronized object. This isn't the case in Java.

      Java doesn't let you pass things by reference. All objects are passed by reference

      This is NOT true. A pointer to your object will be passed BY VALUE. You can call accessor methods on your object and modify your object fine, but the pointer to your object cannot be changed to point to a different object. That is what I meant, when I said pass by reference.

      if you really want to, you could do everything with Java's object wrappers for primitives.

      But when certain methods take primitives as parameters, it makes it a pain in the arse to wrap/unwrap things. Its easier if it was just an object to begin with.

      The way Java deals with it, you should be aware of any and all errors that you will need to handle.


      I agree, but it should not be crammed down your throat at compile time.

    28. Re:Why doesn't... by ChannelX · · Score: 1
      Hmmm....maybe I shouldn't have hit post so quickly...


      5. Now your just being petty. Its stupid to have primitives as objects. THAT would be truly slow. if you want to remain so uptight, simply use 'Integer' inplace of 'int', every Java programmer knows that.


      This is truely false. It is very smart to have primitives as objects because it helps keep the semantics of the language the same. There are a myriad of ways Java is confusing or just plain lame because they chose primitives. Also, modern implementations of Smalltalk handle the primitive-as-object behind the scene so that the programmer doesnt have to worry about it yet you get all the performance benefits of using primitives.

      --
      My blog: http://jkratz.dyndns.org/~jason/blog/
    29. Re:Why doesn't... by Methuseus · · Score: 1

      How about Java 2, instead of 1.5. 1.4 is already out, I thought, at least in beta. I did hear some serious talk about them going straight to 2, instead of making 1.5-1.9

      --
      Two things are infinite: the universe and human stupidity, though I'm not yet sure about the universe. - A Einstein
    30. Re:Why doesn't... by FatherOfONe · · Score: 1

      Sorry, what I ment was:
      JDK Standard Edition 1.4 and
      JDK Standard Edition 1.5.

      I just saw that 1.4 has been released, but I don't know much about it yet....

      (5 min later...)
      Just looked at their site and 1.4 does not appear to support more operator overloads. My GOD did they add a bunch of other stuff though...

      My hunch is that they will add more operator overloads in 1.5 (or call it JAVA 3 Standard Edition).

      I do know this, if enough people wanted it, it would be in there. Sun has been good about adding items to the language that people need, and their community process seems to be working well enough.

      Steve Michael

      --
      The more I learn about science, the more my faith in God increases.
    31. Re:Why doesn't... by Anonymous Coward · · Score: 0

      yes. you can.

    32. Re:Why doesn't... by Pinky · · Score: 1

      wow

      -> Java lacks "real" socket classes. Java's threading classes stink, compared to CLR as well.

      What is a real socket? One that allows for things mor elow level than TCP/UDP?

      -> Java lacks asynchronous I/O, (1.4 supposedly will remedy that)...

      I made my own async IO library. It's not hard. It's also not really a language problem. More of a lack of utility classes.

      -> Java doesn't let you pass things by reference.

      You're always passing by reference in Java. It's actually quite a pain to do otherwise.. unless you're using primitive data types in which case you can use the provided primitive data classes wrapper types.

      -> CLR's delegate based eventing is more intuitive and simpler

      CLR?

      -> Java is not truly object oriented... ie primitives are not objects and niether are literals. In CLR, everything is an object. Even primitives and literals.

      This is not a bad thing. Passing primitives by value is what you want to do 99.9% of the time. You cna also do proper math on primitives (using +,-,/,* symbols).. and an array of primitives gets compatected saving space. primitives don't have asosated pointer, monitor, toString()

      -> Java lacks Unsigned data types.

      A good thing! Unsinged data types cause more problems then they are worth.. If you're going to make all primitive data types objects then you should at least use an int instead of a short. Not that it matters since an int and short take up the same amount of actual memory in java anyways.. unless there's in arrays of course.

      -> I really hate how you have to declare that your methods throws something, and be forced at compile time to catch them. Any developer worth their beans will already be aware of exceptions and how to deal with them. When you force developers to catch everything, too many people get lazy and catch an exception, just to throw it away, which is truly heinous. And CLR's System.Diagnostic classes are very nice ;)

      being forced to do something intellegent with the error is not a bad thing. it's nice to know you can force the user to handle the error when making libraries. Or to at least communicate that there is a very good chance that this problem will happen.. sort of thing...

      The recursive "throws" can be annoying (you know, change one exception change a billion "throws" all through the calling functions.) but that's what you pay for the having the ability to pester users of your code into using it like it should. Or go through pain to do the wrong thing.

    33. Re:Why doesn't... by LinuxInDallas · · Score: 1

      Uh huh, and you can also very painfully do OO to some extent using carefully crafted C. The question is: who would want to go through the pain and agony?

    34. Re:Why doesn't... by Anonymous Coward · · Score: 0

      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.

      Case in point.... I once worked on a project which overloaded "-" as it relates to Points... so PointA - PointB ... would result in? I'd assume it'd result in the vector difference... but instead it returns the distance!

      Operator voelroading is NOT scheduled for 1.5

    35. Re:Why doesn't... by Tattva · · Score: 3, Interesting
      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.

      --
      personal attacks hurt, especially when deserved
    36. Re:Why doesn't... by Shimmer · · Score: 1

      LOL

      #include <functional> is great fun, but it's only a hint of what you can do in a real FP language like Haskell.

      -- Brian

      --
      The most rabid believers in American Exceptionalism are the exact same people whose policies are destroying it.
    37. Re:Why doesn't... by thomas.galvin · · Score: 1

      The way Java deals with it, you should be aware of any and all errors that you will need to handle.

      I agree, but it should not be crammed down your throat at compile time.

      Yes, it absolutly should. One of Java's goals was to make it hard for a programmer to screw up. Not telling someone that a function you wrote is throwing the exception that is crashing your code is a nice way to crew up. These things are prety easy to keep track of in small, one man projexts, but as complexity grows, the fact that you have to actually declare that something is being thrown saves lots of headaches. In fact, I would be surprised if most style guides and coding standards people use here don't requiere the same in C++; ours do.

    38. Re:Why doesn't... by Anonymous Coward · · Score: 0

      sorry dude. java has multiple inheritance.

    39. Re:Why doesn't... by Anonymous Coward · · Score: 0

      There is nothing saying anyone NEEDS operator overloading, if anything, operator overloading just serves to obfuscate.

      Your boss really has a lame list of requirements.
      Not pushing Java or anything here, but those
      techniques are not neccesary for a good architecture...they aren't neccesary for anything at all!

    40. Re:Why doesn't... by Anonymous Coward · · Score: 0

      Sounds good in practice, but too many developers when put in this situation, will trap an Exception and throw it away. Making code sitting on top, not aware of what happened, which can make debugging a biatch.

      Other times, I run into developers that are too lazy to trap each type of exception, and they just catch a general case exception, which will also has a potential to screw things up.

      Also, how will a run time exception screw things up and make it hard to debug? Thats what a stack trace is for.

    41. Re:Why doesn't... by spongman · · Score: 2
      indeed Haskell is very nice.

      However, for C++ check out The Lambda Library, it's an extension to STL that, among other things, blows my mind.

    42. Re:Why doesn't... by Anonymous Coward · · Score: 0

      What is a real socket? One that allows for things mor elow level than TCP/UDP?

      A real socket is a Berkely Socket implementation, that gives you access to properties like nagle, etc etc. Or allow you to do things like broadcast data, without using a multicast socket, because broadcasting is not the same as multicasting. Or setting properties, like reuseaddr. Java only sets that property with MultiCastSocket. What if you want to set it on a non-MultiCastSocket? Plain berkely socket implementation if much much more flexible in the types of things you can do.

      I made my own async IO library. It's not hard. It's also not really a language problem. More of a lack of utility classes.

      Yes, I made my own async classes too, I'm not saying you can't. But there is a difference between faking async I/O and a real Async I/O design

      You're always passing by reference in Java

      No you ARE NOT!!! You are passing a pointer to an object BY VALUE! There is a HUGE difference.

      CLR?

      Common Language Runtime... ie, .net
      Delegate based eventing, is basically eventing via function pointers. wiring events by doing a += with a delagate is easier, then inheriting from actionEvent, and implementing actionListener, and using an innerclass to hook the thing up.

      -> Java lacks Unsigned data types.

      A good thing! Unsinged data types cause more problems then they are worth.. If you're going to make all primitive data types objects then you should at least use an int instead of a short. Not that it matters since an int and short take up the same amount of actual memory in java anyways..


      Why is that? Should at least use an int instead of a short? Why? Why should I use 32 bits of data to represent something that only needs 16 bits? Lots of protocols take advantage of things like this, and it makes it more tedious to work with, when you have to constantly convert things.

    43. Re:Why doesn't... by thomas.galvin · · Score: 1

      Sounds good in practice, but too many developers when put in this situation, will trap an Exception and throw it away. Making code sitting on top, not aware of what happened, which can make debugging a biatch.

      Yeah, that happes from time to time, but at least you know that the code you are calling isn't throwing an excpetion...

      I spent a few hours some time ago trying to figure out why our code was dying in the middle of a particular function, only to realize that an exception was being thrown by a class a few layers down, and no one had bothered to update the throw() spec. At least if it was in java I could have looked at the top class and seen an empty catch(){}

      Also, how will a run time exception screw things up and make it hard to debug? Thats what a stack trace is for.

      RuntimeExceptions don't have to be declared or caught; such as ArrayIndexOutOfBoundsException or DivideByZeroException.

    44. Re:Why doesn't... by Anonymous Coward · · Score: 0

      Because the tool (language etc.) should adjust
      to the problem(operator overloading
      helps this). Not the other way around!

    45. Re:Why doesn't... by rifter · · Score: 1

      gtk programmers, apparently :)

    46. Re:Why doesn't... by Anonymous Coward · · Score: 0

      Hey if you cnat get it done with c java or vb. Can you even do it?

    47. Re:Why doesn't... by fitten · · Score: 1

      OK, so you can... why would you? You run the risk of your ugly hacking being non-portable, which kind of defeats the purpose of Java. Not to mention that ugly hack code is a PITA to maintain a year down the road when the person who wrote the junk isn't on the project anymore.

    48. Re:Why doesn't... by Daimaou · · Score: 1

      Why are you comparing Java to CLR? CLR is Microsoft's bytecode which runs through their .NET virtual machine.

      CLR doesn't let you do a damn thing since you can't write in it.

      Therefore, please either compare Java to VB.NET, C#, ASP.NET, and so on, or compare Java's bytecode to Microsoft's CLR (which is pointless in my opinion).

    49. Re:Why doesn't... by Shimmer · · Score: 1

      Cool, thanks.

      --
      The most rabid believers in American Exceptionalism are the exact same people whose policies are destroying it.
    50. Re:Why doesn't... by -brazil- · · Score: 1
      Misused operator overloading obfuscates, but well-used operator overloading leads to cleaner code. Which is easier to understand:


      MatrixA.add(MatrixB.multiply(MatrixC))

      or

      MatrixA + (MatrixB * MatrixC)

      --

      The illegal we do immediately. The unconstitutional takes a little longer.
      --Henry Kissinger

    51. Re:Why doesn't... by _avs_007 · · Score: 1

      CLR is the common language runtime... As in the framework classes. The "bytecode" to which you are reffering to is MSIL, or Microsoft Intermediate Language... NOT CLR... Java is a platform, just like CLR. I could just as well have talked about C#, but the features I talked about are not unique to C#. You could very well use those features in Eifel.net if you wanted to.

    52. Re:Why doesn't... by ahde · · Score: 2

      matrix_add(MatrixA, matrix_multiply(MatrixB, MatrixC));

      what makes this any more complex? Its just as easy to implement (barring namespace issues) and your latter example is very misleading. You can't simply add the address of one matrix to another and get a bigger matrix.

    53. Re:Why doesn't... by hereticmessiah · · Score: 1

      Remember, I said *can* be.

      If used properly, multiple inheritance is no harm to anyone - it can even be a boon. The problem with it is that most of the time, it's not used properly. I've had to maintain C++ code written by other people that's used it and has been a pain to maintain. I've maintained code written in Java (and C++ where multiple inheritence hasn't been utilised) and it's been much easier for me to maintain.

      Maybe I'm biased by my background, but there you go.

      --
      I don't like trolls and mod against me if you like, but I'd prefer if you'd reply.
  2. VB by Anonymous Coward · · Score: 0

    I'll take VB over C++ anyday

    1. Re:VB by Anonymous Coward · · Score: 0

      That's why you make $15 an hour and live in a trailer on the east side of the interstate, and I average $450 per hour and own three Ferraris.

    2. Re:VB by Anonymous Coward · · Score: 0

      Your an idiot, vb sucks

    3. Re:VB by Anonymous Coward · · Score: 0

      and I average $450 per hour and own three Ferraris

      Yet you still post as any anonymous COWARD.

      Your comment has too few characters per line (currently 9.5).

      HaHa! - Klerck, they are trying to censor you again!

      What, aagin! god slashcode sucks! I am typing this to get around one of slashcodes lameness filters. Go fuck a monkey CMDR taco....dftbf fggfr hgrtdfrt hg fgerrt fdrt fd te dfrere fdrt df tr fg yts er ef

    4. Re:VB by Cpt_Corelli · · Score: 1

      From a price/performance standpoint that is exactly why you should go for VB. VB programmers are chaper than Ferrari-owners...

      Let me shoot you in your foot next time. I aim better.

    5. Re:VB by Anonymous Coward · · Score: 0

      You can put a monkey at a typewritter and cliam it knows VB. The fact is you get what you pay for, pay for shit and you'll get shit.

    6. Re:VB by nzgeek · · Score: 1

      And your grammar is appaling.
      Your = possesive pronoun as in "Your bike is red"
      You're = abbreviation of "You are" as in
      "You're an idiot"

      Dick.

    7. Re:VB by Anonymous Coward · · Score: 0

      Wel your speling is appaling.

    8. Re:VB by diabolus_in_america · · Score: 1

      VB has one fundamental use. In an environment where Windows is the prominent desktop OS, it is a good tool for creating quick, easy-to-use client-side programs.

      Sometimes we seem to forget that the goal of most development projects is to give the end-user an application that not only does what they need it to do but also does it in a way that is easy for them to use.

      Server-side development is an entirely different ballgame, but for client-side applications which end-users are going to be working with and looking at on a daily basis, Visual Basic is a wonderful tool.

    9. Re:VB by Anonymous Coward · · Score: 0

      I didn't realize I had my own spell checker on /., thanks.

    10. Re:VB by Moonshadow · · Score: 2
      Exactly. People are quick to slam VB, and a lot of those criticisms are deserved. However, it has its place. For creating quick, simple user-friendly apps, it's unrivalled. For anything terribly complex, however, it really begins to show its weakness.

      VB has its place. It's nowhere near being as good as C/C++ for 3D, server apps, drivers, etc., but it makes one heck of a good tool for developing simple user apps.

    11. Re:VB by coolcast · · Score: 0

      Yes, absolutely right. VB is great for rapidly creating client applications or prototyping. A good way to quickly develop an application is first programming it in VB, and then port it to C++ part by part. Also, you can do really weird things with objects and interfaces, if you've got the patience to play with it.

      --

      Don't click here. BT will enforce intellectual rights and sue for eac
    12. Re:VB by rif42 · · Score: 1

      > A good way to quickly develop an application
      > is first programming it in VB, and then port
      > it to C++ part by part.

      Or you could do the sensible thing - use Delphi to do both the prototyping and application programming.

      > Also, you can do really weird things with
      > objects and interfaces

      Used in the intended way objects and interfaces are actual far more useful than they are weird. ;-)

    13. Re:VB by Tablizer · · Score: 1

      A nice thing about VB was that it did not shove the OOP paradigm down your throat like some of the Hype-in-a-steamy-mug stuff.

      I don't like the OO paradigm. It does not fit the way I think, and is NOT objectively better for all domains. It only has better cliches, that's all.

      However, now MS is Javatizing VB in an effort to kill Java rather than any love of OOP itself. IOW, MS is using hype-to-fight-hype. The last main hold-out has sold-out.

      Almost no way to escape OO anymore. Us OO haters are cornered. I suppose there is Perl, but some developers write funky code to protect their job and F the followon dude.

      oop.ismad.com

    14. Re:VB by doormat · · Score: 1

      Agreed, for making some rinky-dink database table front end app that I can pump out in 30 minutes for some manager who doesnt know shit for SQL, its pretty good. I use VBA a lot as well, inside of AutoCAD and excel to generate reports and format data.

      --
      The Doormat

      If you're not outraged, then you're not paying attention.
    15. Re:VB by Cpt_Corelli · · Score: 1

      That's true. But you also have to concider that there are more professional people who know VB than Java. So, to set up a team of 10 experienced VB developers will still be cheaper than setting up a team of 10 experienced Java or C++ developers.

      Let's say that these two teams will solve the problem in the same amount of time. In that case you will have solved the problem for a lower cost using the experienced VB developers.

      If you take license costs for the development tools into consideration VB will be even cheaper in comparison. So, from a price/performance ratio I still consider it hard to beat.

  3. I wouldn't do it by GuyZero · · Score: 1, Insightful

    If I were to design a language from the ground up, I wouldn't do it.

    The whole idea is to use something standard so that it's simple to bring new people up to speed and apply techniques that other developers have discovered.

    It would be akin to building a bridge using a completely new, untested building material. Not my idea of a good engineering decision.

    1. Re:I wouldn't do it by Carl+Drougge · · Score: 1
      Exscuse me, this is insightful? We'd still be using a variation of FORTRAN if everyone had thought like that!


      (And I wouldn't build a bridge of completely new materials *for use*, but I would definitely do it to see if future bridges could perhaps benefit from these materials..)

    2. Re:I wouldn't do it by Emugamer · · Score: 2, Insightful

      Actually it is... almost all people here aren't qualified to write their own compiler/language and to be brave enough to say so is a lot more then most here would do. Therefor it was a +1 Brave/Insightful/... If you aren't an architect/civil Engineer/Mechanical Engineer, stay away from the freaking bridge building, just because you crossed a few and jumped off one doesn't give you the knowlege needed to build your own

    3. Re:I wouldn't do it by GuyZero · · Score: 1

      Hey, I didn't say no one should do it.

      I said _I_ wouldn't do it.

      People like Gosling and Stroustrup are virtually professional language designers. That's a whole different ball game from what the average software designer is doing for a living.

    4. Re:I wouldn't do it by Anonymous Coward · · Score: 0

      Very insightful.

      It is probably fools like you who flush millions down the toilet thinking you're the sh*t. Well, bubba, odds are 100-1 that you are not.

      Folks reading this idiots postings need to remember that they have probably never managed or made a language decision in their life, and if they have, heaven help the poor client.

    5. Re:I wouldn't do it by Carl+Drougge · · Score: 1
      Gah. "I" does not really mean me, personally. Obviously it comes with a few implicit IFs.

      I reacted most to his second paragraph, reproduced here:

      The whole idea is to use something standard so that it's simple to bring new people up to speed and apply techniques that other developers have discovered.

      It doesn't matter if he can personally make a good new language. He stated that new languages are a bad idea. I don't agree with that at all. (You could take it as a comment on the article and not continuation of his previous paragraph, I suppose, but I do not.)

    6. Re:I wouldn't do it by Anonymous Coward · · Score: 0
      Exscuse me, this is insightful? We'd still be using a variation of FORTRAN if everyone had thought like that!

      Well if we have stuck to Lisp from the 1960s to the 1980s and possibly used Smalltalk as an OO language from the beginning of the 1980s to now, the software quality and development speed would have been drastically increased.

    7. Re:I wouldn't do it by jrexilius · · Score: 0

      agreed.. there is a balance to be struck between maturity of language and developers and improvements on existing models. One huge thing going for C/C++ is both the language and user-base have matured to a point where I would trust them to "build a bridge" where as i still dont quite trust java / java developers that much..

    8. Re:I wouldn't do it by Anonymous Coward · · Score: 0

      I would like at this response slightly differently. How were the requirements derived? Is this a) an academic exercise of picking utopia or b) a business problem that needs a solution? On a), branch your company to Chapter 11. On b), make your choice already. Live with the consequences of your choice rather than analysis paralysis.

    9. Re:I wouldn't do it by Carl+Drougge · · Score: 1
      And where, if we never made new languages, would LISP have come from?

      Look, I never said you should do any of these things on a commercial project, I just said you should do them. I should probably add a sig saying that unless explicitly stated, I'm not talking about commercial things, because I never am.

      (Yeah, this is a reply to the other AC as well)

    10. Re:I wouldn't do it by sketerpot · · Score: 1
      It's still possible for someone to write a language as a joke. I did, and look what it got me! People were laughing a lot!

      I still can't make it count to ten...

  4. Python by Noodlenose · · Score: 1, Redundant
    Python...

    Dirk

    1. Re:Python by Anonymous Coward · · Score: 0

      I agree,
      Has everything you're asking for and more. For a GUI you can use QT , GTK, Tk, wxWindows all platform independent.

  5. C++ Twice by Kaypro · · Score: 1

    It's good that you checked C++ twice :-)

  6. And also, by taliver · · Score: 1

    Why did he look at C++ twice, I'm not sure it deserves a first look, let alone two.

    --

    I demand a million helicopters and a DOLLAR!

    1. Re:And also, by ADRA · · Score: 1

      Why?

      It does meet the requirements as laid out just as well as the others. Please give some meat if you're not trying to troll.

      --
      Bye!
    2. Re:And also, by Anonymous Coward · · Score: 0

      garbage collection?

    3. Re:And also, by ADRA · · Score: 1

      hehe Garbage Collection == atexit()

      *lol*

      Yeah, so C++ doesn't have garbage collection, that means that you can actually use pointers without the risk of them disappearing. I know the language is a more natural fit toward Java, but it also lacks some of the requirements found in C++.

      So in conclusion, Make a hybrid middlelayer between C++ and java. Create the core Java classes that use the garbage collector and then wrap them in an operator overloaded shell to actually process the object interactions.. *chills*

      --
      Bye!
    4. Re:And also, by rhost89 · · Score: 1

      Borland C++ Builder would be my choice, it basicly meets every requirement his boss asked for, and on the things it doesent, can be easily done. As an added plus, in a few months you will add the capability to compile on linux/linux compatable unix (AIX etc..) just by copying the sorce and changing any OS api calls that had been made.

      --
      I will bend your mind with my spoon
    5. Re:And also, by dodald · · Score: 1

      Oh come on thats bull. I simply don't understand why programmers can't do thier own garbage collection. Its not even that hard (delete). He'd be programming in OOP too, so all that could easily be put in a destructor or two (or three..).

      I know other languages may be better suited for this task, but C++ does satify enough of the requirements. Could someone please explain why, a language should do its on Garbage Collection

      Thanks

      --
      101010b 2Ah 52o
    6. Re:And also, by Anonymous Coward · · Score: 0

      It can be added. There are dozens of garbage collectors to choose from.

    7. Re:And also, by __past__ · · Score: 1

      Why? Life is better without coredumps...

    8. Re:And also, by ADRA · · Score: 1

      Yeah, even VB allows you to deallocate variables whenever you want ;-)

      dim a(LOTS_OF_THEM) as something_wasting_memory

      a = nothing (aka delete [] a)

      Garbage collection is a lazy solution for getting bulletproof code. If you need the performance or have limited resources, don't use garbage collection. If you need code that is less prone to errors, Garbage collection is probably a reasonable solution.

      So that said, why not make garbage collection as an "optional" module onto a project, like a proprocessor defined module that is only activated when multithreaded and wanted, or something like that. Now that 9I think about it, that would be a really sexy addon to C++.

      --
      Bye!
    9. Re:And also, by ADRA · · Score: 1

      Coredumps don't happen when you use too much mempery, they happen(by in large) when you access memory that you don't have access to, like 0x00000000.

      So theoretically, not having garbae collection would actually reduce the risk of coredumps by reducing the chances of writing to an area of memory not under the programs control. Now, if you want to talk about memory growth throughout the lifetime of a program ,that is a different story. But, as long as you pair your constructors / destructors and always have a sane error handling system, you shouldn't have to worry abou this either.

      --
      Bye!
    10. Re:And also, by dodald · · Score: 1

      unless I am missing something Garbage collection is not an option (In regards to Win programming atleast). If you don't Garbage collect, you'll crash the system, or extreamly handicap it. (Allocated memory, is used memory)

      GC is NOT HARD! :)

      --
      101010b 2Ah 52o
    11. Re:And also, by DodgyGeezer · · Score: 1

      Have you done much team programming, especially with teams with junior members? In my experience, having to do one's own memory management results in nasty bugs. It seems that some people just don't can't do it well. Even when they can, there are still cases of miss-communication between team members. This is one reason why technologies like COM use reference counting, and in C++, smart pointers are encouraged. Personally, I advocate minimising the use of new and delete prefering stack-based classes like the STL. This reduces immensely the number of memory problems in a project.

    12. Re:And also, by __past__ · · Score: 1
      OK, you're right in that I should have written "Life is better without memory leaks". But:

      So theoretically, not having garbae collection would actually reduce the risk of coredumps by reducing the chances of writing to an area of memory not under the programs control.

      Care to explain this? You surely don't want to say "If my memory-leaking program grabs all the memory, all the memory will belong to my program".

      If you please could give an example how to produce a core dump (or smashing the stack...) in any language designed by people smart enough to include garbage collection?

    13. Re:And also, by notfancy · · Score: 1

      hehe Garbage Collection == atexit()

      *lol*

      Don't, because it is (somewhat) true. You could think of it as a "really, really deferred garbage collection cycle" :-)

      But I wouldn't depend on atexit() handlers for resource reclaiming, as it might be circumvented (under conditions which I no longer remember), and it is not 100% portable (order of handler invocation, I think). What I use in C is simple exception handling with setjmp()/longjmp(), and judicious use of goto's "sugared" with macros to handle resource reclaiming. It is a kind of lean C++ minus the OO.

      Yeah, so C++ doesn't have garbage collection, that means that you can actually use pointers without the risk of them disappearing.

      If your pointers disappear on GC, either you don't play by the collector's rules, or your collector is severely broken. I've used Bohm's conservative collector in a smallish C++ program that used memory heavily (it parsed VB template definitions, built the syntax trees and wrote Java or somesuch) without problems: you don't have to do anything at all (it is drop-in by design), and it defines operator delete() as a no-op. It's somewhat magical, but it works.

    14. Re:And also, by notfancy · · Score: 1

      I know other languages may be better suited for this task, but C++ does satify enough of the requirements. Could someone please explain why, a language should do its on Garbage Collection

      Simply put, because even if the point of creation of an object is very clearly defined in the program text, the point of destruction is not, and can happen at any (and different!) point(s) of the program text. Hence, you need a very strict discipline (and sometimes, nontrivial analysis) to ensure that your resource checkbook balances nicely. GC is a huge help from the part of the runtime.

    15. Re:And also, by Bullschmidt · · Score: 2

      I would have to disagree pretty strongly with using STL. As a programmer of game consoles (read TIGHT memory constraints and tough shipping restrictions), we found that STL's internal memory management to be a real horror. STL can allocate and deallocate more or less whenever it wants. We were fighting to have no memory fragmentation (which we have now), but with STL, this becomes EXTREMELY hard. STL actually increased memory problems. Finally we put in our own memory manager, and found all those stl classes and cleaned 'em out.

      Now if only *printf wouldn't use the internal memory routines (they can allocate on their own too, but we can override those memory allocation routines!)

      --
      "Of all days, the day on which one has not laughed is the most surely the one wasted." -Sebastian Roch Nicol
    16. Re:And also, by ADRA · · Score: 1

      What most people mena when they are saying "garbage collection" is "Automatic runtime Garbage Collection", so having a thread / process running in the background getting rid of excess memory and objects that are no longer referenced.

      You can crash your compouter if there are a miniumum number of primitives which you keep allocating and never drop. You can limit your computer by taking up 15000x your available memory, or trying anyway ;-0

      --
      Bye!
    17. Re:And also, by ADRA · · Score: 1

      hehe it is harder, I will give you that, but Java is not infoulable. I have had java many a time crash out without an explaination. Mind you, it was the JVM's fault, but none the less, a core is a core if it is your fault or not.

      Sorry for no definitive examples. Also, java reduces the number of crashes generated because of the sand-box layer between the OS. Where a write-to-null error would probably core a normal app, Java just throws exceptions, softening the severity to the bug. This "could" lead people to write sloppy code leaving the compiler to fudge it through, but that will happen always, on every compiler on the planet, so you can't blame java for the programer's shortcomings.

      --
      Bye!
    18. Re:And also, by DodgyGeezer · · Score: 1

      Interesting! I guess we come at things from different angles with very different constraints. The stuff I work on, the bloat is excusable if we can delivery quicker, with fewer bugs and lower maintenance costs. Memory fragmentation is of little concern. You OTOH have some other much more pressing concerns that constrains what features you use. Our challenges are different and the old adage applies: the right tools for the right job!

    19. Re:And also, by Anonymous Coward · · Score: 0

      Why not Delphi then? OOP, semi-Crossplatform (Win, linux) and damn easy to use IDE.

      Anyway I'd stick to plain C++ using Qt library though - win, X11 and MacOSX.

    20. Re:And also, by Kirruth · · Score: 1
      As an added plus, in a few months you will add the capability to compile on linux/linux compatable unix

      Hadn't thought about that: it'd be way cool if taking a project from Windows C++ Builder to Linux C++ Builder would automate some of the porting activity.

      --
      "Well, put a stake in my heart and drag me into sunlight."
  7. Marketing by ChopSocky · · Score: 1

    Micro$oft. Put a bunch of cash behind something, and everyone's bound (forced?) to pick it up, powerful or not.

    --

    "Joan of Arc, up top!" - Ghandi, Clone High
  8. Sounds like you need a PFM tool by mrroot · · Score: 5, Funny

    You know, Pure Fcking Magic

    --
    I Heart Sorting Networks
    1. Re:Sounds like you need a PFM tool by Anonymous Coward · · Score: 0

      Mark Bell? Is that you? I thought you'd be in court right now you friggin momo.

    2. Re:Sounds like you need a PFM tool by Anonymous Coward · · Score: 0

      That would be REBOL

    3. Re:Sounds like you need a PFM tool by StormyMonday · · Score: 2

      Don't forget the telepathic interface and the DWIM (Do What I Mean) debugger.

      --
      Welcome to the Turing Tarpit, where everything is possible but nothing interesting is easy.
  9. Java Java Java by los+furtive · · Score: 1, Redundant

    What is java missing from the criteria?

    --

    I'm a writer, a poet, a genius, I know it. I don't buy software, I grow it.

    1. Re:Java Java Java by thrash_ · · Score: 1

      Operator overloading and TRUE multiple inheritance.

    2. Re:Java Java Java by Anonymous Coward · · Score: 0

      as is explained in multiple threads on this topic in painful detail:

      multiple inheritance BAD

      in other words, C++ gets it wrong. wrong. wrong. java, for all its faults, gets it right.

  10. Simplicity is good by jdesbonnet · · Score: 3, Insightful

    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.

    1. Re:Simplicity is good by felipeal · · Score: 4, Insightful

      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
      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?

    2. Re:Simplicity is good by amaprotu · · Score: 1

      Operator overloading is easily the feature I miss most out of Java. Operator overloading when used in an intelligent maner can increase code readability (and thus increase re-use and reduce time when manipulating old code). The times I have seen this code in java: myClassOne.objectInClassOne.someCommonFuntion(myCl assTwo.ocjectInClassTwo); Are you telling me that this is the most readable solution? Now I admit the possibility to be an idiot is there. You can overload a + operator to subtract numbers, but if that is happening in your team it may be time to reconsider some people's position in the team.

    3. Re:Simplicity is good by pyrrho · · Score: 1

      and fire, please, never use fire, it's far too dangerous.

      --

      -pyrrho

    4. Re: Simplicity is good by Black+Parrot · · Score: 3, Interesting


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

      --
      Sheesh, evil *and* a jerk. -- Jade
    5. Re:Simplicity is good by Anonymous Coward · · Score: 5, Funny

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

    6. Re:Simplicity is good by felipeal · · Score: 3, Funny

      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 :)

    7. Re:Simplicity is good by jeti · · Score: 2

      Have you ever programmed serious math?
      Numeric simulations? Crypto? Even basic
      vector graphics?

      If you're doing any math that isn't totally
      trivial, you'll want operator overloading.

    8. Re:Simplicity is good by Anonymous Coward · · Score: 0

      Actually, I think operator overloading is a very nice feature which I sorely miss in Java.

    9. Re:Simplicity is good by ebyrob · · Score: 1

      Operator overloading can be the bees knees when implemented properly. If it were really too horrible to be used, we wouldn't have operators in language specs at all. The real trick is using it sparingly enough, and in the right places.

      //code that really sucks below
      int i(256.plus(128));
      while( i.doesnotequal(2) ) {
      i.minusminus();
      }

      That said, Java and Python avoid certain abuses quite well, but no language is safe in the hands of a truly bad programmer. What's important is to pick tools people can work with. Then have some iron clad rules that actually get enforced on how development should proceed.

      Of course, looking at this AC's original list of requirements, I have to wonder if his boss is looking at their problem space and coming up with solid requirements that will make their solutions easier to create, or simply compiling a list of buzzwords he's read about different languages.

      In my mind it's hard to look at a problem and say "I must have garbage collection to do this." or "This just won't be feasible without multiple inheritance." KDE has done a great job of showing just how well GUI's can be written using a language without built in garbage collection. Borland has written a pretty amazing IDE without using multiple inheritance.

      jdesbonnet could certainly be right about the boss needing some education, but it could also just be a lack in comunication. Get your boss involved. Get in his head and found out about his past projects. Find out what he's trying to avoid and what he's trying to emulate. Perhaps then the two of you can make some kind of informed decision.

    10. Re:Simplicity is good by Anonymous Coward · · Score: 0

      It all reminds me of something my teacher in my compiler-course once said;

      "Yes. I could do OO programming in any language. Just give me enough time."

      First find out what it is you shall develop. Then look at what you might be able to reuse. Think about what knowledge your team posses. Now choose your programming language.

    11. Re:Simplicity is good by Anonymous Coward · · Score: 0

      Performance??

    12. Re:Simplicity is good by tedgyz · · Score: 2, Insightful

      Indeed!

      This is like putting the cart before the horse. Your boss is defining the solution instead of the problem.

      I am a strong advocate of simplicity, which is why I think Java is a great choice. Multiple inheritance and operator overloading are not sorely missed. Other threads on this topic explain why multiple inheritance is not a problem in Java.

      More importantly, IMHO, Java eliminates the #1 bug producer in languages like C++ - pointers and the subsequent memory errors. I surely do not miss managing my own memory in C++, etc.

      Java is not perfect. For example, EJBs have been WAY overhyped and overused. Most of the time their usage in the real world is akin to using an excavator to dig a hole for a mailbox post.

      --
      "No matter where you go, there you are." -- Buckaroo Banzai
  11. all languages are the same... by lburdet · · Score: 1, Redundant

    it's all question of compromise...
    you will pretty much _have_ to ignore ore try to acheive some other way one of the features you wanted...
    just try to find the one that gets ur project done fastest ;)
    FP

    1. Re:all languages are the same... by Anonymous Coward · · Score: 0

      All programming languages are syntactic sugar for

      :=

    2. Re:all languages are the same... by Anonymous Coward · · Score: 0

      Hm.
      Short term vs Long term is the difficult choice.
      Short term equals "deliver the project as fast as possible and deal with the maintenance latter"
      Long term equals "a well designed application can be maintained by one person"
      Things that might hurt maintenance:
      1) RAD tools;
      2) APPs that don't follow a MVC pattern;
      What else ?
      Do you agree ?
      I don't have figures. Just a loud thought.

  12. Why specify language features? by Anonymous Coward · · Score: 5, Insightful

    More importantly, what is the project, and why is your boss specifying language features rather than project design goals?

    1. Re:Why specify language features? by Anonymous Coward · · Score: 0

      How do you know design goals weren't also spec'ed? Question was just about the language part of the project.

    2. Re:Why specify language features? by Anonymous Coward · · Score: 0

      Cause his boss likes building houses with swiss army knives! LOL :-)

    3. Re:Why specify language features? by frank_adrian314159 · · Score: 5, Funny
      why is your boss specifying language features rather than project design goals?

      Because he can...

      --
      That is all.
    4. Re:Why specify language features? by ziani · · Score: 1

      Becuase others would be working on it?

    5. Re:Why specify language features? by Anonymous Coward · · Score: 0

      Why of course, the boss is Satan.

    6. Re:Why specify language features? by Tony-A · · Score: 2

      It is the building and the cement that matters more than the brick for good design.
      Try building a skyscraper out of adobe.

    7. Re:Why specify language features? by p3d0 · · Score: 1

      Hey, that's unfair. I find Photoshop to be indispensible, and the PDF format is really handy.

      --
      Patrick Doyle
      I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
    8. Re:Why specify language features? by orlovm · · Score: 1

      More importantly, what is the project, and why is your boss specifying language features rather than project design goals?

      Because there is no project, but an idiot who decided to troll Slashdot today? What kind of boss do you think will know what all the criterias this dude mentioned mean, that won't be able to pick the language himself? Don't tell me you are that gullible.

  13. One question... by thrash_ · · Score: 3, Insightful

    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.

    1. Re:One question... by thrash_ · · Score: 1

      And true multiple inheritance. Forgot that.

    2. Re:One question... by Anonymous Coward · · Score: 0

      Inner classes accomplish the same function.

  14. Simple. by PsiPsiStar · · Score: 5, Insightful

    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!

    --

    ___
    It's the end of my comment as I know it and I feel fine.
    1. Re:Simple. by curunir · · Score: 5, Funny

      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!

      --
      "Don't blame me, I voted for Kodos!"
    2. Re:Simple. by Jeb+Beckman · · Score: 1

      Bush + Bush = S&L + Enron

      You IGNORANT LEFTIST !

  15. use c++ by Anonymous Coward · · Score: 0

    Out of what is available, fast, and readily supported. C++ is probably your best bet right now.

    O.

  16. Uhhh.... Java. by Anonymous Coward · · Score: 0

    How does Java NOT meet those criteria?

    1. Re:Uhhh.... Java. by exeph · · Score: 1

      Multiple inheritance, operator overloading

  17. The boss probably already knows the answer ... by jc42 · · Score: 5, Insightful

    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.

    --
    Those who do study history are doomed to stand helplessly by while everyone else repeats it.
    1. Re:The boss probably already knows the answer ... by Anonymous Coward · · Score: 0

      You are a very smart man. I seem to spend most of my time trying to get someone to tell me what the decision (which has already been made) is.

    2. Re:The boss probably already knows the answer ... by jc42 · · Score: 1

      Hey, wow! Someone actually replied to one of my comments in a friendly fashion. I thought there was a requirement that all replies insult the original writer. I guess I was wrong.

      Also, it looks like at least one other person has seen the pattern of bosses asking people to find the best answer to a question whose answer has already been determined by management. I wonder if there are others who have noticed this?

      --
      Those who do study history are doomed to stand helplessly by while everyone else repeats it.
    3. Re:The boss probably already knows the answer ... by g1zmo · · Score: 4, Funny
      I have already looked at C++, Java, C++, C#, Eiffel, and even VB.net
      Wonder which way he's leaning?
      --
      I have found there are just two ways to go.
      It all comes down to livin' fast or dyin' slow.
      -REK, Jr.
    4. Re:The boss probably already knows the answer ... by ibbey · · Score: 2

      Actually, none of the comments in this thread were unfriendly. One person didn't agree with you, but his response was not unfriendly. But since he disagrreed with you, of course you had to be pedantic & attack his inaccurate use of the word 'impossible'. So, who's being unfriendly here?

    5. Re:The boss probably already knows the answer ... by Anonymous Coward · · Score: 0
      i agree with your criticism but would like to add, in my role at the friendly pedant, that the word impossible was used properly. One of the dictionary senses is
      4.Extremely difficult to deal with or tolerate: an impossible child; an impossible situation.

      so, he was only attempting to be pedantic. in reality he was displaying ignorance.

  18. RE: Programming Languages by hexghost · · Score: 1

    We'll I don't know one that fits ALL those criteria. I think you should narrow some of your criteria. For instance, C++ has many easy to use IDE's, does NOT have simplified GUI, it does have multiple inheritance, abstract classes, and some garbage collection. It also supports function and operator overloading. However, its not certainly not the most portable, especially if you do GUI. In fact, good luck if you do GUI.
    Personally I'm a java developer so I'd recommend java. It doesn't have multiple inheritance or basic operator overloading, but you could argue that you don't need those. It does have a lot of very easy to use IDE's (many of the best are free), it does have very easy and integrated GUI support, and it defines portability. Garbage collection and abstract classes and interfaces are there too. I'd recommend this for anyone doing a program that has a GUI and needs to be used on multiple operating systems.
    As for VB.Net and C#, well, supposedly they will be portable (sure microsoft we believe you) but the fact remains that they aren't even finished products yet. Your choice.

    Hope this helps,
    HexGhost

  19. Ok, it might be for fun... by hereticmessiah · · Score: 1

    ...but there's people out there who design languages for fun, you know. Take a look at the languages on the esoteric programming languages ring or maybe even subscribe to the mailing list, but only if it all interests you.

    --
    I don't like trolls and mod against me if you like, but I'd prefer if you'd reply.
  20. Only language that comes close... by BitwizeGHC · · Score: 3, Informative

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

    --
    N4st0r, trixx0r h0bb1tz0rz! Th3y st0l3 0ur pr3c10uzz!
    1. Re:Only language that comes close... by RevAaron · · Score: 2
      Actually, LittleSmalltalk and GNU Smalltalk excluded, all of the Smalltalk systems have somewhat similar IDEs, more or less in their features. For 'professional' app development, VisualAge for Smalltalk is great, but your apps will be stuck on Win32, AIX, and Solaris. VisualWorks (http://www.cincom.com) is very cross-platform, supporting every major desktop and server platform. VW also has "enterprise" level features for those that can only see buzzwords.


      For me, Smalltalk would really be the only option. Tools like Python will only take you so far; after a while, you'll be at a loss trying to manage a huge application. With tools like ENVY/Developer for Smalltalk, working on a large app in a team is quite natural. It has a real IDE, not like those found in the world of C/C++. There's a reason a lot of non-Smalltalk coders say that IDEs are mostly worthless- it's because a truly useful IDE hasn't gone far outside of Smalltalk.

      --

      Working toward a usable PDA environment in the spirit of Newton OS: Dynapad
    2. Re:Only language that comes close... by Xerithane · · Score: 2

      I agree with you on smalltalk, tis a good language.

      However, I have a friend constantly bitching to me about VisualAge. From the list of "features" *cough* bugs *cough* it has (and well documented over the last couple months) I wouldn't touch it for a serious development problem.

      The thing that irked me about this question is for the most part, any language can do those things with the proper libraries. I've yet to see a GUI kit that makes GUI programming easier than QT does. You can always add onto a programming language, pick the one that suits the problem not the one that lets you be lazy.

      --
      Dacels Jewelers can't be trusted.
    3. Re:Only language that comes close... by Anonymous Coward · · Score: 0

      Serious development using smalltalk isn't unheard of, FED-EX developed their tracking system in smalltalk.

    4. Re:Only language that comes close... by Xerithane · · Score: 1

      When did I say it wasn't a serious programming language?

      My points were A) VisualAge sucks, according to a trust source and B) You can make any decent language do whatever you need it to do if you know how to do it.

      --
      Dacels Jewelers can't be trusted.
    5. Re:Only language that comes close... by spacey · · Score: 1
      I hate to enter the language debates, but here goes.

      Smalltalk is nice - I like the language, and have had some fun being diverted by squeak - an environment I'm going to return to when I have more time.

      However, even smalltalk is limited in how you can manipulate the language compared to the insanely cool things you can do in Common Lisp. Different people have different LISP expereinces, and mine are far from completely positive (I hate the common lisp builtin names - I much prefer scheme's!) but its the only environment I know of where all of the above buzzwords can co-exist, and have since the mid-80's before the buzzwords were mostly invented.

      • Object-oriented? CLOS, check.
      • Multiple-inheritence? With CLOS, check.
      • Intuitive GUI? Well, there's emacs and there's different IDEs, which I'm not familiar with. So a "maybe", coupled with the ominous "so what do you consider intuitive?" The IDE screenshots at www.franz.com for their Allegro CL doesn't make it look too painful. As long as there's a good class browseer, ala squeak, syntax highlighting and indentation, and good build tools and workflow tools, you're mostly there.
      • Full support for operator and function overloading? Oh yeah, you can re-define everything. CLOS' is very cool for the control it gives you in function overloading, too.
      • Portable? Depends on what platforms you're porting to. Windows and unix, definetely.

      Anyway, its something you may want to consider, since if your boss really doesn't have a clue what he wants, he's probably going to get either Smalltalk or Common LISP with that list of requirements. So if he wants something, he'd better come out and say it before he finds himself cutting a check to franz for a copy of Allegr CL!

      -Peter

      P.S. CLOS is the Common Lisp Object System

      --
      == Just my opinion(s)
    6. Re:Only language that comes close... by quintessent · · Score: 2

      Hmmm. C# also has everything mentioned except multiple inheritance, so make that "Only two languages."

      Of course, C++ has everything but garbage collection. Make that "Only three languages."

      But I'm sure I missed a few.

  21. Comparison by Anonymous Coward · · Score: 0, Troll
    There's a really good comparison of the various languages, compiler speeds, and resource allocations put out by the ITF:

    http://srd.yahoo.com/business/publications/softwar e/compilers/languages/whitepaper/itf/2001/november /crossreference/compilers/engineering/top.pdf

    1. Re:Comparison by Anonymous Coward · · Score: 0

      Who mismodded this post? This should have been modded offtopic, not informative. The link only goes to http://oralse.cx/. The full text of the link is "http://srd.yahoo.com/business/publications/softwa re/compilers/languages/whitepaper/itf/2001/novembe r/crossreference/compilers/engineering/*http://www .oralse.cx/", causing browsers which do not have enough characters allocated in memory to not display the "*http://www.oralse.cx/". (By the way, the website conly contains pictures of a beautiful cat and a small Daschund lying down in a large sandwich bun.)

  22. for starters by Sebastopol · · Score: 5, Insightful

    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.

    --
    https://www.accountkiller.com/removal-requested
    1. Re:for starters by foogoobers · · Score: 2, Insightful

      I agree! Go read "Essential COM" by Don Box for a good discussion of pragmatic OO design issues. How do you know you NEED all these features? Have you prototyped the system yet? Have you done your UML diagrams yet? I think that most of the languages you mentioned could fit the bill (of course, this forum is heavily non-M$, so expect to see VB downplayed).

    2. Re:for starters by Anonymous Coward · · Score: 0

      Exactly!

      The decision of the language should be based on the problem rather than based on buzzwords.

      Great response Sebastopol!

    3. Re:for starters by bsadler · · Score: 2, Insightful

      Right on... You don't start a job like this by looking at a language. Get your design goals straight and then find what fits them... of course, if you have already done this nevermind.

      --
      Stupid sig of the week: Perl Hackers DIIMTOW
    4. Re:for starters by EatenByAGrue · · Score: 1

      Er...'event handling', 'GUI' and 'object oriented' aren't exactly grandiose ideas or big buzzwords. More like standard platform features...

    5. Re:for starters by Anonymous Coward · · Score: 0

      you have a point, but don't be a jack-ass.

    6. Re:for starters by Oink.NET · · Score: 4, Interesting
      ... 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.

    7. Re:for starters by estoll · · Score: 0

      Too many managers force their developers to jump right into implementation. You need to take the time to design the system and develop a solution to your problem first. I read a statistic that skimming over the design phase adds 68%-150% extra time on the project before it is finished. As a programmer, I can attest to that which makes me wonder... Why do managers, project after project, keep making the same mistakes in the design phase? How many times does someone need to miss their deadlines and put unnecessary pressure on their developers before they realize where they are going wrong? Actually, from reading your question, I think the answer is simple. Marketing fluff makes upper management think developing software is as easy as drag-and-drop. They think their developers are always missing the point. They think they know more because they attended some big conference. The truth is that marketing is a major factor in bad software design.

      --
      http://www.askthevoid.com
    8. Re:for starters by scot4875 · · Score: 1

      Instead, people charge off with grandiose ideas and big buzzwords (event handling, GUI, object oriented).

      These are big buzzwords? An event-driven GUI is a grandiose idea? Have you done any coding (besides shell scripts) in the last 10 years?

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

      The project I'm currently on (management system for the University of Idaho's campus-wide network) underwent about 6 months of requirements discussions (including language requirements, hardware requirements, and functional requirements), along with a fully-implemented HTML prototype, before a *single* line of code was written. I'm the lead programmer, and I wasn't even brought into it until the last 3 weeks of requirements documentation.

      Crap software exists because, for some reason, demand for crap software exists. It's got nothing to do with the development process. I wonder if you've ever even *worked* on large projects in an enterprise environment. It's a whole different ball game from sitting at your home workstation and scripting your OS.

      --Jeremy

      --
      Jesus was a liberal
    9. Re:for starters by Sebastopol · · Score: 1


      Have you done any coding (besides shell scripts) in the last 10 years?

      Shell script? What's a shell script? Is that some kinda DOS thing?

      --
      https://www.accountkiller.com/removal-requested
    10. Re:for starters by Anonymous Coward · · Score: 0

      Honestly, unless you have programmed with both VB and another language like Java or Python, you can only guess as to how really really atrocious VB is! I've done large multi-tiered systems programming on Windows using the tried and true VB/COM architecture, and everyone who says it sucks is right. Sorry to ruin your Microsoft apologist pity routine.

    11. Re:for starters by Ivan+the+Terrible · · Score: 2, Interesting
      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 that was posted on /. a while back (here)

      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.

    12. Re:for starters by rufusdufus · · Score: 1

      Mean or not, I think you should be modded up!

    13. Re:for starters by Anonymous Coward · · Score: 0

      Wow, you sound like one of those suposedly-elite-yet-so-insecure-with-their-
      own-knowledge-assholes-who-really-know-shit
      who like to rag on people that sound like they may be "newbies." Who cares if the author of this
      question feigned a project to get a question
      answered about a all-encompassing language. Lighten up.

    14. Re:for starters by Anonymous Coward · · Score: 0
      Considering that "shell script" is classic *nix terminology, I officially award you this week's Masturbating Monkey award, a coveted prize given to this week's all-round lamest comment.

      And hang a golden tassal on the tool of that onanistic primate for a grade A karma whoring in the parent post. A brilliant effort! *golf clap*

    15. Re:for starters by Zeinfeld · · Score: 2
      How do you know you NEED all these features? Have you prototyped the system yet? Have you done your UML diagrams yet? I think that most of the languages you mentioned could fit the bill (of course, this forum is heavily non-M$, so expect to see VB downplayed).

      A while ago I did a comparative study of the graphical design tools on which UML is based. My conclusion was that the idea was a pretty bad one and all of them became more trouble than they were worth as they attempted to track every feature of C++ or such graphically. As the projects grew in scope the diagrams became less and less useful.

      I was recently forced to use UML, it appears to me to be worse in every important respect than it's predecessors. In addition to the added complexity of now tracking multiple languages UML has lost any coherence the input languages had. UML certainly does not fit well with XML Schema which has a particularly complex data model. In the end I rolled my own graphical markup which people seemed to like but it probably worked because I was using it to present a design rather than create one and I absorbed a bunch of our coding conventions into the notation so the notation was for the subset of XML Schema we used rather than every last feature.

      I have noticed that UML and its ilk tend to appeal to people who are brought up on databases and make the mistake of thinking the entity relationship model is useful. Predicate calculus and typed set theory are vastly more powerful in my experience. If I see a bunch of schemas written in Z or VDM I can understand them pretty quickly, I can also see the mapping from the schema to code.

      As to the original question, it appears bogus to me. Much more important that what is the most fashionable and feature rich language is what language is going to have support over the life of the project. Java is a definite, C# is almost but not quite guaranteed to be arround.

      I syspect that the question is not posed to get an honest reply. The question appears much more likely to be intended to beat the drum for operator overloading.

      As such it is worth remembering that Java abandoned operator overloading for good reasons. The C++ approach was just too hard to optimize and lead to buggy and unreliable compilers and code. C# may have got the mix right, I seem to recall there being some limited operator overloading mechanism with a lot of restrictions.

      --
      Looking for an Information Security student project suggestion?
      Try http://dotcrimeManifesto.com/
    16. Re:for starters by Anonymous Coward · · Score: 0

      And you of course, win the "I've been Trolled like a Biatch" award.

    17. Re:for starters by dubl-u · · Score: 3, Insightful

      A while ago I did a comparative study of the graphical design tools on which UML is based. My conclusion was that the idea was a pretty bad one and all of them became more trouble than they were worth as they attempted to track every feature of C++ or such graphically. As the projects grew in scope the diagrams became less and less useful.

      Amen. Diagrams, like any other documentation, should be carefully abstracted summaries of the code, not 1:1 duplication of it. 99% of the UML I do is on a white board or on scratch paper, which is where it belongs.

    18. Re:for starters by ibbey · · Score: 2

      of course, this forum is heavily non-M$, so expect to see VB downplayed.

      You imply that an anti-VB bias is solely based on a similar anti-MS bias. In reality, there is one main reason that I would never develop a VB app-- complete lack of portability. I'll admit I detest Microsoft, but regardless, given the option of using a portable language (Python comes to mind) and one that is not, there is little reason to choose the non-portable one.

  23. Objective C by Anonymous Coward · · Score: 0

    Objectice C on OS X and Project builder would work.

  24. it's obvious! by Anonymous Coward · · Score: 0

    GNUstep and Objective-C

  25. Ruby by JamesOfTheDesert · · Score: 5, Informative

    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 fits your needs quite well.

    --

    Java is the blue pill
    Choose the red pill
    1. Re:Ruby by gartogg · · Score: 2, Insightful

      It looks nifty and i just started reading the docs to see if I want to use it, but in a production environment using a new language is suicide, even if the people envolved DID know it already (training takes time), because there are probably bugs. It's also a scripting language and it doesn't compile, not a listed requirement but probably useful if you want to use the program in a corporate environment (though the specs weren't specific enough to be able to tell...)

      --
      I'm a concientious .sig objector.
    2. Re:Ruby by chrylis · · Score: 2, Informative

      New language? The interpreter's on version 1.6.5, and the language has been evolving in Japan for several years. Now as far as being compiled, you're right--it's not. But the Ruby people claim that they've managed to implement parts of a WM in it, and until KDE, that was generally considered too speed-critical for even C++. I don't personally see what benefit a compiled language has over an interpreted one besides, of course, speed. As far as training... It just *works*! Really!

    3. Re:Ruby by Wolfier · · Score: 1

      Funny?
      It is as funny as suggesting, say, Python.

      If I had mod points I'd rate it as "interesting" instead.

    4. Re:Ruby by ZxCv · · Score: 2

      There is a Perl compiler out there, so why not a Ruby compiler? As far as I know, the Perl compiler essentially just lumps an interpreter together with your script code into an exe. So I don't see why this approach would be any harder for any other scripting language. Granted, it isn't the most technically efficient solution, but it would certainly solve any deployment issues.

      --

      Perl - $Just @when->$you ${thought} s/yn/tax/ &couldn\'t %get $worse;
    5. Re:Ruby by Anonymous Coward · · Score: 0

      and until KDE, that was generally considered too speed-critical for even C++.

      Yeah, the speed-demon KDE has done a lot to dipense with the bloated and slow perception of C++!





      What was that about long startup times and huge memory use again?

    6. Re:Ruby by BitterOak · · Score: 1
      Just out of curiousity, has anyone done any execution speed comparisons of Perl, Python, and Ruby?

      Personally, I like Ruby best as a language, but I haven't done any coding in either of those languages that really test speed. I'd be curious to know if there is a clear winner in that regard, or loser.

      --
      If I can be modded down for being a troll, can I be modded up for being an orc, or a balrog?
    7. Re:Ruby by Anonymous Coward · · Score: 0
      Just out of curiousity, has anyone done any execution speed comparisons of Perl, Python, and Ruby?

      There is no pratical difference. Whenever one of these language will be too slow, the others will be too, compared to the x10-x100 that could be won by switching to C/C++ (or fast JIT VMs Java). See The Great Computer Language Shootout

    8. Re:Ruby by querty_not_dvorak · · Score: 1

      Check this (http://www.bagley.org/~doug/shootout/craps.shtml) to see overall speed comparisons, as valid as the CRAPS allows.

  26. Java by XRayX · · Score: 2

    I would go with Java. It is really object-oriented and clear structured, there are many implementations out there (Sun's Official, gcj, IBMs), it is cross-platform and if you tweal it a little it can be fast.

    --
    Boycot? Blackout? Subscriptions?
    I don't care!
  27. Good Language by Renraku · · Score: 1

    What makes a good language is a language that's open to all OSes. Since it can be used on any system, its potential is really really high. Now, if you make it easy to program in, customizable, and able to have direct access to hardware if needed, or go through an interpreter...it starts to become a good programming language. Of course, no programming language would be good unless it was tested and recognized, meaniing, a compiler and basic help would have to be released free at first, like it should be anyway. All those ingredients combined, and you have the perfect mix for a good language.

    --
    Job? I don't have time to get a job! Who will sit around and bitch about being broke and unemployed then?
  28. Geesh, at least response to the question by cdmoyer · · Score: 2, Insightful

    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"

    --
    /* CDM */
    1. Re:Geesh, at least response to the question by Dixie_Flatline · · Score: 2

      You can fake a sort of multiple inheritance with Java, so that's not really an issue. Operator overloading is so much syntactic sugar, anyway. If you need a function that 'adds' two strings together, you don't NEED to have it take the form 'string1 + string2'.

      In any case, I've never heard of a project that NEEDED all those things. Maybe I don't have the broad scope needed to concoct such a problem, but I don't think that language choice is the thing that should be looked at at this stage. If you think you need that many 'features' in a language, you should sit down, design it up, and see if you actually need all that cruft.

  29. Who cares? Language wars are over by Ars-Fartsica · · Score: 5, Interesting
    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.

    1. Re:Who cares? Language wars are over by BitwizeGHC · · Score: 4, Insightful

      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.

      --
      N4st0r, trixx0r h0bb1tz0rz! Th3y st0l3 0ur pr3c10uzz!
    2. Re:Who cares? Language wars are over by Ars-Fartsica · · Score: 2
      Smart managers will let their programmers use whatever gets the job done.

      So if a solitary programmer decides Prolog is their favorite language, they should just go ahead and use it? What if no one else in the office knows Prolog? You end up with read-only code because no one had the foresight to understand that minority languages are a dead-end in a team environment.

    3. Re:Who cares? Language wars are over by ari_j · · Score: 3, Funny

      If a solitary programmer decides Prolog is his favorite language, he is working on his PhD and never intends to leave academia and get a "real job". And your "What if" question is moot: Nobody else does know Prolog. ;-D

    4. Re:Who cares? Language wars are over by psyco484 · · Score: 0

      By your thinking, we should all stop using Unix because most people don't use it. The best tool for the job should be used, not just what ever is mainstream. Should the mainstream option be the best, then use it, if not, then don't, after you know the basic structure for programming, a new language isn't that hard to learn.

    5. Re:Who cares? Language wars are over by WetCat · · Score: 1

      Yep, exactly! Surely I am thinking of creating a lot of code on Prolog because Java version was already extremely slow and unmaintainable! And MY managers are ok with that!

    6. Re:Who cares? Language wars are over by Ars-Fartsica · · Score: 2
      By your thinking, we should all stop using Unix because most people don't use it

      Well, within the unix market itself this trend is in fact happening as linux kills off minority unixes (which may in fact have advantages over linux in some areas). The market can support two OSs - and its obvious that those will be Win32 and linux. Other OSs may be stronger, but it doesn't matter anymore, the computing market does not favor the minority solution in the long run.

    7. Re:Who cares? Language wars are over by Anonymous Coward · · Score: 0
      So if a solitary programmer decides Prolog is their favorite language

      Ah, but the smart manager will have fired all the bearded computer science academic types already.

    8. Re:Who cares? Language wars are over by curtoid · · Score: 2, Insightful

      .Net and Java??? Wait a minute here....

      This is a better way off looking at it:

      C - For raw speed (OS, including RTOS and Drivers)
      ASM - For the REALLY impatient
      C++ - For Fast, Powerful Apps - Engineers only, please, from here up...
      Java - For the Sophisticated "Runs Anywhere" Jock
      .Net - For the Microsoft Loyal Developer

    9. Re:Who cares? Language wars are over by Ironfist_ironmined · · Score: 1

      Lisp... all too true... pity, it was the first language i learnt.

      --
      0xC3
    10. Re:Who cares? Language wars are over by barawn · · Score: 2

      It's interesting that you chose "C" for raw speed, because I'd agree - for short development, and for resulting speed.

      If you're doing something really dumb, like analyzing stupid data, C is kindof obvious. C++ works for huge apps and for large projects, but for me, C is just too simple. I don't mind re-implementing linked lists, or anything else, because it takes so little time if the program's only going to be five or six functions and maybe 2-300 lines of code.

      My idea of reusing code is cut-and-paste from previous programs. Is this all inefficient? Mostly. But the programs I write from scratch are typically "I need something which does this" where "this" is something simple.

      Granted, all of my code looks like crap. But I'll change that in time - for now, all I want is a program that works, and soon, and writing it in C++ is leisure time I don't have right now. when things die down, maybe.
      (but most likely not... most of my programs are for an RTOS on an embedded system with no memory and no processor power. Sounds like fun, eh?)

    11. Re:Who cares? Language wars are over by Jon+Howard · · Score: 2, Informative

      Here's a categorized list of companies successfully using Allegro Common Lisp, along with a couple examples from each; follow the links for more companies and more information:

    12. Re:Who cares? Language wars are over by cduffy · · Score: 2

      But do you want raw speed in terms of development time or runtime? The balance between those two is exceedingly important, and is not infrequently an appropriate deciding factor wrt what language a project should be written in.

      I use C when runtime performance is a priority, and Python when development-time performance is at a premium (and if you're on a small team and need the product out the door tomorrow, that's what you care about!)

    13. Re:Who cares? Language wars are over by WzDD · · Score: 1

      You've completely missed the point of .Net, which is that it supports any language which can be compiled into the CLR.

    14. Re:Who cares? Language wars are over by namespan · · Score: 3, Insightful

      What if no one else in the office knows Prolog? You end up with read-only code

      Prolog syntax should take about 15 minutes to pick up. Programming patterns should take another half day by anyone who's done functional programming -- i.e., anyone who really knows their CS. After that, it's just a matter unraveling someone elses code, and possibly mastering a specific library or API -- no easy task in ANY language. Code in general writes easier than it reads.

      In general, I think it's very odd that people look for programmers experienced in a particular language. Once you've learned to solve problems using a few programming paradigms, most of your stuttering is going to be syntactical, and in using libraries/frameworks. I can appreciate that an employer might want someone who knows and API or library or protocol backwards and forwards -- that would save some time. But there's a lot of jobs I've seen calling for years of language specific experience when any competent programmer could do the job with a good manual (whether good manuals exist is another story, but hey...).

      Finally, there probably are more people out there who know Prolog/ML/Haskell/name-your-favorite-minority-lang uage than you might think. I picked up Prolog as an undergrad working on some projects over summers. No big deal. I'm sure I'm not the only one.

      --
      Libertarianism is rich wolves and poor sheep playing gambler's ruin for dinner.
    15. Re:Who cares? Language wars are over by Anonymous Coward · · Score: 0

      there will always be a very profitable niche for higher end tasks where kludge OS's like winblows or linux will NEVER be suitable. you just wont make billions like microsoft. just like mainframes wont go away as IBM has proven this last year ( although they use linux VM's on top of OS/390)

      wait actaully they did make billions on mainframes my bad

    16. Re:Who cares? Language wars are over by Anonymous Coward · · Score: 0

      you are an idiot, and you write shit code by your own admission. So do the world a favor and please go off and die in a corner somewhere.

    17. Re:Who cares? Language wars are over by Anonymous Coward · · Score: 0

      Perl, ahem. Perl. (troll, cough cough) Perl.

    18. Re:Who cares? Language wars are over by Anonymous Coward · · Score: 0

      ...if you don't care about maintainability or *real* OO, that is.

    19. Re:Who cares? Language wars are over by Jordy · · Score: 2

      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.
      This is of course not particularly true for anyone who wants to distribute commercial software. Using languages which can be easily decompiled into perfectly readable high-level source isn't terribly good for business.

      Any time you need to write software that does what you tell it to do instead of it doing what it wants to do (GC in the background for instance), high-level languages just don't cut it.

      --
      The world is neither black nor white nor good nor evil, only many shades of CowboyNeal.
    20. Re:Who cares? Language wars are over by dubl-u · · Score: 2

      Code in general writes easier than it reads.

      That's true about most code, but most code is crappy. As Martin Fowler says, "Any fool can write code that a computer can understand; good programmers write code that humans can understand."

    21. Re:Who cares? Language wars are over by dubl-u · · Score: 2

      Any time you need to write software that does what you tell it to do instead of it doing what it wants to do (GC in the background for instance), high-level languages just don't cut it.

      This is certainly true, but just doesn't matter for most people. Sure, I can write in assembler or C and have exact control over everything, squeezing out every last byte and CPU cycle But for a large amount of commercial development, it just doesn't matter.

      Moore's Law makes hardware better all the time, but programmers aren't getting any smarter. Even if you're getting paid minimum wage, saving a day tracking down memory allocation issues will pay for the CPU time that a GC eats.

      The whole point of computers is to take care of the things that machines are good at, leaving the fun stuff for us. And I dunno about you, but it's been a long time since I enjoyed figuring out the (hopefully) one place in 100,000 lines of code I'd forgotten to balance my malloc's and my frees.

    22. Re:Who cares? Language wars are over by Anonymous Coward · · Score: 0
      You've completely missed the point of .Net, which is that it supports any language which can be compiled into the CLR.

      But unfortunatly that doesn't (and can't work). Any resonnably complex language isn't going to map well on CLR, and will take a huge performance hit.

    23. Re:Who cares? Language wars are over by Anonymous Coward · · Score: 1, Interesting
      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?

    24. Re:Who cares? Language wars are over by WzDD · · Score: 1

      I know this is a late reply so no-one cares, but I agree with you - people *are* having problems mapping languages onto the CLR, which was apparently designed with statically-typed languages in mind. I wasn't claiming that it was a workable idea. ;)

    25. Re:Who cares? Language wars are over by Tsujigiri · · Score: 2

      Well, within the unix market itself this trend is in fact happening as linux kills off minority unixes (which may in fact have advantages over linux in some areas). The market can support two OSs - and its obvious that those will be Win32 and linux. Other OSs may be stronger, but it doesn't matter anymore, the computing market does not favor the minority solution in the long run.

      I have a feeling that OpenVMS will escape that prediction, even if no others do.

      --

      "I'll take the red pill. No! Blue! AAAaaaahhhhhhhhh"
      - Monty Python meets the Matrix

  30. Why not J2EE environment? by Wazzup · · Score: 1

    He abviously didn't look deep at the Java/J2EE development environment. You can a free IDE ( Eclipse or NetBeans) and a strong OO Design tools (like TogetherSoft).

    W.

  31. You want Java by Gorimek · · Score: 3, Interesting

    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.

    1. Re:You want Java by Anonymous Coward · · Score: 0
      it doesn't have multiple inheritance*

      *except for inner classes

  32. Smalltalk by Anonymous Coward · · Score: 0

    Smalltalk should do everything asked for.

    Seems like an asinine list though. You're looking at the language from a functional level (what it does) rather than from your requirements level (what you need).

  33. Oh my by Anonymous Coward · · Score: 0

    Why is this person even in charge of a project when he doesn't know what he is doing?

  34. Only language I can think of would be Smalltalk. by tdelaney · · Score: 1

    Seriously, it is very difficult to meet all of those criteria. For example, I would instantly recommend Python, except that it fails the criterium of IDE (there are a number of IDEs, but nothing I would bother using). It also technically fails "abstract classes", but that's pretty much a non-issue in Python.

    Since you are obviously willing to put the time in to learn a new language, you may as well go for one which is easy to learn, easy to write, easy to read (incredibly maintainable) and which has one of the best online communities of any language (comp.lang.python).

    It really sounds like your manager has a specific language in mind, and is trying to get you to read his/her mind.

  35. It all depends... by DrPepper · · Score: 2, Informative

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

  36. Power! by Pengunea · · Score: 2, Interesting

    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.

    --
    Starkle, starkle, little twink.
    1. Re:Power! by argv · · Score: 1

      Actually, your brilliant if your 25 and realize you don't know anything. I'm 39 and just starting to figure that out!

    2. Re:Power! by fuzz6y · · Score: 1

      Well, yeah, if by "power" you mean "turing completeness," in which case two of those are unnecessary for a proceedural language. If you define the power of a language in terms of complexity of programs written vs time required, "unecessary" things such as inheritance and operator overloading aren't so useless.

      --
      If you're going to be elitist, it would help to be elite.
    3. Re:Power! by Anonymous Coward · · Score: 0

      Having worked on large scale systems for a few years I would say that the following properties are usefull for a language to have:
      * simple syntax (especialy important if your using a non-standard language)
      * the language should have a good expresive power, e.g. in the language (Erlang) i use regulary there would only be a need for three rather than your five constucts, recursion would be used for the loops (Do while, Do until), the conditionals (If then Else, Case) would be replaced by a pattern matching (multi choice branching).
      (I'm not sure what you mean by Simple sequence)
      * error messages during compile and runtime should be expresive i.e. the reason of failure should be easy to understand and the location (on which line is the error introduced) of the error should be easy to pinpoint - Virtual Machines are usally pretty good at this (in the runtime case, e.g. C vs Java crashes)
      * easy to use and reasonably compleat set of support libaries
      * no pointers, garbage collection - reduces bugs
      * modularity - functionalty is divided into modules or classes (depends on if your using functional or OO languages)
      * code loading (onto a running system) support - this is usefull in many ways, the customer might need this if they are running things like phone systems or servers that should never be down (max downtime = a few hours a year), interactive enviroments - compile module - load module - test if bug fix worked (some test enviroments take to much time to restart for the normal test - fix bug - compile - test cycel)

      - or to sum it up correctness and development speed are the two most important aspects when developing software.

    4. Re:Power! by Lars+Clausen · · Score: 1

      I think you might want, say, variables in there? Or it's not going to be even Turing-complete. And do X while Y == do X until !Y.

      All in favor of using Lambda Calculus, raise your abstraction levels!

      -Lars

    5. Re:Power! by hokan+stenholm · · Score: 1

      Having worked on large scale systems for a few years I would say that the following properties are usefull for a language to have: * simple syntax (especialy important if your using a non-standard language) * the language should have a good expresive power, e.g. in the language (Erlang) i use regulary there would only be a need for three rather than your five constucts, recursion would be used for the loops (Do while, Do until), the conditionals (If then Else, Case) would be replaced by a pattern matching (multi choice branching). (I'm not sure what you mean by Simple sequence) * error messages during compile and runtime should be expresive i.e. the reason of failure should be easy to understand and the location (on which line is the error introduced) of the error should be easy to pinpoint - Virtual Machines are usally pretty good at this (in the runtime case, e.g. C vs Java crashes) * easy to use and reasonably compleat set of support libaries * no pointers, garbage collection - reduces bugs * modularity - functionalty is divided into modules or classes (depends on if your using functional or OO languages) * code loading (onto a running system) support - this is usefull in many ways, the customer might need this if they are running things like phone systems or servers that should never be down (max downtime = a few hours a year), interactive enviroments - compile module - load module - test if bug fix worked (some test enviroments take to much time to restart for the normal test - fix bug - compile - test cycel) - or to sum it up correctness and development speed are the two most important aspects when developing software.

    6. Re:Power! by victim · · Score: 2

      You might like to add function invocation or at least some sort of goto. :-)

      Not to pick on you, but I suspect this is a case of your tool shaping your mind. I'm sure back in the 1960's when "if...then...else" was some new whacked out concept from the lisp guy that got rammed into the Algol specification everyone thought it was just silly bloat. I mean, they had conditional goto already. Why would you need some froo-froo syntactic sugar (<--deliberatly loaded term) to wrap around that?

      What I have found on my path, Basic, assembly, Pascal, C, C+-, C++, Dylan, objective-c (plus the usual side tracks into icon, prolog, php, and domain specific languages) is that at each step I am happily using a programming language that does everything ever needed by a programming language. I look ahead at the next language in my list and didn't learn it because it was just funny syntax and some silly features that I didn't really need. After I learned the new language and how to use its 'silly features' I couldn't imagine returning to the previous language. tragically, that last language is out of order. there are implementation reasons why I don't use Dylan. I am shopping for a new language, but making do with objective-c.

      The readers of this thread will find anwsers from speakers at many points along the continuum. The farther removed the speaker from the listener, the more the remark will sound like ideological rubish.

    7. Re:Power! by smileyy · · Score: 2

      I'm assuming by simple sequence you mean a list datatype. As for the rest, do/while and do/until are syntactically equivalent -- you don't need both. The same thing with if/then/else and case. So your "powerful" language is 40% syntactic sugar....

      You want to talk powerful...how about Haskell's list comprehensions and pattern matching. Makes your function read like the way you defined them on paper.

      --
      pooptruck
    8. Re:Power! by hokan+stenholm · · Score: 1

      Sorry I messed up my first post, this should be more readable.

      Having worked on large scale systems for a few years I would say that the following properties are usefull for a language to have:

      * simple syntax (especialy important if your using a non-standard language)

      * the language should have a good expresive power, e.g. in the language (Erlang) i use regulary there would only be a need for three rather than your five constucts, recursion would be used for the loops (Do while, Do until), the conditionals (If then Else, Case) would be replaced by a pattern matching (multi choice branching).
      (I'm not sure what you mean by Simple sequence)

      * error messages during compile and runtime should be expresive i.e. the reason of failure should be easy to understand and the location (on which line is the error introduced) of the error should be easy to pinpoint - Virtual Machines are usally pretty good at this (in the runtime case, e.g. C vs Java crashes)

      * easy to use and reasonably compleat set of support libaries

      * no pointers, garbage collection - reduces bugs

      * modularity - functionalty is divided into modules or classes (depends on if your using functional or OO languages)

      * code loading (onto a running system) support - this is usefull in many ways, the customer might need this if they are running things like phone systems or servers that should never be down (max downtime = a few hours a year), interactive enviroments - compile module - load module - test if bug fix worked (some test enviroments take to much time to restart for the normal test - fix bug - compile - test cycel)

      - or to sum it up correctness and development speed are the two most important aspects when developing software.

    9. Re:Power! by batessr · · Score: 1

      Here's my power language:

      LD - Load Register
      ST - Store Register
      CMP - Compare Register
      BNE - Branch not equal

      And just throw in a few in arithmetic operators:
      INC - Increment Register
      ADD - Add to Register

      That's all you ever need.
      I'm from a school that likes the basics, but what do I know I'm over 30.

    10. Re:Power! by waspleg · · Score: 1

      heh i'm 22 (my birthday was the first) and i've known that i know nothing for a long time, welcome to reality ;)

    11. Re:Power! by Anonymous Coward · · Score: 0

      Ever notice the ones who think themselves old say "over X" whereas the younger ones say "almost X" :)

    12. Re:Power! by Anonymous Coward · · Score: 0

      Actually:

      do X while Y != do X until !Y

      do X while Y will only enter the loop if condition Y is met at the beginning of the loop, while do X until !Y will enter the loop and check the condition for the first time at the end of that loop.

  37. Objective C + Cocoa by Anonymous Coward · · Score: 3, Interesting

    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

    1. Re:Objective C + Cocoa by Anonymous Coward · · Score: 0

      All the tools you list above all run (or ran) on Windows NT 2 years ago. When NeXT was bought by apple, all those tools were released as a product from apple and ran on windows OS. I hope this hasn't changed.

    2. Re:Objective C + Cocoa by Anonymous Coward · · Score: 0

      Nah, Cocoa frameworks haven't been ported to NT. OpenStep has and Cocoa is based on this so I guess you have a point but there isn't true cross-platform development capabilities as of yet.

      I actually meant porting OSX in all its glory over. No Windows whatsoever =). Then pretty looking Cocoa apps would run on Windows as intended. But then most people(including me) would stop buying Macintoshes so I guess Apple has a vested interest to keep OS X on their own hardware.

      Actually, maybe Apple could release like an extension to Windows that ran like the Java Runtime environment and made Cocoa applications truly runable in Windows(it would have to look the same). I bet if they could make it run efficiently, they would really have something.

      Who knows.... I think Apple will take over the world anyways so its all moot =).

      -Jacques
      jc@cs.washington.edu

    3. Re:Objective C + Cocoa by Anonymous Coward · · Score: 0

      Doh. I meant "Then pretty looking Cocoa apps would run on PCs as intended."

      -Jacques

    4. Re:Objective C + Cocoa by Graff · · Score: 3, Interesting

      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.

    5. Re:Objective C + Cocoa by Anonymous Coward · · Score: 0
    6. Re:Objective C + Cocoa by Anonymous Coward · · Score: 0

      Mac OS X only my ass: GNUstep.

    7. Re:Objective C + Cocoa by Anonymous Coward · · Score: 0

      I agree 1000%. I use C++ and various toolkits at work, but ObjC and Cocoa at home, and the productivity is vastly superior. My favorite trick:

      // ObjC:
      object = nil;
      [object method]; // NOP.

      // C++
      object = nil;
      object->method(); // HCF (halt and catch fire).

      You choose.

    8. Re:Objective C + Cocoa by bsartist · · Score: 1

      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.

      Ever heard of GNUStep?

      --
      Lost: Sig, white with black letters. No collar. Reward if found!
    9. Re:Objective C + Cocoa by Graff · · Score: 2
      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.

      Ever heard of GNUStep?

      GNUStep is great but if you notice I was talking about the Cocoa APIs which are NOT part of GNUStep. GNUStep does have many elements in common with Cocoa but the two are not 100% compatible unless I limit myself to a subset of the available classes.
    10. Re:Objective C + Cocoa by bsartist · · Score: 1

      While it's true that it's not there yet, one of the stated goals of the GNUStep project is to remain current with the evolution of NeXT to OpenStep and now to Cocoa. They even refer you to the Cocoa docs to refer to while programming GNUStep.

      the two are not 100% compatible

      Have you filed a bug report? Patches?

      --
      Lost: Sig, white with black letters. No collar. Reward if found!
    11. Re:Objective C + Cocoa by Altus · · Score: 1

      I could be wrong but I dont think you need webobjects for database work. I belive everything you need for that is in enterprise objects which I think comes with the dev environment... and I belive web objects is only needed for web development.

      on the otherhand I could be mistaken.

      Other than that I totaly agree with your assesment cocoa rocks. Unfortunately it isnt cross platform it would make my life alot easier if it was (or if I was only developing on the mac):(

      --

      "In America, first you get the sugar, then you get the power, then you get the women..." -H. Simpson

  38. Sounds like a job for Python by mr_don't · · Score: 1

    This sounds like a job for Python, or maybe Java.

    I have found that Python is very easy to use as a GUI builder, and it seems to have most of the features you are looking for! It is also really easy to learn.

    Although it may add a level of complexity to your work, you can always try to code different parts in Python, Java, C/C++, and even Perl, and find ways to mesh the various modules into a coherent app!I found the Perl/Python:GUI on top of a C/C++ backend model to be very useful when I was doing Genomics and DNA coding

  39. why not c++?! by digitalmonkey2k1 · · Score: 1

    C++ happens to be a great cross platform choice, in its self it was designed without any system specifics. you can easily port from one os to the next through changing basic references and the iostream.h, etc. Before badmouthing C i suggest youi actually do some learning about it first.

    --
    My sausage tree didn't grow, does that make me a bad mommy?
    1. Re:why not c++?! by taliver · · Score: 1

      Before badmouthing C
      I was not bad mouthing C, as much as I was joking about the list of programming languages being looked at.

      However, I'm still of the belief that C++ really gives you nothing over C, except another bulet on your resume.

      --

      I demand a million helicopters and a DOLLAR!

    2. Re:why not c++?! by digitalmonkey2k1 · · Score: 1

      sorry about that

      --
      My sausage tree didn't grow, does that make me a bad mommy?
    3. Re:why not c++?! by Anonymous Coward · · Score: 0

      And C gives you nothing over ASM.

      How much C++ have you actually done? Or, better question, how much OO have you done with C++?

  40. Fantasy by NiftyNews · · Score: 5, Funny

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

    1. Re:Fantasy by selderrr · · Score: 1

      LOLLLL ROTFL :-) very good one. This kinda summerizes how ridiculous the question was.

    2. Re:Fantasy by Kupek · · Score: 2

      Susie, from Calvin & Hobbes?

    3. Re:Fantasy by chrohrs · · Score: 1

      It would also be fantasy to ignore the knowledge and experience of your team, present and future. One does not become fluent in a programming language overnight. There's more than just learning its control structures, scoping rules, etc. So it may be advisable to use a standard language even if it isn't the perfect tool for the job.

    4. Re:Fantasy by NiftyNews · · Score: 1

      Ding! Unknowingly, but admittedly.

  41. What's wrong with C++? by Anonymous+Brave+Guy · · Score: 3, Informative

    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.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    1. Re:What's wrong with C++? by __past__ · · Score: 1

      I wouldn't call a language where the result of
      int foo(int a, int b)
      {
      return a + b;
      }
      is is unspecified "platform independent". YMMV.

    2. Re:What's wrong with C++? by rabidcow · · Score: 1

      If you go by the language specification only, yes. (are there even any compilers that fully adhere to that?) Practically speaking, int is by convention 32 bits on modern desktop systems. If you plan to port to something else, there is a standard way to avoid problems:

      typedef int int32;
      typedef short int16;

      etc.

      If I were designing the language, I'd probably have such types built in, but oh well.

    3. Re:What's wrong with C++? by Anonymous Coward · · Score: 0
      If you plan to port to something else, there is a standard way to avoid problems:

      typedef int int32; typedef short int16;

      Yeah, and once you are on a 64 bits machine, and int is 64 bits, short is 32 bits, you have to rewrite all the code that uses int16.

      It's even worse if you are using int16/int32 etc... in structs/functions prototypes in a library you are exporting to others.

    4. Re:What's wrong with C++? by rabidcow · · Score: 1

      No.

      Usually you don't acutally need exactly 16 bits, say. Usually you need *at least* 16 bits, in which case you just substitute a 32 bit int if you have to.

      Otherwise you can just write a class that emulates the specific bit size you want. If you rely on the right overflow, use a larger data type that constantly ands out the high bits. If you're matching a file format, use several byte-length or other shorter data types. Do this in a class and the actual code doesn't need to change at all.

    5. Re:What's wrong with C++? by ohios · · Score: 1

      if you wanted to make sure that code was platform indepenedent you would use char, short, long or long long (or __int64 on MS).

      int is there to allow the compiler to choose the most efficient integer size for the CPU you are using (i.e. the native integer size).

      C/C++ is as much about writing effecient code as well structured code. you don't have to use the keywords that help optimization (register, etc) but sometimes they get overused (int, goto).

      Java is excellent if you are not to bothered about the effeciency of the program, which interestingly is not in the boss' spec in the original posting.

    6. Re:What's wrong with C++? by Anonymous Coward · · Score: 0
      Usually you don't acutally need exactly 16 bits, say. Usually you need *at least* 16 bits, in which case you just substitute a 32 bit int if you have to.

      Then why not use "int", "short" etc... with an "assert( sizeof(int)) >= 4)" at the beginning of the program ? "int" is guaranted to be at least 32 bits, "short" at least 16 bits, and "char" at least 8 bits, so you are achieving exactly nothing with your typedefs, if they don't guarantee the exact size. Of course, it is clearer to read for you're doing heavy byte/file format/network data/hardware manipulations [and then you often want *precise* size, i.e. if you are writing a memory manager, writing data to device], but it brings nothing to the portability, and shouldn't used if you have general data (with arbitrary ranges like, say, 1-1000000).

      Otherwise you can just write a class that emulates the specific bit size you want.

      Which is quite heavy. But might be the correct solution in some case, except you can't use your data with third-party libraries without doing conversions in all directions, which is also a problem.

      If you're matching a file format, use several byte-length or other shorter data types. Do this in a class and the actual code doesn't need to change at all.

      Granted.

    7. Re:What's wrong with C++? by rabidcow · · Score: 1

      Then why not use "int", "short" etc... with an "assert( sizeof(int)) >= 4)" at the beginning of the program ? "int" is guaranted to be at least 32 bits, "short" at least 16 bits, and "char" at least 8 bits, so you are achieving exactly nothing with your typedefs, if they don't guarantee the exact size.

      Int is guaranteed to be at least the size of short and at most the size of long. 16/32 bits are not guaranteed. (on an 8-bit machine, int could very well be 8 bits)

      Checking the sizeof(int) is a good idea, but you'd have to make sure it's done at compile time. You are right, the int16/int32/etc typedefs aren't really appropriate in this case, but some others could be, something with a nasty name like int_atleast32. X6

      "Otherwise you can just write a class that emulates the specific bit size you want."
      Which is quite heavy.

      For the programmer perhaps, but the actual code would be no worse than what you could get by rewriting stuff. Everything could be inline and optimized to an extra and every time you try to convert the value to a different type.

      except you can't use your data with third-party libraries without doing conversions in all directions

      ...which also need to be written to be portable somehow. Chances are they'll use a data type you have natively available. In any case, the conversion could be as simple as assigning an int, so it shouldn't really matter.

  42. Re:Why not Java? by Anonymous Coward · · Score: 0

    In the post, the user specifies multiple inheritance is a requiment the language must have.

    In my opinion, multiple inheritance is something to avoid. It adds confusion when attempting to determine which method to execute and (If you're using an interpreted language) can make the method lookup take longer.

    I believe Java is a use-able OO language for most projects. There are several derivatives of Smalltalk that are also very functional to develop in.

    It would be nice to have information on why each language evaluated didn't fit the bill. That would help us help the person with the question.

  43. Re:Operator overloading by ubergnome · · Score: 5, Insightful

    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.

  44. Re: Programming Languages by Anonymous Coward · · Score: 0

    Java isn't truly entirely portable. At least two years ago, the gui libraries were different enough to cause problems running on different systems.

    We still use a java applet that works fine on one browser buy horribly on another, and both are for the same damn operating system. And it's a commercial applet, too.

  45. Why do you need all these features? by igomaniac · · Score: 1
    Trying to use as many language features as possible is a common pitfall when programming in modern day languages. If you try to use multiple inheritance, operator overloading etc. just because you can, you will end up with an unreadable, unmaintainable, undebuggable mess.

    You should first analyze the requirements of your project before deciding which language is most suitable for the job. Just going by 'as many features as possible' will get you in trouble.

    That being said, I think Python fulfills almost all the requirements your boss had. (I am not a Python programmer myself, but I'm interested in language design, so I have read some articles about Python...) On the other hand, if you really have a very complicated problem domain (like AI), Common LISP might be what you're looking for. If you want rapid prototyping above all, maybe Smalltalk is your best bet - If you want performance, write in C or C++, if you want portability you can do a lot worse than picking Java -- You get the picture...

    --

    The interactive way to Go -- http://www.playgo.to/iwtg/en/
    1. Re:Why do you need all these features? by Anonymous Coward · · Score: 1, Funny

      Trying to use as many language features as possible is a common pitfall when programming in modern day languages.

      No, it's not a mistake. It's called job security

      If you try to use multiple inheritance, operator overloading etc. just because you can, you will end up with an unreadable, unmaintainable, undebuggable mess.

      Sounds like a perfect recipe for a long-term career in code maintenance.

    2. Re:Why do you need all these features? by Anonymous Coward · · Score: 0

      At various times I've lived in (alpha order) BASIC, C, C++, COBOL, FORTRAN,Java, Lisp, Modula-2, Modula-3, Pascal, Perl, PROLOG. Right now its Python for everything, with C/C++ libraries for performance as needed.

      From this perspective, the task seems to fit python. Even "really complicated AI" may be appropriate, if you don't need compiled performance. And Python is at least as portable as java, and (as noted elsewhere) easier to maintain.

  46. Don't pick the language first, solve the problem! by trenton · · Score: 5, Insightful
    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!

    --
    Too big to fail? Does that make me to small to succeed?
  47. Strength in numbers by Moosifer · · Score: 2, Insightful

    For commercial or "enterprise" applications, a widely adopted language can often prove to be the most powerful. The more popular the language, the easier it will be to find mature or talented resources to keep the product going. Going with a relatively obscure language, even if it is somewhat better suited to the task, might only serve to hinder the evolution of the product.

  48. Delphi by Tha_Zanthrax · · Score: 1

    I have used lot's of programming languages and Delphi just is the easiest to use.
    It's a nightmare when occasionally doing some ciding in C(++).
    Oh, 1 hint, don't use API's. Kylix kicks a$$ to !

    Or brainf*ck :)

    1. Re:Delphi by Anonymous Coward · · Score: 0

      Kylix will meet every goal on your list and you can compile your applications on Windows as well as Linux.

      Check it out. Linuxworld voted it the best development environment.

    2. Re:Delphi by Anonymous Coward · · Score: 0

      Hey, I'll pimp Delphi/Kylix, too.

      However it does not support operator overloading, mulitiple inheritance, or automatic garbage collection.

      But it is portable between Winblows/Lie-Nix.

      If cross platform (between Winblows/Lie-Nix), and the project application performance was critical, Delphi comes close to meeting the criteria.

    3. Re:Delphi by vtechpilot · · Score: 1

      Here! Here! Delphi Is flat out amazing. Oh, as far as porting goes, Write in Kylix First, then Port to Delphi and you'll have near zero work to do. The reason is that all the libraries Kylix uses are available in Delphi, but not vice versa so by starting in Kylix you can't use something thats not supported in Delphi. You are so right on. I wish I had mod points.

      --
      Slashdot is an anagram for Has Dolts, and I am Dolt number 468543
    4. Re:Delphi by KidSock · · Score: 2

      Check out Deja news list of compilers, where the programmers got to vote

      Deja news? Was this post stuck in the queue since 1998? Seriously, got a link?

    5. Re:Delphi by Chadster · · Score: 1

      Yes, operator overloading is not supported, nor is it required.

      Multiple inheritance can be done using interfaces; the better way.

      AGC is there if you don't use pointers and why would you?

    6. Re:Delphi by abdulla · · Score: 1

      just incase you didn't notice, borland c++ builder makes gui development as easy as VB, i don't have experience with delphi so i can't comment, but my experience with pascal puts me off the idea of "pascal with classes", but you've inspired me to give it a look, i still have something against a company owning a language though.

    7. Re:Delphi by marcovje · · Score: 1



      - D6 supports OO afaik.
      - limited MI via interfaces. (which is all you need anyway)
      - By using the same interfaces, one can also release difficult datastructures automatically.

      Free Pascal can be used sometimes to compile for other x86 platforms too.

  49. Not a feauture of the language by Joel+Ironstone · · Score: 1

    Many of the things you have described are not features of the language you're using but of the programmers you're employing. Keeping a good handle on how the programmers are organizing their code is more important than any features a language can provide.

  50. I think you're asking the wrong questions by joeflies · · Score: 1

    Have you determined that you need all that stuff to complete your project? It sure sounds like what I deal with everyday ... someone walks in with a checklist of stuff, of which they only use 10% of the criteria. Most of the time, they would be far better off using something that does their high priority criteria exteremly well, instead of choosing something that does everything not so well.

  51. You like C++ by Roached · · Score: 1

    I have already looked at C++, Java, C++, C#, Eiffel, and even VB.net;

    You said C++ twice.

    We like C++.

  52. Sounds like a boss alright by dmeiz · · Score: 0

    "Oh, and by the way, make sure it is high-performance, self-maintaining, self-documenting, and can be self-taught in 21 days."

  53. Dim bulb by moebius_4d · · Score: 1

    Your boss sounds like a "buzzword-compliant" type. Ask him why each feature is necessary so that you can decide what you really need and what that actually exists is closest. Note that even if you find some research language like Haskell (no disrespect) that meets all these features it will not do well on real-world criteria like "good supply of programmers who can use it".

    If you are presented with a feature list and explanations for why each feature is necessary are not forthcoming, you may be working for a dangerous idiot. Consider transferring or finding other employment.

  54. C++ by geekoid · · Score: 2

    You can write code to handle all the things that it doesn't do.
    This is why C/C++ is so powerfully. You want to do something thats not part of the "default" syntax, write a class, or function(as per your needs) that does it.
    VB is not cross platform.
    C# is propritary.
    Java is also propritary.
    There are IDEs for C++ on all major platforms.
    There are quite a few developer that know c++. heck, some of them even understand it! ;)

    --
    The Kruger Dunning explains most post on /. http://en.wikipedia.org/wiki/Dunning%E2%80%93Kruger_effect
    1. Re:C++ by Anonymous Coward · · Score: 0

      C# is an open standard, you can go to ECMA and read the specs yourself. And dude, stop by a dictionary site while you're at it. "Propritary?"

    2. Re:C++ by brunes69 · · Score: 2

      Perhaps you totally missed the whole "portable at compile time" requirement?

    3. Re:C++ by lkaos · · Score: 1

      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.

      Garbage collection is highly overrated. GC is useful for systems that make use of a great deal of non-stack memory (such as Java) but for low-profile processes, reference counting is much more useful. In fact, overall memory use will be significantly lower.

      STL has auto_ptr which sucks. Writing a reference counted class is rather easy but it's been done so why not benefit from it? Take a look at Boost for a bunch of neat reference couting classes or for a fully reference counted object library, OPP.

      The idea is to essentially not use the new operator at all. Instead of deleted new objects with no references when memory is needed, reference counting deletes an object as soon as the last reference goes away. With STL containers, there is really no justification for having any new's anywhere in a C++ program.

      Check out More Effective C++ for ways on making it illegal to even call the new operator in your program. That should ensure no memory leaks...

      --
      int func(int a);
      func((b += 3, b));
    4. Re:C++ by Anthony · · Score: 1

      Garbage collection is highly overrated. GC is useful for systems that make use of a great deal of non-stack memory (such as Java) but for low-profile processes, reference counting is much more useful. In fact, overall memory use will be significantly lower.

      Pardon my ignorance. I thought reference counting was a form of GC, cf "Mark and Sweep".

      --
      Slashdot: Where nerds gather to pool their ignorance
    5. Re:C++ by KenSeymour · · Score: 1

      I suppose it depends on whether you mean implicit or explicit reference counting.
      Having GC in the language means that you likely have implicit reference counting.
      Not having it means you can explicitly add reference counting if you want or not.
      You will have to explicitly delete heap objects if you don't have GC.
      But you don't have to choose reference counting.
      In your app design, you can designate an owner to delete the objects.
      Non-owner objects can copy pointers at will, provided that their lifetime is completely contained with the lifetime of the objects they point to.
      Needless to say, the owner of a heap-based object has to have a lifetime that entirely contains the lifetime of the managed object.

      Without a general-purpose GC, you may be able to design a system that is much more efficient with CPU and memory.
      With languages, such as Java, you do not have this choice (for better or worse).

      --
      "We can't solve problems by using the same kind of thinking we used when we created them." -- Albert Einstein
    6. Re:C++ by GregSmethells · · Score: 1

      As I recall, Qt will do the garbage collection for you, assuming you use its classes.

    7. Re:C++ by datawar · · Score: 1

      The only problem is that C++ is reeeally difficult to properly use, even for a seasoned programmer. Everyone can code a relatively simple program in C++, but once you start messing w/ templates, STL, multiple inheritance, etc, it gets really difficult to write proper, maintainable code that also runs fast. If you already know C++, great, then it's all a go, but if you'll have to learn it, be prepared to do some intensive training...

      Personally, I preffer Java as it has many of the features that make C++ great but without a lot of the extra fluff (and C++ templates are easily replaced by Java interfaces, so it's all good). Most common Enterprise problems can be easily solved (or at least modeled) in Java and with the maturing of technologies such as JMS, JTS, JDBC, CORBA, SOAP, XML-everything, and (to a certain degree) EJBs, most of the code has already been writen for you!

    8. Re:C++ by TheMidget · · Score: 1

      Reference counting cannot clean up cycles of objects, whereas real garbage collection (makr & sweep, copy & sweep, etc.) can.

    9. Re:C++ by Doctor+Faustus · · Score: 1

      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.

      VB.Net mostly looks like VB, but I wouldn't try to draw any conclusions about its suitability on larger projects, based on VB. MS denies it (probably because they'd get sued otherwise), but C# is basically Java, done again with the hindsight of 6 years of heavy use, and the ability to take out the backward compatibility kludges (which are almost as bad as those in VB, when MS Basic has had 26 years to accumulate crap). VB.Net is an alternate syntax to C#, together with a code generator wizard that takes legacy VB as its input.

    10. Re:C++ by MassacrE · · Score: 1

      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)
      2) most implementations require explicit programmer actions to keep track of the reference or mark something as freeable.

      It also usually ranks equivalent in overall performance to mark & sweep, and significantly worse than some of the newer generational garbage collectors. The worst case for 'true' garbage collectors is usually worse though - garbage collection spreads its inefficiency across every reference operation, rather than operating at peak speed until memory runs out, then pausing for a bit to clean up.

    11. Re:C++ by Anonymous Coward · · Score: 0
      Garbage collection is highly overrated.

      No it isn't. In some project, people spent 40% of their time managing memory. I.e. you can pay a 40% premium on development just for not using a GC.

      GC is useful for systems that make use of a great deal of non-stack memory (such as Java) but for low-profile processes, reference counting is much more useful. In fact, overall memory use will be significantly lower.

      But you miss the fact that if you are using mostly stack-memory, then 1) your process is small, so memory optimization is useless (unless you are creating hundred of processes), 2) the GC would be also faster in this case because the heap is small 3) reference counting means many increments and decrements.

      With STL containers, there is really no justification for having any new's anywhere in a C++ program

      Thrid-party libraries.

    12. Re:C++ by lient · · Score: 1

      With STL containers, there is really no justification for having any new's anywhere in a C++ program.

      Huh? What about this?

      class Vehicle {
      virtual void drive() = 0;
      };

      How would I create a vector of Vehicle instances without calling new? I could use addresses of stack allocated objects but this is often impractical and error prone. More often than not, you need your object to persist longer than the function it was constructed in.

    13. Re:C++ by lkaos · · Score: 2

      class Vehicle : public ReferenceCounted { virtual void drive()=0; };
      class Car : public ReferenceCounted { virtual void drive() {} };

      vector<RCPtr<Vehicle> > vehicles;

      vehicles.push_back(RCPtr<Vehicle>().set(dyna mic_cast<Vehicle *>(RCPtr<Car>().get()));

      Of course, one would imagine that one would use factories instead and make things a whole lot cleaner. That is the basic gist of it. It's not about _never_ using new, but making sure that only a single class (the parameterized RCPointer class or factory classes) ever actually calls it.

      With factories, it would be as simply as this:

      typedef RCFactory VehicleFactory;
      VehicleFactory a = VehicleFactory::create();

      vehicles.push_back(a());

      --
      int func(int a);
      func((b += 3, b));
    14. Re:C++ by lkaos · · Score: 1

      grrrr, forgot the < & >

      typedef RCFactory<Vehicle> VehicleFactory;

      --
      int func(int a);
      func((b += 3, b));
    15. Re:C++ by elflord · · Score: 3, Interesting
      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)

    16. Re:C++ by elflord · · Score: 2

      What Qt does is a little different from GC. It uses parent/child management. Parent objects delete their children, and everything is free store allocated. This memory model works quite well, because you never (or very rarely) want a child widget to outlive its parent, so it's transparent to the programmer.

    17. Re:C++ by Anonymous Coward · · Score: 0
      In the observer pattern example, one approach would be for the observer to own everything. This approach makes sense since the observer sees everything.

      No it doesn't. If the object is "observer" and not container, or child, it's for a good reason... the object is generally owned by someone else. The better OO you do, the worst manual memory managing gets.

      C++ allows you to choose a memory management model that fits the problem domain.

      Unfortunatly memory mangement is orthogonal to problem domain. For instance if you have a Document/View design, then each you want each View to have a reference, necessarily counted, to the Document(s). But then as Views are observers of Documents, Documents have reference to them. Now assume that the Documents are actually instances used internally out of the GUI, that you temporary examined and brought back to the GUI through Views: lots of fun to find out how to manage memory allocation. But the most important is one such requirement "be able to interact with object XXX via GUI" can ruin your memort management strategy, and if your programs gets big enough, and is managed by many people, it will.

    18. Re:C++ by elflord · · Score: 2
      If the object is "observer" and not container, or child, it's for a good reason... the object is generally owned by someone else.

      I guess the key question is, who is it owned by. Whoever owns the resource is responsible for acquiring and releasing it. If views don't have any legitimate claim of "ownership" to documents, they shouldn't own counted references to them either (this amounts to them having a shared ownership of those documents). This is probably a good example of a case where a reference counted model leads on a fast track to chaos.

      Unfortunatly memory mangement is orthogonal to problem domain.

      I don't see how. Memory management is about resource ownership, and that is very much related to the problem domain.

      For instance if you have a Document/View design, then each you want each View to have a reference, necessarily counted, to the Document(s). But then as Views are observers of Documents, Documents have reference to them. Now assume that the Documents are actually instances used internally out of the GUI, that you temporary examined and brought back to the GUI through Views: lots of fun to find out how to manage memory allocation. But the most important is one such requirement "be able to interact with object XXX via GUI" can ruin your memort management strategy, and if your programs gets big enough, and is managed by many people, it will.

      In this particular case, I'd suggest that the document should probably be managed by some other party. The document will be closed at some point, either by the application itself, or by a user event. In any case, I don't see a document as a very strong candidate for a reference counted model under normal circumstances. If there were some kind of distributed document editing application, where several users shared an open document, the document needs to be reference counted, but it is the users who "own" references to the documents, not the views.

    19. Re:C++ by maw · · Score: 1
      Pardon my ignorance. I thought reference counting was a form of GC, cf "Mark and Sweep".

      This is incorrect. Reference counting is quite different to mark and sweep gc. The idea behind mark and sweep garbage collection is you look through the root set - all the pointers allocated on the stack in c parlance - and examine where they point to, and where pointers in dynamically allocated memory point to. Each piece of memory that's pointed to is marked (this can be done with a single bit, since we don't care how many times its pointed to). This is the mark phase. Then we look through the dynamically allocated memory and free up anything that's not pointed to. This is the sweep phase.

      (There's a different gc technique called copying gc. I won't describe it here, but it's apparently about as fast as mark + sweep - both blow away reference counting - despite its rather counter-intuitive nature.)

      When you're using a language like C or C++ where pointers and integers often look the same, a special variant known as conservative collection (which can be applied to mark + sweep and copying gc) is necessary. The idea here is that if something may point to a piece of allocated memory, don't deallocate it. That means, if we're unlucky, an unrelated field (eg bob.age) might happen to "point" to some allocated memory.

      GC is really interesting stuff, and I've not even scratched the surface. For a good survey on GC techniques - fascinating reading - see the gc survey for a much better treatment.

      --
      You're a suburbanite.
    20. Re:C++ by Kirruth · · Score: 2

      Given his list of requirements, C++ (with the Boost libraries) looks like the language to choose. Love it though I do, it must be admitted it can be real pig-dog tricky - but with patience and a little understanding it will get you there.

      This article, Open Source for the Enterprise, gives a really good review of how to use C/C++ effectively, alongside other open-source technologies like mySQL, PHP, Perl, Python.

      I'm still trying to work out exactly why his boss would specify multiple inheritance if he hadn't already decided that C++ was the answer

      --
      "Well, put a stake in my heart and drag me into sunlight."
    21. Re:C++ by Anonymous Coward · · Score: 1, Insightful
      I guess the key question is, who is it owned by. Whoever owns the resource is responsible for acquiring and releasing it. If views don't have any legitimate claim of "ownership" to documents, they shouldn't own counted references to them either (this amounts to them having a shared ownership of those documents).

      That's true, but the "ownership" can change. Example: Internet Chess GUI - as long as you are playing the game, it's the server which updates the current game - when the game is finished you (and the GUI) get exclusive rights about editing and changing the game. You can also play without GUI, or just observe a game, etc... It's easy to see you can use a "lock" about the game (probably a pattern "ExclusiveObserver", or a SerializedControled) for avoiding you to edit a played game, but it's also easy to see that if you are managing a set of games.

      I don't see how. Memory management is about resource ownership, and that is very much related to the problem domain.

      I disagree. A problem domain *may* give a clear resource ownership model (so you are right in this sense), but then there is absolutly no proof that this model can hold if you are making changes which are still perfectly consistent with OO. This is especially a big problem if you want your design to scale. When your problem is complex enough or your program is changing fast enough, you have to use "interfaces" which are the anti-thesis of allowed object memory management (you may have references to several "interfaces" coming from the same object, and often no ownership - even if the object comes from a factory and you are actually the exclusive holder).

      No one prevents you to create an object with references to objects on one domain and with references to objects to another domain ; in fact you are encouraged to do so, if it fits the problem you are trying to solve (you are spliting complexity and reusing abstractions). And the references can be backwards.

      Manual memory management 1) gets in the way of architecturing properly your program (you have to use extra classes or extra responsabilities) 2) might need a overhaul if you are using your classes in a different contexts (ruining code reuse) 3) might need a overhaul if you are modifying your OO datastructures, or simply OO responsabilities.

      Example: if you are using objects which are for some reason organized as a tree, then the clear way is to have the parent to own the child. Suddenly you realize that it makes sense in some case to have an "acyclic graph" (i.e. shared children). Kaboom! You have to change to reference counting. Then some comes and use your objects (which do 100x times more than just being a tree, remember the program is scaling to more and more complex features), and holds references to your objects in some objects which are organized as a priority queue. That's ok, keep on using reference counting. Then someone, not knowing anything about how your objects are organized nor the second persons' objects are organized ever, just gives to your tree an objects which hold indirectly a reference to the priority queue: Kaboom! you now have a cycle. And why did this happen? It's because the third person had no idea of how your objects or the second person objects are organized, because they are encapsulated behind OO. More, the third person has NO BUSINESS, looking how internally the objects are used: she is just using the interfaces that are provided, and gives you an object providing a third interface (creating a loop). I agree that if you have only simple architecture, it's ok... but the bigger and bigger the program gets, the more and more indirect (unknown) references are going to happen.

      In this particular case, I'd suggest that the document should probably be managed by some other party.

      If the document has enough information, it is managed by itself. In the case of a chess game, it is a simple datastructure, which just vanish when no one is using it. The "other party" you are talking about is just an artefact built because there is no trivial memory management (ownership) possible. This is ok, but when you have 100 classes pointing at each other, it's not, your other party is going to have to know about the internals of the links. Add a reference from one class to another (even if it is just to make mostly superfluous stuff like statistics), and voila!, your other managing party (other parties) might need to be changed.

      In this particular case, I'd suggest that the document should probably be managed by some other party.

      It's useful if they are written/stored on disk ("do you really want to loose your changes?"), but again this is orthogonal... Document/View can be applied in situation when "Document" isn't a real document in the sense of "Book" or "2D Drawing", it can be has small as displaying one statistic in a corner of a 1 GB data structure updated in parallel by one object... If like the chess games, they aren't persistent, then there might be no such party.

      In any case, I don't see a document as a very strong candidate for a reference counted model under normal circumstances.

      Yes, but in OO, you only see the top of the iceberg... consider chess games again: an option might be to have an engine calculating some positions, and at the same time have a database check the current position in a chess DB to see if the position is know, and also to have a "sound" observer yelling "check" each time the observed position has check, and a endings database to check/compute if the result of the game is already known in infamous "table bases". The problem here, is that you probably want to reuse all your classes, for instance if you want to program a chess engine with no GUI (only program to program UI), but with a chess openings database/chess endings database, or a GUI with no server interaction but only the endings database (teaching mode), or a GUI which is only a view, when _computing_ the endings database, to report current status or debug. Or better a program that does all that based on command line arguments.

    22. Re:C++ by jaoswald · · Score: 1

      Look, you guys keep saying "ownership" as if it is the magical solution to memory allocation.

      If things were simple enough that you could define a clear policy of "ownership" and stick to it, then you wouldn't leak memory in the first place. Memory leaks happen because the ownership model was not specified clearly enough, or because it wasn't followed, because someone didn't understand all the possibilities that could happen at run time.

    23. Re:C++ by jaoswald · · Score: 2

      Man, this parent says it all. MOD UP!

    24. Re:C++ by elflord · · Score: 2
      Look, you guys keep saying "ownership" as if it is the magical solution to memory allocation.

      If things were simple enough that you could define a clear policy of "ownership" and stick to it, then you wouldn't leak memory in the first place. Memory leaks happen because the ownership model was not specified clearly enough, or because it wasn't followed, because someone didn't understand all the possibilities that could happen at run time.

      There is an ownership model, whether you know it or not. The difference is that C++ programmers are not ignorant of the fact that memory is allocated, and the "magic garbage collector" will clean it up. The garbage collector is far from magical. The model used in reobust garbage collection strategies is one of accesibility -- an object is considered "garbage" if and only if it is not accesible. This has some important consequences. In particular, you had better understand that if you want a resource disposed of, you need to render it inaccesible. If accesible objects are allowed to accumulate, you will get a memory leak in garbage collected software.

      Using garbage collection is not a license to be ignorant. Rather, it is putting to use one of the many strategies that can be used to manage memory.

    25. Re:C++ by elflord · · Score: 2
      That's true, but the "ownership" can change. Example: Internet Chess GUI - as long as you are playing the game, it's the server which updates the current game - when the game is finished you (and the GUI) get exclusive rights about editing and changing the game.

      That still doesn't require garbage collection. one could do it by using a dynamic policy object, or something like that.

      I disagree. A problem domain *may* give a clear resource ownership model (so you are right in this sense), but then there is absolutly no proof that this model can hold if you are making changes which are still perfectly consistent with OO.

      That's a pity, because garbage collection is a resource management model, which typically uses accesibility as the criteria for deletion. It is also possible to abuse it if one is ignorant of the way it works. In particular, if accesible objects accumulate, you have a memory leak. I think it's dangerous to view garbage collection as a sort of magic pixie dust that takes care of everything.

      That said, garbage collection is useful, and you've raised a few examples as to where one could benefit from it. Of course, one can use garbage collection in C++, just as they can use any other model (-;

      Re: your example, I don't see why this is a problem. You have the graph reference-count its own nodes. You certainly don't want to share nodes between different data structures, or different graphs. This will put you on a fast track to madness.

      And why did this happen?

      Because the programmers designed their data structures in bad faith ? (-; Just kidding. I can see your point, in that if you have relationships between objects sufficiently complex, garbage collection may be a good strategy. One obvious (though trivial) example would be a possibly cyclic graph where you don't want to nodes that are inaccesible from a base node. In fact implementing this policy manually amounts to implementing garbage collection. Other strong candidates for GC would be examples that have similar complex relationships between objects (directly or indirectly self referential data structures)

    26. Re:C++ by Anonymous Coward · · Score: 0
      That's a pity, because garbage collection is a resource management model, which typically uses accesibility as the criteria for deletion. It is also possible to abuse it if one is ignorant of the way it works. In particular, if accesible objects accumulate, you have a memory leak. I think it's dangerous to view garbage collection as a sort of magic pixie dust that takes care of everything.

      First note that you never need data you don't keep a reference to, so the only problem is not freeing dead objects. In any other language than C/C++ (in which there are unaccurate GCs which often require you to zero (NULL) the pointers you aren't using anymore), this is not a problem in practice. In OO, it will happen if you keep in a field, a reference to an object you don't need anymore. But then the alternative is worse ; in C++/C it's keeping a reference to an object you have freed - which is the perfect recipe for nasty hidden bugs, when another programmer will take over the code. Accumulating unneeded objects never happened to me a single time - and if it was a problem in practice it would have been easy to add to modern language compilers/VMs a debug option to see where is memory kept as an addition to profiling and branch coverage. So maybe garbage collection isn't a magic pixie but it's really 99.99% of a magic pixie (taking into account the probability that the catastrophy you fear).

      The real problem of GC is finalization ; i.e. freeing external ressources (like socket, file descriptors, connections to servers, ...). Finalization is hard enough, that often this need to be done manually, with the same problems as memory allocation ; and lead to the same solutions as you gave (like using ownership, or policy manager objects, ...).

    27. Re:C++ by Anonymous Coward · · Score: 0
      There is an ownership model, whether you know it or not.

      No. The best example is two objects pointing at each other, each needing the other but not managing it.

    28. Re:C++ by jaoswald · · Score: 2

      Look, if an object is accessible, it ain't garbage, it's sitting at the end of some pointer, which if you access, you'd better get valid memory.

      A "memory leak" is memory that is only accessible through the system's memory manager, but not through any pointers under program control. That is, the program has changed the last pointer that pointed to it so that it points somewhere else, without freeing it. It became garbage, but your program didn't realize it, probably because the "ownership" model made it look like it belonged to someone else. These leaks DO NOT HAPPEN under garbage collection, because the GC scavenges this memory when it is needed.

      "Memory leaks" where the memory isn't garbage aren't leaks. They are growing data structures in your program. Sure, if your data structures keep growing, you will consume more and more memory.

      Garbage collection is about removing the accounting errors that lead to true memory leaks, which means you can focus your human intelligence on figuring out what resources your program needs to solve the problem it is working on.

    29. Re:C++ by elflord · · Score: 2
      Look, if an object is accessible, it ain't garbage, it's sitting at the end of some pointer, which if you access, you'd better get valid memory.

      The problem is that a reference to an object might not be accesible to public member functions in that class. An example where this sort of thing is a potential problem would be a vector/array class. "Removing" an element from the end of the container doesn't necessarily involve deleting anything, it merely involves modifying a member variable. So you've got a reference that is being held, despite the fact that (a) the container is no longer using it, and (b) will not be released as a direct result of anything the user does. To make matters worse, the garbage collector reserves the right to clean up the container itself whenever it feels like it. This is not strictly speaking a memory leak, but it is a problem that occurs when containers do not release resources in a timely manner.

      Garbage collection is about removing the accounting errors that lead to true memory leaks, which means you can focus your human intelligence on figuring out what resources your program needs to solve the problem it is working on.

      Again, garbage collection is not a cure for ignorance on the part of the programmer. It's merely a strategy for managing memory that uses accesibility as the basis for determining whether an object is garbage. Moreover, since you're talking about resources in general, I hope you don't expect GC to automatically manage things like filehandles, network resources, references to CORBA objects, etc.

    30. Re:C++ by elflord · · Score: 2
      Accumulating unneeded objects never happened to me a single time - and if it was a problem in practice it would have been easy to add to modern language compilers/VMs a debug option to see where is memory kept as an addition to profiling and branch coverage. So maybe garbage collection isn't a magic pixie but it's really 99.99% of a magic pixie (taking into account the probability that the catastrophy you fear).

      Well, I only very rarely run into problems caused by unmatched new and delete. These are rarely problems in practice. 99% of the memory problems I get are dereferencing a NULL pointer as a result of not checking that an operation succeeded. I've never run into "cycle" problems with reference counts in C++ code, because I don't abuse reference counting (reference counting, if misapplied causes more problems than it solves, as you've pointed out)

      When you have GC, resource accumulation can occur if objects hold references that they are no longer using. There are cases where this can happen. An obvious example is an array implementation where removing from the back doesn't actually zero out the reference, so the array still holds on to the reference. More subtle and nastier examples include GUIs accumulating doodads (listeners, validators or whatever) that the user tacks onto a widget, and forgets about.

    31. Re:C++ by Anonymous Coward · · Score: 0
      Well, I only very rarely run into problems caused by unmatched new and delete. These are rarely problems in practice.

      In C/C++, I have problems with memory leaks - not freeing pointers. But the problem are not only the bugs, but also the tedious extra work of manually doing memory management.

      When you have GC, resource accumulation can occur if objects hold references that they are no longer using. There are cases where this can happen. An obvious example is an array implementation where removing from the back doesn't actually zero out the reference, so the array still holds on to the reference

      The implementations of the data structures of the non-C/C++ language do zero out the references in those cases, but I grant you this can happen if you are implementing yourself the data structures.

      Ultimatly what how much benefits you get with GC, and what problems you are avoiding. My life is so much simpler with a GC, I'd avoid by all means manual allocation ; I often use Java instead of C++ only for that reason (well not only, but that's one reason).

    32. Re:C++ by elflord · · Score: 2
      In C/C++, I have problems with memory leaks - not freeing pointers.

      What's this strange language called C/C++ that you are using ? If you really don't think the two are any different, maybe the problems are in part caused by the fact that you don't know how to use C++ properly. There's a big difference between using the occasional new/delete for a low level class, or for performance optimisation (which is what happens in C++), and having to manually allocate and free every string.

    33. Re:C++ by crealf · · Score: 1
      If you really don't think the two are any different, maybe the problems are in part caused by the fact that you don't know how to use C++ properly

      The two are different, but mostly the same with respect to memory management. You have automatic "crope"; but you could have the same in C. The problem is passing around objects in all directions, letting users of objects possibly keep a reference to them and still timely destroying them.

  55. Ok, now that I'm done laughing... by The+Waxed+Yak · · Score: 1

    ...I can honestly say you won't find any mainstream language that meets all of your criteria. Java is your best bet. The only things on that laundry list that it doesn't have are operator overloading and multiple inheritance. To be honest, since I switched to Java I haven't really missed either of those anyway. Install the JDK, Eclipse, and CVS, and you'll be one happy camper. Everything you'll ever need will be *free*, and most of it OSS at the same time. You can't beat that.

  56. Re: Programming Languages by xphase · · Score: 1

    You can do cross platform GUI building using the QT library. It supports all major platforms.

    --xPhase

    --
    The following sentence is TRUE. The previous sentence is FALSE.
  57. Smalltalk seems to meet those requirements by bons · · Score: 2

    just read this
    (It's not like I want to spend an hour pimping a language when there's a site devoted to it.)

  58. Sounds suspicious by igrek · · Score: 5, Funny

    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.

    1. Re:Sounds suspicious by fritz · · Score: 1

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

      No, it needs to be both black and blue... and that's what you'll be after the boss finishes shredding what ever impossible choice you make: black and blue.

    2. Re:Sounds suspicious by wilko11 · · Score: 1
      It sounds scarier than that. It sounds like the boss has just put every possible language "buzz word" into a list.

      In fact, by specifying a "simple GUI" and "operator overloading" he is asking for a car that is suitable for a learner, that can go 400 mph and has a steering wheel that may come off if you turn it the wrong way.

    3. Re:Sounds suspicious by zhensel · · Score: 2

      It's actually a rather clever scheme. This way, when our humble poster picks the sole language that meets the boss's demands and it inevitably fails, it is the poster who will get the firing. It's all part of the technique they teach you in Business 101 called "Responsibility Shifting." Look at Enron for a stellar example on a far larger scale.

  59. Can you tell us more? by davidsheckler · · Score: 1

    You say it must be object oriented with an easy to use IDE (and so on).

    What specifically do you want to do? Why does it have to be a GUI? Why OOPS? Maybe Python would be a good choice if you really need to get the app out fast, maybe you have other requirements that demand C++. Possibly a two language combo would be best.

    You have to consider the other developers also, are they able to code OOPS style or have they only done curses with C? You must consider their skills and learning curve.

  60. Cincom Smalltalk by mobydill · · Score: 0

    'nuff said.

    --


  61. Programmers make a language powerful by SuperKendall · · Score: 2

    Here's a thought - what langauge would your current programmers feel confident producing the final product in? Barring that, what do they want to work with? Happy programmers working in a familiar environment yield way more productivty than any langauge change will ever give you - even if that means F77 or SNOBOL (Ok, perhaps that's a little extreme).

    As for myself, I would choose Java as you can get the best features of MI through Interface MI, and I've always found operator oerloading to be overrated (though handy in some spots). But again, you should what best suits the situation and the people there.

    And here's a personal plea from users all over the earth - whatever you pick, please design the GUI to handle resizing correctly!

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
    1. Re:Programmers make a language powerful by Anonymous Coward · · Score: 0

      I agree with SuperKendall for lots of other reasons.
      This looks suspiciously like a boss leaving an out for himself for when the project starts to run over. Start thinking up justifications now for when you have to give an account of why you decided to write the project in c++ when you have all your programmers using VB.
      When the project has run over and there is no end in sight they will be looking for a sacrifice, and that my friend, will be you.

  62. How about Delphi? by Mysticalfruit · · Score: 1

    1. It's a OO programming langugage that's been around for a while and its mature.
    2. The GUI is sweet.
    3. It's cross platfrom (Kylix for linux)

    Go right ahead and flame me, I don't care :-P

    --
    Yes Francis, the world has gone crazy.
    1. Re:How about Delphi? by uradu · · Score: 2

      Since they're "open" to new languages (although, given the specificity of the requirements, it seems someone already made up their mind), Delphi would make a very good choice. They seem to want a good RAD IDE and OO, which are both a "check" with Delphi. It doesn't do gc, but then again, how many x-platform languages with operator overloading do? Many people tend to mean Unix (and often Linux) and Windows when demanding x-platform capabilities, and Delphi addresses both to a very large extent (except the few percent of non-x86 Linux machines). Plus, it's got real to-the-metal horsepower, as opposed to most gc'ed languages.

    2. Re:How about Delphi? by Anonymous Coward · · Score: 0

      Except for the huge executables it creates, it is useful for simple tasks.

    3. Re:How about Delphi? by jd142 · · Score: 2

      Depends on which version you are using. I've heard 6 made some huge executables. But you also have to know what to put in your uses clause. Take out what you don't need. Shoot, if you are willing to make the api calls, you can just put windows in your uses clause and you can get quite small apps.

      If there is one downside to Delphi is that it doesn't make it clear that you can remove things from the default uses clause if you don't need them. Someone just starting out might assume that everything there must be there. Not so.

      I'd pick Delphi too.

      The question that really matters is what languages the programmers know and how capable they are when it comes to using a new language if it comes to it.

    4. Re:How about Delphi? by headkick · · Score: 1

      I agree. Delphi/Kylix gives you cross platform compatibility, is a very nice human readable language, and sports the fastest compiler for x86 on the planet. Just be sure to turn on the "show compiler progress" option, or you might think that nothing happend. When I started working with Delphi, I stopped looking for anything else.

      Word of warning: If you plan on doing web development, stay far away from Web Snap (found in Delphi 6 Enterprise). Most people think it's crap. I tend to agree. Try IntraWeb from AtoZed Software

    5. Re:How about Delphi? by freddled · · Score: 1

      Useful for simple tasks ? This is fundamentally true statement but it is also useful for extremely complex and sophisticated tasks like - ahhh - helping make a £40M company a £500M company in 12 months. A pro can make it sing and make the exes small too. Sheesh. Simple tasks ! I wave my wad at you and taunt you again and again.

  63. Best answer by Xerion · · Score: 1

    I think the best answer depends on your boss' knowledge of CS. If he truly knows much about programming, you know he's fucking with you, (because he's asking for the world). If he's an idiot who only read about the buzz words, then you tell him to use C#, (because by the time he figures what if C# fits his requirements, you'd already have retired).

  64. Python....load, debugging, portable, what more... by CDWert · · Score: 5, Insightful

    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 :)

    --
    Sig went tro...aahemmm.....fishing........
  65. There is no perfect language... by cmowire · · Score: 2

    Just stick to a language that already works and has a following. C++ is a great bet because lots of people use it and there are plenty of tools out to support it.

    I gave up on the perfect language. Doing so is doomed to failure. Make it powerful, and you miss out on simplicity. Make it simple and you can't use it for much. Try to make a good balance for power users that fits your spec, and you'll end up with something that looks like a mix between C#, C++, Java, and Eiffel, slightly better designed, with different syntax and no actual support from anybody but the language creator.

    Plus, there are some who believe that no language is complete without functional programming and/or aspects. Some big and cool projects have been done using modern functional languages.

    Your best bet is C++ with a cross-platform GUI library like wxWindows or qt. If you want, you can try using one of the garbage collectors for C++ that's available and then you'll have most everything. Or you could just use bounds checker and manage your memory by hand.

  66. IDE?? by Mr.+Slippery · · Score: 1
    intuitive and easy to use IDE

    An IDE is not a feature of a language.

    advanced error handling;

    Define "advanced". Having done lots of C, and C++ pre-exception-handling, I think try-throw-catch is pretty neat...

    full support for operator and function overloading

    I think most people have given up on operator overloading - and for good reason. Once you've seen it abused, you'll never want to go near it again.

    --
    Tom Swiss | the infamous tms | my blog
    You cannot wash away blood with blood
  67. Perl Made this Post Possible by DonkeyHote · · Score: 1, Insightful

    Thank the good lord above for the creation of perl!

    RWD 2002, Fear the Retards for we are Legion

    xfbs fuif hfscj mt p guifo jhi u

    1. Re:Perl Made this Post Possible by Graspee_Leemoor · · Score: 2, Funny

      If Larry Wall is God, does that make Heidi Jesus?

      I really got to get out more.

      graspee

  68. Fugghedaboutit by The+Bungi · · Score: 1
    You can't have all that in one package. The closest you can get is managed C++ in .NET, where you can the CLR garbage collector but you do have some development constraints. I think the main sticking point is your requirement for MI... I mean, I've been writing C++ for close to six years now professionally and I can't remember more than one or two times when it was absolutely necessary (and I mean implementation MI, not just interface MI as in COM), or the problem couldn't be solved some other way.

    Also, keep in mind that the language is just one part of the equation. What about the underlying technologies? Application servers? Database APIs? In my experience those things factor in as much as anything else, along with the company or client's ability to support a system long-term that was developed using a given language. Many Wintel shops will not go for VC++ simply because it's a lot harder to find a decent C++ coder than VB or Delphi or whatever developers.

  69. What?Is?The?Project? by coltrane99 · · Score: 1
    When I've gotten assignments like this, it's because my boss is responding to a committee of managers above them who are creating all the non-task-related requirements.

    The way I've gotten through it is to find out what the project really is, and figure out what tool is best for the job, and figure out why the features not in that tool aren't needed for the project. Then my boss can get through the meeting where they have to present the technical solution.

  70. Not everything needs to be native to the language by kabir · · Score: 3, Interesting

    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.

    --
    Behold the Power of Cheese!
  71. Reeking Requirements by mirkayn · · Score: 2, Interesting

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

  72. Op overloading is more than syntactic sugar by Anonymous+Brave+Guy · · Score: 2
    Java lacks only operator overloading, which isn't really necessary. It is purely syntactic sugar.

    You try doing proper generics without it. :-)

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    1. Re:Op overloading is more than syntactic sugar by Anonymous Coward · · Score: 0

      naturally, you could say that classes are syntactic sugar - anything you can write in C++, you could write in C, for instance ;-)

    2. Re:Op overloading is more than syntactic sugar by querty_not_dvorak · · Score: 1

      Please explain why proper generics need operator overloading. It is a C++ thing or appliable to any language with generics, like Eiffel, ML, Haskell, etc.?

    3. Re:Op overloading is more than syntactic sugar by Anonymous+Brave+Guy · · Score: 2

      Generic programming essentially relies on having the same interface provided by any client types used by your generic function/type/whatever. In C++, this generality is achieved with templates. In other languages such as ML, it's implicit.

      Now, given that the interface to a typical integer type involves using notation like a+b or a-b to manipulate it, if you cannot write your own types to provide equivalent interfaces, you are hampering the writing of generic algorithms. The only alternative is to mandate that built-in types also support a.Add(b) or some such interface that can also be written into the interface of UDTs. Personally, I find that less natural, and more likely to be error-prone; is it sum a b, Add(a,b), a.AddTo(b) or some other function in this language? a+b is a universally understood and pretty universally implemented convention, so why break it?

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    4. Re:Op overloading is more than syntactic sugar by querty_not_dvorak · · Score: 1

      Oh, now I see it. The interface is just so obvious that I was thinking about something more peculiar, like the operators in STL. Thanks.

  73. Jesus Forking Christ by Snafoo · · Score: 3, Interesting

    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.

    --
    - undoware.ca
    1. Re:Jesus Forking Christ by dy_dx · · Score: 1

      first of all, this is not "Ask Slashdot," this is "Developers" (god the irony =)

      secondly, instead of complaining about the semantics of the question, why not focus on answering the interesting part? what features are good and why?

      i'd much rather read a (+5 Informative) "i'd have to go with built-in concurrency-related error-handling and here's why:" than an incorrectly modded (+5 Insightful) "I refuse to even attempt to answer your question because your boss is dumb and you should've asked it differently."

      i mean, i appreciate an eye for detail and everything, but it's becoming a trend lately to scroll through huge amounts of highly-rated nit-picking comments to find some of value to read / mod up.

    2. Re:Jesus Forking Christ by Anonymous Coward · · Score: 0


      Meine Sprache ist die Grenze meiner Welt.

  74. Features? by ebbomega · · Score: 1

    "If you were to design a language from the ground up, what features would you include and why?"

    I figure I'd address this question...

    Since I'm not really working in the industry as of yet, quite honestly, the one major feature I'd omit in my building a programming language (see... thing is I'd be doing this for myself so I could write programs and scripts for me and not really much else) is an overly elaborate stable GUI system, just on the basis that personally, I really prefer working at the command prompt level.

    Thing is this wouldn't really serve the general world at large too much... But so be it... Like I said, I wouldn't be really writing it for other people...

    I guess I got indoctrinated from learning to program via LPC and my graphing calculator... Heheh...

    --
    Karma: Non-Heinous
  75. UML first by xagon7 · · Score: 0

    I would choose Java. Specifically for Garbage collection and Multiple platform support. The multiple inheritance issue can be easily wrapped and simplified. I would first do a UML outline diagram of what EXACTLY you want, and find the language from there. I think you will find Java to suit your needs the best though.

  76. Ada by Anonymous Coward · · Score: 1, Informative
    Ada has all these qualifications except multiple inheritance, but considering Ada's powerful generic facility, you probably won't need it. Ada is perhaps the best available language for software engineering. It is fast, high level, yet easily allows low-level bit-twiddling if need be. GNU GNAT is the without a doubt the highest quality compiler in the GNU family of compilers. It is ISO certified, and must pass over 6500 regression tests before it is shipped. Several studies have shown that projects written in Ada lead the pack in fewest defects per 1000 lines of code, besting all comers.

    Here are some Ada links:

    1. Re:Ada by RussP · · Score: 1

      Yes, Ada is the correct answer. Give that man a cigar. Give everyone else a slap upside the head.

      --
      I watch Brit Hume on Fox News
    2. Re:Ada by Anonymous Coward · · Score: 0


      Hear-hear!

      My first job was for a dominantly Ada shop - both Ada83 and Ada95. We found the defect rate considerably better than C/C++. And Ada is truly meant to be cross-platform. It is especially good for junior developers - it has more safety nets. Something that compiles in Ada is more likely to be correct and not crash than something that just compiles in C/C++.

      And a word about multiple inheritence - I believe that Ada95 does actually offer it. But cases where it's really needed are very rare - especially in Ada's paradigm.

  77. Consider this... by illsorted · · Score: 1

    It is very doubtful that your entire program will need all the features named in this list. A better solution might be to develop your program as a set of components, which can be written in whichever language is suited for the purpose. However, this could present problems with the portability (until .NET for *nix is released ;).

  78. Ask your boss what he *really* wants. by Jered · · Score: 2, Informative

    Ask your boss what the project is going to do, and what it really needs out of a development environment, instead of just giving you a long list of buzzwords.

    The list of requirements he's given you reads like a job description that's been through the HR department. The first thing you do when responding to a job ad stating "Position requires at least 5 years C/C++, Java, Perl, and SQL experience on multiple platforms," is ask "What do you really want?" The same applies here.

  79. A Good Programming Language by Anonymous Coward · · Score: 0
    A good general purpose programming language:

    - Doesn't allow you to make dumb mistakes (i.e. doesn't let you assign an invalid pointer)

    - Allows you to catch errors as close as possible to the exact line number where the mistake was made

    - Allows you to write self-documenting code the reads close to English (this does not mean "natural language" just well-structured and logical)

    - Doesn't force you to reinvent the wheel.

    - Doesn't tie you to a specific platform (Note that Java ties you to the JRE, whereas C can be recompiled into any machine language, yet Java is more portable. Think about that.)

    - Either is garbage collected or has really good memory-leak detection tools.

    A good (again, general purpose) programming language lets you "think" about the task you are trying to accomplish and does not force you to think about implementation details.

    Not that implementation details aren't very interesting, but you don't get paid for doing implementation details, you get paid for the final, reliable, on-time product, regardless of how you developed it.

  80. Of course they're all missing something! by Jerf · · Score: 5, Insightful

    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.

  81. SpecTCL by bandix · · Score: 2, Informative

    If you're looking for good, portable, cross platform GUI development it's hard to go wrong with SpecTCL. It is a Tcl/Tk visual development environment which can generate code in Tcl, Perl, Python, Ruby, and Java. There are versions of SpecTCL available on Windows, Mac, UNIX and any other platform on which you can get a working Tcl/Tk environment. There is a related project SpecTix which appears to provide a more complete IDE, but I've not used it. I'm also really (really!) impressed with Apple's new IDE, Project Builder. If you've not seen a demo, you need to ask someone with a Mac running OS X to pop in the developer CD and try it for yourself. It allows you to do rapid application development to the Cocoa APIs in C, C++, Objective C and Java. What's cool about writing to the Cocoa APIs is that they're not only available on OS X, they're available on most UNIXes via the GNUstep implementation. I'd really love to get some time to find out just how portable Project Builder's resulting code is to other OpenStep implementations.

    --
    Brandon D. Valentine
  82. Some of those requirements... by Anonymous Coward · · Score: 0


    Some of those requirements seem a bit out of place. If you're at a stage where you're looking for a language to write a project in, why is operator overloading in the list of "must haves"? I can almost understand that multiple inheritance might be listed as necessary in such a case, perhaps if the entirety of the project exists as UML and whomever put that design together did something weird and required multiple inheitance. But still...

    You have language requirements which for a large part can be considered arbitrary. They're looking at the way the language is used as opposed to what it's used FOR. And while I know this is going to make me sound redundant, shouldn't your choice in language be on the requirements of how it runs, where it runs, or what it can run-- as opposed to how you would accomplish a given task in it?

    Why not toss in a requirement that the language must use BEGIN and END blocks instead of curly braces. Or require that it uses # for the comment character.

  83. Not a popular choice, but... by Stultsinator · · Score: 1

    Smalltalk seems to fit your criteria, and IBM has an IDE that can run on Linux (there may be others.) The real zinger in your requirements was that "multiple inheritance" thing.

    If you want the power of Lisp (it also satisfies your language requirements) with an IDE, checkout Franz's Allegro Composer

  84. Re:Operator overloading by Anonymous Coward · · Score: 0

    Regardless of whether operator overloading is a good thing, it's still purely a syntactic device. Having operator overloading does not make the language any more powerful. There's nothing you can do with overloaded operators that can't be replicated with similar amount of effort by other language features. It does make code look nicer if used properly though.

  85. Smalltalk by smalltalker · · Score: 1

    Does everything in the list except multiple inheritance - and prompts the question of why that is needed? And the broader question, that others have asked, why spec the language rather than the requirements? Note my obvious bias, and check this news site: http://www.whysmalltalk.com

    --
    Steve Cline http://www.clines.org, http://www.objectbap.com
  86. Well... by cliveholloway · · Score: 1
    You looked at C++ twice, so maybe your subconcious is trying to tell you something...

    cLive ;-)

    --
    -- Trinity in high heels carrying a whip: The donimatrix - there is no spoonerism
    1. Re:Well... by jstott · · Score: 1
      ComplexNumber a, b; a^b

      You don't use complex numbers for real work very often do you?

      I want to see this as a.power(b) because if the program is misbehaving, it's almost certainly due to the branch cut that you inevitably have to deal with for complex argument b. Even non-integer negative real-valued b is multi-valued and saying "just return the value in the upper half plane" is good for at least 3 days of debugging for the next poor sod that has to use that code.

      Operator overloading is useful. Operator overloading without sufficient thought ahead of time is a disaster.

      -JS

      --
      Vanity of vanities, all is vanity...
  87. you're starting off wrong... by demian031 · · Score: 1
    you need an intuitive IDE? go with M$ full bore, after that statment i think you guys deserve each other.

    operator overloading is really important? so
    this + that
    is so much better than
    this.add(that) ?
    multiple inheritance is really important?

    i really question your approach to this? we don't even know the domain, is it engineering, text-parsing, web-based, server-side, client-side, both?

    how about if you find a solid, proven language with a lot of momentum. python or java come to mind.

  88. Is this a troll asking slashdot ? by UncleFluffy · · Score: 1

    Certainly looks like one to me.

    I think I'll submit an ask-slashdot: "I'm looking for a new editor. Which should I choose, vi or emacs ?"

    Duh.

    --

    What would Lemmy do?

  89. Well Cliff by scott1853 · · Score: 2

    He's not asking what WE'D like in an IDE, he needs something that already has all those features, and I don't think the project he's talking about is writing a new language/IDE.

    But to answer the real question as best I can, I can't think of anything that has all those features. But what I'd do if I were you, is to rank the importance of each of those features as it applies to the upcoming project.

    Based on my experiences, I'm quite happy with Delphi. It doesn't have multiple inheritence or operator overloading, but it does have function overloading at least. These features aren't generally show stoppers though. I haven't tried Kylix yet so I'm not sure how smooth the transition would be to linux.

    In any case, what it comes down to is just pick an language. They ALL have shortcomings and nuances that will take time to learn and overcome if you aren't already familiar with them. So just pick something, code some sample projects, possibly code a prototype of your project if time persists. You can always use this as a chance to learn something new to add to your resume.

  90. Well, you've done your homework... by mystery_bowler · · Score: 2

    ...and you're right, none of those programming languages will fit all the bills.

    I haven't been programming as long as some, but in my experience I've never come across a particular programming language that covers all the bases. You might be better off deciding which of your specifications is of the highest priority before giving weight to any language.

    Also, since no one programming language fits all these specs, you might want to start documenting (or digging up documents) on which ones support the most of your specs.

    Just from what you've asked for here, I'd say you're asking more for something like C++ than VB/VB.NET. You've thrown "simplified GUI design" into your specs, and, aside from Java, that's almost always anti-portability. Assuming you go with the most widely-used simple GUI language, VB, you're pretty much locked into MS OS's. Since OS-lock-in seems to be a polar opposite from what your other specs aim for, I'll say you don't want to use VB.

    Ruling out the simplified GUI design as the highest priority, I'd say you're best off with C++ or Java. There are C++ compilers and Java Virtual Machines for a variety of platforms (that's an understatement). I lean towards C++ - what with it's pointers, truly compiled code, etc - but that's mostly personal preference. I've got some experience with Java and I've got mostly good things to say about it. But all my C++ apps have outperformed my Java apps, so the optimization geek in me leans to C++.

    --

    My sigs always suck.
  91. Hold your horses! by Hard_Code · · Score: 5, Insightful

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

    --

    It's 10 PM. Do you know if you're un-American?
  92. Be careful what you wish for by pb · · Score: 2

    It sounds like C++ and/or Java is your best bet based on the list of requirements, and what your boss probably wants. However, how important are each of these items? Different languages have different levels of support for all of these, and different ways of accomplishing the same tasks.

    For example, garbage collection in Java or Perl is generally not very good compared to a modern Lisp / Scheme interpreter. C++ has templates, while Scheme has functions as a first-class type. Scheme and Perl have closures, which can be used to build complicated object-oriented systems from the ground up, while Java has inner classes, which is not quite the same ...

    Also, please realize that object-oriented programming, multiple inheritance, garbage collection, and operator/function overloading are all very powerful language features that require careful design and consideration to use correctly. There are times when each of these is a massive help to the programmer, and there are other times when they can each create intractable messes.

    So figure out why you need each feature, and what its role is in the project, and if you could use other language features to fulfill the same roles. The language you're looking for probably doesn't exist, and even if it does, there's no guarantee you'd want to use it.

    Also, if you really want this (imaginary) language, I'm sure you can write it in C; that's what they do for all the other languages I've mentioned. :)

    --
    pb Reply or e-mail; don't vaguely moderate.
    1. Re:Be careful what you wish for by dubl-u · · Score: 2

      Also, please realize that object-oriented programming, multiple inheritance, garbage collection, and operator/function overloading are all very powerful language features that require careful design and consideration to use correctly. There are times when each of these is a massive help to the programmer, and there are other times when they can each create intractable messes.

      And worse, developers who are learning the language as they go will try to use all the cool features all over the place, making an unmaintainable mess.

      If your developers only know COBOL, you'd be much better off sticking with that then turning a bunch of COBOL developers loose with C++ or Perl. And if your developers already know, say, Java, then making them switch to C++ just to get multiple inheritance is boneheaded.

      The original poster's team should stick with what they know. Or if they are looking to make a switch, they should spend three months on a scratch project. One way or another they're going to have to learn they new language well, and a production system is a dumb place to practice.

  93. C++ with a couple of libraries by Henry+V+.009 · · Score: 2
    If you are really serious about those requirements, C++ may just be the only language that will cut it for you. Grab a couple of add-on libraries and get to coding. If you don't have the time to really master a language, then go with Java, but don't expect to do anything where you really need to use either the intricicies of either the langugage or the computer, because you will run into problems with Java. C++ will trip you up too, but in Java, you will find that the problems will be harder to fix.

    Oh and here is Why Java will always be slower than C++

  94. Also look at Delphi/Kylix (Object Pascal) and Perl by ddkilzer · · Score: 5, Insightful

    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.

  95. HTML? by Anonymous Coward · · Score: 0

    HTML?

  96. Prioritize Your List by puppetman · · Score: 1

    And pick the language that best supports the most important criteria.

    - "intuitive and easy to use IDE" - this depends on the industry around the language. Java has more than most languages - NetBeans (based on Forte, which is Sun), Eclipse (Open Source, by IBM), Intellij, Visual Cafe (Symantec, I believe), JDeveloper (Oracle/Borland), Visual Age (IBM) - all by big companies

    - "simplified GUI design and event handling" - Java has clean event handling and GUI design, and implements most of the design patterns that the software gurus talk about

    - "advanced error handling" - Java has great exception handling

    - "advanced object oriented design including multiple inheritance, abstract classes, and garbage collection" - Java has all that except multiple inheritance (Gosling considered it, but found that it was under-used, and was evil); there are work-arounds for multiple inheritance

    - "full support for operator and function overloading" - Function overloading, sure, but not operator overloading. There is talk of this in an upcoming version (via templates)

    - "portable (at compile-time) across various platforms" - Java's bread and butter. We use compile once, run anywhere - we build in Linux, push to Solaris and Windows 2K. I build .jar files under windows 2k that go to Linux. We use most if not all of the features of Java (JSPs, EJBs, Servlets, standard Java, and have yet to have a problem).

    You should also add to your list - good networking support (Java has it), good server-side and client side (Java is better at the server side), good web-based support (Java is OK - I don't like JSPs or PHP, etc - CURL is the best IMHO).

    Where does Java fall down? It doesn't tie in to the host OS with enough depth. Also, because you require a JVM, you are saddled with your bugs, plus the bugs that exist in the Virtual Machine.

    Still, my choice of a language if you don't need to squeek the most out of every CPU cycle (and most don't).

  97. Backwards priorities. by abigor · · Score: 1

    Isn't this like saying, "I want to build a car. I haven't defined what this car is or what its performance should be, or even any of its requirements. But all of the tools I use should be purple, and have a lot of snap-on components."

    Choose the best tool for the job -- but first, figure out what the job is.

  98. Attack of the arbitrary masturbatory criteria by brenfern · · Score: 1

    Why, given a new project, should your boss focus on language features? Much time is wasted masturbating over the technology used rather than how it is supposed to actually solve business problems. I would advise you to tell your boss where to stick his feature list, and concentrate not on language wars but how to provide the best solution in a pragmatic, cost-effective and timely manner.

  99. Why do you need all of these language features? by Anonymous Coward · · Score: 0

    Quite frankly your boss just sounds like he selected a list of buzzwords from a trade magazine and compiled them into a "the language we pick needs this". What you, or someone needs to do is prioritize the needs of the project and
    pick a language based on that instead of a laundry list of "requirements". All the things
    you listed are nice and all, but which do you really _need_, and which are just nice. Do you need operator overloading with the same urgency you need code maintainability and being able to find programmers that can code whatever language you pick? Garbage collection is nice, but it tends to slow things down a bit. Do you need top-notch performance more than you need garbage collections? There are trade offs to be assesed, and it doesn't sound like you've done that. These are the kinds of questions you should be asking.

  100. Re:Operator overloading by RevAaron · · Score: 3, Insightful

    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.

    --

    Working toward a usable PDA environment in the spirit of Newton OS: Dynapad
  101. Fake situation! by sitturat · · Score: 1

    This situation is obviuosly fake. The author is just trying to stir up a debate about which is the best programming language.

    Why would you boss ask you to find a language that supports multiple inheritance? If he knows what advantages multiple inheritance brings to the project, then surely he can quickly choose a programming language himself.

    Anyway, how many managers have got a clue about the pros and cons of multiple inheritance?

    1. Re:Fake situation! by Graspee_Leemoor · · Score: 1

      "Why would you boss ask you to find a language that supports multiple inheritance?"

      Well maybe some really highly-paid guy in the company already specced the class library out in UML or something- we just don't know, do we?

      I find it weird, by the way, that I am a big fan of multiple inheritance, and yet all of the languages I can think of that have it are real bondage-and-discipline types. (C++ and Eiffel spring horridly to mind}.

      graspee

  102. Why multiple inheritance? by Anonymous Coward · · Score: 0

    I really like the "don't constrain the programmer" philosophy of C++/Perl, but personally I've never found multiple inheritance useful. OTOH I /have/ found single inheritance useful (any class you write automatically get's a certain set of methods, typically useful for debugging).

    You may want to look at case studies of apps similar to the one you wish to develop and see what they used. Weigh the pitfalls/advantages others have already encountered.

    Without knowing whether you're writing web-based or desktop I'd say consider:
    - Ruby
    - Python
    - Java
    - Maybe C++ (but no garbage-collection will hurt development time)

    That would be the order I'd consider them personally...

  103. Ultima Lingua by WebBug · · Score: 1
    intuitive and easy to use IDE;
    To whom? My 6 yr old niece?
    simplified GUI design and event handling
    GUI design? AFAIK that is not a language feature but an IDE feature, which are available for pretty much any language. My favourite IDE is elvis . . .
    advanced error handling
    compared to what? C has excellent error handling, if you can program.
    advanced object oriented design including multiple inheritance, abstract classes, and garbage collection
    We use Laidlaw for our garbage collection and we always design our programs BEFORE we code them. In fact, by the time the design process is done, the C code is usually pretty darned easy to write.
    full support for operator and function overloading
    And you absolutely need this because. . . ?
    and portable (at compile-time) across various platforms
    at least this one is easy to answer: POSIX C.
    --
    Later . . . . . . WebBug // I don't really have 8 arms but . . .
  104. wxPython by tankrshr77 · · Score: 1

    Python is certainly cross platform, and the wxWindows gui port to it provides a cornicopia of functions that are available in that application-framework.

    http://wxpython.org/

  105. Why not both C++ and Java??? by Koldark · · Score: 1

    Why not do both? Java has a portable GUI. And C++ if properly written can do the back-end.

    --
    Mike http://thenextgenerationofradio.com
  106. I would assume not... by gartogg · · Score: 3, Insightful

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

    --
    I'm a concientious .sig objector.
    1. Re:I would assume not... by jc42 · · Score: 1

      Impossible criteria? Hmmm ... I don't seem to see any subset of the requirements that couldn't be in one language. Granted, I can't think of a language that does them all, but that's not what "impossible" means.

      What specifically points in the stated requirements aren't possible in the same language?

      --
      Those who do study history are doomed to stand helplessly by while everyone else repeats it.
    2. Re:I would assume not... by Anonymous Coward · · Score: 0

      > Impossible criteria? Hmmm ... I don't seem to see any subset of the requirements that couldn't be in one language. Granted, I can't think of a language that does them all, but that's not what "impossible" means.

      If all the submitted language requirements are required, then subsets aren't good enough without a discussion with the boss. That's what "impossible" means.

      > What specifically points in the stated requirements aren't possible in the same language?

      Java, for example, doesn't do full MI, only base class + interfaces.

      I'd also argue with "intutive and easy to use IDE" being possible in any language; I haven't used *any* that didn't require a learning curve to get acquainted with their peculiarities/limitations - some of which are not obvious on first usage.

    3. Re:I would assume not... by Anonymous Coward · · Score: 0
      ok, elsewhere I defended your original use of the word impossible as being fully consistent with what is in the dictionary. but I do need to take exception to your use of the word cluster "learning curve". Learning curves refer to how much easier it gets to do something with experience. steep learning curves imply a lot of learning with each new experience, or "easy to learn". shallow learning curves imply "hard to learn" or "little can be learned". but, you have to have a learning curve even if it is totally flat as you seem to imply this is.

      I agree with your on-topic point, I just object to your use of learning curve.

    4. Re:I would assume not... by Tsujigiri · · Score: 2

      I thought it was the other way around.

      I thought that a steep learning curve meant that getting the basics was tough but once over that, it got easier, and a shallow learning curve meant that doing simple things was easy and intuitive, but more complex tasks were harder.

      Damn it!!!!!!! The lameness filter clears won't let me post my text charts!!!! BASTARD!!!!!

      *Sigh* oh well. Anyway I could be wrong, perhaps it's just the mental association with steep->hard shallow->easy.

      --

      "I'll take the red pill. No! Blue! AAAaaaahhhhhhhhh"
      - Monty Python meets the Matrix

  107. UML. by Stupid+Dog · · Score: 1

    Before you don't even have a clue WHAT EXACTLY you want to program...

  108. Forget it by Acheon · · Score: 1

    Your boss gave you requirements that only the programming languages in Star Trek can match.

    --Martin

  109. Use C by Anonymous Coward · · Score: 0

    First of all, if you want portability, C is the only way to go. C is a mature language with a mature standard. Other languages, such as Java and C++, have such convoluted and (in Java's case) nonexistant standards that you basically end up being tied down by whatever development tool you choose. Have you ever been able to take a nontrivial piece of C++ code (that uses exceptions, templates, namespaces, etc.) and recompile it using a different tool with no modifications? I didn't think so. Good C code, on the other hand, can be moved from platform to platform with the greatest of ease, so long as it adheres to ANSI and POSIX standards.

    As far as OO goes, C is not the easiest language to do OO in, but it can certainly be done (look at the GTK+ framework for an example.) You have to jump through a few more hoops to do it, but basically all it amounts to is a few pointer casts. If you do that, you've got far more power and flexibility than C++ or any other "OO" language can give you. If you've ever wondered why KDE/Qt is so much slower than GNOME/GTK+, it's because the former is written in C++ (slow) and the latter is written in C (fast.)

    Python? Perl? I hope the people suggesting these are not serious. Perl is a fine language for doing text processing, and Python works okay for prototyping, RAD, and dog-and-pony shows, but I think he's looking for a production-quality language here. I don't have anything against Python other than the fact that it is dog slow. A Python app on my 1.4 GHz P4 runs at about the speed of a comparable C app on my old 133 MHz Pentium. You might want to look at Python is speed is not a consideration, but otherwise, stay far far away.

    Bottom line is that C is the most established language for a reason. It is fast, reliable, and as long as you know what you're doing, safe. There's a reason why the Linux kernel is written in C and not C++ or Python. If it's good enough for Linus, it should be good enough for you.

  110. YOUR BOSS IS AN IDIOT by Anonymous Coward · · Score: 0

    The primary criteria is that there exists a local
    engineering pool for the language chosen. The
    programming language 'concurrent euclid' might
    be great but if you can not hire anyone who knows
    it, don't even think about it.

    First, get a manager who knows something about
    hiring engineers.

    1. Re:Your boss is an Idiot by KidSock · · Score: 2

      Nicely put.

    2. Re:Your boss is an Idiot by scottt · · Score: 1

      This is the only possible explanation, and the first one that came to mind when I read the list of requirements. Your boss probably has enough technical background to know buzzwords, but not enough experience to know which ones matter.

      If you knew what _business problem_ you were solving, these requirements would be irrelevant.

      --
      you don't need a weatherman to know which way the wind blows.
  111. Revise your set of criteria by Anonymous Coward · · Score: 0

    The set of criteria is just wrong, i.e. its worded such that you pick the solution that he already picked for you. (Visual C++ from the list).

    Instead, the manager should focus on the business features that the language should have:
    - RAD features
    - easy to maintain and read
    - produce high-quality code (high availability, high speed, etc.)

    From the above list, I'd suggest Java if you are creating a client/server with a web based UI. Otherwise use C# if you can convince someone to buy a version 1.0 product from Microsoft.

    I'd stay away from Microsoft C++, Unix C++ is good and with toolkits like Qt or Gtk it's also good as a RAD tool (make sure you use Garbage collectors libraries with your C++ programs).

    I don't know much about Python and the rest in terms of how good their IDE is to generate GUIs.

    Phil

    PS I like C#, but I can't get my bosses to get us to develop something in it until the industry decides to buy it too. Chicken and egg ;)

  112. Common Lisp by entrox · · Score: 5, Interesting

    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. The other choice would be LispWorks, 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.

    --
    -- The plural of 'anecdote' is not 'data'.
    1. Re:Common Lisp by Anonymous Coward · · Score: 0

      I agree. Common lisp does have all the features he asked for. Once the boss see's the solution, he'll probably add another requirement: "no run-time licences" which means that the versions of lisp with the neat GUI are out :/

      As for redesigning a language from the ground up, one could use the scheme core (the new "refined" lisp) and add all the libraries to that. That's a important part of a language. The first part "having a minimal number of commands which you can easily do anything with" makes it clean. The second part is having a big library, with hooks into every known thing in the world. That makes it usable.

      Scheme has the best semantics, C has the most hooks, And there are tons of languages in between.

      Corey

    2. Re:Common Lisp by Patrick+May · · Score: 2, Interesting
      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.

    3. Re:Common Lisp by jonis · · Score: 1

      > The only language system in my experience that meets all of the specified criteria is Common Lisp with CLOS.

      As if there was a Common Lisp without CLOS.

    4. Re:Common Lisp by warpSpeed · · Score: 1


      Isn't the lisp GUI implemented in AutoCAD? or is it the other way around?

    5. Re:Common Lisp by hding · · Score: 2
      Once the boss see's the solution, he'll probably add another requirement: "no run-time licences" which means that the versions of lisp with the neat GUI are out :/

      As the original poster mentioned, Lispworks has this (in fact either CLIM or Lispworks' own CAPI) with no runtime fees for Linux or Windows (these were dropped when version 4.2 came out)

  113. Trick question? by Anonymous Coward · · Score: 0

    I think your boss is having fun at your expense :) Seriously, that is a bunch of requirements you're asking for, I'd even dare to say conflicting requirements. I will not recommend any language because I'm a Java fan and would probably try to fit the requirements into the language and not viceversa.

  114. Visual Fortran#.NET ++ by nomadicGeek · · Score: 1

    Honestly though, this seems like a silly way to deteremine language requirements.

    If you are a computer science professor, the list sounds great. In the real world you are a little more limited.

    JAVA and .NET (C#, VB.Net, managed C++) do not support multiple inheritance. It would be nice to have but it is a bitch to implement in the VM's so it was put off. In practice you will find that most of the languages available are compromises between the ideal language and what can be implemented in an economical amount of time.

    I would base my decisions on other issues. What are you developing for? server or workstation? Is this a Windows, Unix/Linux, or other type of platform. If this is going to run in a Windows environment then it doesn't make much sense to go with anything other then Visual Studio. If this is a server based Unix system then start looking at IDE's for JAVA development.

    I would stay away from obscure languages and language implementations. You will find more bugs in the compilers, IDE's, whatever. Support will be more limited and most importantly no one else will know what the hell you are talking about. C++, JAVA, VB, etc all have large developer communities. You are more likely to find help on the net and it will be easier to hire experienced developers.

  115. Java Interfaces by carbon60 · · Score: 1

    I don't know about operator overloading. But Java provideds the concept of Interfaces, which is far more porwerfull that Multiple Inheritance, IMHO.

    --

    --
    Adam Sherman
    Freelance Geek
    1. Re:Java Interfaces by _avs_007 · · Score: 1

      Implementing Interfaces and Inheriting Classes are completely different.

      I'm not saying one is better than the other, but these are not the same...

      Interfaces are basically abstract classes in a C++ sense. You can implement as many of those as you want in Java, but you aint getting any implementation with them... Which is kinda important sometimes...

    2. Re:Java Interfaces by __past__ · · Score: 1
      The whole idea of interfaces, to me, seems to be due to the fact that you don't have callbacks in Java. This, of course, is stupid: Why can't I say "OK, you performed an action, so call this function" instead of "OK, if you insist on it, I will call my method 'actionPerformed'"?

      As for operator overloading in Java, it works, as long as you are a Sun employee. There is exactly one overloaded operator, "+" for Strings.

    3. Re:Java Interfaces by Anonymous Coward · · Score: 0

      Operator overloading can be done (sort of) through tinkering with the JVM. Its messy, its ugly, but it is doable. See "Java Virtual Machine" from O'Reilly

    4. Re:Java Interfaces by dnoyeb · · Score: 1

      Fail to understand you. You certainly can conditionally call methods in Java. Could u b more detailed?

    5. Re:Java Interfaces by __past__ · · Score: 1
      You cannot tell a Swing-Button something like "If you get pressed, please call the method "doSomething" of this object" - you have to implement an Interface that forces you to chose meaningless names like "actionPerformed".

      Even in C this can be avoided with function pointers. However, in real languages (heck, even in JavaScript!), functions are just another data type that can be freely passed around - and in really good languages, even be passed around partially applicated.

      Say you have a function add(a, b) { a + b }. In a functional language supporting currying, you can say "let add_one = add 1" (or "add_one = add(1)" in C-style syntax). You can now take this newly generated function and store it in fancy data structures, call it when you feel like it, or pass it as a callback to a button. Try that with Java.

      (Side note: There is a language extending Java to support functions as data - it's called Pizza. Try finding it on Goole :)

    6. Re:Java Interfaces by Decado · · Score: 2

      You most certainly can tell a swing button to do that. Look at the Method class of the java.reflect api. Hell in java you can specify the name of the method and java can go find it for you. Check out java.reflect.Method and its all there for you.

      Just because you don't know how to do it in java doesn't mean it cannot be done. You can do what you say runtime in java. I.e. prompt the user for the name of the class, the name of the method and the paramaters and pass them. Try doing that with C++.

      --

      Slashdot: Proof that a million monkeys at a million typewriters can create a masterpiece

    7. Re:Java Interfaces by Decado · · Score: 2

      One last thing:

      int add_one(int n) { return add1(1, n); }

      Is that really so hard to do?

      --

      Slashdot: Proof that a million monkeys at a million typewriters can create a masterpiece

    8. Re:Java Interfaces by Decado · · Score: 1

      Mutter, meant java.lang.reflect api.
      To make ammends for my mistake here is a simple example

      class ReflectionTest
      class Callee
      {
      void method() { System.out.println("method called"); }
      }

      class Caller
      {
      void callMethod(Callee c, String method)
      {
      Method m = c.getClass().getMethod(method, null);
      m.invoke(c, null);
      }
      }

      public static void main(String[] args)
      {
      Callee cee;
      Caller cer;
      cer.callMethod(cee, "method");
      }
      }

      And there you go, reflection at its finest.

      --

      Slashdot: Proof that a million monkeys at a million typewriters can create a masterpiece

    9. Re:Java Interfaces by Anonymous Coward · · Score: 0

      Easily done with library loading. Just because you don't know how to do that in C++ doesn't mean it can't be done. :)

    10. Re:Java Interfaces by Decado · · Score: 1

      Touche, for what its worth I have done similar in C but it was messy, simple rule of thumb is if you want to do anything badly enough in any language then you more than likely can. Only difference is how easy or hard that language will make it for you.

      I'm pretty sure doesn't allow you to directly use the function name as a string as a paramater though. Granted you can always fudge your way around it. But I would be surprised (and very interested in finding out more about how to do it) if you can do the full equivalent of javas reflection in C++ without having to fudge a lot of stuff.

      --

      Slashdot: Proof that a million monkeys at a million typewriters can create a masterpiece

    11. Re:Java Interfaces by Anonymous Coward · · Score: 0

      you definitely can do callbacks in java. fud spreaders, of course, would have you think you can't. also, multiple inheritance is stupid in real object-oriented design. you want to inherit *behavior*, not code. java gets this right, although again fud spreaders make a big deal out of saying java gets it wrong.

    12. Re:Java Interfaces by harlows_monkeys · · Score: 2

      Interfaces are a subset of multiple inheritance, so they cannot be more powerfull.

    13. Re:Java Interfaces by __past__ · · Score: 1
      No. But, to see the difference, look at the STL.

      It's not hard to create, say, a list or set for any type you need. But it's way better if the language supports it generically.

    14. Re:Java Interfaces by __past__ · · Score: 1
      you want to inherit *behavior*, not code

      Um, code usually is what specifies behaviour. In Java, I inherit method names.

    15. Re:Java Interfaces by kevinank · · Score: 2
      Interfaces are a subset of multiple inheritance, so they cannot be more powerfull.

      Sometimes less is more. Having spent about 5 years writing and designing in C++, and about 3 in Java I tend to agree with the previous poster -- Interfaces are a more useful concept than MI. MI more often gets you into problem situations, and C++ MI doesn't express the Java concept of Interfaces nearly as cleanly as Java does. Java strongly encourages the programmer to seperate interface from implementation; C++ programmers think that they've already done that by writing a header file, but headers in C++ aren't nearly as easily extended as a Java Interface.

      Not that I think Java is a perfect language by any means. Personally I think that whoever put garbage collection in the language should be roundly chastised by the thousands of programmers who've had to go hunting for memory leaks, but that is another story.

      In all I'd guess that the Manager in question was asking the engineer to pick 'any language so long at it is C++'.

      --
      LibBT: BitTorrent for C - small - fast - clean (Now Versio
    16. Re:Java Interfaces by Tattva · · Score: 3, Informative
      The whole idea of interfaces, to me, seems to be due to the fact that you don't have callbacks in Java. This, of course, is stupid: Why can't I say "OK, you performed an action, so call this function" instead of "OK, if you insist on it, I will call my method 'actionPerformed'"?

      Several other people have addressed the issue of callbacks, but I am interested in talking about your assertion that interfaces are only for callbacks. Interfaces are contracts that are at the heart of polymophism, a client doesn't care "what" your object is as long as it provides the services you need.

      Others may disagree, but in my opinion, multiple inheritance in C++ is the result of confusion between polymorphism and reuse on the part of the language developers. If you want to reuse multiple objects and also provide similar services to two or more of those objects it is much clearer to the observer of your code if those parent classes implement interfaces describing their services and you include instances of the classes you need as private member variables and you delegate to those private member instances in your implementation of the interface methods that you need to provide.

      I think this is much better than having tons of confusion over similar method names with grossly different semantics, figuring out which parent class a virtual method is tied to, dealing with virtual vs non-virtual inheritance, and the tons of other things that make deciding through inspection who exactly implements the bar() method on your class foo next to impossible without having 4 monitors.

      --
      personal attacks hurt, especially when deserved
    17. Re:Java Interfaces by thomas.galvin · · Score: 1

      I think this is much better than having tons of confusion over similar method names with grossly different semantics, figuring out which parent class a virtual method is tied to, dealing with virtual vs non-virtual inheritance, and the tons of other things that make deciding through inspection who exactly implements the bar() method on your class foo next to impossible without having 4 monitors.

      Make every function virtual, which Java already does, and force a class to 1) implement a function itself, or 2) specify which parent to call from if an identical function is found in 2 or more parents. No more triangle problem.

    18. Re:Java Interfaces by Anonymous Coward · · Score: 0

      The point this guy is trying to make is that you can't pass the add_one you just defined as an argument to anything.

      You can get around it by declaring an interface int_arrow_int then having both add_one and add1 implement that interface.

      Which is an annoying kludge (turning a single line in a functional language into several java classes, each of which may need to be in its own file depending on circumstances), but it it's less of a kludge than anything involving Reflection...

      Worthwhile to mention that C++ may have function pointers, but they don't point to C++ methods--just C functions.

    19. Re:Java Interfaces by Anonymous Coward · · Score: 0

      whoa, settle down dumbass. A better solution would be tinkering with the compiler & language syntax to support operator overloading. You do understand the concept of operater overloading, don't you?

      Anyhow, tinker with the javac compiler to get rid of the queer javaisms, so it's more like compiled C running on a VM. Or just use .net.

    20. Re:Java Interfaces by lovedog · · Score: 1

      Treating functions or methods as data is called procedural attachment. It may be powerful but it is also the cause of a many security flaws and one of java's most touted features is it's high level of security. Try finding a buffer overflow problem in java...

    21. Re:Java Interfaces by Ozx · · Score: 0, Funny

      Try finding a buffer overflow in OCaml without telling the compiler to disregard safety...

    22. Re:Java Interfaces by God!+Awful · · Score: 2, Insightful

      I program mostly in C++ but I've done a bit a Java. I found the main problem with Java was the amount of glue code I had to write. Glue code is the programming equivalent of paperwork. It's boring and mindless, but necessary if you want to stay organized.

      C++ requires some glue code in order to get good modularity, but in Java the bloat is ridiculous. Having to create a whole new wrapper class just to simulate the effect of a non-const pointer!?

      Interfaces are a good feature. I've implemented the equivalent in C++ using either multiple inheritance template classes, but Java interfaces are cleaner (and safer). However, as before, the glue code puts a burden on the programmer. I found myself giving up on code reuse because the burden is just to high.

      After declaring an interface which accepts a listner and another which acts as a listener, it occurs to me that I used to write a callback function to do this in one tenth the time, and at no expense to modularity.

    23. Re:Java Interfaces by lsdino · · Score: 1

      And how well does this perform? Or rather should I ask is this the type of thing you want to throw into an inner loop of an O(n^2) algorithm?

    24. Re:Java Interfaces by Anonymous Coward · · Score: 0

      Reflection is one approach to this problem (as many others have already explained.) Another approach is to use anonymous inner classes:

      button.addActionListener(new ActionListener() {void actionPerformed(ActionEvent e) {myFooFunction(e);}});

      Its kind of longish, but the intent is straightforward once you understand the syntax: an arbitrary "myFooFunction" is called with the ActionEvent when "button" is pressed...

    25. Re:Java Interfaces by Anonymous Coward · · Score: 0

      oh good god. get a clue.

    26. Re:Java Interfaces by coflow · · Score: 1

      It seems to me that you misunderstand the use of interfaces. It is not to compensate for the lack of callbacks... Here is a prime use of interfaces. Suppose you want to instrument a Set implementation. Without the Set interface, you could extend the HashSet class and add the instrumentation to the class. However, without knowing the details of the implementation of the HashSet, you may get unexpected results. Sure, you can read the source code for HashSet, but that is unnecessary if you just wrap the Set interface in your new class, implement the set interface, and pass all of your calls on to the underlying set (the implementation of which is passed into your constructor.) You can then add your instrumentation to the new class, without concern for the underlying Set implementation. The other drawback to simply extending a Set implementation is that it ties you to that implementation. Suppose you extend a HashSet, what happens when you want to apply that instrumentation to a TreeSet? You have to write a new class. It has been my experience that most "OO developers" lack a true understanding of the power of ObjectOriented programmming. The most common manifestation of this misunderstanding is the idea that the power of OO is inheritance. The real power is polymorphic behavior and encapsulation. Polymorphic behavior is best created through the proper use of interface inheritance, and implementation inheritance inherently breaks encapsulation. I am not saying that implementation inheritance is always a bad thing, I'm simply saying that it tends to be used incorrectly. As far as java's event handling model, it sounds like you haven't worked much with the language. Java makes it very simple and intuitive to take advantage of an MVC framework through the current event handling model. It may take some getting used to, but I have found that decoupling presentation logic from business logic results in much more resusable software, IMHO. cheers

    27. Re:Java Interfaces by Anonymous Coward · · Score: 0



      Both ways are possible in C++. Usually you use MI to provide a class with functionality that is philosphically different than the base class. Sometimes you cannot use membervariables because these "embedded" objects need access to the class that embeds them ( streaming, pringting, storing, changing ).

      Also MI shows its power very much with the use of templates. If you really want to see the light, you should read Alexandrescus "Modern C++ Design". Anyone reading it and getting a grasp will not try to compare Delphi, Java or C# or anything from that league to C++ anymore.

      C++ is a tool for serious programmers. Its incredibly powerful and it helps you to cut through application and domain complexity. Its a somewhat more complicated tool, yes, but if need a tool like that, the complexity of the language will definitely not be the toughest task.

    28. Re:Java Interfaces by Anonymous Coward · · Score: 0

      And how well does this perform? Or rather should I ask is this the type of thing you want to throw into an inner loop of an O(n^2) algorithm?

      It performs quite poorly, though it is supposed to get something like a 400% improvement in JDK 1.4... But it's still not something you want in such a tight loop. Fortunately, clicking on a swing button doesn't present us with that problem :)

    29. Re:Java Interfaces by Anonymous Coward · · Score: 0

      > Sometimes less is more. Having spent about 5 years writing and designing in C++, and about 3 in Java I tend to agree with the previous poster -- Interfaces are a more useful concept than MI. MI more often gets you into problem situations, and C++ MI doesn't express the Java concept of Interfaces nearly as cleanly as Java does. Java strongly encourages the programmer to seperate interface from implementation; C++ programmers think that they've already done that by writing a header file, but headers in C++ aren't nearly as easily extended as a Java Interface.

      C++ has the ability to do this via abstract base classes - define all member functions to have a "=0" body, voila' instant interface class. Now use MI to privately inheirit the desired implementation of the ABC. A nice way to get the best of both worlds.

    30. Re:Java Interfaces by cakoose · · Score: 1

      Even so, you can emulate interfaces given the ability to do multiple inheritance but not vice verse.

      I'm not saying that multiple inheritance is better, but it is definitely more powerful.

      And how does garbage collection lead to more work looking for memory leaks? It may make a programmer more lazy because most of the time he doesn't have to worry about them, but I don't see how garbage collection is a bad thing (excluding performance factors)

    31. Re:Java Interfaces by -brazil- · · Score: 1

      With garbage collection, you sometimes have memory leaks that are harder to find than they would be without GC. Mostly the cases where you have a pointer left somewhere that you're never going to use anyway. Without GC, you free the memory, the pointer becomes dangling, but that's OK because you're not going to use it (and if you do, you get a segfault, which is rather easy to debug). With GC, you have a very hard to detect memory leak. Still, I think the benefits of GC are greater than
      the problems.

      --

      The illegal we do immediately. The unconstitutional takes a little longer.
      --Henry Kissinger

    32. Re:Java Interfaces by BobJ · · Score: 1

      (Smalltalk at: className) perform: methodName asSymbol withArguments: arrayOfArguments

    33. Re:Java Interfaces by Anonymous Coward · · Score: 0

      Interfaces are just a subset of the possibilities that MI allows, so how can Interfaces be more powerful? Dumbass.

    34. Re:Java Interfaces by Anonymous Coward · · Score: 0

      What the hell are you doing writing O(n^2) algorithms in the first place?

  116. C++ by yamla · · Score: 5, Informative
    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, which I like quite a lot.

    Simplified GUI design and event handling. C++ does not determine how GUIs are handled but we use Qt 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.

    --

    Oceania has always been at war with Eastasia.
  117. Re:Operator overloading by pb · · Score: 3, Informative

    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.

    --
    pb Reply or e-mail; don't vaguely moderate.
  118. Re:Ruby MOD PARENT UP by rutger21 · · Score: 1

    I agree. From the 12 languages I know, Ruby is one of the cleanest and most powerful languages out there. I tried it, and somehow everything I code just works at once. It works exactly as you expect it to, which makes communicating with your computer a lot easier than with e.g. C++/Java. Try it, you won't be disappointed and learning a new language doesn't harm anyone.

  119. Powerbuilder by nrd907s · · Score: 2, Interesting

    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.

  120. Language from requirements by bluGill · · Score: 2

    You don't start with language, you start with requirements.

    If this is a one shot project that won't need much maintance, then use whatever the majority of your devolpers know best. C/C++ have a large number of experts now for low level embedded work. VB has a lot of experts in the graphical front end area. Pytohon/Perl for (unix) scripts. If you are hiring new programers those are your choices.

    GUI frontends are tools. If you do'nt like the ones you can buy write your own. In C vi vs emacs wars have been going on for years with no winner. In the mean time MS has sold a lot of compilers that use their IDE. There are dozens more in the free/shareware area, not to mention some compercial compititors. However I always have to ask WHY whenever someone writes a requirement to use any particular one. I can see saying that you will use MS's compiler for instance, but to require their tools is a mistake. Let the programer use their own, with the warning that you only support the offical ones. Make sure though that you can bypass the IDE you chose.

    If this is projet that you intend to support for years, then there are a lot of C++ experts, which is a good arguement for using it, since you will have to deal with turnover. OTOH, a good programer can learn any language quick enough, and there are a lot of C in a C++ wrapper programers.

  121. What you really need to think about by SkyZero · · Score: 1

    What you REALLY need to think about in your project isnt simplified IDE, and the rest on your list. You need to think about who can maintain, improve and initially create your code. If you pick a language because it has a nice IDE and it seems easy to use, you are living 5 years from now.
    You should be concentrating on how easy it is to bring in a developer that knows nothing about your project, bring him up to speed and have him pump out a new modification or continue where the previous one left off.
    After that consideration you must also think about how much support there is out there for your choice.
    If you pick Java, you will find millions of sites with help, and many excellent open source projects to offer reference by example. You will also be working with one of the most modular languages in existance (mainstream), so that whatever technology your project uses will be easily implementable. There are also many unemployed Java developers sitting around, and even the least capable of the group can most likely grasp the piece they will develop.

    If you pick C++, you will be working at a lower level than java, you will have a longer development time, and your developers will need to know more about anything their program will interact with. The advantage to C/C++ however is the efficiency. However it doesnt sound like you are writting drivers, DBMSs or Device Drivers.

    If you pick VB, you be working with a much simpler and easy to use language, however modularity in this language is not as easily managed as java.

    If you choose .net you are taking a risk because it is new. It is new and the people who know the most about it dont know enough yet. They may have studied it every day since it has been out, and they may have done multiple rushed projects, however there are always problems that come out with time.

    Dont make the mistake that a lot of companies make and just try to control everything about their project. Control is only good when you are making the best decisions. If you see a developer with 10 years of experience in your choice language who knows what he is doing and has done similar things before...

    Listen to him, not your boss.

  122. What are you talking about? by Anonymous Coward · · Score: 0

    As for VB.Net and C# [...] the fact remains that they aren't even finished products yet.


    Sorry, but I've gotta call "Bullshit!" on your post. Now comes your opportunity to explain yourself.


    Oh, and as for the part of your post that I omitted with the ellipses, you don't need to believe Microsoft about any portability claims of C#. Unlike Sun's Java, it's an open standard, which is a big reason why Miguel from GNOME is working on an implementation for Linux.

  123. CommonLisp has it all by Anonymous Coward · · Score: 0

    Common Lisp has all the above features and more.

    Software vendors:
    www.xanalysis.com
    www.franz.com

    They have powerful gui which allow to add and test widget without compiling. Please note that you can deliver your apps compiled in Linux elf or windows compiled format.

  124. Your Company is Fuxored by FatHogByTheAss · · Score: 1

    So, did your boss bother to tell you about the actual system requirements, or does he just want to play "Guess which language I've already decided you are going to use?"

    --

    --
    You sure got a purty mouth...

  125. Use the best tool for the job by Oink.NET · · Score: 1
    Your boss it approaching the problem from the wrong angle. From your description, he has basically said, "must use 10-lb hammer, Phillips screwdriver, hand-saw, and 100-grit sandpaper, because they will ensure a successful project." It's your job to see the forest despite the trees, even though he's not. After all, you're the one who's going to have to actually use those tools.

    Unless your development team is a bunch of seasoned object oriented pros, multiple inheritance will probably cause more problems than it solves. Other items on the check-list may present similar "user error" problems.

    You boss's check-list is a common phenomenon in the tech world. Each person has their own preferred techonological hammer they like to throw at every problem they come across, without considering what it the best fit.

    Your boss sounds like a language-feature elitist. I know it's not your concern as much as his, but those features come at a cost. Unless he has budgeted for his discerning tastes, your project may very well be over-budget before you start.

    Use the simplest thing that could possibly work.

  126. Interface Portability by Duck_Taffy · · Score: 1

    There's a reason why all of those are missing something. The only one of those languages with which you won't have to modify your code for Interface development is Java, and Java code executes the slowest of any of those languages. I guess that's the price you pay for portability. Off hand, I'd recommend Objective C, if you're doing Mac and *nix versions, but you'd have to create a GTK version and an Aqua version, even if you used the same back end code. This also would not be the way to go for Windows development, which is too bad, because Cocoa comes with an awesome set of frameworks, and the OpenGL support is superb. I guess you have to prioritize your list and decide which of those elements is the most important. There is no "Holy Grail" language. Otherwise, everyone would use it all the time. You can do it right, or you can do it quick and cheap. VB won't port well. I'd say that if you use C++, you'd be best off, because all you'd really have to do is change OS specific function calls, and it's not as bloated as some other languages. I personally don't know anything about Python though, so it may be worth inspecting. Of course, you could always take the Adobe approach and build your own system of OS independant frameworks ;)

    --
    Karma: Ran over your dogma.
  127. What about the programmer? by red_dragon · · Score: 1

    Every time there's a discussion about which language is the most powerful, flexible, extensible, or whatnot, everybody seems to forget the one single feature that makes A Powerful Language© powerful:

    A Good Programmer.©

    There, I said it. In order to get the most out of a programming language, whichever it is, you've got to put a good programmer behind it. Really, what is a programming language worth if the programmer sucks? A Good Programmer© will choose the language that best fits the task at hand, based on experience/familiarity with the language/bias/etc. And, since no two Good Programmers are entirely alike, chances are they won't always choose the same language, but the results will almost always be the same.

    --
    In Soviet Russia, Jesus asks: "What Would You Do?"
  128. Let me offer a proverb... by Lethyos · · Score: 5, Insightful

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

    --
    Why bother.
    1. Re:Let me offer a proverb... by Graspee_Leemoor · · Score: 2, Funny

      "When all you have is a hammer, everything looks like a nail."

      I find the other way round true:

      "When all you have is nails, anything starts to look like a hammer".

      That's why my Swiss Army knife has dents in the side of it anyway...

      graspee

    2. Re:Let me offer a proverb... by sperris · · Score: 1

      Sheesh, people always seem to be asking which is better the hammer or the screwdriver. Now I know some people really like the hammer (come on who doesn't like to whack things?) but the screwdriver is the true multipurpose tool.

      I've banged in how many nails with the backside of a screwdriver when the hammer was just out of reach, but I've banged in a whole bunch of screws with a hammer.

      Wait, nevermind, I'll take the hammer too.

    3. Re:Let me offer a proverb... by Ehud · · Score: 1

      I just wanted to point out that while Lisp is just fine for AI, it is a general-purpose language, not a
      special-purpose AI-language. You can use it for all kinds of programming. (Ok, so C and Assembler is most practical for systems- and OS-programming. At least on current architectures.)

    4. Re:Let me offer a proverb... by Anonymous Coward · · Score: 0

      I disagree. By hammer, you mean a single programming language. But why shouldn't a single programming language be able to tackle EVERY computing problem? After all, every language translates into computer instructions. Therefore every computing problem is a nail; why can't we have one really good language that's the hammer?

  129. What Makes a Powerful Programming Language? by Anonymous Coward · · Score: 0

    Power. Lots of power.

    1. Re:What Makes a Powerful Programming Language? by Anonymous Coward · · Score: 0

      Yeah... I'll just curry up a few functions in C.

    2. Re:What Makes a Powerful Programming Language? by Anonymous Coward · · Score: 0

      Amen to that! When did Rob do an anti troll article though? That should be worth a read- just for the trolls mind ;-)

  130. Ocaml by ischarlie · · Score: 1

    It lacks an intuitive IDE, but it has all other Python features (and some of them are better) and offers near-C performance.

  131. Poll Topic? by Anonymous Coward · · Score: 0

    This looks like a poll topic if ever I saw one

    Anonymous Coward - 0, Yeah, I know the score. FOAD.

    1. Re:Poll Topic? by anshil · · Score: 1

      No it would be te mast stupist poll ever.

      It's the same as palling whats the best color? or whats the best car?

      Answer, for every person and their needs and tastes it's different. Hospitals paint there walls white to see dirt, other paint them yellow for hapiness or the patients. Some like PKWs somo motorcycles and some LKWs.

      --

      --
      Karma 50, and all I got was this lousy T-Shirt.
  132. why not try by tlh1005 · · Score: 1

    English.

  133. really stupid requirements by slag187 · · Score: 5, Interesting

    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!

    1. Re:really stupid requirements by lkaos · · Score: 2

      I have a bit of a problem with your assertion that operating overloading isn't useful.

      In fact, if you take a look at java, they go to great lengths to implement comparision interfaces when overloading comparision functions makes much more sense.

      Streaming is a great use of operator overloading too. Most importantly, implementing primative replacements absolutely requires operating overloading. Take for instance the lowly bit mask. Many circumstances requires a generic bit mask that will handle more than 32 flags. This is a perfect place to use operator overloading because all your doing is designing a class to take the place of a primative and behave in the same way as a primative.

      Also, complex math using vectors, matrices, and complex numbers most certainly require the use of operating overloading to be intuitive. You cannot tell me that using the + operator on two matrices to obtain their summation is not more intuitive than having some silly method especially since it would have to be a static method anything.

      Matrix a, b, c;

      a = b + c;

      verses:

      a = Matrix.add(b, c);

      Now, explain to someone with their math degree (not CS degree) why they are using infix operators for primative math but prefix operators for math with complex types and they'll look at you like your crazy.

      Infix is more intuitive. That's why people use C/C++/Java and not LISP (not that LISP's a bad language...)

      --
      int func(int a);
      func((b += 3, b));
    2. Re:really stupid requirements by spencerogden · · Score: 2

      Is there really anything you can do with a high level language that you can't do in assembly? Everythiing is syntactic sugar at some level. Although I agree that requiring operator overload is going a little far.

    3. Re:really stupid requirements by Pemdas · · Score: 3, Insightful
      You just given a great case in point of why operator overloading is often just a Bad Idea.

      Matrix a, b, c;

      a = b + c;

      Did you realize that, in coding this way, you invoke a Matrix constructor and destructor every single time you use such syntax? This is the kind of hidden cost that just kills program efficiency. C++ allows you to define a copy constructor which would alleviate some of the superfluous constructor overhead iff you use this syntax:

      Matrix b, c;
      ...
      Matrix a = b + c;

      Anyone who argues that's intuative ought to be taken out and put out of their own misery. Beyond that, though, There is no way to get rid of the destructor overhead when using operator overloading . Nope. Can't do it. Not supported by the language.

      Operator overloading arguably makes for more intuitive correct code. But it makes for far less intuative efficient code.

    4. Re:really stupid requirements by Peter+McC · · Score: 1

      The chief problem I have with operator overloading, and which your example demonstrates nicely, is that it's not always nearly so intuitive. For example:

      Matrix a,b,c;

      a = b * c;

      Now quick, tell me whether that '*' means dot product or cross product? Oh wait, you can't, you have to go find the matrix.cpp file and look it up.

      Nevermind what happens when you encounter the line "a=b*c;" in the middle of some code, and it isn't immediately clear what types a, b, and c are.

      Basically, operator overloading is a fun toy for the people doing the implementing, and a pain for the people doing the maintaining (which, I probably don't need to tell you, takes more effort than the implementation). Is it really that much more difficult to type "a = b.plus(c);" or "a = b.cross(c);"?

      Peter.

      --
      You know what I hate? Wait, what do you like? I hate that!
    5. Re:really stupid requirements by aminorex · · Score: 1

      That's a problem with C++, not a problem with
      operator overloading.

      --
      -I like my women like I like my tea: green-
    6. Re:really stupid requirements by jungd · · Score: 1

      If we had:

      Matrix operator+(const Matrix& m1, Matrix& m2)
      { Matrix r(m1); return r += m2; }

      Then are you meaning the construction/destruction of r when using
      a = b + c ??
      (The compiler is smart enough to eliminate the contruction of a temporary for return in this case)

      If so, how is that different from the construction/destruction involved in

      a = Matrix.add(b,c);

      if

      Matrix Matrix::add(const Matrix& m1, Matrix& m2)
      { Matrix r(m1); return r += m2; }

      ??

      --
      /..sig file not found - permission denied.
    7. Re:really stupid requirements by mikec · · Score: 2

      As someone with a math degree, I disagree. Here is why.

      First, what does this do?

      a = b * c;

      No one knows. Could be element-by-element multiply; could be matrix multiply; could be something else entirely. Any since the actual method call (if that's what it is) is implicit, I don't know where to go look to find out. I'd much rather see

      a = Matrix.mult(b,c)

      because I have a better hunch what it does, and I know where to look verify that hunch.

      Second, the real work that goes into mathematical code is done on the blackboard, not the keyboard. The fact that the typing notation is suboptimal just isn't that important.

      Third, infix is not particularly more intuitive. Mathematicians use all kinds of notations, including infix, prefix, postfix, and lots of two-dimensional stuff that doesn't fit any of those.

      Finally, given a choice, real mathies tend to use languages like Mathematica instead of C/C++, Java, Lisp, etc. But that has to do more with real semantic differerences, not syntactic sugar.

    8. Re:really stupid requirements by Anonymous Coward · · Score: 0

      Now quick, tell me whether that '*' means dot product or cross product

      cross product

      dot product is b.c

    9. Re:really stupid requirements by Pemdas · · Score: 2
      Then are you meaning the construction/destruction of r when using a = b + c ??

      (The compiler is smart enough to eliminate the contruction of a temporary for return in this case)

      Yes, that's exactly what I'm talking about. And if you're compiler is smart enough to eliminate the constructor/destructor calls, then your compiler thinks it is smarter than the C++ spec. g++ doesn't eliminate those calls at any level of optimization, for the precise reason that they are required to be called by the C++ spec. It's valid (albeit completely dumb) to have code in a constructor or destructor that has global side effects, and so correctness means we can't just get rid of the calls willy-nilly.

      In the code you're giving as an example, there is no advantage to an ::add implementation. But I'd argue that's because you're overlooking the simple fact that there is an implicit overloading of the assignment operator. And it's still hiding implicit calls to other functions that may be computationally expensive. If there is a good answer to keeping computational efficiency in such situations using C++, I haven't seen it.

      As you may have guessed by now, I don't use C++ for anything that needs to be super-efficient. It's not for lack of trying. :)

      (BTW, your ::add function is messed up. I think you either meant to declare it static and use scoping in the invocation, or leave out one of the arguments and use this referenced data).

    10. Re:really stupid requirements by Jagasian · · Score: 2

      For the arguement, lets assume that you implied the common assembly languages used for x86 ASM, MIPS ASM, etc... Well, yes, there are plenty of things that cannot be accomplished in assembly language. For example, you cannot automatically, statically verify that your program will always run in polynomial time. However, this is possible with some kinds of typed lambda-calculus. Another example would be that the ASM languages that you implied cannot automatically, statically verify that your program is free from concurrency errors such as race conditions, deadlock, etc... However, some typed mobile calculi can give you such safety.

      Yup, so if you couldn't tell, strongly (statically) typed languages can allow you to do things that you can't do in assembly language. Therefore, calling "everything" syntactic sugar at some level is wrong, even when used in the extreme. Now, you will probably recite Church's Thesis at me about effective calcuability, but just because a language can be compiled into ASM language does not mean that ASM language accomplishes the things I mentioned above. Syntactic sugar things deal with context free grammers concepts, and most interesting type systems that make languages have certain special properties are proof-theory concepts.

      I guess a really crude example would be a natural language in which you could not curse. Lets call it "Goodlish". So anytime you speak or write in Goodlish, everyone can be automatically sure that you aren't using profanity. We don't even have to read what you have written in Goodlish to know that you haven't used cuss words, because as long as we know that you have written in Goodlish, we know that it is curse-free. The Church Thesis arguement mentioned above, yet applied to my crude analogy would be that your "general purpose" natural language, say English, cannot let us do what I can in Goodlish. If you have written something in English, and that is all I know, there is no way to make sure that you haven't used profanity, curse words, etc. So yes, you can compile or translate Goodlish into English, but once your phrases are in English, you lose the garrentee that you are profane-free. You might try to restrict the choice of English words as your counter-arguement, but English is a context sensitive language, and therefore there are ways of cursing that can't be expressed in a grammer. So taking a context-free grammatical subset of English wouldn't cut it.

      So there are extremely important mechanisms that high-level programming languages can supply that are not available in, say, assembly language, and cannot be done in ASM language without implementing an interpreter or compiler for another completely new and different language in ASM language.

    11. Re:really stupid requirements by Peter+McC · · Score: 1

      And how do you get that into your C++ program? What if the guy who originally wrote operator*() made it do dot product because that was the only thing that was needed at the time?

      You've somewhat missed my point (unless you're just being pedantic...).

      Peter.

      --
      You know what I hate? Wait, what do you like? I hate that!
    12. Re:really stupid requirements by lkaos · · Score: 1

      Well, your just plain wrong. The C++ spec only requires non-trivial constructors/destructors (12.1 paragraph 6) as per section 12.2 paragraph 3.

      And, recently added to the spec is the ability for even named objects that are used as return values to be optimized away so what ends up happening for:

      a = b + c

      is that the temporary used by operator+ is actually replaced with a. Inlined correctly and there is absolutely no overhead whatsoever.

      C++ is efficent if you know how to use it.

      BTW: the call to the member function was in Java syntax as the debate was between Java and C++. Java uses Classnamestatic_function whereas C++ uses Classnamestatic_function.

      --
      int func(int a);
      func((b += 3, b));
    13. Re:really stupid requirements by elflord · · Score: 2
      Did you realize that, in coding this way, you invoke a Matrix constructor and destructor every single time you use such syntax? This is the kind of hidden cost that just kills program efficiency.

      Not true. There are a lot of ways around this. One of them is to use a reference counted matrix class, which is actually what a lot of programming languages already do (eg: Python, Perl) or use some other form of managed reference (eg Java, and several other languages)

      The problem here has absolutely nothing to do with operator overloading, it has a lot to do with the fact that a naive implementation of a matrix will use an object that behaves like a reference, whereas a naive implementation in most other languages would have matrix objects that act like references.

    14. Re:really stupid requirements by lkaos · · Score: 1

      sigh.

      I knew I'd get this response... Complex numbers are perhaps a better example :)

      ComplexNumber a(1, 0), b(2, 3);

      a += b;

      Now that's intuitive atleast :) infix is more intuitive for the idiot programmers that have to implement the code from Mathematica :) That's actually the problem, the math/physics guys hand down these algorithms written in Mathematica and have to be translated into code. You need something that is inuitive for the average programmer to use.

      Typing may not be important to the mathematicians, but it's surely important to the programmers :)

      --
      int func(int a);
      func((b += 3, b));
    15. Re:really stupid requirements by Anonymous Coward · · Score: 0

      So you're saying not that you can't code anything in assembly, but that assembly code is inadequate to serve as data for some other programs? Well yeah, I guess I might not be able to create an assembly language program where the first letter of each line spells out the lyrics to "Stairway to Heaven," either.

    16. Re:really stupid requirements by elflord · · Score: 2
      In the code you're giving as an example, there is no advantage to an ::add implementation. But I'd argue that's because you're overlooking the simple fact that there is an implicit overloading of the assignment operator. And it's still hiding implicit calls to other functions that may be computationally expensive. If there is a good answer to keeping computational efficiency in such situations using C++, I haven't seen it.

      First, how is this a problem with operator overloading, and why is this only an issue in C++ ? I'd argue that "value" behaviour, as opposed to the reference behaviour of perl, python, java, etc is the culprit.

      Second, Maybe you haven't looked very hard. There are a number of ways. One is for operator+() to return a placeholder, and have the assignment accept the placeholder as an argument. There are actually toolkits implemented that use this approach, and it can provide very fast computation. (For example, the naive method of computing A * B^-1 is not the most efficient)

      As you may have guessed by now, I don't use C++ for anything that needs to be super-efficient. It's not for lack of trying. :)

      That's too bad. I've used it for a lot of things that need to be efficient, and it beats the hell out of trying to do it in C.

    17. Re:really stupid requirements by bentini · · Score: 3, Interesting

      *sigh* This is slashdot, so I doubt that anyone's going to take notice of this, but...
      this paper 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.
      -Dan

    18. Re:really stupid requirements by rabidcow · · Score: 1

      Matrix a, b, c;

      a = b; a += c;

      No temporary object.
      Ugly as hell, might as well use a.add(c);

    19. Re:really stupid requirements by Prisoner+Of+Gravity · · Score: 0

      No. Read it again, pup.

    20. Re:really stupid requirements by gh · · Score: 1

      Typing is not as important to programmers as is readability, debuggability and all the other stuff that makes maintaining code easier. If you for a second think that writing the code takes the longest, you have a lot to learn about software development.

      The poster who has the math degree has it right.

    21. Re:really stupid requirements by mikec · · Score: 2

      Sigh. I knew I'd get this response :-) Maybe this has been discussed before? :-)

      First, I'll concede the obvious. Yes, if there were some way to overload operators only for things that obeyed field axioms, then it would be a Good Thing. Unfortunately, I don't know of any way to enforce that.

      What happens in real languages where operator overloading is supported? Left shift is overloaded to mean print. Plus acts as sum, or bit-string concatenation, or dot product, or set union, or ... In short, small snippets of code are completely indecipherable unless you are deeply familiar with all the little idioms and short cuts that the programmer used to save a few keystrokes. Give me nice, clean method calls any day.

    22. Re:really stupid requirements by NoOneInParticular · · Score: 1
      If there is a good answer to keeping computational efficiency in such situations using C++, I haven't seen it.

      The answer is expression templates. Briefly, the result of an overloaded matrix operator is not a matrix, but an expression template specifying the parse tree of operations that need to be computed. The assignment operator is overloaded to take such an expression template and to perform the computations on the resulting object.

      No temporary objects made, maximum efficiency, clear syntax (horrors in the library itself though).

    23. Re:really stupid requirements by lkaos · · Score: 2

      Yes, but what happens if some goofy programmer comes along and decides to make a Matrix.multiply? They same argument can be used. It's all about have good names that have good meanings.

      I've worked with many programmers who use methods so irresponsibly. They end up using .get() to do just about everything. This all comes down to good documentation and good requirements.

      --
      int func(int a);
      func((b += 3, b));
    24. Re:really stupid requirements by Anonymous Coward · · Score: 0

      >Yes, if there were some way to overload operators only for things that obeyed field axioms, then it would be a Good Thing. Unfortunately, I don't know of any way to enforce that. You can do this in Haskell with type classes.

    25. Re:really stupid requirements by Pemdas · · Score: 2
      Woohoo! Someone who knows what they are talking about. Unfortunately, I think you're still wrong in the larger picture :)

      Well, your just plain wrong. The C++ spec only requires non-trivial constructors/destructors (12.1 paragraph 6) as per section 12.2 paragraph 3.

      From the spec:

      A constructor is trivial if it is an implicitly- declared default constructor and if:

      --its class has no virtual functions (_class.virtual_) and no virtual base classes (_class.mi_), and

      --all the direct base classes of its class have trivial constructors, and

      --for all the nonstatic data members of its class that are of class type (or array thereof), each such class has a trivial constructor.

      6 Otherwise, the constructor is non-trivial.

      So, in other words, yes, you can avoid the overhead of the constructor and destructor iff the constructor and destructor aren't explicitly implemented! This would never be true for any reasonable matrix class, nor for most class types.

      And, recently added to the spec is the ability for even named objects that are used as return values to be optimized away so what ends up happening for:

      a = b + c

      is that the temporary used by operator+ is actually replaced with a. Inlined correctly and there is absolutely no overhead whatsoever.

      I haven't heard about this. Assuming it's true, it's at least a step in the right direction.

      C++ is efficent if you know how to use it.

      And use it in nonintuitive ways. And being intuitive was kind of the original point, no?

    26. Re:really stupid requirements by mikec · · Score: 2

      Whether a formal system satisfies the axioms of a field is undecidable. Haskell doesn't even try. Haskell allows you to promise that a collection of operations does follow the axioms, but it has no way of enforcing that.

    27. Re:really stupid requirements by mikec · · Score: 2

      It isn't all about good names, but that is certainly part of the problem with overloading. There are such a limited number of operators to overload that the meaning is almost invariably corrupted. Yes, you can write bad method names, but in my experience it's much less common, simply because the obvious name is usually best anyway.

    28. Re:really stupid requirements by sv0f · · Score: 2

      Nice Steele reference.

      (Just thought you'd like to know a few sane people lurk here.)

    29. Re:really stupid requirements by jungd · · Score: 1

      What if the constructors are inlined, and the compiler can 'see' that there are no side effects.
      (btw. I wasn't talking of the construction of r, but of the return value)?

      --
      /..sig file not found - permission denied.
  134. C++ with the right libraries by Anonymous Coward · · Score: 0
    C++ gets you the multiple inheritance, abstract classes, overloading, and resource-safe exceptions (if you use it right). QT gets you simplified GUI design, a nice event-handling model, an IDE, and compile-time portability. There are plenty of garbage-collection libraries available for C++, I don't know what's best.

    That's your whole list.

  135. Where's the kitchen sink? by cfulmer · · Score: 2, Interesting

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

  136. Ok, smart guy ... by Anonymous Coward · · Score: 0

    So why not use Perl?

    Personal preference, perchance?

    1. Re:Ok, smart guy ... by Jerf · · Score: 1

      So why not use Perl?

      Two major reasons: The object requirements, and the implicit assumption that relatively large systems are going to be built with this tool.

      Python's objects are more refined and mature then Perl's. Perl is working on correcting this, but it's in the future, not now. This is not really a topic for debate, BTW, it's basically established fact, unless you personally have extremely kooky definitions of OO. It does not sound like the specifier has kooky definitions.

      Python also works better with large systems, because There's More Then One Way To Do It is bad when multiple programmers are working together. Each programmer's dialect may or may not be even comprehensible to another. Mind you, this is actually a strength for Perl, it just happens to make it somewhat less suitable for certain tasks.

      In the Python vs. Perl flamewar, my call on the issue is "the right tool for the right job". This one's pretty clearly in Python's camp.

  137. Actually... by puppetman · · Score: 2

    Make someone else pick the language, and be sure to work like a dog on it.

    You won't get blamed if the project ends up in the dumpster, but you will be recognized for trying to make it work.

    If the project goes well, then you'll be remembered for you contribution but the person who picked the language will be forgotten.

    Cynical, yah, but what do you expect when most managers have pointy-hair.

  138. Try GNUSTeP by Anonymous Coward · · Score: 0

    Good news for people who like NeXTSTeP and its excellent OO dev environment, the GNU people are cloning it and are almost done with in a few years it will be complete and mature as it has been in development since the release of the Open Step spec. We will see free tools and frameworks for all unix like OSes and possibly for windows.

  139. The Programmers by tarsi210 · · Score: 2

    From the: Mind-Behind-The-Project Dept.

    The real power of the language exists in the hands of the maker. The programmer. I've seen people take languages like BASIC and make a masterpiece out of it, better than a C++ programmer could have done.

    Certain functionality is often needed for management reasons. Sure, you could use a language that doesn't support functions (hello, Applesoft BASIC?), but it'd be a pain to maintain. You could use a language that didn't have portability but if you're cross-platform, you're screwed.

    However, make sure you have good people on the job. If they don't know the language, they should be able to pick it up quickly and have good technique. I'd give a hundred bucks more for a programmer that knew his shit with a crappy language than someone who was a newbie in the latest buzzword language.

  140. Suggestion ... by Anonymous Coward · · Score: 0

    i'll give you a suggestion like a friend, choose C++. Freak langs might give you the illusion to be able to grant a shortest ETA, but, if you'll get stuck on something that depends on JVM, lang dep. libraries, etc.. You're _fried_ ( and probably fired ) ...

  141. A better question is... by Anonymous Coward · · Score: 0

    How the hell did your boss get to be a manager? If he's technical enough to know all those buzzwords (operator overloading, multiple inheritance, etc.) then he ought to know without having a subordinate do research that, for instance, C++ does not have garbage collection.

  142. Re:Operator overloading by Anonymous Coward · · Score: 0

    It makes more readable and modular as well. I would much rather work with overloaded operaters than trying to figure out what function name Joe Bob used for that addition.. oh well.

  143. Delphi / Kylix by twms2h · · Score: 1

    Since you actually looked a VB even though you should have known that it doesn't fit any of the categories mentioned, let me suggest Borland Delphi / Kylix.

    It does have an easy but powerfull IDE with simple GUI design and events, is fully object oriented and with 'interfaces' it also does have some kind of multiple inheritance. Of course it supports abstract classes (which are called 'interfaces') It also supports function overloading but alas not operator overloading.

    It does not have garbage collection (but I never understood why g.c. should be a feature?) and cross platform development is limited to Windows and Linux/i386.

    I doubt that you will find any language that has all the features on your list. If your boss insists on them, he either does not know what he is talking about or he has already made up his mind and only lets you do this search so he can say he covered the alternatives and they aren't any better.

    1. Re:Delphi / Kylix by aitor.sm · · Score: 1

      Well, FreePascal team have developed a Pascal compiler that has even operator overloading, and it's (almost) fully compatible with Delphi (ObjectPascal). It's a pitty that a nice GUI is under development. It allows you to develop for Windows, Linux, OS/2, DOS, Amiga, FreeBSD... And the best of all, it's GPL, and it worths trying.

  144. Language power is a myth. Here is my take. by Kaz+Kylheku · · Score: 4, Insightful
    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.

    1. Re:Language power is a myth. Here is my take. by pb · · Score: 2

      Pseudo-code outline of while class in C / C++ / Java

      * make a comparison function whilecomp();
      * make a function for the body whilebody();
      * pass them to your while class, and loop

      whilefunc() {
      if (whilecomp()) {
      whilebody();
      return whilefunc();
      }
      }

      This is all done through tail recursion, which is supported in all three languages. Obviously, you'd need to make these calls function pointers in C, or override/implement them in C++ or Java (functions aren't first-class in any of these languages, but that doesn't make calling them impossible) and possibly make the functions handle an arbitrary number of arguments. But it is by no means impossible.

      That having been said, tail recursion generally isn't that well optimized in these languages, so you might as well use the goto primitive in C and C++, and shoot yourself in Java, to implement while() decently.

      But since there's already a built-in while, what was with the stupid fake example? What are you trying to prove? That these languages are geared towards efficiency and readable syntax instead of generalized object-oriented programming? Well, if so, you're right. :)

      --
      pb Reply or e-mail; don't vaguely moderate.
    2. Re:Language power is a myth. Here is my take. by YottaMatt · · Score: 1
      >you can't make a ``WhileClass'' whose instances do the job of a while loop

      Sure you can.
      Having implemented meta-languages in Java, using constructor and reference recursion, to implement "while" in that language. With Java, it can even be done in heap-space to avoid stack overflow. The point is that a language that allows for while loops makes a developer's life eaier than one who does it by creating new-until-false classes, which are too sickly-abstract for anyone to maintain.

      Functional, OO, relational, well-understood, abundant support libraries, are all nice features (and nicer buzzwords) for a language to have, but features will only complicate matters, if a project doesn't require it. You have to first establish what the project's needs and goals are and THEN determine if the language(s) have enough power to accomplish what you need. Nothing more.

      Just my $0.02

    3. Re:Language power is a myth. Here is my take. by sesquiped · · Score: 1

      Tail recursion is supported in all three languages? Excuse me? Sure, you can make all the tail calls you want, but in none of those three languagues is the compiler guaranteed to perform them without growing the stack, which is absolutely essential for safety. (What if you want your while loop to run indefinitely until the user selects "quit"?)

      And I think you missed the point of Kaz's post: he's claiming that the object abstraction isn't suitable for making new control structures with the language. As an example of something that provides better abstractions (at least for this purpose), take Common Lisp. It has first-class closures, which are perfect for expressing the condition and body of the loop, because they can refer to variables of the lexical scope where they appear. The macro system (which you might think of as the abstraction of code as data) also helps here, though not as much as the basic lambda abstraction, which is much more powerful than a C, C++, or Java function. Using lambda (and other Lisp-ish features) you can create control structures, like coroutines, that aren't supported in the basic language.

    4. Re:Language power is a myth. Here is my take. by Kaz+Kylheku · · Score: 2

      What if you don't know upfront what the project's needs or goals are?

      ;)

      Anyway, show that implementation of while in Java, ``while'' we are at it.

    5. Re:Language power is a myth. Here is my take. by paulbd · · Score: 2

      #include

      class While : public SigC::Object
      {
      While (SigC::Slot0 slot) {
      while (slot.emit ());
      }
      };

      ....

      While w (slot (some_object,
      &SomeObject::method));

  145. Look more general at the issue... by Anonymous Coward · · Score: 0

    It doesn't work to base criteria upon what a given language can do or not do. That are only specific to language researchers. Instead you should look at what you _really_ need in the language.

    Operator overloading tends to clutter the language if used incorrectly. Used to implement mathematics in the language can be acceptable (a complex class for instance). However, to use operator overloading for common tasks makes the code _less_ readable.

    Multiple inheritance can be dangerous to implement. It has been removed from java, since it has no real power in most applications. Instead, java uses interfaces for the somewhat same result.

    What do matter is the size of the standard library too. Given languages with big standard (3rd party) libraries, you can be much more productive over time.

    Another thing is if the language is statically or dynamically typed. There are advantages of both approaches. Dynamic typing tends to give faster development, whereas static typing is a bit more safe, as the compiler can catch more errors.

    If security and stability is very important, the functional paradigm might be even better to explore (Scheme, SML, ocaml). It all depends on the actual task. If writing a compiler, functional languages might be _the_ langauge to use.

    IDE and RAD tools are overrated for development. Where the GUI frontend can be implemented in these, the backend is often better made seperately. FFI's of different kinds can make a hybrid between more than one language a powerful choice.

    Accept that there is no ``perfect language''. Instead, one should look into the specific task and learn which langauges have which powers and weaknesses. Then the choice can be made correctly.

    even Visual Basic has it's powers.

  146. Re:Operator overloading by igomaniac · · Score: 2, Informative
    Operator overloading would be a good idea if it was implemented correctly. C++'s implementation of operator overloading is not very good because:
    • It generates temporary objects that are created and deleted behind the scenes. This means something as simple as A = B + C will turn into a creation of a temporary to hold the result of B+C and then a call to the copy constructor or operator= for the assignment, and then deleting the temporary.
    • operators cannot be made virtual, so the static linking nature of C++ sometimes give you other results than you expect. For example, overloading << for ofstream, you can write other classes to ofstream than before -- BUT if you write a string to the ofstream first, it returns a reference to an ostream (even if it's the same ofstream as before) and your fancy output is not called because it's not defined for ostream..

    --

    The interactive way to Go -- http://www.playgo.to/iwtg/en/
  147. it's the programmer by SpacePunk · · Score: 2, Interesting

    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.

  148. This will not work by fazz · · Score: 1

    Your boss has read too much marketing babble, lots of sexy-sounding buzzwords look exactly like that.
    Some of the features listed here (IDE, GUI) are not integral part of any language that is sufficently widespread for large scale commercial development.
    Some are outright bad (multiple inheritance, even operator overloading) and should be avoided. Multiple inheritance is THE way to mess up your class model, MI and "advanced" OO design cannot be mixed without trouble.
    If we look at the other points brought out, I'd recommend Java and/or C++ (yes, it's sometimes useful not to limit your projects to a single language).

  149. VB.NET... by Da+VinMan · · Score: 1, Troll

    ...does have those features. Crawl out from under your rock and have a look.

    --
    Please mod this post only if you think others should/n't read this. I have enough ego^H^H^Hkarma. Thanks!
    1. Re:VB.NET... by Anonymous Coward · · Score: 0


      VB net is slow tho.

  150. Contentious by mkb · · Score: 1

    The meta-title for this thread could just as well be "What makes a powerful flamewar?"

    As others have mentioned, the expressive power of a language has to be weighed against the availability of tools, developers, etc. However, there is another dimension to this: What sort of developer is proficient in a particular language?

    Lisp is a powerful and flexible programming language. Lisp programmers can often accomplish quite a bit in a short time. Is this purely due to Lisp, or to the programmers? If the programmers who end up learning Lisp tend to be a cut above the norm, then the productivity we see from Lisp programmers will tend to be a cut above as well.

  151. Management 'tech strategies' by Trevelyan · · Score: 1

    I think your boss has been reading too much M$ C# Sales spiel (those 'specs' sound like a MS quote to me). Do what most tech do, agree with management, and pretend your implementing all the their 'tech strategies'. Then do it how it should be done.

    I assume you grew up on a language and know what your doing (well at least know how to RTFM to find out)

    Their are planety of web sites out their that report they're running ISS, but if u look closely it they also report Linux as their OS. ie boss told tech to use MS ISS and they just edited apaches conf ;-)

    -Trevelyan

  152. Re:Operator overloading by labratuk · · Score: 0, Offtopic

    Operator overloading made baby Jesus cry.

    --
    Malike Bamiyi wanted my assistance.
  153. You can mix and match you know. by bluGill · · Score: 2

    On a large project you will have backend, middleware (sometimes several layers), and a front end. there is no reason these need to be the same language.

    Remember the OSI model (which isn't always best). You should be able to take your top layer, running on Appletalk over token ring, you should be able to change it to IPX running on Hyperchannel without changing your application code at all.

    You should be able to write your layers in several independanat parts, and change. Most programs are written in a language, but scripted in a different one. VB is a poor choice for time critical high speed data movement, but excellent for scripting a windows application (even if it is basic). Hand coded assembly is poor for user interfraes, but when you need fast code in little memory nothing beats it. (assuming good programers)

    ps, brownie points if you know what hyperchannel is...

  154. C++, etc. by DrCode · · Score: 2

    Language: C++
    IDE: Emacs
    GUI toolkit: GTK
    GUI designer: Glade, Libglade

    It all works; it's all free (in both senses of the word).

    BTW, GTK, in my experience, works just fine with C++, despite the fact that it's written in C.

  155. Too bad you can't mark the article a Troll... by Jack+William+Bell · · Score: 2, Insightful

    You see this so often here on /., an article that seems designed to get the different UI/OS/License/Programming Language camps at each other's throats. Clearly the /. editors think controversy is a good thing.

    I would tend to agree with that, except that I am still stinging from the response to a recent /. post where I opined that open standards and competition are better than the the alternative.

    The surprising thing for the above article? Seeing the Python people (who I tend to agree with) and the Smalltalk weenies speaking up more authoritatively than the Java contingent. Cool!

    Jack William Bell

    --
    - -
    Are you an SF Fan? Are you a Tru-Fan?
  156. c++ crossplatform gui lib by StandardDeviant · · Score: 2

    take a look at WxWindows. It's also been ported to work with other languages such as Perl and Python. IMHO it's prettier-looking than Tk and nicer-feeling to code in (more OO).

  157. Java (Yes -1 Redundant... read it anyway) by llamalicious · · Score: 1

    Java should meet most of your needs. Other than proper garbage collection. But a good JVM and some clean coding practices will fix that.
    The major problem is finding an IDE that isn't chock-full of totally useless widgets and features. You know, something that's lean and fast?

    Well, for minimalist coding in an Oracle environment, including the ability to auto-deploy an entire EAR or WAR to different servers.. I'd have to say Oracle JDeveloper 9i is a good bet.
    But for everyday programming in Java? Nope. Sorry. Try asking the folx @ limewire what they like.

  158. What will the system DO? by easter1916 · · Score: 1

    Did your idiot boss deign to tell you the actual requirements of the system being written, or did it occur to you to ask him? The system requirements should drive the choice of language, platform, etc., not some masturbatory desire to use a language that is buzzword compliant.

  159. Ok. by Anonymous Coward · · Score: 0

    You've convinced me.

    Write me a C compiler in Python.

    Thanks.

    1. Re:Ok. by Anonymous Coward · · Score: 0
      Write me a C compiler in Python.

      It will be slow, but way easier than writing one in C. In fact, just download Python 2.2 you'd find an optionnal Python source -> Python bytecode compiler - way shorter than the main C version.

    2. Re:Ok. by Anonymous Coward · · Score: 0

      As someone else pointed out, that isn't very hard at all. I think the only reason it hasn't been done already is because there's already a perfectly good C compiler, written in C. :)

    3. Re:Ok. by cduffy · · Score: 1

      Writing compilers in Python is easy -- particularly if you're willing to fudge a bit and use flex/bison for the parsing and have them feed into a Python-based backend (really trivial -- I've done it before for an interpreter able to run a bytecode-compiled subset of C). You get fast parsing and your code generation logic is easy to read and debug (and doing Nifty Stuff like building graphics of the parse trees with graphviz is trivial). See the CVS archive at sf.net/projects/dtct/ for some (long unmaintained) code demonstrating all I just said.

      Now, why someone would do a thing like that (except as an academic project, which was my excuse)... I won't go into it.

  160. Perl by Anonymous Coward · · Score: 1, Insightful

    Everyone is suggesting Python, but Perl and Python have very similar semantics -- so, if you're considering Python, why not consider Perl too?

    1. Re:perl by brer_rabbit · · Score: 2

      yup, perl's got everything. mod parent up for the excellent example!

      To expand on a couple points, you can use glade for gtk, perl/tk for tk, Qt even. Of course the CGI stuff perl does for breakfast.

      and operator overloading:
      use overload '+' => sub{ $_[0] + $_[1] };

  161. Re:Operator overloading by Anonymous Coward · · Score: 0

    Java doesn't overload + even though it fakes it. The compiler replaces string concatenations with uses of the StringBuffer class before generating bytecode. There's no actual +(foo1,foo2) operator being called. If you want to argue that that's operator overloading, then you'd have to include any language that supports macros or source preprocessing as supporting operator overloading.

  162. What do they know, and when do they know it by davmoo · · Score: 1

    You're going about this the wrong way.

    If this is going to be a product developed by an existing company, the first questions I'd ask when selecting a language are these:

    Do we already have programmers on staff? If so, what languages do they already know and are proficient at? If not, am I picking a language that is so obscure there are only 7 people on the planet I can hire?

    --
    I want a new quote. One that won't spill. One that don't cost too much. Or come in a pill.
  163. Multiple Inheritance by InvalidSyntax · · Score: 2, Insightful

    Your boss needs to re-examine the requirement for multiple inheritance. I've got 15 years experience OO development experience. MI is something that looks good in the design but is a maintenance nightmare. Avoid MI at all costs.

    1. Re:Multiple Inheritance by Korpo · · Score: 1
      Isn't this the case with almost anything in C++?

      Most of the time you're so busy specifying modifiers, memory-allocation schemes, etc. that you need to be a really good programmer not to forget to solve the problem at hand...

      Yes, it gives us the power to write a memory-efficient OO program that's fast.. to optimize the tiniest bit in our class hierarchy. But it forces it all on the developer when this isn't a issue still.

    2. Re:Multiple Inheritance by ZeroConcept · · Score: 1

      I agree with you. One book I read (Don't remember which one though and feel free to correct me If I missed any of the terms), divides complexity into two types:

      1) Inherent, that is the complexity of the problem that needs to be solved.
      2) Added, that is the complexity that compiler, language, IDE, OS, etc. Adds to the programming task that has no direct relation with the problem that we are trying to solve.

      The trend since people started to solve problems with computers has been to reduce "Added" complexity so that programmers can spend more time dealig with Inherent complexity.

      I think of languages as Java and C# as a step in that direction, that doesn't mean C++ is no longer useful, it just means that new tools will replace it in areas where the fine level of control it provides are not required.

      Great engineers have an arsenal of tools at their disposal and choose the best fit to solve the task at hand. Lousy ones only have a hammer and see everything as a nail.

      Cheers,

    3. Re:Multiple Inheritance by Prisoner+Of+Gravity · · Score: 0

      It's either part of No Silver Bullet or it's by the same author...

  164. All you need is already installed... by pmz · · Score: 1

    intuitive and easy to use IDE

    Bourne shell, vi, make, and compiler-of-choice (this is the language-universal IDE, and it really is the easiest IDE--all plain text all the time)

    simplified GUI design and event handling

    Qt (C++), Swing (Java)

    advanced error handling

    not too sure about this one; error handling tends to be on a per-application basis.

    advanced object oriented design including multiple inheritance, abstract classes, and garbage collection

    C++...no, Java...no, C++...

    full support for operator and function overloading

    C++

    portable (at compile-time) across various platforms.

    C++ (Yes, C++ really is portable, if you aren't a slouch)

  165. The Linguists Stone by AntiChristX · · Score: 1

    How about a free language, created to work on the chipsets of the world, to which you can add whatever high-level language you desire, which ever one will fit the job?

    it's called Linux. it's supported on the chipsets of the world. you can add whatever non-abstract language you want, or use asm. if you're making web apps, there are lanugages; if you are making console apps, there are languages; if you're making hardware apps, there are languages; if you're making apps for other OS-level languages, like windows, guess what, there are languages.

    --
    AntiChristX
    Daring to remain below 5 karma indefinitely
  166. The answer is Lisp. Now what was the question? by Anonymous Coward · · Score: 0

    For the criteria you list, the answer is either Lisp or Smalltalk. However, I think you are probably asking the wrong question. This is from a hard-core Lisp programmer who has done virtually everything in Java for the last 3 years. Yes, Lisp is by far the most productive language I've ever worked in, all other things being equal, but all other things are never equal. Java is almost certain to get you to your ultimate goal more quickly because of the wide variety of frameworks and components and tools you can start with. Look at jakarta.apache.org or the sourceforge java foundry for examples.

  167. Consider using two languages by nmnilsson · · Score: 1

    To answer your first (and less religious) question:
    Why not code the GUI in a fast language like VB or perl, then connect it (using COM/CORBA/...) to a main app coded in a more capable language like C++?
    Or wait for .NET, which hopefully makes this even easier.
    Or, if you want to stick to one language, use Delphi/C++-Builder, which may make porting easier (using Kylix).

    --
    No sig to see here. Move along.
  168. A few choices by Tomster · · Score: 1

    You pick the right tool for the job, not the other way around. Unless you're a language designer, I guess, and you're trying to figure out which jobs your language is well-suited for....

    Okay, here are a few choices I can think of:

    1. Try to figure out which language(s) actually support all of those features. Maybe some interesting research there. I've always enjoyed looking into different languages, anyway.

    2. Try to figure out what answer the boss wants (C++ seems likely). Note, it may not be the boss, it may be his boss. This is one of those check-your-political-climate scenarios. It's the opposite of #1 -- instead of going by the technical merits of the languages, you go by the wishes of the boss.

    3. Try to figure out what language(s) are well-suited for the project in question, and give him one of those as the answer.

    4. Talk to your co-workers who are going to be on the project, and ask them which language they'd like to use (or think is best).

    5. Talk openly and honestly with your boss about a better way to select tools for development. This can only succeed if you happen to have a boss who is able and willing to learn from the people he manages.

    6. Make up a name for a new language. Don't actually bother with creating the language itself. Naturally, your new language has all the required features. When the boss asks why he can't find out anything about it, just tell him it's brand new and there isn't much information about it yet :).

    Some of these options are "less than honest". If that bothers you, well, I don't blame you, because I wouldn't choose them myself.

    At any rate, good luck -- and I'm sure we'd like to know how it turns out for you.

    -Thomas

  169. Re:Operator overloading by Eccles · · Score: 2, Informative

    It generates temporary objects that are created and deleted behind the scenes.

    Note that if your operator is inlined and the compiler is reasonably smart, these temporaries are often optimized away. Usually when they aren't, the cost of the copy is low compared to the overall cost of the operation.

    --
    Ooh, a sarcasm detector. Oh, that's a real useful invention.
  170. PFM is cool, but avoid ... by mr_death · · Score: 3, Funny

    ... the MCF (Mongolian Cluster Fsck), which sadly occurs when a committee gets together to decide things.

    --
    It's Linux, damnit! Pay no attention to renaming attempts by self-aggrandizing blowhards.
  171. java by Anonymous Coward · · Score: 1, Insightful
    Why is it a necessity to use operator overloading? It's not a good idea to base your abstract designs on some semantic aspect of the language.

    A similar thing can be said for multiple inheritance. Is this truly a necessity of your design? BTW, Java *does* support multiple inheritance, but only on the interface level (eg, "myInterface extends X, Y"). That aside:

    -far, far less multiplatform issues, by far
    -extensive tool library included. This is better than it may seem at first: if you want to someday interact with some 3rd party application (or vice versa), integration is magnitudes easier if you're all building off the same tool set.
    -builtin i18n, if you need that kind of thing
    -nice GUI IDE environments: skip JBuilder, try NetBeans/Forte, IntelliJ, etc.

    Now that aside, before choosing a language, make sure that your design is always given the upper hand. The language should be a mere tool for implementing the design; it should not dictate important aspects of the design.

    A student asked Daigon, "But, does that not apply directly to Java with respect to multiple inheritance?" Daigon stepped to the right and said, "There is no multiple inheritance."

    At that moment, the student was enlightened.

  172. Answering the subject... by cperciva · · Score: 2

    To answer the subject (rather than the submitted question), a language is made powerful by being turing-complete.

    A language is also made dangerous by being turing-complete, since useful things like knowing if any given program will halt immediately become impossible.

    To me, a good language would be one which has two modes: turing-complete, and turing-incomplete. If you need to write an operating system, go for the turing-complete mode, and code very carefully; if you're writing application software, turing-incomplete mode should be sufficient, and the compiler should be able to alert you to all sorts of bugs (eg, finding all possible infinite loops, deadlocks, race conditions, et cetera).

    1. Re:Answering the subject... by Prisoner+Of+Gravity · · Score: 0

      Please die so that your total cluelessness is not spread on to new generations.

  173. Re:Operator overloading by Anonymous Coward · · Score: 0

    Wow, wrong on both counts.

    1) Programmers create the temporary objects, not operator overloading.

    2) Of course they can be made virtual. They are just syntactic sugar for:
    obj.operator XXX(parms)

  174. Sounds like your describing C# by Anonymous Coward · · Score: 0


    VB.NET doesnt support everything C# does. I would go with C#/Visual Studio.net

  175. Haven't you take a look at Borland Delphi? by Anonymous Coward · · Score: 0

    Borland Delphi has good report from Peter coffee. It has great IDE and great debugger. The language itself is powerful. True object oriented language and it handles event programming nicely.

    If you want to download the Enterprise version, Borland provides a trial version.

    I would strongly recommend Borland Delphi.

  176. Multiple Inheritance by ZeroConcept · · Score: 1

    "advanced object oriented design including multiple inheritance"

    In my opinion, the complexity it adds outweights the benefits it provides. I like the Java and C# approach of allowing inheriting from one class while allowing multiple interfaces.

  177. Functional Languages by cballowe · · Score: 0

    Sounds like what your boss really wants is something like SML or Lisp. Granted, these might take a while to get people up to speed on, but projects featured here in the past (sorry -- i'm lazy and this box is short on ram or i'd dig 'em up) seem to indicate that once the project is going development time is short and maintenance is easy.

    And if they claim the languages aren't object oriented, point out that everything is a first order object -- including functions.

  178. Your sig by Anonymous Coward · · Score: 0
    Bush + Bush = S&L + Enron

    The errors of Enron occured under Clinton's watch and it was Clinton's watchers that enabled Enron. Enron called the Whitehouse and asked for a favor; it was denied. Enron called Clinton's admin for a favor (India) it was granted. Robert Rubin, a Clinton man all the way, tried to influence the Fed to extend credit to Enron. Enron began falling apart on its own before GW took office.

    Your .sig has no basis in reality.

  179. What is the real problem??? by Tungbo · · Score: 1

    What are the requirements of your project?
    What are the requirements of likely projects for your group in the next 6 years?

    Define those requiremnets FIRST before starting to do any logical design and make design choices.

    Also, will you be doing the entire project in house? If not, what libraries or packages might be availabe to help your project succed? What restrictions do they place on your choice of languages?

    What about your staff? What types of languages do they know? How easily do they learn new languages? Say you decide that the best language based on your features list is SOAR. That would be quite pointless if half your staff go crazy trying to learn it and cannot maintain it.

    The art of design is a balancing act between many elements. It behooves you to get the broadest views possible at the outset and avoid commiting design choices until as late as practicable.

  180. needs vs wants by Anonymous Coward · · Score: 0

    Its time to do some analysis of desires and necessities. It sounds like a wishlist of everything you will *conceivably* need. Do a little design work and decide where you need what when and start leveraging the features of several languages/runtimes. Step away from the keyboard. And tell your boss to get a hobby, Christ.

  181. Well, that looks like a job for.. by Korpo · · Score: 1
    So it's very clearly Java or C#.

    BIG downside for C#: Not yet in any way proven that the platform will meet expectations (no longtime testing yet).

    Java has no operator overloading, but no one will need that. Many people discourage operator overloading, because C++-syntax is already symbol-loaded enough and everybody will have other intuitive expectations what an operator should do over a type, you'll bet.

    Java and C# offer interface inheritance (mix-ins), that produce much clearer code than multiple inheritance in C++.

    Besides: C++ meets many of these requirements, too. But more often than not using C++ would increase the needed effort to achieve the same goal. Rule of thumb: Twice as many devel time as in Java (so the same for C#).

    Python could do the job, too. It's the feature-richest (in concepts and paradigms) of all. But for app devel in a commercial environment it seems to be a bit misplaced, so basically it stays with Java and C#.

    1. Re:Well, that looks like a job for.. by donglekey · · Score: 2

      I agree with everything here except for the part about Python. Ruby has more of the features listed by him like operator overloading and such, but I wouldn't recommend it because it is fairly immature compared to Java and I don't know about building GUI's in it. It also has some funked up syntax in some aspects and will take a little getting used to. I think that java is the way to go. The only other option is Objective-C which is definitly worth a look. Objective-C on OS X is probably the cleanest, easiest, and most complete API out there, especially when used with all the development tools that come with it right from the start. Objective C won't be as portable as Java, and when using it on OS X it will be even less so because the only thing you have is the GNUstep project to shift your code around.

  182. Why not Java? by Anonymous Coward · · Score: 0

    What I can't understand is why you don't use Java. It has everything you need.

    1. Re:Why not Java? by nzgeek · · Score: 1

      Read all the previous posts. Java lacks multiple inheritance (cue discussion as to why multiple inheritance sucks and is unecessary...)

    2. Re:Why not Java? by melee70 · · Score: 1

      It would also be very helpful to know the type of app being developed. A very heavy client application is best suited to C++ while a lighter app is fine for Java.

      There is software that will allow a C++ program to be recompiled for multiple platforms by the way.

  183. Rephrase the Question by JojoLinkyBob · · Score: 1
    Maybe the real question here is
    "What Does the Powerful Programming Language Make?"

    Only by answering this question, can you really make a informed decision on the language to use. Neither OO or functional programming alone is a cure-all. They each have their boons and setbacks. IMHO, the more volatile the field of your application is, the better off you are with a RAD tool. An example in this case would be using Perl/PHP for an internet application. And for large development teams, I would recommend an OO tool (read easier delegation)

    What I would love to see in a language is something merges the power of Perl (mainly regular expressions) w/ something like Visual C++ (OO + GUI), AND allows easy distribution (doesn't require a special runtime module, and is not a pain in the neck for Joe Blow to install on his machine)

    --
    -jc
    1. Re:Rephrase the Question by Graspee_Leemoor · · Score: 2, Insightful

      "What I would love to see in a language is something merges the power of Perl (mainly regular expressions) w/ something like Visual C++ (OO + GUI), AND allows easy distribution (doesn't require a special runtime module, and is not a pain in the neck for Joe Blow to install on his machine)"

      Check out rebol (www.rebol.com). It doesn't have rad, but the gui stuff is really easy to do, but anyway the really good feature you'll like is that it's incredibly easy to install on an end user's machine- one exe file to run.

      It runs on all major platforms too, and has regexps, and the internet protocols are very well handled.

      I am not a paid astro-turfer of rebol, but maybe it wouldn't hurt to send them my cv...

      graspee

  184. the way this question has been answered for ages.. by verch · · Score: 1

    choose the language that most of the developers know.

  185. Re: Programming Languages by __past__ · · Score: 1
    I also like Qt, however, the problem is that it is either Free or cross-platform (for a limited definition of cross-platform, btw.) There is no Free Qt for Windows, and not even a free one for the Mac.

    Of couse, with Java, the situation is even worse.

  186. ODK does everything on the list by Anonymous Coward · · Score: 0

    The Fazigu ODK does all of the things on your list. Check the link, your boss may already be familiar.

    thank you

  187. Re: C++ Portable GUI by Anonymous Coward · · Score: 0

    Ever heard of GLUT? It's an OpenGL toolkit that provides a simplified GUI API which will compile on a variety of different platforms. Granted, it is written in C (not C++), but I believe that people have written C++ wrappers for GLUT.
    The main problems with this approach would be:
    1.) no nice IDE (no Borland Builder GLUT IDE:( )
    2.) Event handling is kinda tricky (you hafta use callback functions, and there aren't really that many of them for you to write)

  188. OCAML by WamBamBoozle · · Score: 1

    OCAML is much more expressive and safer than C++. Think of it as always programming in templates. It has an IDE too called Cameleon. I guess the one thing it lacks from your feature set is operator overloading.

  189. Go with the mainstream by Animats · · Score: 2
    Since performance isn't mentioned as an issue, and language-level support for a GUI is required, some mainstream solution like Visual Basic is probably adequate. Java would probably be OK, too, if coupled with some screen design tool. Perl/Tk is adequate for many simple applications.

    Why operator overloading should be in that list isn't clear. It's useful for math work, but confusing for almost everything else.

  190. Re:Operator overloading by pb · · Score: 1

    Ahh but Java doesn't have a preprocessor either; either way, they're cheating. :)

    I'd love it if they did, though, because I'd #define away their ridiculous verbose names into something short and memorable ...

    --
    pb Reply or e-mail; don't vaguely moderate.
  191. Re:Operator overloading by Anonymous Coward · · Score: 0

    I think that you are overlooking the fact that operator overloading is not considered a proper or "advanced" technique in OOD. It also reduces the readability of code by changing what a overriding not a method or function of a parent class but a fundamental operator of the language. It is interesting to me how much focus the poser of the question placed on "features" while ignoring some more foundational facets such as reliability and maintainability. It looks like this project will produce Yet Another Buggy, Unmaintainable Program (YABUP!). I imagine that a serious evaluation of the requirements (rather than the guessed-at features) would suggest Ada or Eiffel, or even Objective-C for use. Undoubtably these languages will be ignored for their lack of hype, however... ;P

  192. Be Realistic by Anonymous Coward · · Score: 0
    Don't try to be the smartest company at picking a programming language. Be the smartest company in whatever niche your software targets. 99% of the time, the language isn't going to matter that much. Use whatever is used by similar successful companies doing similar projects. All the features you list are nice if you use them intelligently, but what percent of projects make much use of MI and don't screw it up terribly? Think simple. COBOL/Delphi/4GL's/Basic. If you need to program a pile of fancy algorithms, use a good functional language for that (Lisp, Erlang, O'Caml).


    C++ probably comes closest to hitting your list of the major candidates. If you use C++, use a CASE tool and load up your toolset with every lint-like tool and style checker you can find. C++ and tarpit tend to go together unless you are very smart. Then it's fine.

  193. Re:Don't pick the language first, solve the proble by mlinksva · · Score: 2

    Not only that, but solve as little of the problem as possible. Someone else has probably already solved much of your problem and made available library/framework code that you can build on. The perfect language isn't if you have to re-invent every wheel with it. I do try to follow my own advice -- the availability of a partial solution for one of my problem domains is why I use Tcl a fair bit despite hating the language. OTOH if you want a language with cool features for the sake of coolness, I'd go with O'Caml.

  194. What You need... by Anonymous Coward · · Score: 0

    is the The PERFECT LANGUAGE!!! &#153
    The perfect language is the compiler suite that writes the code for you. You just type in the requirements and it writes the code! Additionally you can buy the speech module and just say the requirements to the computer. Can't figure out how to describe the program to PERFECT LANGUAGE &#153 then buy the mind reading add-on. GUI design is simple as again the PERFECT LANGUAGE!!! &#153 creates the perfect gui. For those of you who worry that if your product is perfect the first time and that you won't be able to make money off of upgrades don't worry. The PERFECT LANGUAGE &#153 incluse the MS feature. This will introduce a number of bugs into the program that can be fixed when you want to produce an upgrade. So, in short there is no reason why anyone wouldn't want the PERFECT LANGUAGE &#153.

  195. Python has operator overloading by paulschreiber · · Score: 4, Informative

    really, it does.

    Paul

  196. Ridiculous List by harlows_monkeys · · Score: 4, Insightful

    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.

  197. Operator overload is useful by Anonymous Coward · · Score: 0

    Compare C/Java SLASHDOTSLASHDOTSLASHDOT

    dotproduct = FixedAdd(FixedMultiply(u_x, v_x), FixedMultiply(u_y, v_y));

    with C++ SLASHDOTSLASHDOTSLASHDOT

    dotproduct = u_x * v_x + u_y * v_y;

    I would certainly find the latter nicer.

  198. Re:Not everything needs to be native to the langua by karb · · Score: 1
    Your name is too similar to mine and may cause customer confusion. You can expect a note from my lawyers soon.

    (hee hee)

    --

    Jack Valenti and the MPAA are to technology as the Boston strangler is to the woman home alone

  199. Objective C / OpenStep/Cocoa by tbien · · Score: 5, Interesting

    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

    1. Re:Objective C / OpenStep/Cocoa by eAndroid · · Score: 2

      I was going to say the same thing. I've been using Cocoa and it is very nice. At first I thought that the use of square brackets was ugly but now I've learned to love it - in much the same way I learned to love Python's use of white space.

      Also, this question is ridiculous. There is no mention of platform requirements or speed, so I'm assuming that Python might be a real possibility.

      --

      I can't spell or type, but that doesn't mean I'm unusually stupid.
  200. National Instruments LabWindows/CVI by AnalogDiehard · · Score: 1
    I don't know of any C++ tool that meets your requirements. M$ Visual Studio is my least favorite development environment; way too convoluted and MFC is a pain in the ass for debugging.

    Although it's an ANSI C IDE, I highly recommend National Instruments LabWindows/CVI from the people who brought us LabVIEW. LW/CVI is my preferred IDE; drag-and-drop GUI design, excellent debugging tools, a full-featured API to cover everything from event handling to SQL to advanced data analysis, excellent documentation, excellent online and phone support, excellent training seminars around the country, and portable across Windows (even 3.1), Mac, Sun/HPUX, Sun Solaris, HP-UX, and Linux. Don't overlook this product for its automated test applications, it is very capable of applications of any kind.

    I used to program in C++ but wound up reverting back to ANSI C years ago, the aggravations were not worth the gains. Especially after digging deep enough into MFC code only to find the old ANSI C Windows API calls underneath all that bloat!!!

    --
    Eternity: will that be smoking, or non-smoking? I Corinthians 6:9-10
  201. Re:Operator overloading by benwb · · Score: 2
    • operator +=
    • Virtual operators work fine on any standards compliant C++ compiler.
  202. Re:Operator overloading by Anonymous Coward · · Score: 0

    hrmm...
    I think that:
    obj++;
    is more readable and maintainable then:
    obj.what_ever_func_the_developer_chose();

  203. Not exactly true, minority langs introduce costs by Ars-Fartsica · · Score: 3
    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.

  204. Hrmmmm by MrIcee · · Score: 1
    1. Stability
    2. Efficiency should be more dependent on a lean mean syntax than the ability to throw black-box optimization at it.
    3. Hetrogenous arrays (ability to store unlike elements)
    4. Understands pointers and arrays of pointers and the abilty to dispatch to functions based on memory pointers
    5. It should NOT have GUI functions, etc... since these are what libraries (and sometimes OS services) are for, but not programming languages itself.
    6. An excellent sense of typedef and redef/conversion.
    7. Does not disallow self-modifying data structures nor self-modifying code (there are situations where both are important)
    8. It should subscribe to KISS - Keep It Simple (Stupid)... no offense... but the simplier the language is, and the closer it is to the power of microcode (without the headache and with portability - of course), the better people can control the language.
    9. Well used... if you want to be able to pick from a good base of programmers, it had better be well understood and well used. Rare languages make for a small pool of programmers to choose from... unless your rolling your own.

    Closest thing today is C (though it doesn't do hetrogenous arrays naturally... you can certainly typedef them though)... with Java etc... being a close second (if not for the stability factor - please don't flame... it's getting there)

  205. OCaml, and other modern languages. by aleksey · · Score: 2, Insightful

    You should check out OCaml. It is a modern functional programming language. It has parametric polymorphism, as well as subtyping polymorphism and dynamic dispatch, is garbage collected, features an advanced module system to help you structure code, and ports are available for all the usual platforms.

    In addition, OCaml interfaces well with Gtk (including using Glade to design GUIs), has database libraries, as well as all many other libraries that one would expect.

    OCaml can be either compiled to a portable bytecode, or directly to machine code. It compiles to very efficient code, and it is popular folklore that it can easily match C in terms of execution speed in many circumstances.

    The language is at a good point in its evolution right now to be used in commercial circumstances. It has been around long enough that it is well-understood and a lot of useful libraries are available, and its compiler is very robust, but at the same time it is not so old that a lot of the really new and interesting developments in language design haven't made their way into it. Although I prefer Haskell for small one-off programs, I would use OCaml for large projects.

    Another language which has had great success in industry (especially telecom equipment, as it was developed at Ericsson to write million-line switching software) is Erlang. Although I have not used it myself, its proponents swear by it as the best tradeoff between elegant PL theory, and the reality of writing large software.

    You will note that my recommendations all have a functional programming slant to them, and this is only due to my own preferences. I have not kept up with developments in OO language design, and so I cannot recommend one readily.

    If I may step on a soapbox for a moment, however, I would like to say that especially for the design of large systems, a strongly-typed modern funcitonal programming language with a good module system is a very good solution, to rival OO Design Patterns. As modern type systems allow you to express very precise invariants about your modules' behavior, they can be used to help many programmers together write large pieces of code that can then be checked at compile time to behave in a consistent manner. This can save both development time and money. Those are good things.

    --
    --
  206. Re:Don't pick the language first, solve the proble by kfg · · Score: 2

    Not exactly correct. If a product is guarunteed to solve all of your problems the odds are that it will solve a great many of your problems, but less than optimally.

    There will be *some* problems that that it cannot solve at all.

    It wall also solve *no* problems optimally.

    The same largely applies to any purely mechnical device that claims to be "self adjusting and/or maintainence free." They always are, until they need adjusting or maintainence, which you then discover is impossible.

    KFG

  207. Re: Programming Languages by xphase · · Score: 1

    The requirement's don't say that the libraries must be free. I'd assume that if they were looking at C# and VB.Net that cost is not an issue in this case.

    --xPhase

    --
    The following sentence is TRUE. The previous sentence is FALSE.
  208. Re:Operator overloading by statusbar · · Score: 2

    example:
    ---------
    std::string a = "hello", b=", ", c="world", d=".";

    std::string e = a+b+c+d;
    std::cout << e << std::endl;
    ---------

    No c++ compiler can optimize the temporaries out. Each temporary created calls the default allocator for string, which usually is malloc and free which are usually dead slow in an smp/multithreaded environment.

    In this case, using strcat is many many times faster that operator +.

    --Jeff

    --
    ipv6 is my vpn
  209. praxis, praxis, praxis by t_hunger · · Score: 2, Insightful

    The best language is the one *you* know.

    I don't mean know in the sense of 'having read the most about it', but the one you did a real project in. There simply is no perfect language, there are just languages that you know how to work yround its shortcomings.

    Yes, some languages are better suited for certain tasks, but what good is that for you if you have to look up each command in a book? It takes a few month to get 'fluent' in a language. Do you have that time available to get your project finished? If you skip this learning time you will redo much of what you did in the beginning, just because you are ashamed of the ugly code;-)

    Regards,
    Tobias

    --
    Regards, Tobias
  210. Functional Programming by Anonymous Coward · · Score: 0

    Why don't you take a look at haskell.org.
    Haskell is a purely functional language, with pretty much all the features you want, even a GUI lib. Compiles on all types of Unix, as well as Windows and MacOS. Agreebly, moving to a functional language after years and years of writing C-style code can be a rather odd experience, but you catch on quickly.

  211. Use C++ and a GC lib by Steveftoth · · Score: 2

    If you have to have all those features, then you should be using C++ and instead of useing the normal memory allocation routines, just use a C++ Garbage Collector library. They are free, just use google to find them. C++ is the most supported language. It has every feature, and just because it has them doesn't mean that you should use them.

    Personally I think that you should go with java, then only features that it doesn't have is operator overloading and multiple inheritance. Java has good graphical IDE and the code is more portable then C/C++

  212. Smalltalk by Anonymous Coward · · Score: 0

    I know this might seem a bit off, but the list of things you mentioned needing actually matches up well with smalltalk. Its still one of the only pure object languages, with an intuitive IDE, garbage collection, simple GUI use and portability to rival Java. The tradeoff for all of this is that the syntax works under a different paradigm than the standard C, C++, Java stuff. Takes a bit of time to get used to. The code compiles, so in many tests the final code is a bit faster than Java.

  213. My 2 cents (what I tell my students) by wrinkledshirt · · Score: 1

    If you're coding small things, then it's pretty easy -- any language strikes the right balance for you of being fast and easy to maintain, and can do the five following:

    1. Accept input/Produce output
    2. Read from memory/Write to memory (arguably the same as #1)
    3. The ability to repeat actions
    4. The ability to make decisions
    5. The ability to do complex math

    So, basically, it can be any godawful thing you want, so long as it doesn't need lots of eyes looking at it (in which case you might want something with a larger common-demoninator (eg: not pure assembly or something you cooked up one drunken evening with lex and yacc)). Chances are, if you documented it well enough, then if you get hit by a bus someone could either come in and pick up where you left off, or redo the thing in their language of choice.

    If you're coding for a group or a large project, though, your demands are going to be different. Modularity will be necessary, and it probably wouldn't hurt to consider OO for any sort of data construct that might get reused more than once or twice throughout the project. Languages that offer that would be a better choice (C++, Java, etc.).

    If you're looking at distributed programming, consider getting a language that works well with CORBA. ORBit's a free implementation that you can play with, although last time I checked it was mostly C-based and meant primarily for Linux & GNOME.

    If you're looking at a visual-based environment, go with something that builds interfaces easily and can glue into more complicated components (Visual Basic with ActiveX references, or maybe Python/TKinter with C++ components, or whatever). It would also help to mess around with a language that already has a large common base of libraries so you don't have to reinvent the wheel for printing reports or whatnot. As computer speed continues to outstrip inefficient coding (with apologies to the purists) there are fewer and fewer arguments against Visual Basic.

    If you've got to patch into databases alot, there's very little that's cleaner -- and can produce prettier output -- than PHP, although that restricts your interface options somewhat. Fortunately most languages have APIs that can let you work directly with SQL statements.

    Avoid .NET until somebody's built a killer ap with it. Java's still pretty good for delivering binaries that need to run on more than one platform. Don't know enough about functional programming languages to comment on their usefulness. You might want to stay away from lower-level languages if you need to dynamically build strings.

    For text parsing, consider something that works well with regular expressions (ie: Perl). Also, don't underestimate the benefits of learning shell scripting in general, especially if all you want to do is automate some system tasks.

    If you're doing something that involves getting the highest performance possible, you need to go with assembly, C, C++, or some combination thereof. You might want to fork over for a better compiler too, if it's that important to you.

    --

    --------
    Bleah! Heh heh heh... BLEAH BLEAH!!! Ha ha ha ha...

  214. Java garbage collection works fine by Anonymous Coward · · Score: 0

    on a Turing machine with an infinite length of tape...

  215. Use what you know by Laser+Lou · · Score: 1

    My recommendations:
    1. Use a language and tool that you and your staff already know pretty well.

    2. Use several languages or tools if necessary.

    3. If nothing that that you know fits the requirements, determine which one are essential, then look again.

    5. If nothing that that you know fits the essential requirements, don't bother learning a new language for the project. Let someone else handle it.

    --
    No data, no cry
  216. What about Delphi? by DingoBueno · · Score: 1

    How does everyone feel about Delphi? I personally have taken a liking to it. Object Pascal is a pretty and mature OO language. It's obviously short on some C++ features such as operator overloading, but in combination with Delphi's GUI designer and it's portability (kylix!), I think it's an excellent business tool. I've always been a fan of Borland stuff though, maybe I'm biased... What do you think?

    --
    ascii art
    1. Re:What about Delphi? by cheezehead · · Score: 2

      Delphi is great. As far as I know, Object Pascal is single inheritance, so that would fail the list of requirements.

      Of course, the thing that Delphi has going against it is that it's not C++ or Java. That's why Borland released C++ Builder and JBuilder...

      --

      MSN 8: Now Microsoft even has bugs in their ad campaigns.

    2. Re:What about Delphi? by DingoBueno · · Score: 1

      True, Delphi does not support multiple inheritance, but it does support interfaces, which I happen to think are better anyway :) But there is (supposedly) C++ Builder that should appear on Linux soon enough. If it includes the GUI builder I can't wait to try it. And JBuilder is the best Java IDE out there, but I just can't seem to like Java very much...

      --
      ascii art
  217. P.S., the use of a spellchecker. . . by kfg · · Score: 1

    on the above may well serve to illustrate my point.

    KFG

  218. Run for cover! PHB on the loose! by bADlOGIN · · Score: 4, Insightful
    "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.

    --
    *** Sigs are a stupid waste of bandwidth.
  219. The most pwerful language on the planet... by Anonymous Coward · · Score: 0

    ...is FORTRAN! Anyone who says otherwise has clearly never used FORTRAN.

  220. Re:Operator overloading by ajm · · Score: 2

    The java compiler is written in java so I really don't see what you mean by "Java in Java". Now perl, for instance, is an example of a language that can't build itself.

  221. You don't need multiple inheritance by Arrgh · · Score: 1

    You don't need multiple inheritance--IMO it is a fundamentally unworkable concept. See the "diamond problem."

    In a singly-inherited language like Java, you get much more flexibility by simulating "mixin-style" multiple inheritance by using multiple interfaces and delegation.

    This example stolen from Joshua Bloch's excellent book Effective Java:

    public interface Singer {
    AudioClip sing( Song s );
    }

    public interface Songwriter {
    Song compose( boolean hit );
    }

    public interface SingerSongwriter extends Singer, Songwriter {
    AudioClip strum();
    void actSensitive();
    }

    // My own addition
    public class Debutante implements SingerSongwriter {
    private Singer _singer = new ConcreteSingerImpl();
    private Songwriter _songwriter = new ConcreteSongwriterImpl();

    public AudioClip sing( Song s ) {
    return _singer.sing(s);
    }

    public Song compose( boolean hit ) {
    return _songwriter.compose(hit);
    }

    public void actSensitive() { }
    public AudioClip strum() { }
    }

    1. Re:You don't need multiple inheritance by lkaos · · Score: 2

      From a design standpoint, sometimes MI is required. Sometimes an object does need to be two separate things. I am not a Java expert, but I assume a member of an interface cannot be overridden (if it could, than interfaces are just classes that support MI). So, what happens when you have an object that needs to be treated as two entirely separate objects in different places in your code?

      Lets say for example you have a class representing humans, well, you may want to have humans be both a Mammal and an Earthling. Let's assume that there is no interconnection between mammals and earthlings (I couldn't think of a better generic example). You may want to treat a human object as an earthling in one spot of the code, and as a mammal in another spot of the code.

      Assume that each of these have virtual functions that are overridden by the human class.

      If you use interfaces to solve this problem, then that may work, but it's fundamentally wrong because one should treat an interface as a generic object that implements these functions verses an object that actually is this thing.

      MI has pitfalls and can be used very incorrectly, but that doesn't mean that it isn't needed in a good number of circumstances.

      I think the real problem with C++ is that it doesn't have interfaces (or signatures as G++ has done). That makes it necessary to have a great number of abstract base classes that really should just be interfaces.

      That's a whole other issue though...

      --
      int func(int a);
      func((b += 3, b));
    2. Re:You don't need multiple inheritance by Prisoner+Of+Gravity · · Score: 0

      Are mixins the same thing as delegation? Just curious.

    3. Re:You don't need multiple inheritance by Beatlebum · · Score: 1

      "IMO it is a fundamentally unworkable concept"

      Thanks for that pearl of wisdom. I guess Stroustrup did not forsee the issue you point out and nor did his Ph.D. examiners nor anyone else in the CS dept at Cambridge or the language experts at AT&T.

      Hey Jackass, before you make such an emphatic statement you may want to make sure it's true; otherwise you may end up looking like an arsehole in public.

      I hope you and I meet up in a Technical Interview some day. I'll tear you a new one.

    4. Re:You don't need multiple inheritance by Arrgh · · Score: 1

      Wow, and ad hominem attack, an appeal to authority and a threat, all in one post! What a refreshingly rare thing to find on Slashdot!

      I did quite clearly include the universally-understood letters "IMO" in my post, indicating that what followed should have been interpreted as a statement of opinion rather than fact.

      It is an unquestionable fact that multiple inheritance works, inasmuch as software that uses it can be made to successfully compile and run. My opinion, however, is that MI should be avoided, chiefly because it can lead to needless complexity and subtle bugs.

      Obviously, every tool affords some functionality that is easy to make use of, and some that works but is not optimal for a variety of reasons. In these cases, you're often better off using a different tool.

    5. Re:You don't need multiple inheritance by Arrgh · · Score: 1

      It depends on what you mean by "an object that needs to be treated as two entirely separate objects".

      The use of multiple types allows the same object to be used in multiple contexts. Using interfaces (or classes containing only pure virtual functions in C++) instead of MI means that you can export multiple APIs without allowing clients knowledge of any particular implementations of the types specified by those APIs. You don't end up with increased binding to the messy innards of the Mammal or Earthling classes, you just have multiple roles that you can implement however you want, whether through a simple, across-the-board delegation or more selectively.

      It's good pratice to be as general as possible when declaring member and parameter types--for instance, if your method only requires functionality that can be provided by any Map implementation, don't ask for a HashMap in your parameter list, as you could be constrained in future by your choice. Similarly, member variables should be declared using the most abstract type (interfaces are more abstract than classes) that will provide the functionality you need.

      This can help make your multiple-interfaced class even more flexible, since you'll know at compile time if you're relying on the more-specific API of any particular concrete implementation of the interfaces you export.

      Also, when you use delegation and composition rather than MI, you can change behaviour at runtime by using a different concrete implementation!

      As regards "one should treat an interface as a generic object that implements these functions verses an object that actually is this thing", an interface is not a generic object, it's a contract indicating that a particular implementation supports some particular (set of) behaviour(s). When you implement an interface, you're promising to implement that behaviour. When you use a reference to an interface, you're treating that reference as a black box which could contain any one of a number of functionally-equivalent implementations.

      A more concrete version of your example, in Java:

      interface Mammal {
      void suckle();
      }

      interface PlanetDweller {
      double getWeight(); // in Newtons
      }

      class Martian implements PlanetDweller {
      double _mass;
      double getWeight() {
      return _mass * 3.724d;
      }
      }

      class Earthling implements PlanetDweller {
      double _mass;
      double getWeight() {
      return _mass * 9.8d;
      }
      }

      class Spaceling implements PlanetDweller {
      double getWeight() {
      return 0.0d;
      }
      }

      abstract class AbstractHuman implements Mammal, PlanetDweller {
      PlanetDweller _planetDweller = new Earthling();

      void suckle() { }

      double getWeight() {
      return _planetDweller.getWeight();
      }

      void moveToMars() {
      _planetDweller = new Martian();
      }

      void moveToEarth() {
      _planetDweller = new Earthling();
      }

      // Sorry about the mixed metaphor...
      void moveToOrbit() {
      _planetDweller = new Spaceling();
      }
      }


      As with all contrived but off-the-cuff examples, this one doesn't make as much sense as one would like, but it illustrates an elegant way for an object to have multiple types without needing MI.

    6. Re:You don't need multiple inheritance by Arrgh · · Score: 1

      No, "A mixin is a type that a class can implement in addition to its "primary type" to declare that it provides some optional behaviour." [Bloch01]

      In a language like Java that has interfaces and lacks multiple inheritance, mixins can be implemented using delegation, or they can be implemented "in-place".

      For example, any object that you want to sort by must be Comparable . If you implement a Colour class and you want to be able maintain a SortedSet of them in "rainbow" order, you could either implement a ColourComparer class and delegate the equals() and compareTo() methods to it, or implement them in the Colour class. In either case, the Colour class's implementation of Comparable constitutes a mixin.

  222. Crippled approach? by Anonymous Coward · · Score: 0

    Hi,

    My opinion is that large projects tend to require a multitude of tools to solve. If you divide your project into subtasks, you might find out that there are different languages that apply to each of those, and that interfacing is simpler than chopping a task to fit in a language.

    And don't forget, you also have to make a good choice for the source management system (like CVS), and the building enviroment (as make).

    snoopyaddr@hotmail.com

  223. Re:Not exactly true, minority langs introduce cost by Anonymous Coward · · Score: 0

    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 - C#, Java, Python, 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.

  224. Laundry List by cheezehead · · Score: 2

    I don't think there is anything that will satisfy each and every item on your laundry list. No offense, but it seems like a lot of buzzwords linked together. If your boss has any idea about the technologies available, he would not have put this list together. Looks like someone read too many "IT for managers" articles.

    Seriously, how do you know you will need multiple inheritance? Or garbage collection? You have to do a very thorough analysis of your problem before you can come to these requirements.

    --

    MSN 8: Now Microsoft even has bugs in their ad campaigns.

  225. Ada? by x24702 · · Score: 1

    I'm surprised to see that there has been no mention of one of the only true object oriented languages available, Ada95. Using Ada would meet every one of the criteria that you specified, especially the parts about operator overloading and inheritance. Not to mention it is quite possibly the only language with built in multi-threading, no operating system dependant calls required.

    1. Re:Ada? by RussP · · Score: 1

      Bingo! Give that man a cigar.

      --
      I watch Brit Hume on Fox News
  226. Perl of Course by Anonymous Coward · · Score: 1, Funny

    Perl!

    Whenever anyone asks you what language is best to write a program in, smile, and say "Perl".

  227. Why just one language? by lkaos · · Score: 3, Informative
    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 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.
    --
    int func(int a);
    func((b += 3, b));
  228. C++ is the best by Beatlebum · · Score: 1

    C++ has everything you need when it is combined with STL (now part of Standard C++). The generic programming feature alone (templates) makes C++ a more powerful development language. In the past my main problem with C++ was the requirement that the programmer manually manage memory through malloc, free, new, delete etc. In this regard I often wished C++ had an automated memory manager. However, this problem had effectively been solved by implentations of smart pointers, which take care of all the messy issues of allocatiion, deletetion and sharing. Specifically, I use Boost libs (www.boost.org) boost::shared_ptr.

    C++ is a powerful language. In the hands of an experienced programmer it can be used to produce portable, standard, efficient and elegant code. It's not an easy language to master, but for me, I like this aspect. Indeed, with C++ you never stop learning. I just finished reading a book that discussed some very clever and innovative generic programming paradigms that would be impossible to implement in a language such as Java (Modern C++ Design: Generic Programming and Design Patterns Applied http://cseng.aw.com/book/0,3828,0201704315,00.html ).

    I've used Java a lot, it has its uses, but C++ has more features and is open. Remember guys, Java is a closed proprietory language controlled by Sun.

  229. Duh, C++ by labradore · · Score: 2

    First off, gently tell your boss he's nuts to choose an implimentation language or environment by that list. Second, use C++. I don't like it, I don't know many that do like it but it is the standard. When the project is old and dusty there will still be C++ people who can hack on it. When you hire a new programmer, it will be easy to find one that knows C++. When your boss complains that the language and IDE's may not have all those features built in then explain to him that it is more valuable to have competent programmers with "good" tools than idiot programmers with "excellent" tools. If your boss can't see that using either C++ Builder or VC++ for Windows or the myriad options (GCC!) available for UNIX and kin then he isn't the least bit practical and you have to try to get someone else to grandfather a decision into your workgroup (e.g. a higher up boss says: You will use Borland!).

    If you truely feel in your heart that your project would better benfit from Perl, Python, Java, Lisp, etc. and that benefit would last the lifetime of the project then make the case for that language or environment to you boss.

    That laundry list of features is a bunch of bologna. Be practical.

  230. multiple inheritance. Drop it.. Go Smalltalk. by GutterBunny · · Score: 2
    What non-arcane application would need to use multiple inheritance?


    I'd say drop that requirement and go with Smalltalk!! Post a few questions to comp.lang.smalltalk to get more details. It's proven, reliable, syntactically very easy and there's smalltalkers available to staff up with.
    Why spend time solving language issues when you can solve the problems people are paying you for?


    Just my cents: 2.

    --
    managers...why god invented purgatory
  231. Re:Operator overloading by DodgyGeezer · · Score: 1

    " Operator overloading is just fine. As long as you follow the logic of the other uses of the operator."

    Exactly. That's why some places have code-reviews - insane uses of overloading can be caught early and the culprit educated.

  232. One Word... by Anonymous Coward · · Score: 0

    Python.

    Check it out, you won't be disapointed.

  233. Hello Troll by Anonymous Coward · · Score: 0

    *wave*

  234. Operator overload is useful by Anonymous Coward · · Score: 0

    for functors, allowing you to write generic code (OK so generic OO but it's still cool).

  235. PYTHON by Anonymous Coward · · Score: 0

    it's object oriented, operator overloading, function overloading, multiple inheritance, garbage collection, portable across various platforms (more so then java), no need for abstract classes 'cause of the way the language works but I guess you could have it if you really wanted to.

  236. A better approach - Project first -- Tool last by Kefaa · · Score: 2

    Interestingly I make my living providing this type of support to organizations. So here is my standard lead in... "There is no silver bullet." Okay, it is cliché, but it is so for a reason. No product does everything for everyone all the time. Those that get close are often ineffective because the overhead of running them is unexpected costs (system resources, training, or response time).

    Are you planning to retrain your team to the tool and language of choice? Have you prepared for the cost and lost time due to incorporating a new tool and language? Are you prepared for the "first timer" punishment or will you be bringing in experts? Do you know how to tell if they are experts? Can you identify the difference between a consultant and contractor?

    You mention support for multiple-inheritance. Some people argue that if it exists in an application you did not understand what you were doing. Are they correct? How would you know? "portable (at compile-time) across various platforms." Do you know which platforms? Across Linux, SUN, and AIX will be a different list than across Windows, AS400 and MVS. Support for "advanced error handling" and "advanced object oriented design". How would that differ from "standard" version? Does your organization understand how to weigh these features against their long term support and run time costs?

    My experience has been when people ask questions like this, the building is on fire, and they hope someone will have a "tool" to fix a project that is 15 months behind schedule and $3 million over budget. Even if that does not describe you today, it may in 24 months. Determine your project feature needs, consider where you want to be in 5 years, look at the resources (people, $$$, hardware, software) in both cost and availability. These determine your potential for success. Then try to match products against the project.

    If this describes your organization and you are taking this approach I strongly advise reading Rapid Development : Taming Wild Software Schedules It will provide the hard data to show your organization why you cannot tool out of a project issue.

    When the time comes to choose a tool, the significant key is choose something that does not lock you in to anything. As you saw in your initial scoping of products, something will always be better in one product over another. Just avoid the position that a tool vendor must survive for your company to survive.

  237. C++ and QT by Anonymous Coward · · Score: 0

    That's the way to go!

  238. Objective C and a kick in the pants by Herr_Nightingale · · Score: 1

    What platform are you planning to develop for? Your description of the constraints imposed imply that the project itself is secondary in importance to the tools being used. Objective C might fit your bill with some adjustment, although C++ is also a pretty good fit and Python mostly meets your requirements. It sounds like you want to tie the project to a single language. . Does performance matter? What environment will you be running in, ie, large enterprise or hidden in a closet somewhere?
    If my boss came at me with such vague requisites and no real game plan beyond what language to use, I'd give him a snooty lesson in computing science and good business practice, demand design parameters, then specify ASM for the job. Pointy-haired bosses deserve no respect.

  239. Just a quick point... by Glock27 · · Score: 3, Informative
    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!

    --
    Galileo: "The Earth revolves around the Sun!"
    Score: -1 100% Flamebait
  240. Performance of op-overloading by Anonymous+Brave+Guy · · Score: 2
    It generates temporary objects that are created and deleted behind the scenes. This means something as simple as A = B + C will turn into a creation of a temporary to hold the result of B+C and then a call to the copy constructor or operator= for the assignment, and then deleting the temporary.

    Any temporaries in something like A = B + C will typically be optimised away if the operators are properly written.

    More significantly, some of the most advanced techniques in C++ (expression templates) use operator overloading for precisely the opposite effect, leading to some of the most efficient output code of any language going. It would be possible to achieve this without operator overloading, but it would rely on the programmer knowing exactly what he was doing. With operator overloading, the class designer can do the hard work, and the programmer just uses + and * as usual, getting great output without having to know why.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  241. Openstep by Anonymous Coward · · Score: 0

    I think someone (probably more than one) mentioned the Cocoa development framework for Apple's Developer tools. This will only work for Mac OSX development. BUT, the cocoa framework is simply a slight reworking of the NeXT Openstep programming environment, which has no such platform limitations. I would look into it, because the Objective C language extensions and Openstep frameworks actually fit what you asked for pretty well.

  242. Wrong Question by emerika · · Score: 1

    I think your boss is either pulling your leg or a complete numbskull. Franky, it sounds as if he listed every buzz-word in his vocabulary and then said give me something with one of all of these.

    I think you need to look at the product you're building and decide what features you need or want to build it. I would recommend thinking more along the lines of what do you need at a minumum to complete this project. Using features just because they exist or sound coool is the road to hell. You need to understand what these tools are for before deciding to use them (or not to use them) and clearly your boss has no idea what he's talking about.

    I recommend you get an idea what the project is about and try to lead him down the right path, ignoring his uniformed request.

    emerika

  243. Coaco by Anonymous Coward · · Score: 0

    Umm..no Coaco!

  244. Kylix by OverCode@work · · Score: 3, Interesting

    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

  245. Re:Operator overloading by Anonymous+Brave+Guy · · Score: 2
    No c++ compiler can optimize the temporaries out.

    Yes, actually, they can; see "expression templates". I don't know of any major library implementation that currently does this, but the leading ones are all looking at the possibilities.

    Each temporary created calls the default allocator for string, which usually is malloc and free which are usually dead slow in an smp/multithreaded environment.

    That's not true either, I'm afraid. Modern string implementations now use much smarter allocation strategies to boost performance well beyond a naive malloc/free approach. There are a few dragging their heels, but it's unreasonable to judge C++ by its worst examples.

    In this case, using strcat is many many times faster that operator +.

    That's rather unfair; this is a quality-of-implementation issue, and C++ library developers haven't included the state of the art tricks in optimisation across the board yet. Play fair and give them a year or two; C has had a couple of decades' head start, after all!

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  246. One Word-- by Anonymous Coward · · Score: 0

    BASIC.

  247. One Word... by Anonymous Coward · · Score: 0

    Assembler.

  248. Car analogy by droyad · · Score: 1

    Your list reminds me of a statement that can be applied to cars (and most other things including software.

    Fast, Cheap, Good
    Choose 2 of 3

  249. Review your requirements by Anonymous Coward · · Score: 0

    While I have a personal bias (Java) I'd suggest taking a step back to evaluate/group the requirements: business, technology, total cost of ownership, existing development skills, operational infrastructure etc.

    It easy to see why a customer would care about the platform requirements. The development team may care about the IDE. Your company may have already spent $500k on AIX that they'd like to continue to take advantage of. The project itself may benefit or be hindered by using garbage collection because of its uptime or concurrency requirements.

    The most critical factors that I would use to select a language would be, in order of importance:

    1. Meets the business requirements
    2. Leverages existing skills of the existing team
    3. Leverages existing infrastructure (hardware and software)

    As an aside: you can benefit from using something you know well even if it isn't the "perfect" solution just because it is less likely that you're going to make a novice mistake. There's plenty of software that I've written in Java even though it was easier to write in Perl just because I knew I'd get it right the first time using something I knew well.

    I share the opinions of many others on this list that operator overload is both a useless evaluation criteria for selecting a language and generally a bad idea that causes more problems than it solves.

    As the field of software development matures I'm finding that the languages themselves are starting to align with different business initiatives. ADA, .NET, HyperCard and Java all began with strong business justifications in addition to technological. This puts more responsibility on the engineer to understand the problems the languages are solving from the customer's perspective. Lastly, I'd strongly recommend adding one final evaluation criteria: the availability of libraries/components, etc. which can be integrated into the project to limit the amount of custom development. In many cases this will have a much greater impact than the language itself.

  250. Lisp by dspeyer · · Score: 1
    All that exists or almost exists in various forms of Lisp. Consider:
    • intuitive and easy to use IDE -- With a built in interperator, Emacs really shines here.
    • simplified GUI design and event handling -- I haven't really worked with various lisp gui bindings, but the fundamental issue of event handling (convenient function pointers) is a real strength of Lisp's, so you should be able to write a simple front end to any inconvinient library
    • advanced error handling -- Yes
    • advanced object oriented design including multiple inheritance, abstract classes -- I think so, with CLOS, if not, it wouldn't be hard to add.
    • and garbage collection -- Of course
    • full support for operator and function overloading --A little awkward, but it can do it.
    • and portable (at compile-time) across various platforms -- Lisp interperators and compilers are everywhere; do check your libraries, though.
    1. Re:Lisp by Anonymous+Coed · · Score: 1

      You said Emacs and intuitive in the same sentance. die.

  251. REALbasic by Anonymous Coward · · Score: 0

    One language environment that has all of that, (though it's not very good for creating optimized code that has to execute a lot of calculations really quickly) is REALbasic. (I hear the groans) RB is not the most powerful language for calculation heavy programming, but the language does support everything you mentioned, and the IDE is about as easy and intuitive as you can get. If you don't need speed demon development, look into it.

  252. Powerful language doesn't mean too much by karb · · Score: 1
    At least, not too much more than a slightly less powerful language.

    In a production system, you are probably only going to spend 5 to 10% of your total time coding. Something that doubles or halves coding time may only add 5% or subtract 5%, respectively, to/from total project time.

    Most important language traits (to me).

    • It should be good, but doesn't have to be great.
    • There should be good development tools that can be used with it.
    • Unless you're some kind of savant, you should make sure that there is a good-sized community to which you can turn for advice.
    • Unless you have really good contacts, or you're never going to grow much, there should be a reasonable number of people that program in that language.
    • It should have good support for the kind of applications you are doing (API-wise).

    So, frankly, Ruby is probably a better language than java. But java wins on four of my five criteria and ties on the remaining one. I wouldn't try to deploy a system right now with anything other than java or C++, unless it is going to be a very small project, or you are brave. :)

    Unfortunately, many of the people who promote using various obscure languages have good results just because they are very intelligent people. Unless you are really really smart (and I know that I, for one, am not), you might just want to stick with the herd. :)

    --

    Jack Valenti and the MPAA are to technology as the Boston strangler is to the woman home alone

  253. Key Feature by Moonshadow · · Score: 2
    Regexes. No contest. After using them, it's difficult to imagine any mature language NOT having them. They're simply too powerful to ignore. It's a rather crippling feeling to have to work in a language that does not support them after having used them for a while.

    I've been working in PHP and Perl for about a year and a half now, and all my university classes are all taught in Java. While there ARE regex libraries for Java, they aren't standard, and therefore aren't used when testing student submissions. I find myself pulling my hair out time and again when I run up against a problem that could be solved easily enough with a regex, but requires, due to the language, that I solve it the hard, long-winded slow way.

    If you're gonna write a new language, make regexes native!

  254. The best language by Anonymous Coward · · Score: 0

    The best language of all is Common Lisp.
    99.9% of you are too g8dd8mn dumb to understand it.

    That was all I had to say, goodbye you sorry a88 punks.

  255. Delphi??? by LordRiper · · Score: 1

    way nobody says Delphi?

    1. Re:Delphi??? by Anonymous Coward · · Score: 0

      And compiling a delphi program is lightningly fast!

  256. REALbasic addendum by Anonymous Coward · · Score: 0

    One more thing about the language which may be a drawback for you, the programming environment only works on a mac, BUT it automatically creates the code to run on windows, too. So if you don't mind working on a mac for programming, you can quickly develop cross platform apps.

  257. Ada 95 has it all by WeeGadget · · Score: 1

    Ada 95 is Object Oriented, has operator overloading,memory management and all the other buzzword compliant stuff.

    Of Course, if you actually use Ada 95, you probably need your head examined...

    Jono

    1. Re:Ada 95 has it all by WildBeast · · Score: 2

      hey now it's not my fault if they teach us Ada in college.

    2. Re:Ada 95 has it all by RussP · · Score: 1

      If you actually use Ada, you may actually be writing quality software. Warts and all. (Beauty is only skin deep.)

      --
      I watch Brit Hume on Fox News
    3. Re:Ada 95 has it all by Black+Parrot · · Score: 1


      > Of Course, if you actually use Ada 95, you probably need your head examined...

      I resemble that remark.

      Is there any reasoning to back up your statement?

      --
      Sheesh, evil *and* a jerk. -- Jade
  258. Re:Operator overloading by Hal-9001 · · Score: 1

    I thought both the Java compiler and the JVM were written in C.

    --
    "It take 9 months to bear a child, no matter how many women you assign to the job."
  259. OK, Dude... by frank_adrian314159 · · Score: 2
    ... just tell your fsckin' boss to Ask Slashdot himself so we can kick his ass, too :-).

    BTW, the ONLY languages that cover the entire set of design criteria listed are Allegro Common Lisp by Franz, Inc. or LispWorks by Xanalys. But something tells me that your boss isn't interested in hearing that answer, either.

    --
    That is all.
  260. An alternative direction by Frank+Sullivan · · Score: 2

    Rather than looking for a buzzword-compliant language, might i STRONGLY suggest that you read "The Pragmatic Programmer", by Andrew Hunt and David Thomas? The clear, solid, *useful* ideas in that book will maybe, just maybe, cure you of your faith in buzzwords - or at least your willingness to blindly march over the cliff your PHB just sent you to investigate.

    Language features will not in and of themselves make for a successful programming project. I'd argue that they're merely a convenience for good programmers, and often and impediment for poor ones.

    That being said, look at a multi-language approach to development - an interpreted scripting language (Python, Perl, VB(ewww)) mixed with a stricter compiled language (Java, C++(ewww)). And don't forget SQL, which is a respectable language unto itself, and very important if your project involves a database.

    Good luck, and may the God Murphy Goddess Eris have mercy on your soul.

    --
    Hand me that airplane glue and I'll tell you another story.
  261. ``while loop'' class. by Kaz+Kylheku · · Score: 3, Insightful

    [Sorry about the ugly plain text formatting, but it's sometimes the only way to get code examples in properly on SlashDot.]

    I hope it's obvious to you how inferior this is. The real while loop doesn't require you to package up your test and body as a function. When you do that, you have introduced a problem of context, which breaks the abstraction.

    By the way, in Common Lisp, you CAN implement the while loop as a function, and yet provide it as a ``language-level'' abstraction as well. Here is how:

    (defun while-func (expr-fun body-fun)
    (tagbody
    :again
    (cond
    ((funcall expr-fun)
    (funcall body-fun)
    (go :again))
    (t (return-from while-func (values))))))

    (defmacro while (expr &body body)
    `(while-func #'(lambda () ,expr) #'(lambda () ,@body)))

    So you can now write something like this loop, which prints numbers from 0 to 9:

    (let ((i 0))
    (while (< i 10) (print i) (incf i)))

    Note how the while body can still refer refer to the local variable i, even though our implementation choice was to package up the expressions and use a function. This is the crucial difference, which sets this apart from the solution that uses functions only. Nobody would use your proposed while loop class, because they would have to carve their program into functions in a completely stupid way, with no access to local variables. Even if you had closures in the language, people wouldn't use it; if you gave a Lisp programmer the above while-func only, he or she would find it necessary to invent the while macro to actualy make it easy to use.

    Now to respond to your comment:

    > But since there's already a built-in while, what was with the stupid fake example?

    Sorry that I touched some sore nerves. I just wanted to pick a very simple example of an extremely simple control abstraction that cannot be implemented in these languages; it's not relevant that they already have it, because the implication is that it's impossible to make other abstractions that they do NOT have.

    >What are you trying to prove? That these languages are geared towards efficiency and
    >readable syntax instead of generalized object-oriented programming? Well, if so
    >you're right.

    Not at all. The point is that they have limited abstraction-making ability, because you are stuck with one rigid syntax. I won't respond to your remark about efficiency, whatever you mean by that. (Execution efficiency? Programmer efficiency?)

    When you have a rigid syntax, the language is good for certain domains. When you try to solve certain problems, though, the rigidity will get in your way. You may have readability at the microscopic level, due to the use of a small repertoire of built-in syntactic forms, but that readability will be drowned in the morass of code that you will have to crank out. Remember, assembly language is readable too. You have a few instructions, a few addressing modes and everything is in nice columns. But once you crank out a large body of assembly language, it may still be readable, but it's not *grokkable*. Whereas the corresponding C program may be quite grokkable.

    1. Re:``while loop'' class. by pb · · Score: 1

      I agree that your solution is much more elegant, that languages like Lisp and Scheme and Perl and Forth make it much easier to create functions that work like language primitives, and that closures and lexical scoping of variables are good things.

      However, it is certainly possible to implement the functionality of a while() loop in C, C++, or Java using their primitives; and the solution might end up being crippled or somewhat braindead, but I disagree with your assertion that no one would use it. They're already using Java, aren't they? :)

      Also, remember that while() is already implemented in C. C, C++, and Java are generally implemented in C, so it's not just possible, it's essential. Now, it might be considered cheating to write a whole COMPILER to do this instead of a function, but that's what happens when you aren't working with a language that was designed to be interpreted. (except Java; there's no excuse for Java here)

      --
      pb Reply or e-mail; don't vaguely moderate.
    2. Re:``while loop'' class. by Kaz+Kylheku · · Score: 2

      Your defence of C and C++ is rational, but unnecessary. These are stone age languages designed for embedded programming. They don't have to have an excuse for lack of abstraction-making.

      The point is not that the Lisp solution is elegant, but that it's as seamless as a built in language feature. This only looks elegant on a small scale, for something trivial. When it comes to non-trivial applications, it's more then elegant: it's essential. It's easy to mistake having the right abstraction for mere elegance.

      A while loop done at the right level of abstraction requires the user to only be aware of three juxtaposed elements: some symbol to indicate that a while loop is to take place, a controlling expression, and a group of expressions to evaluate repeatedly while that expression is true. These expressions must be evaluated in the same context as they would be if the while loop were absent, otherwise you don't have a clean abstraction. They must be located together in the while loop.

      My argument was never that you *can't* implement the *behavior* of ``while looping'' in these other languages, only that you can't implement the actual abstraction of the while loop. That's a big difference. Turing equivalence is completely irrelevant when you are looking at human productivity. No sane programamer would use the horrible pseudo-while-loops that were proposed in this thread. It would be easier, cleaner and more readable to just use if and goto, if those were available.

      A robot programming could be equally productive in a variety of different programming languages, because that robot could use an ideal language in its brain, do the compiling internally, and then type out the volumes of crap in some given language to get the job done. A few humans are able to do something resembling this, but even they cannot understand their results months later, when their ``internal'' program has faded from their memory, and none of it had been communicated to others.

      What we human programmers need is for the abstractions to be pushed out of the brain and into the language. In the language, the abstractions can be correctly and reliably automated, and communicated to others.

    3. Re:``while loop'' class. by pb · · Score: 2

      This is a good point for when you want to re-implement basic language features and keywords, and not functions. The "Lisp approach" is seamless.

      However, the reason that we end up with trivial examples in C or C++ is that almost everything in those languages is implemented as a function, and functions CAN be replaced seamlessly.

      However, I suppose that if the C language had been extensible in the first place, then there would have been no need for C++, since it could have been entirely implemented in C as common headers supporting various different features. And the same would go for Java, or at least the Java features that aren't incompatible with C and C++.

      Oh, and who said that programmers were sane? That robot you described is commonly written by programmers to cope with the inadequacies of whatever language they are forced to work under, or for migration from one language to another. I recently wrote a (fairly trivial) Perl script to partially convert from one bogus web pre-processing interface to another, but their feature sets map much more readily than, say, Lisp and Java...

      --
      pb Reply or e-mail; don't vaguely moderate.
  262. Sorry, but you've got me completely there. How is the result in any way "unspecified"? (Please don't throw Mickey Mouse arguments about overflowing at me; I won't be impressed.)

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    1. Re:WTF? by __past__ · · Score: 1
      Why not? The size of an integer - and when it overflows - is "implementation defined" in both C and C++. There is no way of saying what this function returns for a given input other then referring to your specific compiler's documentation.

      And no, "all the world uses GCC" is not an argument.

    2. Re:WTF? by Anonymous+Brave+Guy · · Score: 2
      The size of an integer - and when it overflows - is "implementation defined" in both C and C++.

      Within reason, yes it is. However, there are plenty of mechanisms so that you can robustly check your code at compile-time if you're in danger of reaching the guaranteed limits on integer types.

      If you think the alternative -- fixing the size of all your integer types -- makes code more portable and future-proof, you need to stay around a few more years and see how your setup works on a 128-bit system, or try cross-compiling to a 12-bit processor.

      And no, "all the world uses GCC" is not an argument.

      I never even implied it was. However, the popularity of C and C++ is very much down to the portability offered by these "implementation-defined" features. How many other languages are used on such a wide range of processors?

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    3. Re:WTF? by Anonymous Coward · · Score: 0
      If you think the alternative -- fixing the size of all your integer types -- makes code more portable and future-proof, you need to stay around a few more years and see how your setup works on a 128-bit system, or try cross-compiling to a 12-bit processor

      The alternative is adaptative integers (i.e. arbitrary precision bigints when you overflow them).

      However, the popularity of C and C++ is very much down to the portability offered by these "implementation-defined" features. How many other languages are used on such a wide range of processors?

      C is popular because it is a (THE) system programming language, so most modern OSes have it per force. It's a crappy application programming language.

      C++ is as much unpopular as it is popular.

    4. Re:WTF? by Anonymous Coward · · Score: 0


      Yeah baby, this is a tough world. And you are not ready for it.

      Ps.: Do you also have real problems ?

  263. Re:Operator overloading by kin_korn_karn · · Score: 2

    AMEN TO THAT. Someone mod him up +1 zillion insightful.

    Java is a language for typists, not programmers. one brain, many code monkeys.

  264. Common Lisp by dagbrown · · Score: 1

    Looks like what you're actually looking for is Common Lisp.

  265. Have you looked at the Qt library from Troltech... by ThomasMis · · Score: 1

    Keep in mind that like anything else, in software development you need the right tool for the right job. If your looking to create a cross-platform application with a mature and well supported tool-kit, then I would say look at the Qt cross-platform application framework library from Trolltech. Most people here will be most familiar with Qt as the library that KDE was built with. If you are coming from a Win32 background, Qt can be compared somewhat to MFC. Except Qt is MUCH MUCH easier to use (I've been part of a couple large projects that used MFC, so I understand it's many pitfalls). Qt is portable across Windows, Linux, and Mac. It's on version 3.0 so it's mature. It has a free evaluation version, so download it and give it a try. For Linux (I've only used the linux version so I don't know if there is a Windows version, I've never looked into it) there is a GUI IDE that makes application programming using Qt with C++ just like Visual Basic. In so far as, you drag and drop your controls onto your template app, then add event haddlers and whatnot.

    Now... let's discuse my consulting fees.
    Treknetix, for all your coding needs

    --
    Check out my podcast: DreamStation.cc Video Game Show
  266. Wrong focus by tfa · · Score: 1

    You are really asking somethings that really is impossible to answer unless you are much more specific about the project you are to implement.

    Some of the requirements rules out each other when coming down to the different languages. The only language that really seem to fit you descriptions close is C++ and then you'd have to select a GUI toolkit to go with.

    You havn't said much about what the average experience of the developers on the project, how many there are and which platform they will be running their IDE on. If there are many that run windows it would be wise to go with ( f.ex ! ) Visual C++ as it has a basic IDE. Porting to different platforms could be done by some of the more experienced developers.

    On the subject of porting, C++ is really terrible if you want to use language support for large scale project. Mozilla has quite a few notes on this, dont't remember the URL but I'm sure you'll find the page on their homesite.

    I also find it very disturbing that you mention all the hyped up features of languages. Please note that a computer language exist to solve a problem and different languages have different solutions to them.

    Another interesting rumour I've heard ( very unconfirmed so take this with a grain of salt ! ) is that Lockheed is to build Joint Strike Fighter with C++ as the main language. The reason seems to be that there isn't enough Ada developers out there ( shame on you ! ). This might be a consideration if your project is big enough ( welcome to the real world )

    As a little round up : you should try to concentrate on the functional specification of the problem and try to come up with a prototype design. Then you will probably get a good idea which language to use. If you don't have a history in your company ( or whatever org. ) with a language you are best to put of this decision for some time. Not too long, then it become a risk item ! Remember that it takes alot of time to train developers in new languages if they tend to among the average.

    Good luck, you'll need it !

  267. what's the big deal with IDEs? by Anonymous Coward · · Score: 0

    What is it that is so efficiency-enhancing about IDEs? Not a troll, am really curious.
    I think I would consider getting another job if my boss forced me to use something other than vim for my coding. I have heard that vim can be used within some IDEs, so that might be acceptable. Any info on this?

  268. i agree, as long as... by Preposterous+Coward · · Score: 2

    ...the job to be done is properly defined. It probably has to include maintenance, provision for the programmer's leaving the company, and so on. In other words, it's more than just performing the task at hand, it's the long-term objective that the tool you're creating is trying to achieve.

    --

    "Biped! Good cranial development. Evidently considerable human ancestry."
  269. Wrong question by monk · · Score: 1

    The real question is: How do these arbitrary requirements tie to anything that actually matters to a stakeholder? Start off with, "Why should we build this thing?" And move from there.

    Requirements like "including multiple inheritance" or "operator overloading" have nothing to do with the usual reasons we build software and should always be questioned. You should go back to your boss for clarification on how these features are expected to add value to the project. His reponse might be an actual requirement if you make him be specific. "Such as the system will have to be reused by ignorant monkeys." In which case you can suggest that only COTS (Commercial-Off-The-Shelf) software be used.

    The only exception to this rule is if you are currently working a government project. (Which is what this sounds like.) In which case your boss has already made the decision to buy not build and is stating this in language sure to make procurement agree with him.

    --
    [-- Trust the Monkey --]
  270. How about PHP? by cr@ckwhore · · Score: 2

    Believe it or not, PHP might be a good option on a technical level. There are a few really nice IDEs available for PHP, and with the new release of PHPGTK, its really shaping up to be a good all around programming language.

    --
    Skiers and Riders -- http://www.snowjournal.com
  271. programming languages are engineering tradeoffs by markj02 · · Score: 5, Informative
    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.

    1. Re:programming languages are engineering tradeoffs by Frums · · Score: 1

      Not to be a snit, but there is: Fortran still mops the floor with C or C++ for most numerical processing tasks.

      -Frums

    2. Re:programming languages are engineering tradeoffs by vil · · Score: 1

      Fortran is a great counterexample for the other point, too: it is even worse than C++ for GUIs. :-)

    3. Re:programming languages are engineering tradeoffs by fanf · · Score: 1
      You want overloading? Great, but type inference goes out the window.
      Haskell has overloading and type inference. The way it achieves this results in a weird not-your-mother's-OO type system, which is nevertheless very elegant.
    4. Re:programming languages are engineering tradeoffs by markj02 · · Score: 2
      Fortran is somewhat more efficient than C++ in many applications. OTOH, Fortran's support (even in the latest versions) for genericity is very limited compared to C++.

      However, there is no intrinsic reason for this to be so, as far as I can tell. Fortran's efficiency depends on aliasing restrictions, which could be added to C++ (there have been attempts) without otherwise disturbing C++'s abstraction facilities. Conversely, there is no reason why Fortran's type system couldn't be extended to include C++ templates.

    5. Re:programming languages are engineering tradeoffs by Black+Parrot · · Score: 2


      > You want a very expressive object system? Great, but you don't get static type checking anymore.

      You do with Ada95.

      > You want overloading? Great, but type inference goes out the window.

      Not with Ada95.

      --
      Sheesh, evil *and* a jerk. -- Jade
    6. Re:programming languages are engineering tradeoffs by Kirruth · · Score: 2
      Haskell has overloading and type inference. The way it achieves this results in a weird not-your-mother's-OO type system, which is nevertheless very elegant.

      Haskell is a truly amazing language. I'm very surprised its not more popular than it is.

      --
      "Well, put a stake in my heart and drag me into sunlight."
  272. C++ Builder by stdcallsign · · Score: 1

    Trying to sound as unbiased as possible: I would have to say that C++ would most closely match your requirements. To make it match more closely. Use C++ builder which has Cross-Platform support for Win32 and Linux. It also has a very advanced IDE and API for Rapid application development including extremely quick creation of GUI's. It also has a great event handling framework.

    stdcallsign

  273. In further news...... by Atrax · · Score: 1

    ... "Ask Slashdot" to be renamed "Bait Slashdot"

    --
    Screw you all! I'm off to the pub
  274. Better still, Python's successor by leonbrooks · · Score: 3, Informative

    Ruby!

    All of the above in sensible doses. Plus it's more fun. And a prettier colour. (-:

    BTW, XP isn't a cheap ripoff, just a clumsy one. I suspect that the TCO will work out noticeably worse than WinME. Windows started life without scaleable elevators (to pick a known example) because one William Henry Gates III told the developers to take them out again so that it looked more Mac-like. Dilbert of a few days ago is fitting commentary.

    Dons asbestos undies, prepares to duck...

    --
    Got time? Spend some of it coding or testing
  275. Language Idea - SE by Laser+Lou · · Score: 1

    Here's a language idea: "SE", short for "Supports Everything". And if you want more, call its successor "SE++".

    --
    No data, no cry
  276. Instead of Looking for the Perfect Language by Greyfox · · Score: 2
    Why not look for programmers who can actually program in whatever language you end up choosing. Find some people who actually understand the tenants of good design and who can produce well factored and maintainable code. It is my experience that the various tools that exist to "make programming easier" attempt to mask piss poor programming habits while at the same time promoting another set of very bad habits.

    Get good programmers, get their input on your implementation language and tools, declare whatever you decide upon as your shop's standard and get to coding.

    --

    I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

  277. GNU-Script by Kidbro · · Score: 2

    I'd definately go for GNU-Script.

    Now, just click that link, and you won't even have to make the choice any more. GNU-Script does that for you.

  278. Fashionable programming languages by trippd6 · · Score: 2

    "Fashionable programming languages don't equal useful software" - Eve Andersson

    Slightly off topic..... but not at the same time....

    -Tripp

  279. At the risk of sounding really wierd... by Amazing+Quantum+Man · · Score: 2


    Ada95. Only missing the MI thing (and maybe the IDE, but that's irrelevant, IMHO).

    All the other posters have pretty much nailed your problem: The Boss(tm) is specifying implementation, not requirements. You need to determine what you're trying to do before you actually spec out the language(s). And <AOL TYPE=ME-TOO>your boss is simply throwing in every single buzzword he's ever heard.</AOL>

    Further, who says you need only ONE language: Example: in a previous life, we had to do some Windows code, using a custom third party ActiveX control. Hence, we did the UI in VB, and the backend code in C/C++.

    --
    Fascism starts when the efficiency of the government becomes more important than the rights of the people.
  280. Re:Operator overloading by statusbar · · Score: 2

    I know about expession templates, and also know why they are not used in std::string. The allocator I am not worried about - if there are no unnecessary temporaries, then there is no need for unnecessary allocations. However, at this point, many stl's are still doing this.

    So, in summary, yes now it is slower but maybe not in the future.... Is that fair to say? Does that mean c++ is not ready for prime time? of course not, I use it all the time. But you gotta know when to forgo the syntactical sugar that causes c++ to be unnecessarily slower than C (even when the C is coded safely).

    --jeff

    --
    ipv6 is my vpn
  281. Re:Don't pick the language first/excellent post by ramanujan · · Score: 2, Funny

    It's like walking into Home Depot and asking the contractor's desk, "Excuse me! What's the best tool?"

    ;)

  282. Re:Have you looked at the Qt library from Troltech by ThomasMis · · Score: 1

    .... using Qt with C++ doesn't have one point on your list of criteria that i failed to mention: No garbage handling, because no mananged environment. But real programmers delete their own allocated memory.... right?... err.... ok... nevermind.....

    --
    Check out my podcast: DreamStation.cc Video Game Show
  283. "Ask Slashdot" in disguise? by Fourier · · Score: 1

    What a pain in the ass. I click the box to filter out "Ask Slashdot" posts, then Cliff goes ahead and files this under "Developers". Thanks a lot, Cliff.

  284. you're fired by mikemulvaney · · Score: 2

    ...I'd #define away their ridiculous verbose names into something short and memorable ...

    Instead of writing unreadable code, maybe you should check out a new text editor. If you start using xemacs, for example, you can use Meta-/ to fill out the rest of a word. So, for example, if you have ever typed the word "SimpleDateFormatter" and you want to type it gain, you can type in "Simp" and the editor fills it in for you.

    While I agree that a preprocessor would be useful in very, very limited circumstances, introducing things like "I don't like the name of that object so I will #define it to something else" is exactly the reason java doesn't include one. We don't want each developer to make up his own standards, much less his own names for things.

    -Mike

    1. Re:you're fired by demo · · Score: 1

      ... and the same in vim. (C-p og C-n)

      --
      ---
  285. Garbage In, Garbage Out by augustz · · Score: 4, Insightful

    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.

  286. Kylix/Delphi by Anonymous Coward · · Score: 0

    Well Delphi might fit your bill. It offers Multiple Inheritence, Object Oriented reusable code. Plus has the advantage of being able to be compiled with Kylix so you can run your app on both a windows an linux machine.

    1. Re:Kylix/Delphi by treierts · · Score: 1

      Delphi doesn't support Multiple Inheritance or Automatic Garbage Collection.

  287. Delphi??? by Synchis · · Score: 1

    It may be just me, but after readint hrough the list of replies, I didn't see Delphi suggested anywhere...

    Delphi has many, if not all of the language features that were requested. I've programmed in Delphi for a good 5 years or more, and other than the general lack of enthusiasm for the language which seems to be so widespread, it has always been my favourite. It allows rapid development with minimal overhead, and one of the coolest features I think, is the way it packages the final project. In most cases you can develop applications which have nothing more than just the executable.

    Give it some thought, its one of the most commonly overlooked languages as of late... but one of the most powerfull on the market for rapid application development...

    --
    Thomas A. Knight
    Author of The Time Weaver
  288. Wrong question by Lumpish+Scholar · · Score: 5, Insightful

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

    --
    Stupid job ads, weird spam, occasional insight at
  289. oversimplified by ttfkam · · Score: 2

    You forgot to mention that with strcat, you are responsible for buffer allocation/deallocation.

    For C++ you can write
    --------
    std::string a="hello", b=", ", c="world", d=".";
    std::string e;
    e.reserve( a.size() + b.size() + c.size() + d.size() );
    // or e.reserve( SOME_APPROPRIATE_CONSTANT_VALUE );
    e = a;
    e += b;
    e += c;
    e += d;
    std::cout e std::endl;
    --------

    Modern C++ implementations wouldn't create a temporary in this case because the target buffer has already been made large enough for the source data. The only reason you don't have to worry about it (and strcat seems faster in your mind) is that you have already made the multiple calls to strlen to make sure that the target buffer is large enough or you have chosen what you consider a large enough target buffer (which is subject to buffer overrun errors in some circumstances).

    And it's still easier to use than strcat. AND this probably isn't your program's hotspot anyway. Premature optimization and all that.

    --

    - I don't need to go outside, my CRT tan'll do me just fine.
    1. Re:oversimplified by statusbar · · Score: 2

      Ok, so now you are not using operator +, you are using operator +=, in a very similiar way that one would use strcat. In fact, I wouldn't use strcat anyways, if it were a hotspot I would have a more efficient method that allowed chaining.

      It solidifies the point - remember that just because there is a nifty 'operator +()' doesn't mean that it is always better to use just because it syntactically looks nice.

      Of course premature optimization should be avoided. But people should keep in mind that by using operator overloading excessively, you may make it real tough to refactor the code that does turn out to be a hotspot in the end.

      I have been very disappointed in the quality, bugginess, and speed of many implementations of the STL and standard library.

      --jeff

      --
      ipv6 is my vpn
  290. Theoretical Answer... by Dan+D. · · Score: 1

    Is anything sufficiently complex enough to emulate any other language. Roughly this is the Church/Turing hypothesis for maximum expressibility... if you can't express another language, then you're language isn't very powerful.

    --
    People who quote themselves bug the crap out of me -- Me.
  291. Re:Operator overloading by Anonymous Coward · · Score: 0

    Well, anything that can be implemented in a HLL can be implemented by writing machine code.

    But we like higher level constructs.

  292. import java.lang.reflect.*; by autopr0n · · Score: 2

    I have a dream, that one day people will know what they are talking about before they spout off like morons.

    --
    autopr0n is like, down and stuff.
  293. Why stick with ONE language? by MAXOMENOS · · Score: 2
    My question would be, why do you want to stick with just one language?

    I've worked on several projects that were coded in multiple languages ... whether it was a client coded in Python and a server coded in Java, or a series of programs coded in C++ and Perl all tied together in one big Perl script, or whatever.

    Given the criteria that you laid down, I'm not sure that ANY language will meet your criteria. However, you might want to explore using a combination of Python and C++, where you use Python to do the majority of development (including GUI development) and C++ to write the 20% of your code that runs 80% of the time. GUI development in Python is a snap, and it gets even easier if you use GLADE. The one major disadvantage to this technique is that you don't have a single, simple IDE; you may end up with two IDEs, such as Visual Python and Codewarrior C++.

    Just my two cents, probably worth less than that.

  294. More complicated then that by autopr0n · · Score: 2

    "Java 2" has been out for quite some time. Ever since JDK1.2 was released with a hugly expanded API. It goes like this:
    JDK1.0 - Java 1
    JDK1.1 - Java 1
    JDK1.2 - Java 2
    JSDK1.3 - Java 2 (JSDK = java standard dev kit, but everyone still calls it JDK)
    JSKD1.4 - Java 2
    etc...

    --
    autopr0n is like, down and stuff.
    1. Re:More complicated then that by Methuseus · · Score: 1

      What I meant was JDK2.0, not Java 2. Sorry for the confusion.

      --
      Two things are infinite: the universe and human stupidity, though I'm not yet sure about the universe. - A Einstein
  295. oooooh! by Anonymous Coward · · Score: 0

    Use PowerBuilder! hah. Right.

  296. PHP by Anonymous Coward · · Score: 0

    Use it, use PHP.
    Use PHP GTK for GUI/UI, use PHP-SDL for any gfx/sound.

    bye

  297. The perfect language by Anonymous Coward · · Score: 0

    "If you were to design a language from the ground up, what features would you include and why?"

    Easy. My language would have only have three commands:
    DEFU string -- define who the user is
    RUMM -- read user's mind into memory
    EXECM -- execute program in memory

    The programming language is flexible enough for all needs. For instance, your ideal programming language would be implemented as:
    DEFU SlashDotPoster
    RUMM
    EXECM
    This program executes in 1s (the bottleneck is the RUMM command since there's a lot to read).

    The program that you show sales and marketting would be defined as:
    DEFU SalesAndMarkettingPrototype
    RUMM
    EXECM
    This program executes in 1s (the bottleneck is the DEFU command since marketting doesn't know what they want. Reading the entire contents of their minds into memory should be instantaneos since there's not a lot to read.).

    The product that you actually ship would be:
    DEFU WindowsUserWhoEnjoysRebootingRandomly
    RUMM
    EXECM
    This program executes in 1s (the bottleneck is the EXECM command -- rebooting takes quite a while, especially if you have RAID and SCSI).

  298. Well... by autopr0n · · Score: 3, Interesting

    Say you have: ComplexNumber a, b, c, d, e, f;

    Would you rather have:
    ((a^b+e)/c*(d+b+a+b)

    Or

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

    --
    autopr0n is like, down and stuff.
  299. Requirements gathering? by CausticPuppy · · Score: 2

    Honestly, to me it sounds like the original question was a hypothetical one. If somebody actually did have a boss that laid out the "requirements" of a project in terms of what fancy buzzword features the development environment would support, then the project is doomed to fail.

    The requirements need to be in terms of: what will the user interface look like? Is it client server, standalone, what kind of network communication is required, and basically everything else involving what is this application supposed to do? If you don't know any of that, it makes no sense to even pick a language.

    This is like your boss saying he wants you to construct a bridge, and you have to pick ahead of time whether your bridge is going to be a suspension bridge, cantilever bridge, truss... well it's kind of hard to make that decision if you don't know how high or long the friggin' thing has to be, what kind of load will be travelling over it, and whether you're gonna be going over water. If you pick the wrong technology for the job, your project will go way over budget and the developers will hate every minute of it.

    --
    -CausticPuppy "Of all the people I know, you're certainly one of them." -Somebody I don't know
  300. Buzzword compliance by WMNelis · · Score: 1

    I have used C, C++, Java, VB (pre .NET), Perl, Python, and LISP. As far as I know, you are correct in claiming that none of these languages fit all of the criteria.

    Your boss seems to be very buzzword aware. Did he cite any reason for needing the various criteria? I have only found a reasonable need for multiple inheritance in a project once. And as for operator overloading, it's just sintactic sugar. It's nice, but certainly not a necesity.

    As for easy to use IDEs and simple GUI design tools, C++, VB, Java, (I'm sure C# too, but I haven't used it) all have them. By simple event handling I am assuming your boss meant GUI events, which any language with a simple GUI design should have (if it doesn't, it's not a simple GUI design).

    As far as abstract classes are concerned, any OO language has them, or else the language is not really OO. VB 6.0, by the way, is not really OO (VB.NET may be, I'm not sure). Function overloading (or polymorphism) is also part of any true OO language.

    As for portability across platforms, your choices have been severely limited. As far as I know, the only mainstream OO language that is cross platform is Java (again, this is only as far as I know).

    Garbage collection is not all it's creacked up to be. Yes it will return memory for you, but not other resources (such as closing files, sockets, etc.). Also, in Java anyway, you CAN'T force the cleaning of memory since there are no destructors, so you just have to wait for the garbage collector. The lack of destructors also makes the cleaning up of resources more difficult.

    I would recommend gaining as much insite into what problem the project will be solving. Once you know this you can weigh the value of each of the criteria, and choose the best language for the project accordingly.

    Hope this helps in some way. Good luck.

    --

    Sig free since 2/6/2002
  301. History lesson... by jschmerge · · Score: 1

    Smalltalk has all of the features your looking for, unfortunately, it's an interpreted language without much support for integration with modern technologies (i.e. cgi, sql, etc).

  302. Other factors perhaps to concider.... by nic_strong · · Score: 1

    Is this application going to be a gui only application or will there be some large domain object model (client or server side) driving the application ?

    From my experience with large scale OO systems the complexity of the domain model and its interaction with the gui views (e.g. corba/messaging/relational mapping etc etc) becomes the most complex part of a large dynamic system, to the point where the gui becomes irrelevant.

    If this is the case I would also concider whether the choosen language is going to sit nicely with the persistance layer you choose, and also another point overlooked; what constructs will the language provide for implementing your object model (for example I prefer the template based C++ collection classes to the everything inherits from Object hetrogenous (read cast!) way that java handles collections). To often I have seen that the bulk of the complexity in the implementation model come about because the language, libraries and persistancy layer do not allow an easy mapping from the conceptial model. Not what you want when you are modelling a complex domain!

    Just my 2C

    --

    --

    Nic
  303. OCaml and more by sergeaux · · Score: 1

    Suppose we have to develop an OLTP. What happens when number of tables becomes several hundreds? How to maintain forms designed two years ago? What happens when the logic fails to behave in the expected way because of being overy complicated? No language will help you when it comes to dealing with the good old enthropy. Now forget OLTP.

    The problem is that as soon as development begins, the idea of what needs to be developed is being gradually replaced by how the things are being done. The declarative meaning gets lost for the sake of imperative implementation. It is quite uncommon that the rules of how to get "imperative" from "declarative" are not being lost.

    My personal opinion: never try manually coding the entire system. Use automation where possible.

    My personal belief is that Objective Caml is one of the best tools to make generators of all sorts. It is not that it has any unusual features. It is very simple, has very little caveats of any sorts, and powerful enough. As soon as you fix typing errors, you risk getting the right code (assuming your mind is clear enough).

  304. Extensibility, e.g., Lisp or Scheme by Broadcatch · · Score: 1
    It always amuses me that so many languages love to tout their object-orientedness that allows for language extensions. Lisp is inherently extensible, and by its very nature enables the programmer to design the language to fit the application. As far as debugging facilities go, Lisp is the gold standard. And WRT portability, I think Scheme runs just about everywhere.

    People always think about AI when they think of Lisp, but don't forget that some everyday applications are written in Lisp, such as Yahoo! Store.

    --

    The antidote for misuse of freedom of speech is more freedom of speech.
    -- Molly Ivins

  305. Yeah nice one! by simm_s · · Score: 2

    The question is so vague, it could only lead to the flame wars. Seems that ~581 people fell for it so far. You bait us telling us you have a stupid boss that wants you to find or create the perfect language.

    The "brilliant" slashdot community spends the rest of the time flaming the daylights out of each other. Java is the best, no C#, no C++, no Perl, ...

    Nice fake hotmail account too. Why don't they just ask us the question what features do you think make up the perfect language. Even posting this is a waste of time!

  306. Ruby doesn't have great mulitple inheritence by blonde+rser · · Score: 0

    Although I am a ruby fan I have to point out that ruby doesn't have multiple inheritence per se. This is because Ruby, like small talk, is a true object oriented language. Since everything is an object, inluding classes, multiple inheritence doesn't make sense. You do however have modules which can be used similarly to multiple inheritence but u have to seperate instance and class methods into sepereate modules. I do beleive however that most problem solvable by multiple inheritence have better solutions without them. Just my opinion.

  307. Re:This really gets my goat by Anonymous Coward · · Score: 0

    how about some more page widening. people seem to like thay a lot.

  308. The programmer. by crandall · · Score: 1

    Features don't make a language power; programmer creativity and insight make a language powerful.

    And to that end, the only thing truly required from the language is execution speed.

  309. Re:Operator overloading by Hobbex · · Score: 1


    javac is written in java. IBMs "jikes" is a java compiler in C, which is why it is so much faster.

  310. Re:Operator overloading by Anonymous+Brave+Guy · · Score: 2
    So, in summary, yes now it is slower but maybe not in the future.... Is that fair to say?

    Yes, I think so.

    Does that mean c++ is not ready for prime time? of course not, I use it all the time. But you gotta know when to forgo the syntactical sugar that causes c++ to be unnecessarily slower than C (even when the C is coded safely).

    Always the way... It's important to realise that this is a quality-of-implementation issue, though, not an inherent limitation. In a better quality implementation, you might find that the combination of +s was actually better than strcats, because a well-written template to do multiple concatenations could get away with a single memory allocation for the result, instead of the 4 required by strcat here.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  311. Why isn't the perfect language out there? by SkipChaser · · Score: 1

    Forgive the comments of a lowly CS graduate student but I've been working as a developer for 4 years now so here goes:
    The reason that there is not a language that supports all these requirements is that the desired attributes work against each other. An intuitive and easy to use IDE can restrict your programming to predetermined paths and may result in bulky non-elegant solutions. This works against the desired OO requirements - multiple inheritance, abstract classes etc. A simplified GUI design will likely result in Screens and Reports that are boring and don't meet the customers desires. I've also seen this result in very busy screens presenting too much informaton and choices to the user. Portable means you give up (or it becomes very hard to use) all those capabilities the customer may be expecting ("I really do want the report in EXCEL!" - means you may have to license EXCEL on the server, learn how the API works, and write special business objects, plus know what version the client expects...). Operator and to some extent function overloading works against good structure and may make the code not maintainable.
    We use JAVA with SilverStream for our IDE and Middleware. It does both Forms and Pages. We use ORACLE for the database. Initially we thought SilverStream would save us development time but we found we had to build the database directly using SQL PLUS because of syncronization of the code database with the data database schema didn't always work. However it works perfectly with Sybase. We had to write alot of code behind each event because the simple actions were just that, too simple. We had to write report generating modules because the Dynamically generated HTML pages didn't satisfy our customers. This caused us to compromise on the cross platform requirement. They insisted on WORD compatable formats (RTF) or non-mutable (I know its not a word) PDF formats. We have just now found a spell checker to integrate into our apps. However go ahead and check out SilverStream. Despite its draw backs I believe it is the best cross platform development environment. By the way I don't have any stock or interest in SilverStream other than that of a developer. Anybody else think JAVA with SilverStream might meet the Boss's requirements? Anybody have experience with other IDEs (WebSphere etc.)?

    --
    Supra et Ultra
  312. Dylan by gisborne · · Score: 0

    Dylan does all that. And you can add multimethods (much more useful than many of the things you mention) and solid functional programming.

    There is an excellent windows IDE (www.functionalobjects.com) and an open-source compiler that spits out C (www.gwydiondylan.org) for unix-like OSes.

    But the arguments above that you don't want to use an obscure language are correct -- unless you're developing a game. Then you can use any obscure technology you like, because you just do the thing and ship it, and do a few updates, then in six months everyone has forgotten it. Look at how many games are written in UnrealScript. Dylan would be great for that.

    1. Re:Dylan by Anonymous Coward · · Score: 0

      Aye, why hasn't this been moded up? Dylan supports all those features.

  313. Ruby is not Python's successor by Anonymous Coward · · Score: 0

    I wouldn't call Ruby Python's successor. There are lots of features part of Python which have no counterpart in Ruby.

    1. Re:Ruby is not Python's successor by Colonel+Panic · · Score: 1

      "There are lots of features part of Python which have no counterpart in Ruby"

      Such as?
      (lets see, docstrings, tuples, what else?)

      The same thing could be said the other way:
      Ruby has features which have no counterpart in Python (of course Python 2.2 added some of these features (like iterators and a more unified type/class system (but Ruby had these from day one) )- but since they've been added so late in the game Python's built-in libs do not use them, so you end up with a patchwork of Python pre 2.2 and PYthon post 2.2. As mentioned, Ruby had a unified type/class system from day one meaning you could extend and subclass built-in types from the start. Ruby also had iterators from the start as well - the significance being that Ruby's collection classes (like Array and Hash) use iterators. Python couldn't till now.

    2. Re:Ruby is not Python's successor by smallpaul · · Score: 2

      Such as? (lets see, docstrings, tuples, what else?)

      Non-blocking threads. Unicode. Simple syntax. Fully functional JVM port. Palm port. Plan 9 port. Strong COM and CORBA support. Sophisticated numeric library. Excellent graphics package. Several IDEs. Bundled with most versions of Linux. More robust Windows port. Clear license (finally!). Large deployed applications like Mailman, Twisted Matrix and Zope, dozens of books, etc. etc.

      The same thing could be said the other way: Ruby has features which have no counterpart in Python (of course Python 2.2 added some of these features (like iterators and a more unified type/class system (but Ruby had these from day one) )- but since they've been added so late in the game Python's built-in libs do not use them, so you end up with a patchwork of Python pre 2.2 and PYthon post 2.2.

      Python always had an iterator-like syntax. The only change is how the iterators are implemented. Similarly, types and classes always behaved similarly. Now they are just the same thing under the covers.

      As mentioned, Ruby had a unified type/class system from day one meaning you could extend and subclass built-in types from the start. Ruby also had iterators from the start as well - the significance being that Ruby's collection classes (like Array and Hash) use iterators. Python couldn't till now.

      Oh really? I wonder what the xrange function did? If you don't know Python, why not just admit it and move on. You're a poor Ruby advocate if you can't even come up with a single Ruby feature that Python does not have...only features that Python did not have until recently. Even as Python advocate I could do better than that in promoting Ruby! But even so, I think it is pretty clear that in the areas where Python was weak, it is catching up or has caught up and in the areas it is strong, Ruby has a Long Way to Go. Native Threads, Unicode and a JVM port are each person-years of effort.

    3. Re:Ruby is not Python's successor by Anonymous Coward · · Score: 0
      There are lots of features part of Python which have no counterpart in Ruby"
      Such as? (lets see, docstrings, tuples, what else?)
      The same thing could be said the other way: Ruby has features which have no counterpart in Python...

      Well, Python is more mature and probably more used, so obviously it has so more features, but I don't doubt Ruby has some different stuff here and there. But the real reason why the statement "Ruby is Python's successor" is plain wrong, is that Ruby is doing almost exactly the same thing as Python only slightly differently.

    4. Re:Ruby is not Python's successor by Anonymous Coward · · Score: 0

      If you are interested here some Ruby features Python does not have. Ruby has pure static scoping which is simpler and imho superior to Python's scoping rules(mess?) in any incarnation from 1.* to 2.*. Ruby has refinement types, a.k.a. singleton types, mainly used to model Ruby's meta classes system. Generally speaking I'd say that Ruby's object model and meta programing support is superior to Python's object model. On the minus side you can argue that the myriad of Ruby's reflective hook methods are likely to be overwhelming for a beginner, but they should not indulge in meta programming anyway. In every day programming your claim that class and object unification was always part of Python's arsenal is an indication that you don't know what you are writing about, or more likely, that you are being argumentative. The spanking new meta class framework from 2.2 is only useable by specialists, in Ruby it is very easy for beginner to add to and manipulate build in class (types). Ruby functions are not first class objects - Ruby however has proc and method objects which together with Rubys scoping rules make functional programming a breeze - iterator support is only a small part of the package. You probably won't except this but Python's functional programming support is not in the same league imho, sorry. Your complaint that Ruby has no unicode support is particularly amusing since Ruby's core developer are Japanese. Not to provide unicode support was a simple design decision from people likely to be far more competent on multilingual matters than Python's core developers. As for clear syntax - there are plenty of people despising Python for it's rigid indentation rules. Last but not least it is easier to write C-extensions in Ruby than in Python.

      I do however agree with you that momentum and brain power seems to be on Python's side. The language barrier between the largely Japanese developers and the rest of the English speaking/reading world is still a great hindrance (there are plenty of Japanese books on Ruby btw), in particular Python's documentation and help system is far better and generally speaking the quality and size of Ruby's extension libraries is nowhere near what is available in the Python world. On the other hand the availability of high quality documentation, utilities and libraries are overwhelming in the Java world, which does change the fact that Java is (a) rotten (language) to it's core - imho as usual;-).

    5. Re:Ruby is not Python's successor by smallpaul · · Score: 2

      "Your complaint that Ruby has no unicode support is particularly amusing since Ruby's core developer are Japanese.

      Japanese programmers are not, by and large, required to make internationalized software. European and American programmers are.

      "Not to provide unicode support was a simple design decision from people likely to be far more competent on multilingual matters than Python's core developers."

      And this decision resulted in what replacement for Unicode? None! AFAIK, Ruby has no support for character sets outside of one popular in Japan and ASCII. That's really great if you are Chinese or Israeli.

      "As for clear syntax - there are plenty of people despising Python for it's rigid indentation rules. Last but not least it is easier to write C-extensions in Ruby than in Python."

      Really?

      import PyInline.C, __main__

      x = C.Builder(code="""
      double my_add(double a, double b) {
      return a + b;
      }""",
      targetmodule=__main__)

      x.build()
      print my_add(4.5, 5.5)

    6. Re:Ruby is not Python's successor by Anonymous Coward · · Score: 0

      "And this decision resulted in what replacement for Unicode? None! AFAIK, Ruby has no support for character sets outside of one popular in Japan and ASCII. That's really great if you are Chinese or Israeli."

      Since Unicode does not magically solve all your multilingual problems anyway there is no point making unicode support a core requirement, however there probably is a good argument for having unicode support in a standard extension.

      " import PyInline.C, __main__"

      There is a similar build package in Ruby, which I never used, so I don't know how comfortable it is. Anyway, I was thinking about real extension with classes etc., which are easy to write even for C challenged people like myself, but I heart rumors of Pythons C++ support being decisively stronger - I guess you can't have everything.

  314. C++, Dephi,Ruby by Anonymous Coward · · Score: 0

    These languages believe " The programmer knows best", for example, neither of them prevents 'free floating ' functions, so the programmer does not need to pack all his code into classes, in C++ garbage collection is not mandatory but it can be simulated, so C++ can squeeze most of the performance of the hardware ( needed in, say, realtime systems). I don't really believe that one programming paradigm is best. There is no such thing as OOP is good and everything is bad, or that functional programming will solve all the world problems.Each of these technologies has its position in the world. I think these languages are mature ,real world languages, considering the fact that C++ is based on C, Delphi is based on Pascal, and Ruby was inspired by perl.

  315. Eiffel by digitaltraveller · · Score: 1

    Eiffel fufills all the requested features except for function overloading. This is considered a feature. According to the FAQ, the reason for this is that it improve's the compiler's ability to catch type errors.
    I've never used it, but I saw Bertrand Meyer give a demonstration of the IDE recently and it looked pretty slick. An interesting feature included the ability to generate code from all diagrams produced with their tool, and vice versa.
    The tools provide alot of cute little niceties, but some programmers may not like it's "enforced" way of doing things.

  316. Smalltalk by Anonymous Coward · · Score: 0

    Well, there is no operator overloading, or mult inheritance. But, it has a powerful exception system, and cross platform support on some vendors.

    VisualWorks was one of the best, for a long time, bit identical on many platforms, platform neutral UI system, that could be made to look/behave as the host ui by selecting one menu option...

    Too bad visualworks is pretty dead now. Buuut.

    There is a new Smalltalk imp, www.smallscript.org, which does add Mult Inheritance, and other features to Smalltalk. It's also .NET enabled.

    The base system is free, but they sell other add-ons too. The guy who wrote SmallScript is a old QKS smalltalk hacker and guru. Smart guy, and his system shows it.

    Also, Smalltalk has one of the BEST builtin IDEs ever.

    Daniel

  317. Ada95 by Higman · · Score: 1

    I've used Ada95. It's got some really good stuff in it. Advanced OOP, error handling, easy to use, efficient. It's even easy to do operator overloading in it too. I know this is all easy to do because I learned it all in a first year intro to programming using it.

    --
    -- [insert sig here]
  318. Delphi/Kylix? by LinuxInDallas · · Score: 1

    Sure, it's only a Windows/Linux solution but what do you think about Delphi/Kylix?

  319. I suggest Perl 6 by Shiny+Metal+S. · · Score: 2
    I would suggest to use Perl 6.

    Read Larry's Apocalypses -- 1, 2, 3 and 4 -- to see what I mean.

    --

    ~shiny
    WILL HACK FOR $$$

  320. Asking all the wrong questions by cmdr_fishtaco · · Score: 1

    I am building a house and would like to hire a contractor to do most of the work for me (my asm skills are fading). I interview 3 different contractors and ask each of them each "what tools do you use to build houses?" You see before hand I made a list of tools that a good contractor would use and checked them off as they told me.

    Contractor A uses all the tools on my list except a nail-gun, says he perfer the feel of an old fashion hammer and claims hammering gives him time to think about his next task.
    Contractor B uses all the tools on my list except uses a radial arm saw instead of a circular table saw (says a good friend lost a thumb with a table saw and will never use them).
    Contractor C uses everything on my list except for some stange reason he drive Ford instead of a Chevy.

    So which contractor should I use?

    1. Re:Asking all the wrong questions by Kirruth · · Score: 1
      So which contractor should I use?

      That depends: what kind of Ford is Contractor C driving?

      --
      "Well, put a stake in my heart and drag me into sunlight."
    2. Re:Asking all the wrong questions by cmdr_fishtaco · · Score: 1

      a brown F150 with a rear window sticker of Calvin pissing on a Chevy logo.

  321. What Makes a Powerful Programming Language? by farnulfo · · Score: 1

    You !

    You can do anything in mostly all existing programming language.
    The only limit is you or your madness ;-)

  322. Java is the langauge you want by DaveWood · · Score: 5, Insightful

    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. :)

    1. Re:Java is the langauge you want by pyrrho · · Score: 1

      re: operator overloading.

      I like operator overloading. However, you make a point that it's mostly "costmetic" but in two cases this "cosmetic" effect is really really important. The two cases:

      (1) conversion operators
      (2) the operator= (and copy constructor) which can be very useful in handling your own class instances as data types.

      --

      -pyrrho

  323. Re:reference counting by jaoswald · · Score: 3, Insightful

    1) reference counting cannot handle circular references. Of course, C++ programmers hardly ever want to create anything able to handle such abstraction.

    2) you have ignored any time performance. Reference counting adds overhead even if you never accumulate a significant amount of garbage.

  324. ADA Best language for 50 KLOCS! by Anonymous Coward · · Score: 0

    Let ADA Do it! Use ADA! Speed of C or C++, objects, exceptions, reliability, US DOD certification!

    No mixed mode operations. Explicit conversions. GUI binding libs. Multiple platforms support ADA!

    Free & Commercial compilers. Multithreading built right in!

  325. Delphi by NDSalerno · · Score: 4, Insightful

    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!

  326. what about pascal by Anonymous Coward · · Score: 1, Insightful

    i think an object oriented pascal ide for qt may be a good idea, as it would be cross platform, and pretty much fit everything. i know delphi/kylix sor of does this for their gui toolkit, but something that didnt run in wine would be good, especially if it used qt.

    1. Re:what about pascal by nwoolls · · Score: 1

      This MUST be a flame, but in case it isn't (and as an avid user of Delphi)... The Kylix uses wine for certain parts of the Kylix IDE. CLX, the cross-platform component library found in Kylix and Delphi 6, *is* a wrapper for QT. Projects built in Kylix do *not* need wine to run. They are native executables that utilize QT for the UI.

  327. Wasted story by Error27 · · Score: 2

    I'm afraid that I have to agree with the rest of the posters who feel the question the Anonymous Coward asked is stupid.

    In that situation the poster should obviously just use the programming language he is most familliar with. Learning a new language is always going to take longer than expected. This is going to delay the project and put it over budget.

    Of course, if the poster was familliar with a programming language he would know how to deal with the pros and cons of the language and so he wouldn't even have to ask the stupid question.

    On the other hand, the question that Cliff posed about what makes a powerful programming language is an interesting one. Perhaps he could ask it again without the Anonymous Coward.

  328. Don't choose "favorite" language!!! by Anonymous Coward · · Score: 0

    "favorite language"? That's a terrible reason to choose what language to program in. If Prolog is the best suited for this particular application, then by all means use it. Even if there is only one employee that know it. If it is actually best suited for this problem, then the other employees should LEARN it.

    The problem is that most developers don't have a good enough grasp of programming languages in general to make a decision about what language to use. They have only been trained in one or two languages, so that is all they use.

    If you only have a hammer in your toolbox, that's what you'll use no matter what problem you have.

    1. Re:Don't choose "favorite" language!!! by Ars-Fartsica · · Score: 2
      If it is actually best suited for this problem, then the other employees should LEARN it.

      And while your programmers are all off on a three week course, your competition is releasing a slightly less elegant, but functionally equivalent soltuion before you are, because they just used the language they knew. Congrats, you're out of business!

    2. Re:Don't choose "favorite" language!!! by Anonymous Coward · · Score: 0

      first one out doesn't always win. However I agree with your point on principle. Use what you know. They are all Turing complete right?

  329. My recomendation... by T3kno · · Score: 2, Funny

    Would most definately have to be Brainf*ck. I really think it fits the bill for what you are looking for. It has great OO support, and is extremely easy to learn. The code you will create with it is tight and fast, and the possibilities are endless with what you can do with it.

    Take for example the following chunk of bf code:


    >+++++++++[<++++++++>-]<.>++++++[&l t;+++++>-]<-.+++++++..++
    +.
    >>+++++++[<++++++>-]+.>++++++++++.

    That code is a complete program, and will actually print out..."Hello, World!" can you believe it? In only 4 lines? Surely you jest? I can honestly tell you the answer is no, and dont call me Shirly. There are even rumors of bf supporting .NET with the upcoming * operator in version 6. Check it out, you wont be sorry.

    --
    (B) + (D) + (B) + (D) = (K) + (&)
  330. My argument for C++ by BluedemonX · · Score: 2

    I personally prefer C++ - it allows you to embed assembly when you want speed, do procedural and/or object-oriented programming, and, through the miracle of templates, allows you to achieve generic/template based programming solutions as well. Check out Alexandrescu's book on Modern C++ programming. Some of that code is pure poetry.

    If ever there was a more portable, swiss-army-knife language, I haven't seen it.

    Frameworks abound for it, you can do it with any of a number of methods, from vi to nice polished IDEs.

    --

    --- Jump!! Fire!! Bullet time!! - Lego version of the Matrix
  331. Two problems with that solution by MAXOMENOS · · Score: 1, Redundant
    Your solution meets the criteria nicely, but I wouldn't recommend that to my boss. Here's why.
    1. Java GUI toolkits are notoriously bloated and slow. In fact I'd go so far as to say that it's probably the last language I'd use to develop a GUI. The reason is because most Java GUI tools relegate GUI management to the Java2d kit, which runs on the JVM. The result is that your client c ode, even for clients of only moderate complexity, can take up as much as 100MB of RAM.
    2. Linking Java together with C++ is a royal pain in the ass. If you're using XML, this isn't a problem; the Java components will communicate with the C++ components through XML streams. Otherwise, you're talking about something similar to linking Java and C++ code, and that's not exactly trivial.

      Let's suppose you want to run a C or C++ module in Java. You can write modules in C or C++ and have Python or Perl use those modules; that's relatively easy, thanks to SWIG. In the case of Java, you have to deal with Java Native Interface (JNI), which is basically like writing extensions to the JVM. Running Java within C or C++ code isn't as bad, but it's still tricky compared to running Perl or Python within C or C++. I would recommend studying JNI further before pursuing this path. It's doable, but it's not pretty.

    Frankly, I would say that the intrepid programmer is better off writing his or her GUI in Python-Qt, wxPython, or Python-Glade, than messing with Java. My experience is that development time is faster with Python than with Java; and for GUIs, the code is actually much faster and less bloated.

    1. Re:Two problems with that solution by Anonymous Coward · · Score: 0

      I've found the easiest way to do java/C++ interop is via CORBA.

  332. Design your own... by nagora · · Score: 1
    with Forth. That's what it's there for.

    TWW

    --
    "Encyclopedia" is to "Wikipedia" what "Library" is to "Some people at a bus stop"
  333. Delphi/Kylix/C++Builder by eric2hill · · Score: 4, Informative
    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...)
    --
    LOAD "SIG",8,1
    LOADING...
    READY.
    RUN
  334. Powerful? All Turing Complete languages are equal by Anonymous Coward · · Score: 0

    What differentiates them is not "power" but rather convenience.

  335. The Language You Seek Is... by aoihai · · Score: 2, Insightful

    Delphi. It does everything and can be used by (clever) monkeys. It's main disadvantage is a lack of third-party support.

    --
    You were eaten by a grue.
  336. You all forget the greatest... by Brat+Food · · Score: 1

    I use logo for ALL my programming needs. I think its what win98 was written in too. Can get much more powerfull then this.

    --

    "Stuff... In my home!? NEVER!" - Zim on Invader Zim
    "I want the toilet seat!" - Little Dog on Two Stupid Dogs
  337. Smalltalk! You'd be a fool to forget about that! by yorgasor · · Score: 2

    Smalltalk is a GUI/IDE/Runtime development all rolled into one. It's so object-oriented even the number '1' is an object! It compiles on the fly and runs in a fully cross-platform virtual machine that's been ported to almost every known architecture. Check out the Squeak implementation of Smalltalk, and see if that doesn't make you beg for a good ol' functional language like C.

    --
    Looking for a computer support specialist for your small business? Check out
  338. Common Lisp does all of these things! by Jon+Howard · · Score: 1

    I am a Lisp developer, and I'm proud to point out that Common Lisp does these tricks, specifically my favourite implementation - Allegro Common Lisp employs all of these features and more.

    Please take a look at information available on www.franz.com , and email with any questions you might have.

    Oh, and by the way - here are some success stories from a variety of people who have used AllegroCL for their projects (NASA, Microsoft, Square USA, etc.)

  339. Re:true integers by jaoswald · · Score: 2

    The true alternative is multiple-precision integers, transparently equivalent to small integers. Such as in Lisp. Lisp integers are limited only by available memory.

    Of course, C programmers are used to a world where "+" means addition modulo some arbitrary power of 2. The 2038 bug isn't a bug after all---it's just where time starts to repeat, right?

  340. Re:This really gets my goat by real_b0fh · · Score: 0

    page widening is gone, thank god.

    you crapflooders need to think about some other thing now... but I think it wont be long until they found their way around the filters. They always do.

    --
    "Contrary to popular belief, UNIX is user friendly. It just happens to be selective on who it makes friendship with"
  341. Let me just add yet another comment... by Anonymous Coward · · Score: 0

    ...about how dumbass those requirements are. (This should be about comment #750 or so saying that...)

    Performance, suitability to task, and - perhaps most importantly available libraries - are about a million times more important than multiple inheritance or overloading.

  342. We've Got Plenty of Languages by vodoolady · · Score: 1

    The problem is they don't play well together. I want a tool that uses the information already present in my programs to take out the tedious and error-prone stuff. Why do I have to tell my computer how to map my objects to tables? Why do I have to write so much support code to use CORBA? Why do I have to worry about include paths and library linkage and jar files? Why do I embed javascript in HTML, which is in turn embedded in a string in a script file?

  343. Programmers do! by Pedrito · · Score: 2

    What makes a powerful programming language? Programmers do! The author of Turbo Pascal and later C#, wrote Turbo Pascal in assembly language. Crazy, but he made it a powerful programming language.

    Our company uses Visual Basic and Visual C++. Both powerful languages, in the right hands. Define your requirements, and then find a language that suits that. Don't define the language before the requirements. That's ridiculous. If a language meets your needs, and the ramp-up time for learning it is low, then it's a good language for the purpose.

    As for cross-platform, there are a number of languages that are cross-platform. Python appears to meet your needs, but I haven't used it so I can't say. Personally, I don't care for it, but if that were a requirement, I might go that way.

    C++ is pretty good if you don't target it for a single environment. There are multi-platform frameworks, if you want to go that way. If you're going with command-line related stuff, then C++ is pretty platform independent, if you write it properly.

  344. I though for a second by gatesh8r · · Score: 1

    You were talking about ISO standards.

    --
    Karma whorin' since 1999
  345. I don't think there is a language that matches. by Pierce · · Score: 1
    The short version is that I would recommend Python. The long version...

    intuitive and easy to use IDE

    There are several IDEs for Python, the one I typically use the most is BlackAdder. This has a Qt form designer in it for GUI applications. There are some quirks, but it shows a lot of promise.

    simplified GUI design and event handling

    For Windows development I typically use Qt, I haven't had any problems with it yet; besides the poor documentation. Unless you know C/C++ to read that documentation.

    You can access Swing from Python, or use Jython which has the same basic syntax but allows you to access anything in Java. This way once your developers know the language they can either write native code or write Java based applications.

    advanced error handling

    Can you define "advanced"...seriously. I've never seen an error I couldn't catch although I don't always try.

    advanced object oriented design including multiple inheritance

    Python has this.

    abstract classes

    Python doesn't have abstract classes, at least not that I have ever (heard of||needed||read), rather it uses Mixins and polymorphism.

    garbage collection

    Yep, we have that too...

    full support for operator and function overloading

    ...and that.

    portable (at compile-time) across various platforms

    I believe the Python interpreter will compile on just about anything with a C compiler. If you want to "compile" your Python code into a standalone program then you can use Gordon McMillian's excellent Installer program. It works on Windows and Linux.

    ...drop by comp.lang.python sometime or email me and I'll do what I can to answer any questions you may have.

  346. Go with Python !!! by Anonymous Coward · · Score: 0

    Really, if your criteria truly represent what your boss wants, then Python is the solution. It is perfect. See all the details on why Python is right for you at http://www.awaretek.com/plf.html and also there is an online program there to help you choose a programming langauge based upon your own criteria, whatever they are. it woudl be interesting for you to put in your criteria and see how the various languages on your list score.

  347. for Scientific Applications, choose Numeric Python by LM741N · · Score: 1

    Just in case you are doing scientific apps:
    I find that my fully vectorized code runs at about 1/2 C speed with Numeric Python. Marginally vector code at 1/4 to 1/10 the speed of C. Thats great for prototyping since you can make a quick change and see the result pretty quickly. Check out my web site for examples.

  348. C++ is the language of the elite! by JeyKottalam · · Score: 1

    C++ forever! Just use some GC (Garbage Collection) library.

    Why? Come to EFnet #C++ and we'll chat.

    -Jey Kottalam

  349. ignore by Anonymous Coward · · Score: 0

    I applied poor moderation, and this is the only way to undo them

  350. make the language more like LabVIEW by GiftNice · · Score: 1

    If there was a new language I would like it to be like LabVIEW. LabVIEW is a good language because it uses icons and is graphical. The programmer works faster because people can comprehend pictures faster than writing.

  351. What you need is Borland (inprise) Delphi by Anonymous Coward · · Score: 0

    I think it meets your criteria?

  352. Your own by norwoodites · · Score: 1

    I don't know of a language that uses all of the above but if you want all of them, why don't you write your own.

    It would be much easier than asking ./ which language is better for the job when you are given too huge of a requirement and a language that does not exists.

    I think your boss want you to write one, not find one.

  353. Take a look at history by humanx · · Score: 1

    Forget the hype. What is your project oriented to?

    * Assembly: Hardware programming. Embedded devices and stuff.
    * C: OS level programming. *Eficient* GUI apps and OS drivers.
    * C++: Big OS level app and *big* apps: Word, Excel, and alikes
    * Java: Network and server programming. Web apps and distribuited systems.
    * Perl: Text procesing apps. System reports and stuff.
    * C#: Java clone ( no WORA )

    - just my 2 cents.

  354. Re:Operator overloading by Anonymous Coward · · Score: 0

    Java in Java == JVM in Java

    javac is no big deal, because it just parses and generates bytecode.

  355. What about high level languages ? by Anonymous Coward · · Score: 0
    This comment is actually a strong concern of mine, and it would surely require more that a post here to get somewhere, but well...

    Why do all industrial developpers stick with low-level languages like C and C++ (yes, a language where the programmer has to take care of memory management is a low-level language), or only use aberrations like Java (who got this freaking idea of using bytecode for real programs) ? These languages are among the heaviest and most bug-friendly ones.

    My utopic advice to industrial developpers would be to use high-level reliable and humanly maintainable languages. I am especially talking about strongly-typed functional languages. These are actually the ones that take advantage if the strongest theoretical foundations, which provides them with a thourough understanding. For one thing, strong typing is an impressive way of getting rid of implementation bugs. And most importantly: pure functional languages make proofs of validity humanly affordable. Talking about object programming, several FP languages provide OO features in a really powerful way. The one language I am currently a huge fan of is Haskell. I actually made some middle-sized stuff myself with it, and I was impressed how fast I got clean and elegant results.

    A frequent criticism towards these "academic" languages is the fact that they lack common libraries and that their standards are evolving. I think that if industrials dared to use such languages for real applications, this problmes would quickly disappear thanks to the work of a handful of pioneers, leaving a beautiful world of elegant and efficient languages to future generations.

    Well, stop me now, I'm dreaming...

  356. C++ with external GC library by Pinball+Wizard · · Score: 2
    Its the only thing that will fit your bill. One of your req's was that you have an IDE. Well, forget Eiffel or any other language that you haven't listed. IDE's like your boss wants come from big companies and support very popular languages.


    I'm not sure where you can get a GC library, but they are out there and undoubtedly someone else has mentioned one or two of these.


    As many others have said, Java, VB.Net etc. fall short. No operator overloading, templates, MI.


    C++ and good libraries are your best bet.

    --

    No, Thursday's out. How about never - is never good for you?

  357. A hot topic. Java. Versus ... Perl??? by PhotoGuy · · Score: 5, Interesting
    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
    --
    Love many, trust a few, do harm to none.
  358. Ruby does have mixins by Colonel+Panic · · Score: 2, Informative

    True, Ruby doesn't have multiple inheritance. But as you point out using Ruby's mixin feature (allows you to mix a module into a class thereby adding a module's behavior to a class) can often be used in place of MI.

    Using MI tends to get messy anyway, especially when you end up with some kind of diamond inheritance tree. I personally tend to avoid MI even in languages that allow me to do it. I have to say that I much prefer Ruby's approach of using Mixins.

  359. Re:Not everything needs to be native to the langua by Anonymous Coward · · Score: 0, Flamebait

    hey nigger, fuck you.

    my name is Arabic and means "great". Obviously,
    a tiny white trash like you, doesn't know what it
    means to be great.

    fuck you, and your law abiding mama.

    betch.

  360. Java would be more powerful... by utahjazz · · Score: 1

    ...if it had a laser beam attached to it's forehead.

  361. LISP by Anonymous Coward · · Score: 0

    One word LISP
    Avaible on all most any platform and if there is a feature you miss, create it much faster than having to create it in a other language. Also check out CLOS and other dialects and add ons.

    Ref:
    check out http://www.lisp.org

    - Proud to be a Coward

  362. Re:Well...personally, by Cardhore · · Score: 4, Funny

    I'd rather have:
    (/ (+ (exp a b) e) (* c (+ d (+ b (+ a b)))))

    :)

  363. Forth by Anonymous Coward · · Score: 0

    You forgot to mention what your application space is. No one tool fits all yada yada yads.

    But... I've used alot of languages from Assembly, Cobol (eek), C, C++ (Visual Studio, C++ Builder, and editor/omake style).

    And the one that gives the most raw power and expressiveness is Forth. You essentially write a hand tailored application level language in Forth.

  364. Have you been playing Wack-A-Troll too long? by JohnDenver · · Score: 2

    What Makes a Powerful Programming Language?

    Come to think of it, I can recall a recent conference of well known language developers where they asked the same question. As a matter of fact, thier conference could have been called, "What makes a powerful language?"

    Unlike the "What's the best language?", this question has the potential for a lot of interesting answers and opinions. It allows people to think creatively to solve problems with the status-quo in the language world.

    These question also goes beyond, "What's the best language?", because it challenges a people to solve the problems with our existing languages rather than defend the stupid quirks and idiosyncratic features of an existing language.

    Personally, I think there is a lot of room for improvement for existing languages and development environments.

    One feature I think lacks in many good languages is the Interpreter feature. It bugs me all to hell that C++ and Java don't come standard with an Interpreter. Why can't I have strong typing and a dynamic typing together?

    I'd love to have the option to choose whether I'm going to use determanistic finalization or garbage collection. What about support for units of measurements?

    var x = 6 feet / 3 seconds
    print x; '2 feet/second

    There are so many ways one could improve languages. I think asking Slashdot is just one way we can tap into the resources of many brains to find some good ideas.

    --
    "Communism is like having one [local] phone company " - Lenny Bruce
    1. Re:Have you been playing Wack-A-Troll too long? by Anonymous Coward · · Score: 2, Informative

      I can't tell whether you're being sarcastic or whether you really don't know about Common Lisp. Dynamic, strong typing, compilers and interpreters, great IDEs and debuggers, easy runtime modification and incremental compilation, flexible and powerful object system (including multiple-inheritance, multiple-dispatch, method combination... and the ability to modify its behavior), macros that have the full power of the language, etc...

      Also see CLiki and The Common Lisp Hyper Spec

    2. Re:Have you been playing Wack-A-Troll too long? by JohnDenver · · Score: 2

      I think those aspects are great about Lisp. For those reasons, I think Lisp is a great language, however there is that one fundamental flaw that I fear most of us dread.

      (defun factorial (n)
      (if (= n 1)
      1
      (* (factorial (- n 1)) n)))

      Why can't that simply be?

      function factorial(n)
      if(n = 1)
      factorial(n - 1) * n

      I'm not going to lie, I don't really know Lisp, I kinda of understand the basics of the syntax and that's about it. I'm assuming it's based on reverse polish notation or something. Is there a reason for this?

      It sounds like Lisp is a really great language, but it also seems that the reverse polish notation alienates a lot of people from enjoying it like you do.

      --
      "Communism is like having one [local] phone company " - Lenny Bruce
    3. Re:Have you been playing Wack-A-Troll too long? by pfdietz · · Score: 2, Informative
      I'm not going to lie, I don't really know Lisp, I kinda of understand the basics of the syntax and that's about it. I'm assuming it's based on reverse polish notation or something. Is there a reason for this?

      The reason is that Lisp programs are Lisp data structures. This is the foundation on which Lisp's incredibly cool macro system is based -- macros in Lisp can perform arbitrary computations on the program tree, not just do simple and/or awkward textual substitutions. It's also not any harder to type or understand than more conventional syntax, once you get used to it. Don't let the shock of the unusual turn you off.

  365. Delphi and/or Kylix by rjw57 · · Score: 1

    Available from:
    http://borland.com

    Review:
    http://www.linuxplanet.com/linuxplanet/reviews/3 20 7/1/

    Community/Resources:
    http://www.delphizine.com/

    10 Reasons to use Delph/Kylix:

    1) Both Delphi and Kylix have a similar IDE and is IMHO very nicely designed. Also it inherits the concetually intuitive concept of control 'properties' and form painting of VB.

    2) The compiler is blisteringly fast.

    3) Programs written in Delphi will generally compile under Kylix and vice-vera

    4) Unlike VB, Object Pascal encourages Good Practice (TM). Is properly object oriented. Provides 'properties' (implicit get/set methods -- the lack of these is one of the major faults with C++ IMHO) and (at least a few years ago) you get a full language specification with the product.

    5) Kylix is free (as in beer) for the creation of GPL apps.

    6) Kylix uses the Qt widget set (oooh pretty)

    7) Events directly mapped to method calls

    8) Doesn't have garbage collection per se but then not many languages do. Again IMHO garbage collectors generally provide solutions which work OK for most cases but will never compare with properly coded programs.

    9) Borland have a long history of quality development products.

    10) A comprehensive OO class library comes as standard.

    --
    Rich
  366. Python by badfish2 · · Score: 1

    www.python.org -- the price is nice too.

    --
    "On the Internet, nobody knows you're a dog!" - a dog
  367. Re: Programming Languages by Anonymous Coward · · Score: 0

    Sorry, you are incorrect. VB.Net and C# are finished products.
    They are good products.
    Neither support multiple inheritance though, so they're out. (VB.Net doesn't support operator overloading either)

    Dr. Peter Venkman

  368. Playing Buzzword Bingo by djs55 · · Score: 1

    Too many language "features" leads to problems. How well do the features interact (are they orthogonal to each other)? How many people understand how to use them all?

    Modern research on language design focuses on finding the simplest, most elegant combination of features that allows you to express the concepts you want to, in a safe a way as possible.

    If you add in lots of random features things become far too complicated to manage.

    Keep it simple (and elegant)... :)

  369. Templates by MatthewNewberg · · Score: 1

    What about Templates, does anyone use them in the real world outside of the STL? I think that is a very strong feature for being able to quickly code complex things up and are easier to mantain.

  370. What IS the best religion? by namespan · · Score: 5, Funny

    what is the best religion?

    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?

    --
    Libertarianism is rich wolves and poor sheep playing gambler's ruin for dinner.
    1. Re:What IS the best religion? by Black+Parrot · · Score: 2, Funny

      My boss gave me the assignment to find the best religion. Some requirements that he gave me are:
      • Should keep one from everlasting suffering and torment in next life
      • Should help one eventually pass to nirvana-like existence, eternal increase and well-being, perhaps even an all-powerful/omniscient state
      • Should help one to acheive balance, peace of mind, and a strong feeling of being alive within this imperfect world
      • Should enable the occasional performance of miracles when called for
      • Should improve behavior of followers (make them charitable and courteous but zealous in good causes), and help them improve the world
      • Should have limited numbers of flawed adherents
      • Should have a consitent theology that makes total sense to rational minds and mystics alike, yet is accesable to the common man
      • Should provide insurance against armageddon-like scenarios
      • 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.
      • Should be in line with the will of the universe's most powerful entity.
      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?
      Except for the bit about improving the behavior of its followers, your requirements are best satisfied by worshiping... money!
      --
      Sheesh, evil *and* a jerk. -- Jade
  371. Eiffel by SystematicPsycho · · Score: 1

    Eiffel has all of those, and is being integrated into .NET (soon, around May)

    --
    Analytic & algebraic topology of locally Euclidean meterization of infinitely differentiable Riemmanian manifold
  372. O'Caml by acoustiq · · Score: 1

    Luckily the boss said only the IDE had to be easy to use ;) Don't forget O'Caml. While the learning curve can be steep for those never introduced to functional languages, the garbage collection, object-oriented/functional+imperative style mix, near-C (when natively compiled, portable bytecode by default) speed, type inference (almost never state the type of a variable again), and bindings to both Tk and GTK make for an impressive beast! And it's free (not much of a surprise these days, but still can't be ignored :) While there's a small lack of documentation, the mailing lists (two: a new one started in the past week caters specially to beginners) can fill any gap in your knowledge.

    --

    --
    I romp with joy in the bookish dark
  373. synopsis by maraist · · Score: 2
    Most people are saying the same things, but I figured I'd get my opinions out anyway.
    • Multiple Inheritance: Great for RAD, such as perl's "use CGI ':standard'" where you import functionality / globals directly. It's NOT good for readible code, however.. Good architecture best utilizes common base-objects. I'm inclined to believe that has-a relationships are best for MI. Ideally a language would allow optional mapping contracts; this takes care of readibility, while providing flexibility.
    • Garbage Collection: I've researched this topic somewhat, and still don't have a real opinion. I've always liked reference counting (which requires an abstraction layer and added work / assignment) and implicit deallocations (e.g. auto-catch blocks that deallocate non-global/ non-returned data). The thing I like about ref-counting is that your performance is very consistent (even deallocation of long nested structures can be made incremental and thus non pausing). Unfortunately the "state-of-the-art" really pushes towards copying-collectors, hybrid mark-sweep, or generational bla bla bla. Quickly, this are all part of the out-of-sigh, out-of-mind category. You allocate and forget, and magic cleans up after you. Problem is that you're prone to higher overall CPU usage for cleanups. If youre unlucky, then your GC will pause periodically. I think a language that can dynamically select an allocation-scheme run-time model is best. (though most of these require no explicit "free" function)
    • Portability: No such word. :) Or rather, the emphasis is on the "port" part. I know of no "portable" language. Instead, you require things like "large support base", or lack of tying to platforms. In general you're talking a high level language (e.g. byte-code / scripted instead of assembly). If you use C++ with qt, then you're limiting your platforms (but that might be sufficient for your install-base). If you limit the number of fundamental features in the language, then any C-derived language is half decent (e.g. no UNIX-select, fork, explicit threading operations, etc.). Obviously most systems break into win/unix[/mac][/vms] development platforms, and others when there's [commercial] interest. Ideally, the language would be able to compile down to assembly for a popular platform, but can still transparently fall back to byte-code / scripting / src-code for not-yet-optimized platforms. JITs are ok, but the initial overhead is not generally desirable (say for command-line tools like grep).
    • Event Handling: This is a nice feature that I don't see too often. In most languages you have to code explicit event-loops, which require a completely different paradigm. You could use interrupts (hurts portability), or have the VM periodically check for outstanding conditions in the background (such as asynchronous file operations). Note that this isn't the same as having a separate thread run it's own event loop, since it still needs a way of passing event information to the main control-flow. gw basic use to have a command called "on key {key} gosub {func}". Back in high school, I found that very useful. That's typically the sort of thing I think of when referring to event-handling ideality. If you could define arbitrary virtual-interrupts, then register call-back handlers for them, you might be able to accomplish this. Further, a powerful related programming feature would be virtual threading based on events. For example, an instant messenger server usually has two paradigms: thread-per-client, or multiplexing IO (via UNIX-select or other types of asynchronous IO). thread-per-client is easy to code for, but not very scalable (resource intensive; i.e. mem/thread, cache-contention, swapping-overhead). IO-selection is efficient but hard to code; you need to maintain a state-machine. If you had a super-light threading (software) architecture which is considered to be useful for such event-based context-switching (where the context switch is purely at the IO-selection or other such event-multiplexing), then you'd have the best of both worlds.
    • Exception Handling: I often find myself in generic catch(...) like code, mostly because of the RAD constraints. If the editor could supply me with a list of possible exceptions, where I could identify particular special cases, then I might find this more valuable. In perl, exceptions are really strings, so I can apply pattern-matches against the strings to extract those special cases. Given my involvement with databases, what I've really grown fond of is roll-back support. I value the ability to recover from state modification more than specifying excatly what went wrong (except for logging purposes). In general this involves saving the global-environment / passed-object-state which is non-trivial. Hardware support might be necessary to implement this efficiently (e.g. copy-on-write), and this violates the above portability desirability.
    • IDE: The only good IDE's are integrated with the language IMHO. For RAD, you should be able to write the language in the language environment itself (lisp, perl, tk, python, etc), and thereby incrementally build the application. The language should be completely understood inside and out by the IDE (code-time error syntax, symmantic checking), should provide you options at each step of the way (manual auto-completion, quick function-parameter-lookups, etc). Currently the only IDE I know that does this is Visual VB (bleah). You can type test code in a VB interpretor window, plus you have all the fancy-pantsy GUI-IDE stuff (though I don't like the Visual Studio editor). Interpolability into any extensible editor is probably desirable (I tend to like things that run inside {,x,gnu}emacs), thereby taking the best of both worlds (a non crippled text edtior like V. studio, coupled with studio-like app-awareness)). The only way something like this would be possible for a compile-only language like java, C++ is if there was an alternate interpreted version of the source-code (a language is a language is a language, no matter what you do with it).
    • Simplified GUI design: Haha. Where is word "simple" in the "fast","cheap","good" mutually exclusive option list? Simplicity comes at a great cost. Usually in functionality, but also in performance. Look at Java 1.0's GUI model. Slow as a dog, but relatively simple. They later had to complexify it with Observers (e.g. registering the call-backs). But much like HTML, authors wanted more control, so more complex GUI-management schemes were introduced. Later they added Swing, which is not really all that trivial to use (much to learn initially), and is pretty much a cookie-cutter. Creative deviation relegates you back to lower-level operations. Personally, I don't like doing any non-HTML + style-sheet based GUI designs. Unfortunately unless the rendering is performed on a remote client, this isn't very efficient. Hense most of my perferred work utilizes the web model. Incidently, to my understanding the best portability model to date is the web. Browsers have been written for almost everything. With DOM, SAX (and sadly XSLT) it's becomming more and more possible to generate modularized GUI's for the web. HTTP / HTML standards still are no where near ready to replace traditional GUI's (poor interactive response time and state-awareness), but I personally am only intersted in technologies in this field. In Java, you have a set of API's which provide widgets which are relegated to each implementation. There are methods of generating these widgets on most any [desktop] platform with varying degrees of efficiency (Xt, non-MFC windows API, etc. verses MFC and Qt). If this is all Java wishes to provide, then how is this different from requiring graphical widgets represented by XHTML tags, and "magically supported" by the browsers in each platform? XHTML is the ultimate in portable graphics (assuming detailed authoring is not critical), and so on.
    • Abstract Classes: I have a very strong opinion about this. I believe that a computer's purpose is to bring efficiency to mankind. And as such, long-drawn-out-processes should be elimenated where-possible. e.g. repetitious tasks... shouldn't exist. A human should only have to solve something once, then re-apply it whenever possible.. Ideally, the open-source initiative provides all these wheel inventions for the betterment of all mankind except for sophmore computer-scientists (who need to learn the underlying algorithms from scratch). To paradigm which includes Abstract classes are fundamental to this. When writing a generic widget which does a dozen things, but 5 of those things are complex and unlikely to vary, then damnit, that code should be shared. Further, a language should make it as easy to reuse code as possible. python does a nice job, since most code is considered reusable/extensible objects, but I'm still not satisfied with any existing language in terms of efficient reutilization of code. I can't imagine anything beyond a database sitting behind an artificially intelligent agent which can customize previously registered code to a particular task. hyper-lisp anyone?? I don't believe enough attention has been given to this particular topic, so I'm mostly speaking out of my hat here. I'd love to initiate a discussion on this topic alone to see what's already available.


    -Michael
    --
    -Michael
  374. Re:Operator overloading by Anonymous Coward · · Score: 0

    Yet Java has been written in Java. The standard Java compiler is written in Java. And IBM has a JVM and JIT written in Java. It is used for testing out new concepts in JVM/JIT design.

  375. Ruby by Anonymous Coward · · Score: 0

    Ruby.

    (its a language)

    heh.

  376. The Ideal Language is... by Anonymous Coward · · Score: 0

    Polymath! Has anyone read the Gateway novels by Frederick Pohl? The Hero's love interest is a programmer who uses a language called Polymath. You program it by having a conversation with a 3D holographic persona generated by the computer. In Gateway, she talked to a re-creation of Einstein to do the job. No THAT is an interface!

  377. html is the only way to go by Anonymous Coward · · Score: 0

    The only real way to do it is HTML. You have all the brains in the back end and a nice GUI web page on the front end that works in any browser. If you have some advanced GUI options use an ActiveX control and or Java embedded in the web page.

    I would prefer to use Visual C++ and tell my boss it isn't going to work on a mac or unix. (but I don't really have any bosses to worry about). Visual C++ kicks ass over all the rest of the programming languages. Garbage collection is only needed if you are a buggy or unexperienced programmer. But if you program in Visual C++ you are only going to release it for Win32. Porting to a Mac or Unix is a nightmare and entails starting another 2 projects nearly from scratch.

  378. Wow, that's quite a list... by Eric+Damron · · Score: 2, Insightful

    Here are a couple more things that should be considered.

    1. Maintainability - How easy is this project going to be to maintain. The language you choose will affect that.

    2. What's the learning curve for the language? C++ fits most of your list but the learning curve can be steep. Do you want to take nine months of doing nothing but learn a complex framework?

    --
    The race isn't always to the swift... but that's the way to bet!
  379. Re:Operator overloading by aWalrus · · Score: 1

    I like the long names. You can always use a decent development environment (eclipse, emacs, jEdit, ANYTHING basically) that provides code completion. The long names are there to make it easier to understand what a particular function does if you're not familiar with it. If you feel that having your functions and variables named Xx1 and Xy2 is a good thing, that's a problem.

    --
    Overcaffeinated. Angry geeks.
  380. What are the Software Requirements? by javaboyBlue · · Score: 1

    What software requirements are driving the need for multiple inheritence and operator overloading. I think a good designer would be able to work around multiple inheritence. I personally would consider operator overloading as syntactic sugar that can be lived without. BTW, someone else mentioned python. I thinks it worth a look also, but I would start in the Java or C++ camps first. (I'm a bit biased toward Java since I'm using it now and FWIW I'm certified).

    --
    Eric A. Stephens ericastephens@mycingular.com
  381. Re:This really gets my goat by Anonymous Coward · · Score: 0

    As long as we're off-topic...isn't it "gets my goad?"

  382. Can I put the horses down now? by Anonymous Coward · · Score: 0
    "what is the best religion?"

    Zen christianity

    "what is the best color?"

    Red

    Any more questions? It's your $100 a hour.

  383. Borland Delphi 6 by Anonymous Coward · · Score: 0

    Borland always has had the best IDE (in my opinion).

    Definately take a look and weigh against criteria... I think you'll find it scores high-marks for all of your requirements.

  384. Squeak by namespan · · Score: 2

    I'm mentioning squeak because I don't see it in the list yet, not because I think it's the panacea you're looking for. But it's pleasant, smalltalk-ish, and (tautology alert) its adherents like it.

    --
    Libertarianism is rich wolves and poor sheep playing gambler's ruin for dinner.
  385. Most Hyped Languages by Jagasian · · Score: 2

    The two most hyped programming languages ever are Microsoft's "Visual Basic" and Sun Microsystem's "Java". Though some might argue and claim that C++ is the most hyped programming language. Anyone want to start a discussion on "The Most Hyped PLs"?

  386. What are you building? A kitchen sink? by Virile+Garbageman · · Score: 2, Insightful

    There is the notion of the right tool for the right job and, as you can tell from these threads, everyone seems to have a different idea about what the right tool is. I don't quite understand why your boss feels like you need to find this one super-language. Most development projects these days span multiple platforms and software domains, from desktop to server to web. Different languages offer different strengths in different areas. Different programmers have different skill levels in different languages, and different preferences in development environments. What is the percentage in attempting to enforce such a heterogenous environment? Wouldn't you be better off to find a compatible suite of tools based upon the platform and the problem? Couldn't you better capitalize on the strengths of your development team by choosing appropriate languages and tools for each application layer? One size doesn't fit all, otherwise we'd all be programming in Java.

  387. What Makes a Powerful Car? by Jagasian · · Score: 4, Funny

    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.

    1. Re:What Makes a Powerful Car? by BitterOak · · Score: 1
      But why would you want a side panel wood trim? Cruise control is way better.

      --
      If I can be modded down for being a troll, can I be modded up for being an orc, or a balrog?
    2. Re:What Makes a Powerful Car? by Anonymous Coward · · Score: 0

      dude that was the funnies fukkin thing i've read on slashdot in a long time :)

  388. Looks like a job for DELPHI/KYLIX!!! by Pig+Hogger · · Score: 2
    Hmmm, this looks like a job for DELPHI/KYLIX!!!
    ...
    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.
    • Uses Object Pascal language; no bugs due to bad type matching; less chance of memory leaks; no undecypherable source code (because Pascal won't let you do "clever" tricks that in reality only obfuscate the source).
    • The GUI interface is a pleasure to use, with it's automatic source-code completion features which lets you pick and choose amongst the valid, legal field/methods/properties names.
    • The event handling is simple enough: you just plug an event handler into a table of possible events for every given component, and the code is called automagically when shit happens; no more parsing at the message stream.
    • Object Pascal's OOP has everything to offer to advanced OOP jocks. And the source code stays readable, too.
    • Garbage collection is no pain with Object Pascal; properly coded destructors is the name of the game here.
    • You will never overload enough Object Pascal functions... Full overloading is wholly supported.
    • Compiles on both your neighboorhood friendly Win32 or Linux platform.
    'Nuff said. Don't listen to the C/C++ dopes, they're just toying around with a sophisticated front-panel toggle-switch array...
  389. Re:Operator overloading by Eccles · · Score: 1

    No c++ compiler can optimize the temporaries out.

    "Can", as in "is able to", or "can", as in is allowed to? C++ has the "as if" rule, which allows compilers to implement the code however it chooses, as long as the code yields the same results. In this case, for example, it might be possible for a compiler to see the allocations are of specific size and only used temporarily, and allocate room on the stack.

    I certainly don't promise any C++ compiler does this, however.

    --
    Ooh, a sarcasm detector. Oh, that's a real useful invention.
  390. Real question by pagercam2 · · Score: 1

    The real question is does the language fit the application. There are many reasons to choose one langague over another but those listed wouldn't be on my top 100. Easy to use IDE is brand spedific not inherient to the language. Simplified GUI design is generally a vendor implementation issue as well but the languaue may have better multi-platform suport than another. Multiple inherience is applicable in some applications but not that often, operator overloading is a nice buzzword, but not gnerally usefull. The rest is more buzzwords than anything else. The poster doesn't mention what sort of product it is so any advice listed would only be general purpose at best and probably not address this appplications special needs. There are no perfect solutions, at least not in any world that I'm familiar with ;-). So you generally have to settle on the language/solution with the fewest drawbacks.

    It seems to me the the best language has much more to do with maturity, ability to get programmers with experience in language X, number of palforms supported (with weighting to platforms most commonly expected to be used). Next on the list would be quickest development time, debugging suport (if you happen to be a programmer than occationaly makes mistakes). Other things to consider would be support libraries, that may have a large portion of your project alraedy solved. The whole "write once, run anywhere" really turns out to be "write once, debug everywhere" and never beleive that what is right for one platformn is going to work best on all platforms, windows != linux != MacOS != .... . You are either stuck with being lame on all platforms or have builds targeted at each different platform.

    The list used seems to show that the poster's boss doesn't really understand program management, so the best suggestion I could make is clean up your resume and use moster.com.

  391. Re:Operator overloading by Anonymous Coward · · Score: 0

    I guess that is why you will always be a programmer and never a software engineer. Maybe you should go and get some typing classes?

  392. easy... by r00tarded · · Score: 0

    powerful programmers.

  393. While you're @ it.. by Master_Ruthless · · Score: 1

    Why not ask for a telephatic user interface and the ability to cure cancer?

  394. Re:reference counting by lkaos · · Score: 2

    1) circular references aren't terribly common to begin with and can be avoided.

    2) this is true, but I assume that if one requires GC than there will be a significant amount of garbage. It's simply, relatively painless, and is used quite frequently in C++. Therefore, for a production environment, using reference counting may not be as efficent, but it is more likely to be effective as it is maintainable.

    Unless there is a readily available GC for C++ that works really well and is Free as in speech and beer? If there is, then use it, but I don't know of one.

    --
    int func(int a);
    func((b += 3, b));
  395. Why specify language features? by Anonymous Coward · · Score: 0

    It is the building and the cement that matters more than the brick for good design.

  396. OTcl and TclCL by Josuah · · Score: 1

    I think OTcl and TclCL does everything on that list, at least to some extent. I'm mostly dealing with the OTcl part here.

    While I agree with many of the points made by other people about how the language isn't as important the problem, it's quite possible that the boss knows that if a language can be found to do all that, it will make the implementation a lot easier. Either that or he/she's got pointy-hair genes.

    Anyway, down the list:

    IDE - wish + text editor, e.g. emacs. This isn't your "traditional" IDE, but it does pretty much everything an IDE needs to. Easy to debug because you're in an interactive shell which does everything right in front of you. Easy to write files and then execute/debug them immediately. But no point-and-click creation of code.

    GUI Design - wish. Type it, see it immediately. Decent layout management.

    Event Handling - Tcl/Tk event handling. Pretty basic. You can simply "bind" events to functions.

    Advanced Error Handling - this is your job, but the feature is there. e.g. catch.

    Advanced Object Oriented Design, Multiple Inheritance, Abstract Classes - oTcl gives this to you on a Tcl level. Abstract classes aren't specifically provided, but you could enforce "abstract" classes via the constructor/init code.

    Garbage Collection - There's no automatic garbage collection, but it does reference counting.

    Overloading - yep.

    Cross-platform - Tcl/Tk runs just about everywhere.

  397. Consider Common Lisp by Anonymous Coward · · Score: 0
    Your requirements are all delivered by most commercial Common Lisp systems, and even some of the opensource ones.

    I've just recently finished researching the available CL implementations, and their relative merits and for my needs Franz Inc's) Allegro CL product was most appropriate, but there are other offerings from Xanalys and the opensource CLISP and CMU-CL to consider as well.

    Please do post what your eventual decision is, it'd be useful for some of us to understand your decision making factors.

  398. ADA by ksp0704 · · Score: 1

    Take a look at ADA, I'm pretty sure it fills all those requirements.

    --
    Ash nazg durbatuluk, ash nazg gimbatul, ash nazg thraktuluk agh burzum-ishi krimpatul.
  399. Awesome. by Wakko+Warner · · Score: 1

    Now, links such as this can be constructed.

    Truly a day to celebrate.

    - A.P.

    --
    "Remember when the U.S. had a drug problem, and then we declared a War On Drugs, and now you can't buy drugs anymore?"
  400. Choose a solid language then design to it! by simplydave · · Score: 1

    No laundry list of programming language features will prevent bad code. A good design which leverages the strengths of your language of choice is a much better bet. I always evaluate what my application will be and where it will run before I pick a programming language. The decision should be based on the merits of the language for your application rather than just the merits of one language versus another. There is no language with all the virtues you are seeking because every language is formulated using tradoffs and are tailored to the preferences of the designer. Garbage collection typically slows things down and sometimes contributes to bloat. Operator overloading and C++ style multiple inheritance often result in confusing code. Features which involve overloading are often syntactic sugar. Use features as far as they are useful. Language features should not be used to impress your friends. ;) The real question is how useful a language would be in solving your particular problem. Is C++ sytle multiple inheritnce going to let you implement your solution faster? Will your users notice the performance hit caused by the garbage collection features in Java or Lisp? Personally I prefer C++ for performance intensive applications. Java is really a step forward in terms of clean language design. Proper use of java can result in a more reliable, albiet marginally slower, application. These and other languages all have their place. I think prior suggestions to combine languages are very valid. Many languages will integrate with others that will front a C or C++ interface. Choosing one language for the UI then another for solving the actual problem can be quite effective and seamless to the user. I've solved a lot of problems by selecting a client-server interface between the logic and user interface. I hope this doesn't confuse more than it helps.

  401. Need A Consultant? by Anonymous Coward · · Score: 0

    Hi, I'm Bernard Shiffman. You probably already have my resume. I recently designed a Dialog with Yes and No options and can therefore be considered an expert in all programming languages. Please contace me or my legal team and I'll be happy to bring my intellect to bear on your problem.

  402. No such language exists by Tom+Wiles · · Score: 1

    Your wish list isn't even warm. You will have to settle for a subset. The last real attempt at a virtual machine was P-Code, and where many P machines were available, the system never caught on. The problem was speed. Microsoft's .net and Java make some attempt at cross platform operability, but there are restrictions and a huge performance degradation. For any major application, even compilers like C++ will require custome libraries that are not available on all target platforms. The only Computer Language that I know of which has true cross platform support is ADA. ADA is one of the most powerful programming languages available but try finding a programer the likes to program in ADA. Just the mention of ADA makes my stomach turn. Sorry, you are not going to find what you are looking for. TOM

  403. To answer the question... by Anonymous Coward · · Score: 1, Interesting
    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
  404. Re:reference counting by elflord · · Score: 2
    1) reference counting cannot handle circular references.

    This is a red herring. One uses reference counting when shared ownership makes sense. Mutual ownership is at odds with "shared ownership".

    2) you have ignored any time performance. Reference counting adds overhead even if you never accumulate a significant amount of garbage.

    The overhead is very small unless you use copy-on-write, or the objects are very small. You only pay during construction, destruction, and assignment. And even then, the cost is substantially less than that of a deep copy.

    For very small objects, there are other memory management strategies that are more suitable than reference counting. These can also be implemented in C++.

  405. OO is the biggest development myth of the century by Jayson · · Score: 1, Troll

    Why object oriented? OO is only one attempted solution to the larger problem of making programming easier on the programmer. It does this by trying to compartmentalize functionality and seperate implementation from usage. 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.

    Functional language actually provide even cleaner semantics of encapsulation by first-class method passing; compare the interface semantics of this versus encapsulation and notice how simplier the documentation is. Even OO style is better done in a functional way than objects: calling a function to return a lexically scoped function that can then be passed around does far more to promote security and encapsulation than any OO language could hope to do (look at the ugly attempt of C++ to provide member function pointers). Even the arguably most OO language, smalltalk, does what it needs to do in a very functional way.

    Besides functional there is the APL, now J and K, way of doing things. Array languages have shown for years that the most effecient way of operating on data is to slice the data column-wise as opposed to across object: doing an operations on the all first fields of your objects as opposed to doing an all operations on your first object. This even hides the amount of data from you. Perl is just now seeing this with hyper operators.

    Instead of desiring OO, peple should look to see what the desired outcome is, then think rationally instead of going with the buzz-word compliant non-technical people.

  406. Python or Perl by MatrixNAN · · Score: 1

    Have you checked out Python www.Python.org If that does not work for you then try Perl www.perl.org Python is easier to learn but can be taken to extreme depth. Perl is alot harder to learn right off the bat when compared with python. Both work with multi archs and platforms and would seem to have the characterists you are looking for. Check them out. Cheers, Nate Nesler

  407. What the heck happend to C? by KidSock · · Score: 2

    intuitive and easy to use IDE

    Overrated. It must be because I'm getting along pretty well with vi.

    simplified GUI design and event handling

    This is a tough one. The GUI frameworks are unconditionally complicated. Use what you're team is most familar with.

    advanced error handling

    errno? Just kidding. But real exception handling is pretty expensive. Those are really your only options besides maybe something like this.

    advanced object oriented design including multiple inheritance, abstract classes, and garbage collection

    This is kinda funny because multiple inheritance a feature that is only justified in a very small number of cases (I believe it should be avoided alltogther) and is a really good way to get into trouble lick-ity-split, abstact classes is mearly a convention and really doesn't buy you anything in terms of functionality and garbage collection makes languages far too forgiving to the idiot using crappy data structures and algorithms.

    full support for operator and function overloading

    Well, you just want everything and the kitchen sink don't you? They did that already, it's that morass of a language called C++. Do the next guy a favor and pick features that suit the needs of the application rather than features you think will make it easier for you or the result will be indecipherable.

    and portable (at compile-time) across various platforms

    Why? Is this really that great? The XOpen and ANSI standards are designed to reduce system dependancies to the point where this shouldn't be an that much of an issue. Even if you're not using C/C++ the language binding likely is. In either case, as long as you consider the scope of those specifications your code should be portable without too much effort. Of course if you cheat and call those Win32 API functions it wouldn't matter what language you're using.

    Sounds like you're trolling for some super Java/C++ language. It will probably never happen and rightly so because it would undoubtedly result in unrecognisable code that's dog slow.

    I'm willing to bet your application could be written very well with plain ANSI C a few additional libraries and some C++ for the GUI.

  408. The Project's the thing... by maddogdelta · · Score: 1

    wherin I'll specify the language to get it done in!

    The spec's are useless. What is the project? Database Application? Try SQL....Have to modify the bank's software...COBOL...Must integrate with M$Office...VB/VC++ may be your best bet. Lotus Notes App....LotusScript...

    You said portable, so why were you considering anything from Microsoft? VB/C# currently only run on Windows. VC++ is C++ until you start using COM/MFC, which kills the portability.

    The question was like saying "I want to work with wood...what tool should I use?" Figure out the project ("Drive in a Screw") and the answer will become obvious("Hatchet")

    --
    -- There are 10 kinds of people in the world, those who understand binary and those who don't.
  409. Re:Operator overloading by elflord · · Score: 2
    I know about expession templates, and also know why they are not used in std::string

    But reference counting often is. For example, the g++ implementation does use reference counting, so the example offered should perform as well as +=

  410. Learn from other disciplines by John+Jorsett · · Score: 2, Funny

    Materials engineers call the equivalent thing in their field 'unobtainium,' I believe.

  411. Ada by Anonymous Coward · · Score: 0

    I think ada95 fits allmost all (except multiple inheritance).

  412. What's the application? by kawlyn · · Score: 1
    the standard answer, it depends.

    Aside from that, sounds like java to me, and the IDE of choice would probably be the IBM Visual Age thingy.

    Ya ya performance..... so.. the newer buisness desktops are at a minimum Celeron 900's. Add to that the IBM JRE and....

    --

    When someone yells "Stop" or goes limp, or taps out, the fight is over.
  413. Re:OO is the biggest development myth of the centu by KidSock · · Score: 3, Interesting

    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.

  414. Java isn't really statically typed by markj02 · · Score: 2
    Sure, it looks like it's statically typed. But it has a real, full-blooded dynamic type system underneath the veneer of static type checking. Java's reflection, security, and runtime code generation are also better specified than Lisp's ever were.

    Much of Lisp lives on in Java (and its clone, C#). Sure, Java syntax can be a bit pedestrian at times, but look a bit deeper.

  415. Why not ask... by ttys00 · · Score: 2, Insightful

    ...the people who will be developing the software ie. the dev team?

    Surely they will prefer to do things in a language they prefer rather than do what the boss says.

    They might even say they want to do some parts of the project in one language and some parts in another.

  416. How about more than one? by zorander · · Score: 1

    I've found that when one language doesn't fit the bill alone, that more than one creatively hooked together can do better. I don't know the specs of your project, but perl/python/tcl-c/c++ hooks together well, and besides, partitioning sections of the project into languages can help the codebase organization later on as well. The biggest issue would be getting an IDE to do all of this, but the portability is there and any IDE for which plugins could be written (Kdevelop or MSVC or anything else really), could be made to support multilanguage development.

    Something else to look into is the Qt library for C++. It is a portable library that gives you more than GUI, but does include a RAD tool. It is portable across Mac/Win/Linux and is free on Linux. It gives you lots of basic stuff like Data Structures, as well as sockets, files and other OS abstractions all the way up to portable threads support. It is incredibly clean and the event handling architecture is one of the best I've run across. Development time is also fairly quick. My experiences with it are good, but that's just a thought. Possibly Qt with some runtime scripting in Python or Scheme (Scheme is for when you really want to make the other developers feel inadequate). That would definitely be my choice for a large project were I starting one.

    Good Luck,
    Brian

  417. Re: Java. Versus ... Perl??? versus... Python??? by cduffy · · Score: 2
    Before I start, a brief introduction: I used to like perl, a lot. It was even my primary language for short utilities and such. Then I got hired to maintain someone else's perl. Then I switched to python. That was a few years ago (three?), and I've been a (very, very) happy Python coder ever since. Okay, intro over.


    Consistency?!

    Okay, perl-the-runtime may do well for consistancy, usually. Perl-the-language is not consistant at all -- not between versions, not between syntactical constructs, not anywhere. There are so many places in the documentation where words like "except", "excluding", "but" and company are required that it's practically impossible to remember all the little nuances of its syntax at a glance. And I had all sorts of code break between perl 5.005 and 5.6. Having a language that tries to read the developer's mind for the sake of TIMTOWTDI may sound like a good idea, but it leads to all sorts of problems (just like laws that place penalties based not on people's actions but what goes on in their heads). You can have TIMTOWTDI or you can have an internally consistant language -- not both. I pick consistancy -- TIMTOWTDI may be damn nice when it works, but it's a royal pain when it doesn't. I haven't had to read a language reference in Python since 2.0 came out (with a few new minor language features), whereas as a Perl coder I hit the language ref docs every day.

    Python's PyGTK beats Perl/TK into the ground on both speed and ease of use. Build a really big grid of pushbuttons and labels and such in tk, and do it again in gtk. Then tell me tk's fast. (Never mind the usability differences between them -- unless you want to, in which it's another huge win for gtk). As for ease of use, I have one word: libglade.

    Python's runtime environment is not only extremely reliable, but it's also readable, so mere mortals (who know C) can debug or otherwise toy with it. Try doing that with perl! (Further, Python can cross-compile, whereas cross-compiling perl is an evil, evil task -- I know, since I had to make it happen for my job). And writing bindings between C and Python (in either direction) is far, far easier than using Perl's XS interface.

    Did I mention that Python uses PCREs? Yup, you get all your perl regular expression goodness, but with code that's actually maintainable. WooHOO!

    As for the "elegance" argument... well, I don't even really have to argue it, do I?

  418. Deja Vu by Anonymous Coward · · Score: 0

    Don't i see a question like this about once a month on slashdot? Hey guys im in charge of choosing a language to use at work, what should i use c++, java or c#? I dont know because they all have sometihng that the other doesn't, and I need every feature in the whole world to do what i need to do. If it is really that hard then flip on it. I dont read slashdot to hear that someone is having a hard time deciding on a language and so wants to spark the same old war, I read slashdot to hear about remotly controled monkey brains and stuff like that.

  419. Your boss is an Idiot by xski · · Score: 1, Insightful
    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.


    Looks like he read the latest development management magazine and picked out the buzzphrases with a 'Good' connotation attached.

    There are other posts that have excellent suggestions, so I wont rehash 'em here. I just couldn't resist as I'm particularly pissed at managers with no technical background in software that think they have a clue how to design software or write code much less lay down criteria for language selection. Oh, Please! Deliver me from stoopit people.


    Bah

  420. RUBY !!!! by fattybob · · Score: 1

    Check out Ruby, I'm no exert but I'm sure that it fills all your needs,

  421. The ideal by greening · · Score: 1

    Well, since I'm partial to C++ myself (and not too informed), my ideal language will seem a lot like C++. It has to, of course, be portable. With all the diverse processors out there, your market will be very constrained if you just make it Intel compatible. Or even in OS's...But, that would just be making another compiler... It also has to be Object Oriented. It provides for smaller compiled programs and for more readable and more organized source. I'm very much a programmer but, not very smart (just do it on my free time). There are so many other things that I can't cover. But, that's a jumping-off point.

    --
    Are you telling me that you don't see the connection between government and laughing at people? - Interviewer
  422. PERL!! by Anonymous Coward · · Score: 0
    Hasn't any mentioned Perl yet?

    It has ALL of those features, but it is just interpreted instead of compiled.

  423. Re:Delphi - MOD THIS GUY UP! by Anonymous Coward · · Score: 0

    used search to look if anyone would mention delphi..

    amazing how few people know the power of delphi..

    it's a waste

  424. Borland C++ Builder by Anonymous Coward · · Score: 1

    C++ Builder seems to me to meet all of the criteria.

  425. Delphi && II Qt by Anonymous Coward · · Score: 0

    Well, you could adapt a GUI IDE to Qt libs and have a lot of what you are looking for there, but, if you want just about everything in that list, go checkout a copy of Delphi 5 or 6, I am honestly not sure about operator overloading, however, everything else is there, and has been for years, along with being extremely easy to use, a monkey could code a database app in 5 minutes with Delphi.

  426. The only acceptable language.... by Eythian · · Score: 1

    ....has to be NULL!

  427. Pick Perl and then use whatever language you like. by mattr · · Score: 2

    Pick Perl and then use whatever language you like.

    Different languages have different strengths, and with no idea of even what industry you work in it is not easy to tell whether you are building real-time physical process management, security tools, or what. So right off the bat, I have to say you are going at this ass-backwards.

    That said, Perl has all of the above functionality, and is the highest level language which does so. That means you can abstract as far away from the nitty gritty as you like, or you can hit the metal. It also is a superset of the languages you mentioned, so if you want you can program in Java, C, C++, or many other languages and insert that source code right into your Perl programs, Inline (not using XS). GUI through Tk, Qt, or other packages are possible. It is probably best for you, unless you already have a great Java team, or you are writing a video game or have a lot of flashy graphics. I was going to say, or if you want to sell your product as shrinkwrapped software, but that isn't true anymore with ActiveState's DevKit.

    Python might be good, though it seems Perl is still going to have more support for different platforms and general ways to save yourself from trouble. I have to say I have way more experience with Perl than Python myself, though mainly this is because it wasn't mature enough when I was seriously considering a switch, and now because I have no need to change and the future for Perl looks very bright. I get more return on my effort with Perl, it's that simple. You could also use C/C++ with one of the popular cross-platform GUI toolkits, but the more flash the less portable in general.

    Another person recommended English, another good choice. The closest language computers understand these days though is Perl, and the language itself is easily to extend. Maybe the best thing to do is figure out what you are building first, then pick the right language. Perl doesn't solve every possible problem, it just seems more likely to be all-powerful than anything else out there, that's why it is the glue of the Internet.

  428. Heh by vmalloc_ · · Score: 1

    Use COBOL. Highest powered language you can get. It's like running 5 crays at the same time its so powerful

  429. Helpful info hopefully by pfefferz · · Score: 1

    The most insightful thing I ever grasped was that programming transends the languge with which its written. Unfortunatly we mere mortals have not devised an all encompasing language with which we can describe any system so we're left with C++, lisp, scheme etc...

    I think the coolest programming languages support continuations so my vote would be lisp.

  430. imho by fcrick · · Score: 1

    higher order functions and closures

    word

    --
    Your signatures belong to me.
  431. x wrap z body y by bob_jenkins · · Score: 1

    I've long wanted a "x wrap z body y" construct, which is execute x y z. A variant has an errorframe built into it so that z is executed even if y throws an error. For example

    saved = context;
    wrap {
    context = saved;
    } body {
    context = 0;
    foo(context);
    }
    bar(context);

  432. Re:Operator overloading by SyniK · · Score: 1


    Yeah, that damn strcat... It's just such a mess! Good thing you overloaded that + for me!

    --
    -Tom
  433. Re: Java. Versus ... Perl??? versus... Python??? by PhotoGuy · · Score: 2

    I haven't explored Python personally myself, but at last a couple of strong tecchie's that I know and respect, are big Python fans, which means a lot to me.

    I don't doubt that Python is more elegant and consistent than Perl. (It wouldn't be hard :-)

    But the *huge* libraries of supported API's on CPAN, and the fact that the differences between versions is *well* documented (with source available, even), and the fact that the source can easily detect what version it is running under, and make appropriate adjustments, makes it still preferrable to me. Predictability and API support can outweigh Elegance, in my book.

    Yes, in theory, and in my heart, the more elegant solution is the best. (At heart, I prefer AWK to Perl. But in practice, I can't do as much with it, as easily.) So, in practice, I will still choose what lets me accomplish the goal, which today, is still Perl. I'll check out Python, but without the same CPAN support, I doubt I'll switch today, or any time soon.

    I'd love to come back in two years with a future slashdot post, where I talk about how Perl came to let me down, and I've now moved on to the far superior, far more elegant, far more support, Xyzzz language. Let's hope. Maybe it'll run on the newly open sourced QNX :-), running on the open source Risc hardware, yadda, yadda, yadda. I think we'll get there eventually, but we've got a few hurdles to clear before we get there. A fun time to be alive. :-)

    It's only going to get better folks, as long as we keep the monopolies (okay, monopoly) from completely eliminating our choices of platforms and OS's.

    -me

    --
    Love many, trust a few, do harm to none.
  434. Wow by Winjer2k · · Score: 0

    I wish I was paid to ask questions on Slashdot. I wouldn't even have to finish my CS degree!

    --
    I sig for world peace
  435. MBasic? by NewtonsLaw · · Score: 1

    What? When did Microsoft stop shipping MBasic?

    Never mind, CBASIC is better anyway -- it's semi-compiled and has BCD math. Cool!

    What will they think of next -- something more powerful than my 8080-based CP/M machine. Nah, it'll never happen!

  436. Eiffel not good enough? by mvonballmo · · Score: 1

    Though it might seem strange to specify language requirements for a project, it makes some sense. Having worked on a project before, it's certainly possible that a list of language features becomes necessary in order to implement any design you can conceive. Language choice can be very limiting. The feature you didn't mention was genericity (generic programming), which both C++ and Eiffel support (though C++ does it through a less-than-optimal template system, whereas generice classes follow all the same inheritance rules and requirements as non-generic classes in Eiffel).

    Does Eiffel really not satisfy these requirements because it doesn't have function overloading, when it satisfies all the other requirements so well?

    "intuitive and easy to use IDE": As of Eiffel 5.0, the IDE has syntax highlighting, full debugging integration and the best class and feature browsing I've seen.

    "simplified GUI design and event handling": The Vision 2 library is both cross-platform and well-abstracted. The use of Eiffel agents makes event handling extremely decoupled and simple. The IDE is written in it, I believe.

    "advanced error handling": Eiffel 'rescue...retry' handles exceptions and is simple and easy to use. Full support for design-by-contract with preconditions, postconditions and class invariantas would also fall here, I suppose.

    "advanced object oriented design including multiple inheritance, abstract classes, and garbage collection": Check, check, and check. Eiffel's support of multiple inheritance is actually complete and an unintrusive as possible, while still allowing the full power of multiple inheritance. Abstract classes are, of course, available. Garbage collection has always been in the language.

    "full support for operator and function overloading": infix and postfix operators are the same as other routines. Function overloading is not supported, but for very good reasons.

    "portable (at compile-time) across various platforms": Eiffel compiles (cross-platform) to Linux and Windows, as far as I know.

  437. More justification of OO being a phony. by Jayson · · Score: 2
    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.
    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.
    First, but what is the purpose of making modeling easier? Isn't the goal of almost all new language to make programming easier in some respect.

    Second, I am not one one of the "objects as real-world entities" people. I believe strongly that to effectively partition work -- to make programming more tractable -- many times you will create work partitions and create objects that have no correlation to the real-world. A contrived example would be a deck of cards. Imagine that you make each card an object, then you have a deck object, and a dealer object. In the real-world the dealer would shuffle a deck, but in our code this responsibility would fall on the deck, but the dealing mechanics would probably rest with the dealer.

    I am the kind of programmer that believes in active objects. I am the kind of person that makes everything an object. I make all my constants objects (for type checking and I cannot stand it when people use integers for this) and slowly through most development I have done, these once data-only objects gain methods and no longer become just place-holding constants.

    I think that to effectively use the OO paradigm, you need to really abuse it. I use dynamic dispatch for almost all my flow control; try finding even an 'if' statement in my code. I even have the_empty_tree_node objects that don't do anything except return so my tree recursions don't need a base case. This abuse is non-trivial; you are correct. I have spent alot of time abusing C++ and Java for it to come more naturally to me.

    However, I don't think it will ever come as naturally to me as functional programming. I am not saying that I do not use OO techniques in my functional code. You can see a sort of dynamic dispatch mimicked by function passing and you can see pseudo-object in functions that return different functions, each operating on the same lexically captured bindings. I am just saying that OO is over-hyped and I feel that the functional paradigm effectively captures OO benefits.

    APL's style of data oriented processing has also shown to be much faster and require far less code. Why develop a library when it only takes a single line implement the functionality? Also when you language supports dynamically evaluating a string code reuse in terms of modifying a string then evaluating is phenominal (plus the on-the-fly compiler gets to optimize the hell out of it).
    1. Re:More justification of OO being a phony. by KidSock · · Score: 2

      First, but what is the purpose of making modeling easier? Isn't the goal of almost all new language to make programming easier in some respect.

      Everything's hard until you understand it. OO is easier once you understand it because with 10 lines of OO preamble you can create a seeming simple relationship that can greatly reduce the complexity of a program. The compiler now takes care of things that are not possible in C (without potentially large switch statements or ugly lookup tables).

      Second, I am not one one of the "objects as real-world entities" people. I believe strongly that to effectively partition work -- to make programming more tractable -- many times you will create work partitions and create objects that have no correlation to the real-world.

      This is wrong. Any objects you define do correlate to the "real-world" (your model). If they dont your program will not make sense. You have taken a wrong turn somewhere.

      A contrived example would be a deck of cards. Imagine that you make each card an object, then you have a deck object, and a dealer object.

      Ok, sounds good to me.

      In the real-world the dealer would shuffle a deck, but in our code this responsibility would fall on the deck, but the dealing mechanics would probably rest with the dealer.

      What are you modeling? Are you modeling a deck of cards and how a dealer physically interacts with them or are you modelling a game? You're probably modeling poker or black jack right?. OO could be real handy for abstracting which game of cards you're modeling. You're probably not modeling a physical human being "handling" some cards. See the difference?

      I think that to effectively use the OO paradigm, you need to really abuse it.

      What an absurd statement.

    2. Re:More justification of OO being a phony. by Tablizer · · Score: 1

      (* Everything's hard until you understand it. OO is easier once you understand it because with 10 lines of OO preamble you can create a seeming simple relationship that can greatly reduce the complexity of a program. The compiler now takes care of things that are not possible in C (without potentially large switch statements or ugly lookup tables). *)

      I don't beleive you. Let's see a practical example. C is hardly the pinnacle of procedural or any paradigm anyhow. (Sorry C fans, it just aint for me.)

      (* This is wrong. Any objects you define do correlate to the "real-world" (your model). If they dont your program will not make sense. You have taken a wrong turn somewhere. *)

      Whether OO "should" model the real world is heavily debated among OO fans. Modeling the "real world" seams mostly about modeling one's personal viewpoint. This is what it often comes down to when one digs into these things. IOW, modeling your own head.

      oop.ismad.com

    3. Re:More justification of OO being a phony. by Jayson · · Score: 1
      Not to beat a dead horse, this is my last post on the topic.
      This is wrong. Any objects you define do correlate to the "real-world" (your model). If they dont your program will not make sense. You have taken a wrong turn somewhere.
      I am not the only to advocate this position. Jeff Alger is a great proponent of objects not as real-world entities but of programming idioms, as is Martin Fowler. The reason is that to distribute work, many times is makes more sense to have object be active: it fits the "data with their operations" paradigm. The point of the cards example is that in real life you don't really have self shuffling decks of cards, but it is a natural division of work in programming (it is an operation of the deck dealing with its data).
    4. Re:More justification of OO being a phony. by KidSock · · Score: 2

      The point of the cards example is that in real life you don't really have self shuffling decks of cards

      I understood you perfectly but you're not modeling "real-life". Decouple yourself from the physical world man! Of course the deck should have the capcity to shuffle itself. My point is that there is nothing wrong with this in the context of modeling a game. If you were modeling a person handling some cards it might not.

    5. Re:More justification of OO being a phony. by KidSock · · Score: 2

      Whether OO "should" model the real world is heavily debated among OO fans. Modeling the "real world" seams mostly about modeling one's personal viewpoint

      I said "real-world" because the OP used that term. If you look at the response to the other thread you'll see my position is more sophisticated than that.

      In short, you don't model the "real-world", you model concepts which may or may not encompass tangable entities.

    6. Re:More justification of OO being a phony. by KidSock · · Score: 2

      oop.ismad.com

      This link is seriously misguided. There are ligitimate arguments against using OOP and this page does not do that argument any justice.

    7. Re:More justification of OO being a phony. by megagurka · · Score: 1
      A contrived example would be a deck of cards. Imagine that you make each card an object, then you have a deck object, and a dealer object. In the real-world the dealer would shuffle a deck, but in our code this responsibility would fall on the deck, but the dealing mechanics would probably rest with the dealer.

      Sounds like a bad design. I would pass the deck of cards to an instance of a shuffler interface. If this is the dealer object or not is unimportant.

      However, I don't think it will ever come as naturally to me as functional programming. I am not saying that I do not use OO techniques in my functional code. You can see a sort of dynamic dispatch mimicked by function passing and you can see pseudo-object in functions that return different functions, each operating on the same lexically captured bindings. I am just saying that OO is over-hyped and I feel that the functional paradigm effectively captures OO benefits.

      There's no reason to choose functional vs. OO programming, they work fine together. Closures and OO works perfectly together in Smalltalk. The power of OO is data encapsulation and correct use of interfaces. These are things that are not easily modelled in a pure functional language.

    8. Re:More justification of OO being a phony. by Jayson · · Score: 2


      Sounds like a bad design. I would pass the deck of cards to an instance of a shuffler interface. If this is the dealer object or not is unimportant.

      This breaks the paradigm of a data and its operation going together, one of the basic tenants of OO design. Then you would have a non related class, the shuffler class, picking at the data of the deck class. This is clearly covered by Martin Fowler in Refactoring as a bad smell.

      There's no reason to choose functional vs. OO programming, they work fine together. Closures and OO works perfectly together in Smalltalk. The power of OO is data encapsulation and correct use of interfaces. These are things that are not easily modelled in a pure functional language.

      You say it yourself. Lexical closures are the perfect medium for encapsulation and inteface exposure. The lexical bindings allow for data to be completely hidden from the users eyes. The function that creates the closure and returns it is a factory in design pattern lingo. It creates a function with a clearly defined interface. I think both of these OO paradigms are more than adequately covered in functional programming.

    9. Re:More justification of OO being a phony. by Tablizer · · Score: 1

      (* This link is seriously misguided. There are ligitimate arguments against using OOP and this page does not do that argument any justice. *)

      You did not state *anything* specific. If you are gonna post, give something semi-technical instead of just "it's bad".

      Note that many OO fans have reviewed it, and their criticisms vary widely. (The praises do to, for that matter.)

  438. Question is flawed? by camusatan · · Score: 2, Insightful

    Shouldn't the 'boss' character either be giving less detailed requirements, or just choose the language him/herself? My gut instinct is that if someone has such a strong idea of what is required, and has such detailed specifics, that that person is just a few tiny steps away from the final decision anyways. Either that, or the PHB just put every single programming buzzword into the requirements document to sound 'cool'.

  439. The result will simply mirror your head.... by Tablizer · · Score: 1

    ....but not necessarily others' heads.

    I have been in many "My Language Is Better Than Yours" debates. It all comes down to Mental Ergonomics: the ideal choice personally fits the way you think and work.

    BTW, I documented some of my choices and justification at:

    http://geocities.com/tablizer/langopts.htm

    Note that error-handling is a messy and tuff philosophical issue. I tend to vote for KISS on that one. Some try to use them for glorified IF statements and get carried away.

    Good luck

  440. What makes a powerful programming language? by mtempel · · Score: 1

    The user. All the rest is syntactic sugar.

  441. borland c++ builder by tq_at_sju · · Score: 1

    I would personally go with Delphi to meet the needs of any application, because it is so versatile. However, if you still really like multiple inheritance then you can go with borland c++ builder, which is basically delphi in c++, rather then pascal.

    --
    http://www.vanillaafro.com - take me seriously and I will shoot you
  442. ESR Says... by Anonymous Coward · · Score: 0

    Take a look at ESR's "The Art Of Unix Programming", which can be found at http://www.tuxedo.org/~esr/writings/taoup/.

    He advocates a mixed language approach that is "knowledge intensive" rather than "coding intensive", using each language for what they do best. I think this approach makes alot of sense.

  443. The criteria are not Object Oriented themselves by sounds · · Score: 1

    It seems to me that, by specifying language features, your boss has violated a major tenet of OO design.

    The power of Object Oriented design comes from the fact that you do not need to know how things are implemented in order to hook them together into a more complicated system. What good does it do for your boss to specify particular OO language features if this first step in the development process goes against basic OO principles?

  444. Maybe we should have extensible syntax by r6144 · · Score: 1

    When things other than strings and vectors are used, the standard C++ operators are just not enough. For example, we can have > for streams just because we have such built-in (and entirely irrelevent) operators *by sheer luck*. This is ugly. Things are even worse for mathematical stuff. There are much more math ops than C++ ops.

    That's where extensible syntax like the ability of defining new operators are needed. Then overloading will no longer be a half-formed feature.

    1. Re:Maybe we should have extensible syntax by Black+Parrot · · Score: 1


      > When things other than strings and vectors are used, the standard C++ operators are just not enough. For example, we can have > for streams just because we have such built-in (and entirely irrelevent) operators *by sheer luck*.

      Not everybody is talking about C++.

      > Things are even worse for mathematical stuff. There are much more math ops than C++ ops. That's where extensible syntax like the ability of defining new operators are needed. Then overloading will no longer be a half-formed feature.

      That's an argument for more operators, not an argument against allowing overloading of what we've got.

      --
      Sheesh, evil *and* a jerk. -- Jade
  445. Your boss is clueless by riverawynter · · Score: 1

    Don't have time to reply. But based on what he is asking, I can tell that he is clueless.

    Good luck!

  446. Goals not Tools by fishbowl · · Score: 1

    If you have as definite and clear requirements
    of the rest of the project as you have for the
    tools you must use, then you should be good to
    go.

    --
    -fb Everything not expressly forbidden is now mandatory.
  447. Want the lists for Java? VB? by Ars-Fartsica · · Score: 2

    Sorry, Slashdot post length won't allow it. Your post doesn't demonstrate anything.

    1. Re:Want the lists for Java? VB? by Anonymous Coward · · Score: 0

      Why on earth would anyone want to see the lists for Java or VB? No one disputes that Java and VB are widely used languages. There are however posters here who claim that Lisp is dead or that no one uses it. The OP's just wanted to prove that they are wrong.

    2. Re:Want the lists for Java? VB? by Jon+Howard · · Score: 1

      Hmmm... I don't recall having replied to a post that said Java or VB were dead and obsolete languages, just Lisp.

      I suppose that next time someone tells me that they think William Shatner's acting stinks I should retort with "My car acts funny sometimes" or something similarly tangential to the discussion.

  448. What about C++? by HunterZ · · Score: 1
    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.
    What about C++? Nope, he already looked at that. Hey, I know! C++! Nope, he checked that out too...
    --
    Arguing about vi versus Emacs is like arguing whether it's better to make fire by rubbing sticks or banging rocks.
  449. Re: Java. Versus ... Perl??? versus... Python??? by mkcmkc · · Score: 1
    But the *huge* libraries of supported API's on CPAN, and the fact that the differences between versions is *well* documented (with source available, even), and the fact that the source can easily detect what version it is running under, and make appropriate adjustments, makes it still preferrable to me. Predictability and API support can outweigh Elegance, in my book.

    I believe all of this is true for Python, except of course that the CPAN-ish collection is smaller. It's a newer language with (at the moment) fewer users, so that's not surprising.

    I believe every Perl programmer owes it to themselves to at least try it out.

    Mike

    --
    "Not an actor, but he plays one on TV."
  450. Try OpenROAD by Anonymous Coward · · Score: 0

    Try OpenROAD from CA

  451. If you wanna do it right by Anonymous Coward · · Score: 0

    Write it in machine language. If you can't write machine code, you're only a poser, not a programmer. Rule of thumb - The higher the level of a programming language used, the lower the level of programmer ability present. Assembly is for wusses, C is for clueless lusers, anything else is for total dorks who don't know that there's really ones and zeroes running around inside that do all the work.

  452. How about using multiple languages? by dannannan · · Score: 1

    You're not going to find a single language that's got all those features. I won't bother questioning *why* it's so important that you find a langauge that does, but you might consider leveraging technologies such as COM or .NET to create a solution that combines components written in several different languages.

    For example, VB and C++ can make a very powerful combo. VB excels at rapid GUI development, and C++ is great for writing multithreaded code and using a wide range of APIs. Your VB and C++ code can work together through a set of COM interfaces. Of course, you might decide that this particular language combo doesn't meet your needs, but this is just an example. (C++ doesn't have automatic garbage collection, for instance, but VB accomplishes something similar to it through its automatic use of AddRef and Release on COM interfaces behind the scenes.)

    Hope this helps!

    D

  453. Borland Delphi? by treierts · · Score: 2, Informative

    Why not try Borland Delphi? It meets all your requirements except Multiple Inheritance (can be emulated) and real platform portability (but so does C# and VB.Net). Atleast now you can develop Windows/Linux solutions using Delphi/Kylix. When it comes to good IDE's and easy GUI development Delphi is right on, you'll never look back. Tom.

    1. Re:Borland Delphi? by magerquark.de · · Score: 1

      But the language... The language itself is really a crime to all programmers. I hate it for its lack of flexibility (ok, for a LEARNING language, as it was first designed, it's OK)

      And the Borland IDEs are really bad. All those nasty bugs and crashes. I really doubt someone professional would work with it, if he isn't forced to.

      I rather suggest to use VS.NET. The cross-language features (use Perl here, VC++ there, etc.) should get closest to the needs.

      --
      -- Watch me working: www.magerquark.de
    2. Re:Borland Delphi? by marcovje · · Score: 1


      That is a bit light on reasons. Why is it inflexible?
      Or did you never really look at it?

      I really like the language, and like the calm, clear IDE. A lot of IDEs are getting to baroque, and most
      of those baroque features are only funny to show to
      friends or use in magazine reviews. Not to work with.

      .NET and Java are not an option for me, performance wise, and because of deployment.

      VC++ is an option, and the VS studio IDE is nice,
      but I don't like the language and the libraries.

    3. Re:Borland Delphi? by cruachan · · Score: 1

      It's true that the original pascal was severaly restricted, but Borland's version is now so far removed from that that it really hardly counts as the same language.

      I'm totally fluent in C, C++ and Delphi, but where I have the choice I always reach for delphi by preference. It can do 99% of everything you can do in C++, the 1% it can't generally being obscure stuff that you don't need in most projects - and I find code development far faster, main because delphi tends to stop you writing errors in the first place. You milage may vary of course but I'd estimate for me it takes about 20-30% less time to debug a delphi project than C++.

      Also I've found the Delphi IDE to be rock solid from version 4 onwards.

      The second killer feature of delphi for me is also the availability of many thousand of additional components for every conceivable function in freeware to fully commercial versions. Most also come with full source code - not Open Source, but pretty damm close.

  454. Fortran by gunix · · Score: 1

    Fortran is the way of the future!

    --
    Evolution of Language Through The Ages: 6000 BC : ungh, grrf, booga 2000 AD : grep, awk, sed
    1. Re:Fortran by Anonymous Coward · · Score: 0

      But does fortran 2000 look *anything like* fortran 77?

  455. Re: Java. Versus ... Perl??? versus... Python??? by cduffy · · Score: 1
    You're right -- CPAN is really cool, and Python would (will!) do well to have something like it. See, we may not like perl's syntax, but we have no shame about copying its best features! [grin]. Python's distutils package was built for the purpose of enabling something similar to CPAN, but the repository itself isn't there yet; maybe in six months or so. Either way, I rarely find something I need a Python module for where there isn't one available -- in fact, I can't think of one instance of it happening in the last few years (though that says little -- my memory's really bad).

    The rest of the issues you mention, however, appear to be more in Python's favor than Perl's.

    Python whoops perl in terms of predictability. No, really. The language spec is simple enough that it only very rarely needs changes that affect backwards compatability (or changes at all; a great many things that are language features in Perl are library features in Python). When these *do* take place, there's right now a multi-step process that takes place over several releases, the upshot of which is that code breakage from release to release without warning Just Doesn't Happen. Contrast this to perl, where code just breaks when Larry sez so (no, I haven't forgiven him for 5.6). Having sudden breakage be documented makes it no less painful when you need to get the damn product out and suddenly it needs major fixes to cope with a new language release. (When I call such changes rare in Python, btw, I mean it -- there's only one I'm aware of that broke any amount of code whatsoever, and it was not a change in the spec but the removal of an undocumented "feature" from the interpreter). As for predictability in terms of whether a piece of code does what it appears to do, that's another area where perl falls short -- see my objections to TMTOWTDI.

    "[A]ppropriate adjustments" based on runtime version generally Just Aren't Needed on python, simple as that; that you make such a deal over being able to detect the runtime version on perl implies that the language is so unstable you need to know such things. (Yes, you *can* pull the language version on Python... but I've never seen anywhere where it had to be done).


    Interestingly enough, btw, the undocumented "feature" removed that broke a fair bit of Python code moving off of 1.5.2 was just the sort of thing Perl would put in there intentionally. It was something akin to a built-in list modification function (don't remember which one... append?) that took any extra arguments to be elements of a list rather than insisting per the language spec that they be made explicitly a list by putting parens around it. What this comes down to is that folks were writing what they meant rather than what was consistant and Right according to spec, and the interpreter (formerly) accepted it. That misfeature was removed because with Python, consistancy and readability are higher priorities than terseness (though that too is given high standing). If you've ever worked on maintaining Other People's Code, you'll realize that that's The Way It Should Be.

    Btw, another interesting thing -- Python has at least three separate interpreters (written and maintained by different folks) following its language spec (cpython, jython, and stackless), and a 3rd-party compiler which converts Python to C. That they all maintain language compatibility with each other (jython's access to the Java standard library and the weird and wonderful flow control constructs of stackless are available strictly through library calls) is perhaps quite telling with regard to the simplicity and stability of the language itself.

  456. features for a new language by pschachte · · Score: 1
    If you were to design a language from the ground up, what features would you include and why?

    Here are a few design points, just to get started:

    It would allow me to write code the way I want to think about it, rather than forcing me to follow clumsy idioms. This means it must be a very high level language allowing for many diverse kinds of abstractions. Life it too short to program in assembler or C or even C++.

    It would allow me to say as much or as little as I like about the interfaces between the parts of the program (at the level of procedures and modules), and would check to make sure I'm using the interfaces according to my declarations if I've given them, or at least consistently if I haven't. Type checking is sometimes not enough, and sometimes too much!

    It would not force me to pay attention to details I am not interested in, but would allow me to look at the details when I want to. Why do we tend to assume that the programmer has to type in everything that someone looking at the program wants to read? 30 years ago assemblers produced listings showing the source code with extra information (like assigned addresses and cross reference listings). Why can't compilers now produce listings with inferred types and other useful dataflow annotations?

    Most importantly, the language would be designed to make it easy to reason about what the program is doing, easy to automatically analyze the program's behaviour (important for the preceding points), and easy to manipulate the program (eg, taking a chunk of code, replacing it with a reference to a new procedure, and generating a definition for the new procedure using the removed code; try doing that in C++).

    Why? I guess because these are features whose absence from existing langauges I find most frustrating, and I think would do the most good for program reliability and programmer productivity.

  457. And did you look at Java? by Rui+del-Negro · · Score: 1

    >I have already looked at C++, Java, C++,
    >C#, Eiffel, and even VB.net;

    So you looked at C++ twice. Reminds me of that scene in Blazing Saddles where one of the outlaws says he's good at "Robbery, rape, murder, assault and rape". The other guy says "You said rape twice", and he replies "I like rape".

    RMN
    ~~~

  458. But Python is becoming a minority language by Ars-Fartsica · · Score: 2
    Regardless of its strengths, the number of Python programmers in proportion to Java, Perl and VB programmers is small. So you are going to pay more to develop Python code if you can get people at all. And then you have to worry about replacing them, which might get tougher once C# gets into the mix and dilutes the talent pool further.

    It just isn't worth it in the long run to go with a minority language, even if it has features that are elegant. Yes this is dismal, but at some point the market for programming languages was going to become a two horse race. C'est la vie.

    1. Re:But Python is becoming a minority language by swirlyhead · · Score: 1

      I doubt that Python will be a minority language for that much longer
      'sides which most of the python programmers locally
      already know at least one other language.

      Add to which a programmer should be able to learn languages at need no?

    2. Re:But Python is becoming a minority language by Anonymous Coward · · Score: 0
      Regardless of its strengths, the number of Python programmers in proportion to Java, Perl and VB programmers is small. So you are going to pay more to develop Python code if you can get people at all. And then you have to worry about replacing them, which might get tougher once C# gets into the mix and dilutes the talent pool further.

      It's perfectly true, although all languages without exception started as minority languages. You can make choice when the minority language is "majority" enough. The same applied to Linux, and is applying to Free BSDs.

    3. Re:But Python is becoming a minority language by Peter+Harris · · Score: 2

      Er, what? Python is a minority language, but not "becoming" a minority language. Are we going to have an outbreak of "Python is dying" trolls now?

      In terms of support, just advertise for programmers with "Object-oriented language skills". Anyone who can write good code in Java or C++ can write twice as fast in Python after a day looking through the tutorials.

      In fact at my workplace we are ditching Java and shunning VB precisely because we want to narrow down the number of expensive IT skills needed to maintain our systems - we're keeping Python.

      --

      -- What do you need?
      -- Gnus. Lots of Gnus.
    4. Re:But Python is becoming a minority language by k8to · · Score: 2

      I'd love a python-related job!! What do you do?

      Even if you need no people, I'd love to know
      where to knock in general. I don't know
      who's using python professionally.

      --
      -josh
    5. Re:But Python is becoming a minority language by Peter+Harris · · Score: 1

      I write Progress 4GL programs mostly, but bits of middleware, glue and a couple of stand-alone applications in Python. Progress is a good DB but way too expensive per license to use it for small stuff, and the 4GL is a bit crufty.

      Most of this activity is to support the distilling, bottling and selling of scotch, vodka and a few other drinks.

      All I can suggest is, look for companies with pressure on costs, legacy computer systems and the need to respond fast to changing requirements.

      In my experience, manufacturing is less conservative about these things than white-collar businesses.

      --

      -- What do you need?
      -- Gnus. Lots of Gnus.
  459. Sorry, but Ruby died before it was born. by Ars-Fartsica · · Score: 1, Offtopic

    Ruby simply didn't offer enough of a reason to switch off of Perl, Java or Python. Its elegant but not groundbreaking, and frankly the market for programming languages is already overpopulated.

    1. Re:Sorry, but Ruby died before it was born. by smallpaul · · Score: 2

      Ruby simply didn't offer enough of a reason to switch off of Perl, Java or Python. Its elegant but not groundbreaking, and frankly the market for programming languages is already overpopulated.

      You don't have to win to survive. There are still people around promoting Objective-C! Ruby has found an audience and will continue to strike a cord with disaffected Perl programmers who choose not to use Python (perhaps out of a sense of pride, or because they really don't like its style). Also, Ruby will probably be a very major language in Japan: perhaps the most popular high level language there.

  460. Re:OO is the biggest development myth of the centu by Anonymous Coward · · Score: 0

    Its okay, I have a little extra karma. Even though a troll tends to not provide any reasoning behind it.

  461. This is the WORST of all possible options. by Ars-Fartsica · · Score: 2, Troll
    Sure! Immerse yourself in a dying, idiosyncratic language that has little support, few examples of outstanding commercial successes, and a tiny support community. Spend months relearning everything you know about CS theory just so you can implement quicksort in two lines less than you would have in language X.

    Congrats! You are now a purveyor and advocate of a minority language. Take a seat beside the COBOL programmers trying to eek a retirement out of the last contract they can land.

    1. Re:This is the WORST of all possible options. by mauddib~ · · Score: 3, Insightful

      Unfortunately, there are still people who have prejudices about certain languages, without having programmed in them at the first place.

      Common Lisp has grown alot in the past years, but it's expresiveness of theoretical problems is superb above most other languages. Wether you are a programmer with no mathematical background, or a mathematician with no programming background, CL will be easy to learn.

      One should definitely have a look at CLOS (Common Lisp Object System), which beats most other Object Systems with ease (especially because of the metaobject protocol).

      Then take C (and all derived languages, such as C++, Java (and Perl)). Most OO paradigms in these languages are hacks, not expresive, not extendible, no reflection. I'm not saying these languages are bad; these are just the languages in which most work has been done for the past 30 years. But there are more languages to see and to learn.

      You should definitely have a good look at Lisp, for me it was an eye-opener.

      --
      This is a replacement signature.
    2. Re:This is the WORST of all possible options. by Anonymous Coward · · Score: 1, Insightful

      For those of you too braindead to see it, this is a troll. CL is only getting started... In 10 years time, the MS/CLR and Java communities will probably have reinvented CL, poorly.

  462. Just one more thing to factor in: by Ars-Fartsica · · Score: 2
    The six months it will take you to become useful in any of these fringe languages.

    Its amusing to note how not one person on this article makes any mention of economic factors. Sure, go ahead, use ML. See you in two years.

    1. Re:Just one more thing to factor in: by Anonymous Coward · · Score: 0

      Common Lisp is hardly a "fringe language", seeing as it's used for virtually every _large_ computing project these days (I'm talking the size of Yahoo, or airport processing).

    2. Re:Just one more thing to factor in: by Anonymous Coward · · Score: 0

      just to let you know, you have no clue what the fuck you are talking about. i don't know how else to put it

    3. Re:Just one more thing to factor in: by Ehud · · Score: 1

      We heard you the ten first fucking times. Just shut up and don't use Lisp if it hurts you so much. Go with the fucking flow, or whatever.

  463. Try Runtime Revolution by epeus · · Score: 2

    It generates binaries for Windows, Mac (9&X) Linux, Solaris and bunch of other Unixes.

    It has graphcial GUI design tools
    It is programmable in a object-oriented language that reads like English.

    You can extend it in C if you want.

    It has a good free trial offer.

    http://runrev.com

    I built the Pocket GoogleWhacker in it for 4 platforms in under an hour.

  464. Not a troll (although it feels like one) by Anonymous Coward · · Score: 0

    How about Ada? I don't know about its event handling or IDE's, but from experience, I know it has good garbage collection, is portable, reliable and has nice error/exception handling. Here's a couple of links (from google) on the other issues:

    Operator Overloading:
    www-inf.enst.fr/~domdl/Ada/lovelace/s16sf.htm

    Multiple inheritance:
    www.comp.glam.ac.uk/pages/staff/bfjones/oot/ada9 5. htm

  465. What your boss is really telling you... by da+cog · · Score: 1


    ...is that he wants the project done in INTERCAL.

    --
    Snarkiness is inversely proportional to wisdom because it emphasizes feeling right rather than being right.
    1. Re:What your boss is really telling you... by radja · · Score: 1

      nonono... he needed an IDE too...

      //rdj

      --

      No one can understand the truth until he drinks of coffee's frothy goodness.
      --Sheikh Abd-Al-Kadir, 1587
  466. Syntax, syntax, SYNTAX!!! by Anonymous Coward · · Score: 0

    Programming languages are only good if the syntax they use is one to one with how you dream up your algorithms and data structures. If you EVER find yourself wondering "I've been trying to get this basic function to work FOREVER, and I can't figure out WHY IT WON'T WORK!" or "This is SO much more of a hassle than it ever needs to be!" or even "Why can't I do something that seems so simple, and seems so in-line with all the rest of the code this language uses, but flat-out doesn't work?"; then what YOU have, my friend, is a syntax problem.

    It's all well and good to say that this language supports this feature, and so on and so forth. But the first roadblock between the programmer and the completed software is the syntax itself. I have yet to meet a programming language that I don't hate outright because a few simple, basic features that seem in-line with everything else that is standard about the language cannot be done because the syntax cannot support it. One of the things I have always wanted to do is to declare a byte, and then treat that byte like an array of 8 booleans by the same array syntax used everywhere. Fundamentally, that's all a byte is, an array of 8 bits. Should work, isn't that hard, but no language can do it from scratch, and you can't add that functionality by creating some assembley language to support it, because 1, that's not cross platform, and 2, there's no way to bind it to the syntax without creating parser scripts, and that only works for your code.

    While Microsoft will inevitably screw it up with it's proprietary greed and fundamentally screwed up nature, this whole C# and .NET concept of separating the programming language features from the syntax of the code is an excellent goal. Everyone should be able to work in a language they understand as intimately as their own thought, without having to worry about the next person not understanding what they've done. Programmer Unique Languages have to be one-to-one with each other in terms of feature set, so this idea will only work if there is a common underlying base to support all this uniqueness. Get to work on it gang; I'm tired of putting up with inferior syntax. I want my dreams to fly directly onto the screen, not be filtered through some half-assed implementation of a powerful feature set.

  467. AOP is cool by ckimyt · · Score: 1

    I'd suggest Java, with AspectJ rolled in.

    Java by itself is an OOP that doesn't suck as much as it could (it's better than Satan^H^H^H^H^HC++, and is palatable to managers in the same way Smalltalk isn't).

    Add AspectJ, and you're really cooking! What do you get? Custom profiling and tracing/logging support. Method dispatch re-writing (yes I know this is the cure, not the disease, which is policy or contract enforcement), mixins, inheritence hierarchy re-writing...

    Of course, you could look at Erlang instead. It's a neat functional language that solves multi-threading, communication, event handling, and other issues that you long for when switching from an imperative language. I'm still trying to make this one fly with my bosses...

    --

    Putting the sig back into +1, Insightful since 1995!
  468. Try Ada-95 by aebrain · · Score: 3, Informative

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

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

    --
    Zoe Brain - Rocket Scientist
    1. Re:Try Ada-95 by Black+Parrot · · Score: 3, Informative


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

      Increasingly popular for Ada is GtkAda, 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).

      --
      Sheesh, evil *and* a jerk. -- Jade
    2. Re:Try Ada-95 by Anonymous Coward · · Score: 0
      ... it's a product of the US Military (like Unix, and the Web - designed for not by) ...

      Haha. Sometimes I just want to cry when I see lies like this. Since when was Unix designed for the US Military? AFAIK It was designed to help the patent processing department at Bell Labs with their applications.

      Do you have any evidence that Tim Berners-Lee designed the Web for the US Military while he was at CERN in Switzerland? If so, I'd like to see it.

    3. Re:Try Ada-95 by brer_rabbit · · Score: 2
      If you've programmed hardware design in VDML, or used Oracle's access language, you've used Ada without knowing it.

      I assume you mean VHDL, though I haven't used it in a few years. Very similar syntax to Ada, I think VHDL was a DoD project too.

  469. You have to check out.. by fanatic · · Score: 2
    --
    "that's not encryption - it's a new perl script that I'm working on..." - from some Matrix parody
  470. The TRUTH by Anonymous Coward · · Score: 0

    All you need is pointer access.

    Java: Not powerful
    C#: Powerful
    C: Powerful
    Perl: Piece of shit

    Fuck you, you know I'm right. Multiple inheritance, OOP, bite my ass.

  471. Borland Delphi / Kylix by kilogram · · Score: 1

    Borland has something that should be an exciting alternative. It is portable, meaning that if you buy both Borland Delphi and Borland Kylix, you can compile the same code for both Windows and Linux platforms.

    I can't say for sure that it supports all the features that was mentioned, (since I haven't had the need to use all those features,) but I've seen a lot of them in use. As far as design is concerned, Delphi rocks. You can check out Borland Delphi here, and Borland Kylix here. Personal editions are available for free.

  472. Mix Languages! by Anonymous Coward · · Score: 0

    I've been maintaining a small perl laboratory application for about 1.5 years now... The story is simple. I got it up and running... FAST. It performs excellent. I used perl/Tk, which was joyously easily to learn...

    Since it was written there have been a couple of weird bugs that were a bitch to track down, and involved a fistfull of punctuation to fix them, but that was surely worth the high speed of development and excellent string handling and interface with OS. Some of my heavy duty processing was written in 'C'... like maybe 300 lines in 'C' and like 3000 lines of perl.....

    I guess the moral of the story is that mixing languages is excellent!

    :-)

  473. Re:Operator overloading by statusbar · · Score: 2

    Correct, as long as you are not in a multi-threaded environment. If you are, then there will be synchronization overhead for all individual string operations, as even const methods can modify the reference count.

    --Jeff

    --
    ipv6 is my vpn
  474. Super language by Anonymous Coward · · Score: 0

    one word.. Hypercard ;)

  475. Super language by Nicodemus713 · · Score: 1

    It sounds to me like your boss looked over the strengths of Java, C++, and Visual Basic and strung them together. My advice would be to look at the applications that you want to develop and the environment or the apps that you will be writing with this language and derive the requirements from that. While your boss is perusing through language evaluations you may want him to check out LISP, PERL, and perhaps a basic book or two on computer science machines and languages(these will probably be the most helpful, because they will tell you why languages have or don't have these features, and the underlying principles). You will need the books on Machines and Grammars, because you will probably want to correctly and completely define your language. And I would also suggest looking into a book on modern compiler design because you might even want to have a compiler for it someday ;-)

    --
    Probability provides a way of summarizing the uncertainty that comes from our laziness and ignorance (Russell & Nor
  476. Java Java Java, I'm sick of it by Anonymous Coward · · Score: 0

    Why is it anyone asks for a language choice, the first thing that seems to come out of anyone's mouth is "Ooh, I know, Java Java Java!" Obviously none of these people have worked on a large (i.e. > 100 kloc) project in Java. The Java build system is abominable and dealing with build failures is nothing but a pain.

    My company made the unfortunate mistake of trying to make a large project in Java, and have since learned from our mistakes. Our initial reason for using Java was that together through TSP Java could save us a considerable amount of developer time. We ended up going over 6 months past the deadline and a great deal overbudget because we switched the entire project over to C++ halfway through, after having developed some 750 klocs in Java. Why? Because the project, even being run through HotSpot, was so abominably slow it was unusable. It alone was consuming 700MB of RAM. A representative of our client during early alpha testing called it "Completely unacceptable." All of these problems necessitated the switch to C++.

    The result of the conversion from Java to C++ is rather nasty, but it works. (The entire codebase was essentially rewritten, however solutions developed during the Java implementation could be used, although the programmers had to manually translate) Memory consumption is down to approximately 70MB and execution performance had increased at least an order of magnitude.

    I suggest any of you who are working for a software development firm read Brooks "The Mythical Man-Month" and specifically "No Silver Bullet" in which he once again addresses the issue that there is no single means of reducing development time. Java certainly is not the answer everyone has been looking for. Above all else, Java does not scale to large projects. That's not to say that C++ does, or that C++ is a better language than Java. The problem is that Java isn't a language, Java is a language, a run-time system, and a security model, and the furthermore the Java language is inseperable from the other components.

    The bottom line: Java is just not a good choice.

  477. Must-have feature by bardencj · · Score: 1

    Two words:

    Turtle graphics.

    TO SQUARE REPEAT 4 FD 50 RT 90 END

    Forget operator overloading -- Logo has built-in commands to _draw pictures on the screen_! Who could ask for anything more?

  478. Support, Availability and Librariers by anshil · · Score: 2

    Support, Availability and Librariers

    In reality these features are far more important than the language features, it' syntax, the look&feel, etc.

    All successfull languages have these, a strong community thats behind the language (support), at least one free as in beer compiler, and dozends of libraries written by the community backing. These things is what one should consider more important than the ohhhs and ahhhs the language itself offers.

    Look there are at least a dozend "experimental" languages that are really superior to the list you give, but the compiler might not be yet that mature, only the standard library exists, etc.
    C is inferior, C++ is even more. But why do people use it? Because it's always first on the availability list for new techs, libraries, targets etc.

    --

    --
    Karma 50, and all I got was this lousy T-Shirt.
  479. Which language by Anonymous Coward · · Score: 1, Interesting

    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.

    http://www.gnat.com
    http://www.adapower.com

  480. There is a language called "Self" by Anonymous Coward · · Score: 0

    There is a programming language called "Self" which is even better than either Smalltalk or Java. And since a few month, there is a Linux port of it. Check it out at: http://www.cichon.com/self/

  481. smalltalk? python? by Anonymous Coward · · Score: 0

    take a look at visualworks smalltalk and pythonworks.

  482. Dissecation : PYTHON rules by Anonymous Coward · · Score: 0

    I don't know anything about Eiffel and C# but here's what I can tell about the others :

    intuitive and easy to use IDE :
    yes : C++, Java, VB.net, PYTHON

    simplified GUI design and event handling :
    hard to answer this one.

    advanced error handling :
    all, including PYTHON

    advanced object oriented design including multiple inheritance :
    no : Java
    yes : C++, PYTHON

    abstract classes :
    yes : all including PYTHON

    garbage collection :
    yes and not efficient : Java
    yes and efficient : PYTHON
    no : C++

    full support for operator and function overloading :
    no : Java
    yes : C++, PYTHON

    portable (at compile-time) across various platforms :
    yes : Java, C++, PYTHON
    no : VB.net

    As you can see, PYTHON is THE language you need. For GUI programming, you can choose between :
    wxPython, Tk, anyGUI

  483. This sounds like an ad for Smalltalk by Anonymous Coward · · Score: 0

    Hi

    The list you mention above. Try to compare that with Smalltalk, and I think that you have a match. Last time I checked it fulfilled all the criteria. Plus you have the added benefit that this language have been around a whole lot of years, in fact it is older than C++.

    Regards

  484. Don't choose on buzzwords by Anonymous Coward · · Score: 0

    Can you state (actually write down) your reasons for all these "needed" concepts?

    If not, you might want to look at Teaching programming as an engeneering discipline for a a well-done introduction into programming concepts and when to choose which, and why normally the least complex feature that does the job is the best one, and why this is as true for programming languages / concepts as for the rest of the world.

    Hopefully you can choose wisely after that.

    Cheers, Mathias

  485. Re:Not exactly true, minority langs introduce cost by fferreres · · Score: 1

    He didn't say choose a random language then work arround it so that it solves your problem. He's approach is correct. Maybe what you meant was: add to the prgram goals to be easily maintained (language supported in the future).

    --
    unfinished: (adj.)
  486. What makes a powerful Swahili speaker? by rufusdufus · · Score: 1

    A powerful Swahili.

  487. a powerful language is secure by le_machin · · Score: 1
    What makes a powerful language :
    • A strong type system (well typed programs can't crash).
    • Scalability
    • Efficiency
    • Modularity
    • Abstraction

    The most important feature being the type system. A strong type system really helps the developpers (despite what students are thinking). And with type inference, you don't even have to bother giving writing the types...


    I think that OCaml a language made at the INRIA is one of the easier language to use. It's functional, with higher-order functions, strongly typed (with polymorphism), and have a good system of modules.


    It's a language of the ML family (like SML), that's available for nearly all platforms of development. It can compile to byte-code or native code, and behaves well in programming contests and benchmarks !!!


    The code is efficient, and easy to write. That's definitely a good choice. On the drawbacks side, I must admit that there are not much library and API written for the language (comparing to perl)...

  488. Re:reference counting by PhilHibbs · · Score: 2
    reference counting cannot handle circular references.

    Reference linking does.

  489. Vectors & matrices by Jan+Derk · · Score: 1
    operator overloading is wonderful: define a type for vectors, matrices, etc.

    Native complex number, vector and matrix support would be even better for a couple a reasons:

    No need to create/support/messing up your own math libs.

    All mathematical code would be compatible.

    Native types are faster than overloaded self defined types.

  490. Common Lisp by Anonymous Coward · · Score: 0

    No contest. Common Lisp is simply the most powerful general-purpose language there is. Procedural? Check. OO? Check - probably the best OO system on the planet, too. Functional? Check. Bizarre Lispy stuff? Check. Best IDE On Earth? (XEmacs) Check.

  491. Re: Cowardly Moderators! by PhilHibbs · · Score: 1
    -1: Overrated? Since when? No-one's modded it up, it doesn't contain any disinformation, IMO it's +4: Informative. Boost is excellent, and well worth pointing out when talking about C++ garbage collection. I also recommend "Modern C++ Design" by Andrei Alexandrescu.

    "Overrated" is one of the mods that can't be metamoderated, IIRC, so should be used with care and responsibility.

  492. Perl? by Anonymous Coward · · Score: 0

    Perl actually has everything you need - except for GUI things, but you can use some toolkit to build GUI e.g. something like glade-perl but more portable solutions.

  493. Try Squeak by DaitanGio · · Score: 1

    Smalltalk Squeak offers the ability for rapid prototyping and it is quite fast (more than java in my own opinon).
    A commercial solution is Visual Works or Dolphin.
    Try Squeak

    --
    -- Giovanni Daitan Giorgi http://gioorgi.com http://www.siforge.org
  494. Re:A hot topic. Java. Versus ... Perl??? by Anonymous Coward · · Score: 0

    > Reliability - I've had JVM's cransh on me, run out of memory
    > inappropriately, and have other ugly problems.

    Many companies runs important web applications on Java platforms. I
    think you can rely on the latest JVM's.

    > Consistency - I've found far greater consistentcy in the behaviour,
    > performance, and reliability of Perl across platforms, than Java.

    Perl has consistently worse performance than Java for typical OO
    applications.

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

    Ok, if you do very much string processing this might be a valid
    point. But this dont apply to most applications. Typically the Java
    regexp packages which is part of JDK 1.4 is enough. If 0.01% of your
    application is string processing it's not justified to have special
    language constructs for it.

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

    Good point. Java should really become open source.

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

    But does it have the power of Swing? And Swing is really fast running
    under JDK 1.4 on my Win2k computer.

    > Multithreading - This is actually one point where Java shines over
    > Perl. Perl has no standard multithreading, which truly, truly, sucks.

    Agreed, multithreading is a vital part of any modern application.

    > Elegance - This is another area where Perl fails, but another area
    > where it doesn't matter :-)

    I dont agree. Simplicity is very important for code maintability. Java
    code is very easy to read for a person that hasn't written it.

  495. The problem you're addressing? by valkadesh · · Score: 1

    It is absolutelly useless, and dangerous too, to choose a development platform before addressing the nature of the problem. There is no language and development platform suitable for every class of problem, no matter what MS, Sun etc. are saying. Another issue you should address your development process, and how the various development platforms suit in the process.

    That said, I suggest you may investigate also SmallTalk. Once you get the hang on the language, you'll find it has one of the most productive IDEs ever created.

  496. Difference by Anonymous Coward · · Score: 0

    You asked what is difference between a + b and a.Add(b).

    This is counterattack. What is difference between
    a + b

    and

    move.l a, D0
    add.l b,D0
    ; result in D0

    I think it's around none, but still all don't program in assembler. I mean, every programming
    language is kind of like syntactic sugar for
    Turing machine, but still I feel better sticking
    to something like C. ;)

    1. Re:Difference by Anonymous Coward · · Score: 0
      You asked what is difference between a + b and a.Add(b).

      This is counterattack. What is difference between

      Dead wrong. "a+b" is 100% equivalent with "a.Add(b)", just a different notation (I'm not talking about C++)... Your assembly code, besides being much longer to type, requires that you do manually stack management, function/method call management possibly with dynamic dispatch, temporaries allocation (and other memory allocation), and register allocation.

  497. Re:Operator overloading by Kirruth · · Score: 1
    C++ has the "as if" rule, which allows compilers to implement the code however it chooses,

    My C++ compiler uses that rule. When I try to compile code at 2am, the compiler will often be like, "yeah, right, as if".

    --
    "Well, put a stake in my heart and drag me into sunlight."
  498. Dilbert,.. by IanBevan · · Score: 1

    ... does your boss have pointy hair ? Obviously your project will benefit from being 100% buzzword compatible. How many projects are you planning to use this language for ? Typically there's one major project, so fit the IDE/language to the problem at hand. I would suggest Java then C++ in that order. Oh, and make sure you drop an email to Scott Adams...

  499. Delphi by cruachan · · Score: 1

    Delphi is worth more than a look.

    I'm totally fluent in C, C++ and Delphi, but where I have the choice I always reach for delphi by preference. It can do 99% of everything you can do in C++, the 1% it can't generally being obscure stuff that you don't need in most projects - and I find code development far faster, main because delphi tends to stop you writing errors in the first place. You milage may vary of course but I'd estimate for me it takes about 20-30% less time to debug a delphi project than C++.

    The second killer feature of delphi for me is also the availability of many thousand of additional components for every conceivable function in freeware to fully commercial versions. Most also come with full source code - not Open Source, but pretty damm close.

    Finally if you really need C++ code for anything then C++ Builder compiles to the same intermediate code as Delphi and from V4 onwards it's been reasonably easy to combine the two - either directly linking an object file or by the more traditional dll route. Both C++Builder and Delphi can happily debug inside a dll running from a project created in the opposite language.

  500. Re:Operator overloading by Paul+Lamere · · Score: 2

    Here is a paper that describes a Java Virtual Machine written in Java.

    Implementing a Java Virtual Machine in the Java Programming Language

  501. 100% compilers by Anonymous Coward · · Score: 0

    boost has a list of how close each compiler gets to supporting C++ properly.

    http://www.boost.org/status/compiler_status.html

  502. Re:Well...personally, by Anonymous Coward · · Score: 0

    EXP takes only one argument, and + takes as many as you want. So the expression should be written:
    (/ (+ expt a b) e) (* c (+ d b a b)))

  503. My perfect programming language by megagurka · · Score: 1

    The perfect programming language IMHO would be a mix of Java, Ruby and
    Smalltalk. It would have the following features:

    - Static, strict typing but with dynamically checked casting. This
    would make the compiler detect many common programming errors.

    - Single inheritance and interfaces.

    - Generic types. Very useful for collections etc.

    - Smalltalk blocks (also called closures). These would passed as
    normal objects to functions. Allows you to write very short, readable
    and powerful programs.

    - Common language constructs like for, while, foreach. Closures can't
    replace these in a good way.

    - Types of local variables should be automatically infered when
    possible.

    - Syntax would be a mix of Ruby and Lisp. Clean and easy to read.

    - Strip away all unneeded features.

    An example:

    # Generic type
    class Vector
    # Fields are private unless otherwise stated
    fields
    items T[] = T[].new 200
    size int
    end

    def add (item T)
    items[size] = item
    size++
    end

    # Type (T) means a closure which takes a parameter of type T and returns nothing
    def each (fn (T))
    # Type of item is infered by compiler
    foreach item items
    fn item
    end
    end
    end

    class MyClass
    def do
    # Type of v is infered by compiler
    var v = Vector.new
    v.add (Point.new 10 20)
    v.add (Point.new 20 30)

    # { ... } creates a closure object, type of parameter p is infered by compiler
    v.each {p: p.setX (p.getX + 10)}
    end
    end

  504. Why garbage collection? by Anonymous Coward · · Score: 0

    Good developers automatically do their own memory management. It also depends on whether you can control the garbage collection - I have no problem with automatically removing allocations when a specific object is destroyed, but do not like systems that try to figure out if you still need something; it's too easy to end up with thrashing.

    Multiple inheritance is seldom required, but of course you want it when you need it.

    Operator overloading too, but more importantly it gives you sensible operators instead of having to make up function names. I see no reason for this to be removed from a language, it should be there if you want to use it.

    If you're looking for the best development environment then you'll probably want Visual Studio either using C# or C++.

  505. Re:A hot topic. Java. Versus ... Perl??? by ameoba · · Score: 2

    What is up with this 'Swing is slow' crap? I know Swing is _slower_ than native widgets and even AWT, but it's not *slow*. After the initial JVM load time, I always had more than acceptable performance on my PPro200/64MB, even when using complex Swing-based GUIs, and I highly doubt that any business undertaking a supposedly massive new project is going to be sitting around on anything that gutless.

    --
    my sig's at the bottom of the page.
  506. No Unicode, no cigar by GCP · · Score: 3, Interesting

    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.

    --
    "Those who have never entered upon scientific pursuits know not a tithe of the poetry by which they are surrounded."
  507. Why this request is moronic. by fuali · · Score: 0

    I am a cross platform developer. There are different tools for different jobs.

    Example: Would you use C++ to handle web forms? Would you use Perl to build a GUI for a Database front end on Windows?

    The buzz words are that, buzz words. When deciding on a devlopment enviroment the 3 most important things are:

    1) Platform and Portability.
    2) Time of Development.
    3) Scaling and performance.


    The request you are talking about sounds like a bullshit buearacratic crappy request from bored management.

    Run away, Run away!

  508. And I'm looking... by quintessent · · Score: 2

    ...for a number between 3 and 10 that's divisible by 3 and prime.

    Show your boss a list, with what they do and don't offer. But you're not going to get all those things in a language that is widely-used.

    By the way, I happen to like the way Java and C# do things with no multiple inheritance. Instead, you use interfaces, and you end up avoiding a lot of potential headaches. GC handles memory for you, etc, you have a modern, rich library of tools included, etc.

  509. I would choose Boland C++ Builder... by mjander · · Score: 1

    I'm not a very brilliant coder, but i have played with Microsoft VB, MSVC++, Borland Delhpi, Borland C++ Builder, and at last on linux, using GCC, Glade and Anjuta. Conclusion: Microsoft Tools are shit worth. They arent easy to use. In a early beginning they may be, but when the code starts growing, it gets very hard to maintain it. The best experience, regarding productivity ,i got with Borland C++ Builder. Delphi is quiet good too. Personally i feel more confortable with the latter (GCC + Anjuta + Glade), but that wouldnt be and option for Windows (l)users. bye.

  510. Re:A hot topic. Java. Versus ... Perl??? by PhotoGuy · · Score: 2

    I haven't seen any Swing apps that I would consider "peppy" by any means, even on reasonably fast hardware. LimeWire, for example, is what I would consider one of the premiere deployments of a Swing-based application. It looks great, works well. But when you click on a tab or something, you have to expect a noticable delay before the screen updates.

    Usable? Yes, most of the time. Fast, no...

    -me

    --
    Love many, trust a few, do harm to none.
  511. A couple of points by RPoet · · Score: 2
    • Regular expressions: J2SDK 1.4 will have this built in. It's so compatible to the Perl RE standard that SUN informally refers to it as "a hidden perl in J2SE 1.4".
    • The speed of Swing: I never found Swing exceptionally slow, although it does require a certain level of machinery to feel "right". SUN has addressed many of the inefficient pieces of Swing in the upcoming J2SDK 1.4. You can read about it here (PDF).
    • Performance in general: SUN is working hard on this, and 1.4 seems very promising.
    • Scalability: In my opinion, whereas both Perl and Java may be "write once, run everywhere", Perl is also "write once, read once" ;) While Perl excel for smaller ad-hoc tasks where you need something quick and don't care if it's dirty, I wouldn't want to be on a large development team for a huge project and write everything in Perl ;)

    --
    "Oppression and harassment is a small price to pay to live in the land of the free." -- Montgomery Burns.
    1. Re:A couple of points by maraist · · Score: 2

      While I don't have an issue with anything you said. I'd just like to say that I've successfully worked on _several_ large scale (million+ lines of code) projects in perl. There was not a single complaint about the usability, readibility. The key was functional / technical documentation. It's a branch of [software] engineering that has somehow been forgotten.

      When you actually design a project before writing it, and you break the project into modules, then docment the hell out of the APIs, then it doesn't matter what language you use.

      -Michael

      --
      -Michael
  512. Re:Objective-C by blackwings · · Score: 1

    Still people around? There is probably more ObjC programmers in the world today than ever before, MacOSX is based on ObjC, a lot of old mac programmers are currently learning to use ObjC.

  513. Re:true integers by Anonymous+Brave+Guy · · Score: 2
    Of course, C programmers are used to a world where "+" means addition modulo some arbitrary power of 2. The 2038 bug isn't a bug after all---it's just where time starts to repeat, right?

    But at least C programmers are going to get to 2038 this century. If you start arbitrarily replacing nice, high-speed integer types with "multiple-precision" integers, the performance hit you're going to take is going to be huge. The vast majority of the time, overflow is not an issue in C or C++, and the nature of their integer types is advantageous. If overflow is an issue, you're probably already using a dedicated maths library that takes care of these issues anyway.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  514. Re:true integers by Anonymous Coward · · Score: 0
    If you start arbitrarily replacing nice, high-speed integer types with "multiple-precision" integers, the performance hit you're going to take is going to be huge

    Who said the compiler/runtime environment has to be completly stupid? It can use basic integers as long as there is no overflow and revert to arbitrary integers, compile separatly those cases, or just in time. It's not like we are absolutly forced to use 70s compiling technology, we can use more clever technology these days.

    The vast majority of the time, overflow is not an issue in C or C++, and the nature of their integer types is advantageous.

    Overflow is always an issue when you do maintenance, some day in some case. Just let the functions/data structures byt used by someone else in some other context or with different input (as they usually will, one day), and just wait for the catastrophy.

  515. Ada95 by Anonymous Coward · · Score: 1, Informative

    Actually, Ada fit the bill, except for multiple heritance. Although that could be emulated through generics and Ada's package feature.

    I know, people start throwing things at you when you mention Ada. But how many of those people have actually used Ada95 and not the old obsolete standard...

    Also compilers for Ada aren't that expensive nowadays, they even come for free (speech). Soon a part of the gcc 3.0 branch (keep up the good work GNAT!).

    Au revoir

  516. strcat == I want script kiddies to own me by Anonymous Coward · · Score: 0

    If you use strcat with any data that originates from the outside world, you are asking for a buffer overflow and your program to be compromised. See all current C programs for examples :-)

  517. Re:Run for cover! PHB on the loose! by sd4l · · Score: 1

    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) Keep a close eye on the Mono project will be shaping up to be a nice cross-compiler for C-Hash (it can already compile itself). http://www.go-mono.com/ -- Andy Jeffries Linux/PHP Programmer

    --
    -- Andy Jeffries Scramdisk for Linux (Change the orgy to org to reply)
  518. perl by korpiq · · Score: 2

    intuitive and easy to use IDE;
    emacs + perldb; cvs co, cvs commit

    simplified GUI design and event handling;
    use CGI; while() { s/INPUT NAME="(\w+)"/INPUT NAME="$1" VALUE="$$1"/gi; print; }

    advanced error handling;
    eval { fail; }; die "failed: $@" if $@;

    advanced object oriented design
    package Object; use Tie::Hash; my @ISA=qw(Tie::Hash); 1;

    including multiple inheritance,
    @ISA = qw(Tie::Hash IO::File);

    abstract classes,
    use Tie::Hash;

    and garbage collection;
    { my $x; }

    full support for operator and function overloading;
    @ISA = qw(Tie::Hash);

    sub STORE { warn "Here!\n"; shift()->SUPER::STORE(@_); }

    and portable across various platforms.

    unix, Win32.

    --

    I think, therefore thoughts exist. Ego is just an impression.
  519. What Kind of Requirements are you gathering..... by Anonymous Coward · · Score: 0

    I quite agree with the PFM comment way back there...

    All of these "requirements" look interesting. I'm just curious where they came from.

    Apart from the GUI design and functional requirements, a user couldn't know or care whether it was written in Java, C++ or carved into a piece of wood. Not user requirements, then I'm guessing.

    Why do you need operator over-loading and multiple inheritance? Java can simulate multiple inheritance with interfaces so it's looking like the most logical choice.

    These kind of "requirements" are either from :

    A) Buzz-word drunk PHB who doesn't really have a clue, in which case use Java (or actually what ever you want) and s/he won't be the wiser

    or

    B) Some first-year or high school lame-o CS essay project question, in which case, stop trying to get us all to do your homework for you.

    As a developer and a manager, I can't see how all (parts maybe, but not all) of that could come from your "boss" or any requirements docs I know of....

  520. What about the hardware? by bobsgunstore · · Score: 1

    I have to ask, What about the target platform? I guess I think this way b/c I'm an embedded developer (C & asm), but IMO, part of your decision should be based on the constraints imposed by the hardware on which the software will be running. As previously mentioned, your boss likely already knows what he wants to hear based on the laundry list of confining requirements. It's odd to hear, "I want to the solution to my problem to look like this" rather than, "Find the best possible solution to this problem using the resources you have available"
    ------
    http://www.geocities.com/fbiwood

  521. Re:true integers by Anonymous+Brave+Guy · · Score: 2
    It can use basic integers as long as there is no overflow and revert to arbitrary integers, compile separatly those cases, or just in time.

    Only if it knows at compile-time whether or not the numbers might overflow. Otherwise, one way or another, you're going to have a big run-time hit.

    Overflow is always an issue when you do maintenance, some day in some case.

    No, it's not. My little for(int i = 0; i < 10; ++i) isn't going to break any time in the future due to overflow. A count of entries in a database might, but you shouldn't normally be using raw types for specialised values anyway. Your reuse argument is fallacious simply because reuse itself is largely a fallacy outside of library code, and library code should be designed with robustness in mind anyway.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  522. More Info On Delphi by NDSalerno · · Score: 1

    Here is some more info on Delphi.

    Compilation times. Delphi has everyone beat. Delphi, according to Borland themselves, compiles 4 million lines of code per minute!!!! But don't take my word for it, try it your self. I have seen a half-a-million LOC project compile, on a GHz Pentium, in about 30 seconds!! C++ will never, ever, come anywhere close to that and it is all because Object Pascal syntax is relatively simple. Look at C++'s syntax and sematics. It's complexity limits how fast you can parse the code. Delphi by default doesn't show compiler statistics because for the average program you are working on as soon as you click the compile button the compilation is already done!!

    Because of blazing fast compilation times one will definitly get in the spirit of using the debugger. First, you will get used to doing full recompiles once after you implement one method. Then you will get use to using breakpoints and watches to find bugs. I love using breakpoints, watches, evaluations, etc. It is the way to go. However, Visual C++ fosters bad debuging habits in the form of that stupid TRACE macro, or the Win32 API call OutputDebugString. It is like using printf to figure out the state of your program to try to figure out the bug.

    I apologize for mentioning Visual C++ so much. I would love to use GNU C but professionaly speaking the only jobs I work on insist on using Visual C++, a brand name standard. Besides, most of the Linux people I knew prefered vi or emacs, hardly an IDE to the likes of Visual Studio and Delphi. Yeah, I know there is KDevelop and such others, but they are not as nice (and I was nausiated by the fact that KDevelop is literally a Visual Studio clone right down to also providing a Doc/View architecture, which is a bad architecture). On a side note though, I did try the Vi OLE control for Visual Studio because I do love vi alot ;-)

    There is no Debug mode vs. Release mode in Delphi. Not that it was a bad idea but MS dropped the ball on it and Visual C++ has made Debug/Release mode style development a pain in the ass! Delphi doesn't put debug symbols inside your executable. Instead it keeps everything inside extermal files (.dcu files). When you are finished debugging you just had your executable off as is. Actually, there is a sort-of release build in the form of "turn of assertions", but this is not the same as Visual C++ release mode where the project settings are very different from Debug mode.

    Last but not least, Borland is a company who, like Apple, is sticking around for quite a long time. People think they are going out of business, but they are not. So company support is there (managers like to hear that). Also, just like there is a Linux community, there is a Delphi community, full of resources, reusable code/components, and friendly developers who are willing to help you out.

    On the negative side, if you are going to do some internet development then Delphi may not be for you. I have not used Midas or VisiBroker that much and I do not know how they truly fare against Java and .NET. In these cases I know Java is much better at server side internet development, its Servlet technology and wealth of APIs kick ass. I am guessing that .NET will be very good. Guess what? .NET, and C#, was co-designed and implemented by Anders Heiljsberg, who is the father of Delphi (and was hired away by MS in the 90's to work in R&D, Borland sued MS over this). Did anyone read the C# specs? People call it Java, but do you really wanna know where the idea of properties came from? ;-)

    Nicholas

    1. Re:More Info On Delphi by BitwizeGHC · · Score: 2


      Because of blazing fast compilation times one will definitly get in the spirit of using the debugger. First, you will get used to doing full recompiles once after you implement one method. Then you will get use to using breakpoints and watches to find bugs. I love using breakpoints, watches, evaluations, etc. It is the way to go. However, Visual C++ fosters bad debuging habits in the form of that stupid TRACE macro, or the Win32 API call OutputDebugString. It is like using printf to figure out the state of your program to try to figure out the bug.



      Hey, don't knock debugging by printf(). Saved my ass at times when the shiny debugging tools failed.
      --
      N4st0r, trixx0r h0bb1tz0rz! Th3y st0l3 0ur pr3c10uzz!
    2. Re:More Info On Delphi by Anonymous Coward · · Score: 0
      Because of blazing fast compilation times one will definitly get in the spirit of using the debugger. First, you will get used to doing full recompiles once after you implement one method. Then you will get use to using breakpoints and watches to find bugs. I love using breakpoints, watches, evaluations, etc. It is the way to go. However, Visual C++ fosters bad debuging habits in the form of that stupid TRACE macro, or the Win32 API call OutputDebugString. It is like using printf to figure out the state of your program to try to figure out the bug

      There is nothing wrong with "printf" based debugging. In fact, it can be better than breakpoint/stepping debugging because first you can grep the output and see quickly what happened before the problem (while most debuggers can't go back in time!), and second when an other person is trying to debug your code it can too, whereas usually all your breakpoints and conditions are lost.

      That's why many fine hackers use print-based debugging (including whose who ported Linux to iPAQ).

  523. But there is.. by saqmaster · · Score: 1

    Is there a language available that has all of these features?

    Yes. Isn't that what VS.NET is supposed to do? I mean, you can use other languages Class files in C#, ASPx etc. And the .NET framework (based around XML) supports all kinda funky cross-platform technologies such as SOAP and UDDI.

    But would anyone ever admit that it was this :)

    --
    "Never let the truth get in the way of a good story..."
  524. Re:reference counting by jaoswald · · Score: 2

    1) having to distinguish between different kinds of ownership means you have to restrict your design to fit the memory management model. This is progress? In Lisp, it is relatively common, for instance, to create circular lists to represent arbitrarily-long periodic sequences. With reference counting, your "list" abstraction either isn't abstract enough to handle this, or this usage has to be forbidden or made a special case.

    2) overhead at assignment: this is exactly my point. The reason you go to GC is that assignment is common enough that you can't explicitly keep track of ownership without making a mistake or going crazy. In reference counting, you spend time incrementing and decrementing counters even if the thing never becomes garbage. An object only becomes garbage once (ignoring certain finalization or "weak pointer" issues), but you pay many times.

    It basically boils down to this: GC was basically invented by and most researched by the Lisp community. Not a single Lisp implementation I know of uses reference counting because its run-time performance is dominated by true GC.

    It's truly amazing to see the turnaround. The beef against Lisp used to be "perhaps powerful, but too bloated and slow." Now, 20 years later, Lisp has gained (in relative terms) in speed by aggressively pursuing compiler and GC technology, and has (in absolute terms) stayed about the same in memory consumption as RAM prices have plummeted. Now we find out it is all right to give up speed and memory consumption as long as you support ugly notation that has to use every punctuation character in *at least* one way.

  525. Some of these are not _language_ features. by Woodie · · Score: 1

    1> intuitive and easy to use IDE;

    Not a language feature. Yes, some very nice IDEs are available to support various languages - but this would be like using your word processor to generate documents in English, Spanish, or German...

    2> simplified GUI design and event handling;

    Not solely a language feature. Most modern languages do not (as a rule) incorporate GUI code into the language base. Many do provide very good libraries to support these features - some libraries available for various languages are better than others. Additionally, a lot of modern GUI design is handled by the IDE - so if you're looking for a WYSIWYG forms designer, that's a whole 'nother ball game.

    3> advanced error handling;

    Hey, wow a language feature. I assume you are looking for decent support of "throw -> catch" with possibly a "finally" clause in there. A lot of languages support this.

    4> advanced object oriented design including multiple inheritance, abstract classes, and garbage collection;

    Hmm - this really bundles a lot of things together. Any chance of getting these _prioritized_? Python or Ruby might be a good choice if these are equally important goals. Java doesn't much care for multiple inheritance - it can sort of fake it thru good design though. C++ has got multiple inheritance down pat, but that whole garbage collection thing throws it off.

    5> full support for operator and function overloading;

    Why? What does your boss know about the problem that you will be solving that will require this feature? I have used it on occassion myself - but largely I've found it to be a more confusing addition to a language, unless it supports it fairly ubiquitously (see Python or Ruby for ubiquity). In C++, overloading is just stupid - as you'll really want to explain what adding two new types together should do and make it perfectly clear to anyone else using that type.

    6> and portable (at compile-time) across various platforms.

    Compiler issue, not language issue. The question is whether a compiler exists for the language in question for your target platform. Sort of comes around to the IDE goals at the beginning.

    This is a nice laundry list - but depending on the real problem at hand, you may only really need a few of these features. I'm guessing your boss would really like to have a "one language shop" that can solve a whole lot of different problems. An admirable goal - but not entirely realistic. Better IDE support is usually available for languages with good commercial support - C++, Java. However, both of these skimp somewhat on some of the actual language features your boss professes to be interested in. Python and Ruby both have all the language features you're looking for - but generally lag (comparatively) in the IDE department. Eiffel is neat - but again you loose out on multiple inheritance, and most Eiffel implementations are geared toward producing C/C++ code for compilation.

  526. Correction:You want Java by Anonymous Coward · · Score: 0

    "Unless you have pretty strong performance requirements?"

    Unless you have any performance requirements, more like.

  527. Take a look at Jade from Aoraki Corporation by Ginsu2000 · · Score: 2, Interesting

    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.

    1. Re:Take a look at Jade from Aoraki Corporation by Ginsu2000 · · Score: 1

      The alternative is the object orientated database, and JADE also has in my opinion a great IDE and the other 'requirements' you mention.

  528. What Platform?? by Anonymous Coward · · Score: 0

    Is this thing ganna be run on *nix or winblows, I think that also needs to be taken into condiration.

  529. Re: Java. Versus ... Perl??? versus... Python??? by Anonymous Coward · · Score: 0
    there's only one I'm aware of that broke any amount of code whatsoever, and it was not a change in the spec but the removal of an undocumented "feature" from the interpreter

    Was it [list].append(x,y) or socket.connect(x,y), by chance?

  530. Re:Well...personally, by Ghengis · · Score: 1

    [1](if (iscool '(L I S P)) (print "Kick Arse"))
    Kick Arse
    [2]

    --

    "The best laid plans of mice and men gang oft agley..." - ROBERT BURNS

  531. Re:Operator overloading by kin_korn_karn · · Score: 1

    if you need the long names to remember what you're doing, you're not a programmer, you're a monkey with a keyboard.

  532. Re:Well...personally, by A55M0NKEY · · Score: 1

    Yeah, languages like scheme/lisp let you do just about anything you can imagine. Because of their simplicity and completeness you can pretty much support any type of object oriented or other programming paradigm you want. This guy's boss seems like a typical nincompoop boss. He gives the guy a laundry list of buzzwords that he probably doesn't know the meaning of as criteria of a programming language to use for a (undescribed ) project. Bosses love buzzwords that they can impress their bosses with. This guy's boss ought to shut up, sit back, and let the people who know what they are doing make te decisions about language criteria.

    --

    Eat at Joe's.

  533. His CV Re:praxis, praxis, praxis by leuk_he · · Score: 2

    Well if i look at his CV I think we will end up with C++. Not to mention he names it twice in the languas he looked at.

    Next question:
    what runtime libraries? What IDE?

  534. Re:Operator overloading by pb · · Score: 1

    Interesting, but it simply confirms my point (have you read that paper?); these people are VERY experienced Java developers, and they ended up with a product that runs THREE orders of magnitude slower than a normal JVM, and constantly had to apologize for shortcomings in the Java language. So, yes, it isn't impossible, but it can't be done quickly and well.

    I'm just sorry that they never had to build a native function implementation; from the paper, it sounds like they used the standard one, or made a broken look-up table of some sort. C has function pointers, of course, but what you really want is a jumptable of some sort. :)

    --
    pb Reply or e-mail; don't vaguely moderate.
  535. You STILL don't get it by Ars-Fartsica · · Score: 2
    You should definitely have a good look at Lisp, for me it was an eye-opener.

    "Better" doesn't matter. In how many markets for any type of product does "best" win????

    Lisp is dead, even if its better. Learning it now is a waste of time.

    1. Re:You STILL don't get it by PeaNUTZ · · Score: 1
      "Better" doesn't matter. In how many markets for any type of product does "best" win????

      If you look at a language as a consumer product, you might have a point. But languages are not consumer products. They are in fact tools. Your analogy is therefore not correct, and the question is meaningless in this context. Of course you can build a house with hobby tools, but if you had learnt how to use the professional tools, you could have built the house a lot faster.

      Lisp is dead, even if its better. Learning it now is a waste of time.

      So you mean that learning something new is a waste of time? So you mean that if I'm going to make a program that sorts, say >1*10^9 elements, and I know the bubblesort algorithm, I don't need to learn the "quicker-than-quicksort[1]" algorithm because I already know a sorting algorithm that my coworkers also know?

      [1] Runs in O(1) time, and is extremely complex. The implementation is left as an exercise for the reader.

      --
      /* 0x2b | ~0x2b is in fact -1 */
  536. Re:reference counting by elflord · · Score: 2
    1) having to distinguish between different kinds of ownership means you have to restrict your design to fit the memory management model. This is progress? In Lisp, it is relatively common, for instance, to create circular lists to represent arbitrarily-long periodic sequences. With reference counting, your "list" abstraction either isn't abstract enough to handle this, or this usage has to be forbidden or made a special case.

    If shared ownership is not a good model (which it is not with any node based data structure), then don't use it. For a linked list, the obvious ownership strategy is for the list to own the nodes.

    In reference counting, you spend time incrementing and decrementing counters even if the thing never becomes garbage. An object only becomes garbage once (ignoring certain finalization or "weak pointer" issues), but you pay many times.

    Incrementing and decrementing counters is a very fast operation. It's only a performance issue if your object can be copied very quickly. The main overhead issues in reference counting are memory overhead (for very small objects), and multi-thread overhead.

    It's truly amazing to see the turnaround. The beef against Lisp used to be "perhaps powerful, but too bloated and slow."

    There's nothing wrong with LISP, but it's kind of silly to compare it with C++. The design goals, and hence the benefits are not even moderately similar.

  537. Do you work for McLeod Publishing??? by rfphill · · Score: 1

    Our web surfing, buzz word concious director threw that hot potato at us once... What a moron. Silly us for even fielding the question... Now, if you'll pardon me, I'm off to Sears to find a tool that will replace all the others in my shop. I will be the envy of my neighbors...

  538. The best approach by Anonymous Coward · · Score: 0

    therefore, you should adopt a problem-solving oriented, buzzword-free approach

  539. Scheme by Ekman · · Score: 1
    Okay, call me a complete nerd, but the most powerful language IMHO is Scheme. Sure it's full of lots of silly parentheses, but it offers language features you won't find anywhere else (except another functional language, like say Lisp).

    What sort of features? How about macros (we're talking R5RS here)? Macros allow you to define new language syntax. For example, if macros were available in C (no, #define doesn't even come close), you could use it to add new language features. Like say, a new type of switch statement that didn't require you to end each case with break.

    But what about all the nice features you might find in more conventional languages? You want a nice IDE you say? A GUI toolkit? Objects? You want DrScheme. It offers everything more mainstream languages might offer and more.

    Okay, Scheme and it's other Lispy friends might not be the right choice for you, but they're definately worth looking at.

    1. Re:Scheme by easter1916 · · Score: 1

      You are a complete nerd.

  540. Re:Operator overloading by aWalrus · · Score: 2, Insightful
    Mmmhhh.... been reading some of your past posts, and I have to say that you sound quite bitter... If you don't like programming and hate most of the IT business so much, you should maybe look for another job.


    As for the monkey with a keyboard thing... mmhhh... could you define what a real programmer is to you first please?

    --
    Overcaffeinated. Angry geeks.
  541. Flamebait Post? by SloppyElvis · · Score: 2, Insightful

    My language is bigger than your language.

    Please, do we need such a post? I am surprised nobody posted that assembly would be a good choice; your limitations will be minimized.

    Slashdot readers as a whole write in just about any language out there, and everybody has a reason their favorite is the best.

    As many have pointed out, without a problem spec, the choice has little to go on. In general, pick a language that either has a base of programmers who are familiar with it, or that is easy to learn. That way, you can find employees. Judging from the fact that your boss's requirements are not satisfied entirely by any language, you should hope his requirements for employees are not so.

    Programmer Requirements:
    Doesn't write bugs
    Doesn't complain about vague specs
    Is vigilant about maintaining perfect documentation
    Doesn't blame hardware
    Shows up on time at 7:00am
    Displays elegant mastery of multiple-inheritence, however is incapable of preventing leaks without the help of a garbage collector.
    Doesn't waste company time reading SlashDot

    Best of luck to you.

  542. Re:A hot topic. Java. Versus ... Perl??? by maraist · · Score: 2

    Although I am against the non-commercial restriction of GPL. Hmmm, Perl is GPL, isn't it?

    Perl has the Artistic license which essentially says you can choose whether you perl modules / perlX patches are GPL'd or BSD-like (don't remember the details of the more free-varient).

    So GPL advocates can promote their anti-pay mentality, and businesses can still make money.

    -Michael

    --
    -Michael
  543. Re:Operator overloading by Hast · · Score: 1

    I was under the impression that Jikes is faster because it's iterative. (Well, it's probably a bit faster anyways.) It's not entirely compatible with javac though, eg you can't switch/case on bytes in Jikes but you can in Javac. I don't think you're supposed to do it however.

  544. Re:Also look at Delphi/Kylix (Object Pascal) and P by JamieF · · Score: 1

    Perl 5 will not handle most of these requirements. It will handle about a third of the requirements. Simplified GUI design? Perl doesn't even have a concept of a GUI built into the language, nor an event model. Advanced object-oriented design, my ass. Perl's OO lacks basic data hiding features (public / private / friend / package / protected type modifiers on data members and methods) on purpose, because Larry Wall doesn't think encapsulation is a good idea (it restricts what a developer can do). Operator overloading, AFAIK you can't do that in Perl at all.

    Perl is very portable, has garbage collection, supports inline documentation with man-page and HTML doc generation, is astonishingly fast at text processing even with enormous files, and is great for system-level scripting.

    It has exceptions, and is sorta-kinda OO (I consider encapsulation a must-have for any OO language), but the problem is, nobody uses either of these. Go look on CPAN, and decide for yourself whether that code is as object-oriented as the classes that come with Java, Python, C#/.NET, etc. When you use the Foo::Whatever module, the typical approach is to have it import a bunch of functions into your namespace that you can then use on a standalone basis. Classes should model real entities in the problem domain, but that's not how people use Perl classes... they use them as function libraries that have a bit of control over namespace importing. And of course nobody uses exceptions in Perl, falling back on C-style nested IFs from hell, or just not testing for errors at all.

    Don't get me wrong; you *can* make objects in Perl (if you don't care about encapsulation), and you *can* use exceptions. It's just that nobody does, so any code you reuse will have a totally different design style that looks more like a monter shell script or C program than a robust, maintainable, well-factored OO application.

  545. Re:Operator overloading by kin_korn_karn · · Score: 1

    It's all about the money. I.T. is economical.
    nothing else pays as well for so little input. I hate the work, I hate the business, I hate the people in the business. Nobody likes their job, so why should I bother with one that pays less if I have the skills to make more?

    A real programmer, to me, is someone who thinks about what they code and who sometimes has to write a better way. MOST Java programmers just regurgitate library calls. That's not programming, to me. Guys who do lower-level stuff are programmers.

    "software engineer", linguistically speaking, is analogous to "sanitation engineer". the terms have the equivalent weight. They were invented by people in those fields to make themselves sound more important. Don't bother arguing.

  546. Re:reference counting by jaoswald · · Score: 2

    If shared ownership is not a good model (which it is not with any node based data structure), then don't use it. For a linked list, the obvious ownership strategy is for the list to own the nodes.

    And if an object is in more than one list? It has to be copied anew? What if it doesn't make sense to copy/clone it? Clue: there is no single definition to "copy" which makes sense for all applications. The notion of "copy" has to do with the notion of "identity" which is not a fixed concept. Again, you are forced to fit your abstraction to the need to track ownership.

    I'm interested in your comment that Lisp and C++ have different design goals. Common Lisp is designed to provide the programmer with a flexible, robust, object-oriented environment, suitable for large programming tasks. How does that differ from C++'s stated goals?

  547. Re:true integers by jaoswald · · Score: 2

    1) you are exaggerating the "big run-time hit." Testing for overflow in addition of fixed-size integers is going to be easily pipelined. Sure, when you actually overflow, you will have to branch and transform your representation, but the alternative was to get the wrong answer?

    2) Your for loop example is exactly the kind of case that a compiler will optimize to be kept in fixed size registers.

    As usual, we see the "New Jersey" design technique. Better to be "fast" and sometimes wrong than always right.

    I find it interesting that counting the number of entries in a database is somehow a "specialized" operation. So anytime I want to count anything that there might be "a lot" of, I have to use some non-built-in multiple precision arithmetic package---who knows how well it was optimized, or whether it's buggy---instead of a vendor-provided, standard-mandated ability of the language?

  548. best lango, best algo by Anonymous Coward · · Score: 0
    The Best language is the one that allows you to do the things you need fast - and addapts to the environment the app will run in.
    It's the one that allows you to be more productive.
    It's the one that has lots of code base for you to rip.

    It's PHP.
    With PHP-GTK you can create GUI apps. There's also a SDL port for you to do graphic things with PHP. Imagine wining that demo-competition with a scripted demo.

    http://www.php.net http://gtk.php.net


    • Even Microsoft put a team of coders working on PHP for Windows. They even managed to create a couple of security probs there :) :P
  549. Re:A hot topic. Java. Versus ... Perl??? by maraist · · Score: 2
    Many companies runs important web applications on Java platforms. I
    think you can rely on the latest JVM's.


    I still think that java is too new to use for generic enterprise operations. I've worked with Java+MsSQL-server, Java+Oracle, Java+ANY GUI, and I've regularly found production flaws that we've had to work around. I'm sure newer versions of java fix many of the older problems, but the API dramaticaly changes so often that you're CONSTANTLY on the bleeding edge. Since they haven't given enough time for a given API to settle down across multiple platforms (e.g. open-sourced initiatives can't keep up), I doubt that Java will ever achieve robustness. To further the point, a new version of JDBC just came out with boat-loads of new untested features.

    Java CAN work, if you pick a robust platform, a robust version and well-aged API components. But it's very tempting to use the latest / greatest, because functionally it solves your problem more efficiently, and thus you're prone to bizzar production-time errors (as I've encountered).

    In comparison, the basis of the perl language only changes in the major version levels. And we've been at perl5 for a Very long time. Most of the change is in the CPAN modules, which given enough proving-time probagate down to the standard distribution. The changes to the core are rare (only in perl5.005 did threading / agumented reg-ex's really hit and thus cause some stability issues). Thankfully many of the features were off by default, and some (raw threading) have since been revoked. It's a VERY different mentality, than MS / Sun, who seem to want to sell themselves via feature-bloatware.

    Perl has consistently worse performance than Java for typical OO
    applications.


    I would be very interested in seeing your benchmarking results demonstrating this. Part of the problem is that you're comparing apples to oranges.. You don't solve problems the same way in Perl that you do in Java.. Java is a forced solution (e.g. OO with method-based operations). Perl uses a combination of simple function calls, HEAVY use of low-level C-based functions, and a sprinkling of OO here and there - just to pretty up the API. Granted, OO on Perl 5 can be horrendously slow (especially if you have the inheretence-tree of java; given the linked-list lookup style method dispatching). But Perl's garbage collector alone puts Java to shame. My Apache apps with mod_perl never exceed 30Meg each (with large amounts of large-temporaries), while most of my apps never reach a meg in size. My Java-apps HAVE to start at a God awful size and are both CPU and memory hogs (non ref-counted GCing is horrid for page and cache thrashing). Yes there are memory leaks in ref-counting, but it's well known and designed for in perl5 APIs (or you spank the module writer). The only potential pausing that ref-counting does in perl5 is deallocation of massively nested structures. But then again, perl5 is more determinisitic than java (at least until perl6, but I won't get into that). We're not even going to get into the *cough* jit-startup time.

    Ok, if you do very much string processing this might be a valid
    point. But this dont apply to most applications. Typically the Java
    regexp packages which is part of JDK 1.4 is enough. If 0.01% of your
    application is string processing it's not justified to have special
    language constructs for it.


    Again, apples to oranges. Perl5 uses strings as a fundamental data-type. Integers, floating point, exceptions, error-messages, parameters. Just about everything (short of tcl) is at one point potentially a string. While I don't know how intentional this is, this fact allows a dramatic efficiency when making string-manipulation the number-one priority for the language. While in Java you could apply a sequence of catch (ObjType1) catch (ObjType2), etc, which essentially becomes a switch statement, in perl you are relegated to if ( $@ =~ /mem/ ) elsif ( $@ =~ /unbounded/ ), etc... Giving you the potential to solve mind bogglingly complex problems with an intuitive nature. Granted it's difficult to optimize away much of this (perl6 should address this issue nicely), the flexibility allows you to find very efficient solutions (both in programming cost and CPU cost). To boot, the number one growing field is text-based web / XML generation.. I'm sorry did you say 0.01%? Care to find a more realistic number there?

    Thus, the power of the string can in no way be cast aside (simply because c, c++, java finds 5-10% use for it).

    But does it have the power of Swing? And Swing is really fast running
    under JDK 1.4 on my Win2k computer.


    YES!!! There is more to Perl than Tk. There is Gnome, Qt, MFC.. The only thing I'm not aware of is Swing proper, but who cares, it's not a great design and buggy as hell!! (Maybe as of 1.4 the 1.2 features work properly, but not across all platforms).

    Gnome even has a perl generator within Glade.. I find glade MUCH nicer than forte' (at least the version I last looked at).

    Agreed, multithreading is a vital part of any modern application.


    I disagree. Multi-threading is inherently non portable. Personally I believe MT allows for bad design. The programmer gets lazy and just relegates tasks to other threads (ignoring the scalability and communication overhead). While certain classes of operations are more efficiently handled in MT (especially on MP systems), the majority of algorithms can have the highest in performance with single-threading. MT is great for response time, and it does have a certain elegance, but don't talk to me about elegance when debugging MT code.

    That said, there is, of course, primative MT support in perl5, and perl6 will support it natively (though I believe (and desparately hope) that MT won't be required, nor activated by default). I say primitive, not because they're limited in functionality, but instead in efficiency (global locks, etc). I BELIEVE the stability is sound, but the CPAN library support is non-existant (just try and compile an Oracle DBD with use5005threads enabled).

    Lastly, I'd like to point out that my disagreement is with the phrase "modern application". A modern _language_ should most certainly provide robust thread-like facilities(even if it's just virtual threading), but most certainly threading does not apply to MANY real-world applications. Take web-services for example. There is a big push for MT web servers.. Apache 2.0 is a good example (of course IIS has always had it). While MT allows rapid concurrent static content retreival, it has several costs with respect to dynamic content. First, it is less stable; one thread might corrupt co-existing app's memory-spaces. Secondly, designs that require MT are not easily segmentable. Apache 1.3 makes little difference whether the dynamic-app is on the same machine or on independent machines. IIS-modeled ASP servers are not directly translatable to multi-machined applications (without significant clustering support). Similarly Java servlets does not [natively] provide for much inter-process communication, except when mapping sessions to workers.

    The point here is that even with MT, multi-processing solutions are still sometimes necessary (e.g. using serialized access to a common database is necessary for basic communications, thereby avoiding many of the advantages of MT). To further the point, Apache 2.0 prefers a mixed-mode, where there are several independent processes which can optionally run n-threads each. This gives you the best of both worlds; services that can take advantage of threading (like static paging) can, while the benifits of the age-old IPC-based single-threading persist. This also allows legacy apps like mod_perl to work (in ST mode).

    Elegance - This is another area where Perl fails, but another area
    where it doesn't matter :-)


    I dont agree. Simplicity is very important for code maintability. Java
    code is very easy to read for a person that hasn't written it.


    A basic turing machine is simple. Care to say any kind words about it? e.g. there's more to the equation when deciding who's "best" for a task.

    I agree with you, but with reservation; you can write bad code in any language. But more relevantly, you _can_ choose a coding style which is readible in perl assuming that the reader actually KNOWS perl.. This is the biggest falicy about perl. Most people that berate it don't even know regular expressions (or sh / awk). Once you know them, you understand WHY the syntax is the way it is, and understand its benifits. After using it long enough, most of it is intuitive. I regularly read through CPAN code and always understand everything EXCEPT the algorithms. (which are sometimes obtusely done). I have the exact same problems with Java, though often it's more difficult unless you have the java-doc window open with valid documentation. Inlined hash-based parameters blow the doors off positional parameters in terms of readibility. Sadly, Java provides no such capability; applying hashes actually draws out the code such that it's even more difficult to understand.

    Similarly Java is so verbose, that the syntax often gets in the way of understanding. Part of TMTOWTDI is that you write the code in terms of significance:

    die "something went wrong" if complex-bad-condition;

    Is more intuitive than:
    if (complex-condition) throw bizzar-sounding-exception;

    While at the same time the Java-style syntax is still an option.

    Further, whenever I've had to write parsers, the intent of the VERY LONG code is anything but obviously; to say nothing of the debugging.. A simple regular expression (which is only recently standardized in java.. And oh, by the way, they used perl5.004's syntax) takes less than a line and is completely intuitive once you trace it out. The point is not to bash Java, but to praise the foresight of perl, awk, etc. for their designing languages that very nicely solve problems. Java started with your basic premise (the elegance and predictability of lisp / minimalized base operations), but found that this was not useful in the real world. They had to incrementally evolve, to find their real equilibrium (demonstrating that they missed their initial target). Now they're at v2.0 and have several "bolt-ons" which limit the elegance.. C# basically looked at Java and said, ok, we'll do java freshly (avoiding compatibility issues). Perl is a frankenstein of a language, but not because it missed it's initial mark, but because the world evolved (from c-based procedural, to OO. From quick-and-dirty RAD to quick-and-efficient web-apps. From no-holds-bar speedy core to user-extensible cores). That perl has lasted this long brings to mind the x86 processor (which even today has no death in sight). perl6 is going to be a complete rewrite, and it'll be sad to see the last vestigates of that genome dissapear.

    In short, Perl gives you the ability to write "understandbile" code, and peer-pressure / corporate mandate should be enough to enforce this. The only thing left is the enlightenment of the developers. Let the best tool win the contract for my job.

    -Michael

    --
    -Michael
  550. PHP by Anonymous Coward · · Score: 0

    I program my toaster in PHP, it owns your base. All you other punk ass languages are faking the funk. You better bow down suckas. *Zip* BOOOM!

  551. Re:true integers by Anonymous+Brave+Guy · · Score: 2
    As usual, we see the "New Jersey" design technique. Better to be "fast" and sometimes wrong than always right.

    Not at all. More "You can build something safe on top of something fast, but you cannot build something fast on top of something safe." We're only talking about the foundations here; you can build what you like on top of them (if they're sufficiently flexible).

    I find it interesting that counting the number of entries in a database is somehow a "specialized" operation. So anytime I want to count anything that there might be "a lot" of, I have to use some non-built-in multiple precision arithmetic package---who knows how well it was optimized, or whether it's buggy---instead of a vendor-provided, standard-mandated ability of the language?

    Again, not at all. However, it is prudent to wrap any non-trivial type in at least a typedef (in C/C++ terms), for maintainability's sake. Using int or double everywhere is like writing code full of magic numbers.

    There is nothing to say that you must use a custom type for these, rather than just an alias to a built-in one. However, the indirection provided by the alias typically costs one line of code, and in return increases readability and makes you future-proof. If your database code is written in terms of index values rather than ints, then if overflow is a danger, you can always turn index into a big number class transparently, or into an optimised class that uses int wherever possible but checks for overflow and switches if necessary, or whatever else you want to do.

    This approach is far more flexible than forcing anti-overflow logic onto me whether I want it or not. I know better than the programming language what my requirements are and what kind of data I'm going to be processing; I don't want to be second-guessed, thank you.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  552. Forget about speed by /^Neil/ · · Score: 0

    It won't be long before hardware is 100x faster than it is now. Speed will no longer be a topic of discussion for any language.

    Neil

    1. Re:Forget about speed by PhotoGuy · · Score: 2

      Right. But I write applications today, not "someday." Someday, when things are 100x faster, Swing's speed indeed won't be an issue. For me, today, it is, and affects my choice of language.

      -me

      --
      Love many, trust a few, do harm to none.
  553. Garbage collection for C and C++ by armb · · Score: 2

    http://www.hpl.hp.com/personal/Hans_Boehm/gc/

    --
    rant
  554. Re:OO is the biggest development myth of the centu by mgedmin · · Score: 1
    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).

    Take a look at the Flyweight pattern in Design Patterns book. Yep, a model of a word processor where every single character is represented by a very light-weight reusable object. Interesting stuff, though I can't say it convinced me completely.

  555. Re: Java. Versus ... Perl??? versus... Python??? by cduffy · · Score: 1

    list.append, indeed. (the socket.connect one slipped me -- good thing I used that qualifier!)

  556. Re:off topic- in defense of my sig. by Anonymous Coward · · Score: 0

    >Democrats were/are proponents of our failing >educational system in this country. Are they the >ones to blame becasue a perticular school in >Alabama sucks?

    Being the proponents of a system is different than being a proponent of how that particular system is run. Democrats are not 'for Education' per se or even for the educational system as is. Are they partly to blame for the current condition of the educational system? Sure. ( Incidentally, so is Texas's publishing policy which uses standardization of texts statewide to influence the books published and sold in the rest of the nation, but that's another story. U.S. Textbooks have gotten absolutly horrible ratings from those assigned to do so)

    Blame alone dosen't really suggest a course of action until it's focused on a particular policy.

    It makes sense to blame people only if they're consistent advocates of a particular, harmful policy, and then argue for the reversal of that policy.

    In this case, energy deregulation and lack of government oversight were the policies which I take issue with.

  557. Re:off topic- in defense of my sig. by Anonymous Coward · · Score: 0

    >2. Who was in a position to know Enron's actual >financial condition?

    >Lots of people. So what???

    So they should be subpoenaed at the least. And what's all this crap I'm still hearing about the lincoln bedroom?

    Republicans have consistently let campaign donors write actual legislation and choose cabinet members. Virtually all of Bush's foriegn diplomats were either donors or friends as opposed to Clinton who chose mostly professional diplomats trained to do their jobs (less than 1/3 donors or friends).

    Just another case of the pot calling the kettle black.

  558. Re:true integers by jaoswald · · Score: 2

    "You can build..."

    So you are talking about roll your own. It is NOT EASY to write a high-performance multi-precision integer solution in C that smoothly integrates with fixed-precision integers and which you can use with the ease of a typedef. It needs to be built in the language from the start, not bolted on afterwards.

    If you want true high-performance switching of integer sizes, you need to have the *machine code* tuned for the processor to make the common case fast, and the uncommon case still reasonably fast. You really can't do that in standard C, much less by including the overhead of C++ classes in a roll-your-own implementation. Much better if the person who wrote the compiler wrote it to emit the best code for these cases, then to have to persuade the compiler to change your C into the same code.

    And in the case where you want to optimize away the overflow checks, the compiler is a lot more careful in the constraint analysis, and can check *every possibility* *every time*, not just when your gut tells you you should.

    If you want to spend your hours acting like a Common Lisp compiler to get robust overflow protection, feel free. But in the 21st century, I'd rather a compiler do the work than have to do it myself.

  559. Perl OO with Encapsulation, and other comments by n1vux · · Score: 2, Informative
    Firstly, comparing the core standard of one language with the latest extensions of another is a very old troll, and older than the USENET; probably dates to the DARPA lists, if not before in the IEEE and ACM paper journals. (I was using this troll back when PL/I was cool.) Nothing, not even Perl or or it's blood-brother PL/I, can be all things to all people. I hope the list of needed features actually addresses the next project's needs, we can't judge that from here.

    Secondly, Perl OO is conforming with Perl's TIMTOWTDI (There Is More Than One Way To Do It) design goal. While native Perl OO is pretty casual in its encapsulation, if you want Bondage-And-Discipline OO, you can use one of Damian's Class::Classes, with Contract programming or Data hiding enforcement or ... there are at least 6 choices. At least one should have multiple inheritance grafted on, although I can't recommend actually using multiple inheritance of implementation (except maybe in CLOS); multiple inheritance of interface (like in Java or COM) seems safe enough.

    Likewise, anything else Perl is missing can be added via other modules -- many of which probably already exist, but can be custom crafted on demand. This includes Operator Overloading, which can be added, for whatever cases are required, using Inline::Filter -- using the full power of Perl as a macro-language for Perl, to enhance the syntax as desired. Not for the faint of heart, but a good Perl consultant can whip it up for you.

    GUI's -- Yes, it is true development of GUI's isn't built into Perl, unless you count the TCL modules as "built in". Ability to do GUIs does seem to run counter to portability (at compile time, whenever that is); this requirement may force your choice on Java. Perl has Gnome, TK/GTK, and Curses interfaces already. See CPAN

    Thirdly, Perl6 will likely be mostly functional before .NET this summer, and _will_ be all things to all people, thanks to the modular bolt-on accessories. (Operator overloading will apparently be a part of the PARROT runtime for Perl 6, as well as in Perl6.)

    Fourthly, Reality Context: Did The Boss specify that you had to be able to hire programmers in this language? Cheap or expensive? With lots of experience or not? Here or offshore? Eiffel's a great language, if you don't mind all your staff speaking French.

    Regarding the evils of Lisp ... see the story of Yahoo!Stores Paul Graham: Beating the Averages or /. #1539239 for a real world $ucce$$ story with Lisp and why; amusingly, he turned up just last week /. #1917202.

    -- Bill

    I had a sigfile ... back when sigfiles were cool
  560. Re:Multiple Inheritance in Java by Anonymous Coward · · Score: 0

    Actually, Java supports multiple inheritance through the use of inner classes.

  561. Re:true integers by Anonymous Coward · · Score: 0
    Only if it knows at compile-time whether or not the numbers might overflow. Otherwise, one way or another, you're going to have a big run-time hit.

    No. It's just a condition test which, when there is no overflow, gives no data dependancy, and is on a "non-predicted" branch. Probably half of the time this cost you 0 cycle (done in parallel on unused CPU units), and maybe one or 2 cycles overwise. It's a minor hit, unless you are doing intensive calculations, so intense that you must do loop unrolling, and should consider SSE and assembly. Overflow checking should definitly have been provided at least as an option in C and its absence is a major design blunder.

    No, it's not. My little for(int i = 0; i

    Yes it will. Your little loop should be written "for(int i = 0; i Your reuse argument is fallacious simply because reuse itself is largely a fallacy outside of library code,

    You don't reuse code, fine, but it doesn't change the fact that maintenance argument is definitly right. In fact the example you gave with a loop is a perfect illustration, since I met exactly this problem: the loop was done with "unsigned char" index, I changed in the "config.h", one of constant (maximum number of some entries), and this resulted in a computer hang (since it was in a device driver). Diagnostic after much time wasted: infinite loop, with exactly your little loop (loop index was 1 byte, boundary was 'int' 4 bytes and >= 1000).

  562. Good point... by Lethyos · · Score: 1

    That's a good point, but I did not want to elaborate on the issue that far. I just wanted to keep to the stereotypical best uses for particular languages to make my point.

    Your other comment "at least on current archs" is interesting. I have spent time day-dreaming about a system where Lisp is the "native" language. An architecture where recursion is somehow done naturally and, of course, as are lists. Though, I am not exactly sure how'd it be done or what advantages would exist...

    --
    Why bother.
    1. Re:Good point... by Ehud · · Score: 1

      You should check out some texts the old Symbolics hardware (google is your friend), which had hardware-support for Lispy stuff.

      I would also like to note that recursion is just one way to do stuff in CL. I, for one, do not use recursion for iterating over lists, since I don't really think it is natural to use recursion for anything but recursive datastructures. Also, the list (as you probably know, but some don't) is not the only datastructure being used in Lisp. CL comes with (multi-dimensional) arrays, hash tables, mutable strings, etc.

      There is also tail recursion. (That is, some forms of recursion may be translated to iterative constructs by the compiler. This is more common in Scheme, but also done to some degree in CL-compilers.)

  563. Re:reference counting by elflord · · Score: 2
    And if an object is in more than one list? It has to be copied anew? What if it doesn't make sense to copy/clone it?

    You can store reference counted objects in lists just fine. Or you can store non-reference counted objects. Or you can store garbage collected objects. Or you can store pointers. In fact, you can store just about anything besides objects with destructive copy semantics. All I'm saying is that the node structure of the list shouldn't be reference counted.

    I'm interested in your comment that Lisp and C++ have different design goals. Common Lisp is designed to provide the programmer with a flexible, robust, object-oriented environment, suitable for large programming tasks. How does that differ from C++'s stated goals?

    First, as stated, the goal is very general. It's all well to aim to provide the best of everything, but what design choices and trade-offs are involved ? Basically, the "goal" you've stated doesn't mean very much by itself.

    Moreover, I don't believe that you're correct. Lisp AFAIK started out as a functional programming language, and Common Lisp added objects much later.

    As for the design goals of C++, one of the major goals is compatibility with C. This was considered important for the language to be easily and widely adopted. A closely related goal is performance. Performance takes precedence over purity. Another goal is flexibility -- it is a multi-paradigm programming language, and has been from day one. This is in stark contrast with languages that claim to be pure object oriented.

  564. Re:OO is the biggest development myth of the centu by KidSock · · Score: 2

    Take a look at the Flyweight pattern in Design Patterns [amazon.com] book. Yep, a model of a word processor where every single character is represented by a very light-weight reusable object.

    True, although that example uses the same object instances over and over. You ultimately only have 100 or so object types to represent different characters. I suppose that's what a Flyweight is (donno, have the book, never quite committed it to memory). Actually, the more I think about it, the more I think the approach is flawed. It might work for a small character set but what if you're using UCS codes like UTF-8? The only reason you would want to have an object to represent a character and not just use an integer would be if you wanted to actually control the rendering of glyphs as subviews of views. Even then it's probably not a good idea. Those examples are just examples.

  565. holy shit, you are a total loser by Anonymous Coward · · Score: 0

    What, did you learn programming from the back of a matchbook or something? Grow up and read a book or ten on real software engineering. It's headstrong turds like you that give us crashy suckware like Mozilla and anything from redmond.

  566. Easy answer... by Pseudonym · · Score: 2

    The most powerful language is the one that can interface easily to another language, allowing you to "change horses midstream" if the first language doesn't do it all for you.

    Put another way, the set of most powerful languages are those that can be used together. Anything with a binding for CORBA, COM, .NET CLR or anything similar will do the job.

    --
    sub f{($f)=@_;print"$f(q{$f});";}f(q{sub f{($f)=@_;print"$f(q{$f});";}f});
  567. ADA is the best by sireenmalik · · Score: 2, Informative

    ADA is the best language there is. I regularly use JAVA and C++ and i know ADA beats the competition my miles.

    Every new feature that you see in the modern languages today was in ADA years ago.

    * better concurreny (protected types)
    * better realtime systems( tasks)
    * better exception handling(fail-safe systems)
    * is a strongly typed language.
    * better interrupt handling
    * very early on introduced the philosophy of reusable code.
    * had intefaces when java was still in its infancy
    .....
    and is used in: financial services, avionics, aeronautics, air traffic control, telecommunications, medical devices, power plants, railroads, astrophysics, satellites, and defense, to name a few.

    If you are going to develop a realtime system forget about everything else... use ADA.
    my two cents

    --


    Voltaire: God is dead.
    God: Voltaire is dead!
  568. Re:true integers by Anonymous+Brave+Guy · · Score: 2

    I can't understand parts of your post because it obviously isn't formatted properly. However...

    Overflow checking should definitly have been provided at least as an option in C and its absence is a major design blunder.

    Not at all. C is a low-level language, and forcing the use of such high-level logic would be inappropriate there. On many systems, your arguments about performance are way off-base, and you would cripple it if you imposed such a requirement. You personally may write mainstream applications for Wintel or whatever, but many who program in C don't, and your reasoning does not hold for those people.

    C++ is a higher level language than C, but your argument is still broken, since it would violate the "zero overhead principle". If you think having an overflow-checked integer type in the C++ standard library would be useful (and you make a reasonable case for it in this thread) then you can suggest it to the standards committee as a possible inclusion in the next version of C++. They know the library is currently missing several key features that weren't ready in time for the first C++ standard (regular expressions, UI, proper file system support, fixed-point arithmetic, etc) and they're open to suggestions for enhancements in the next version.

    You don't reuse code, fine, but it doesn't change the fact that maintenance argument is definitly right. In fact the example you gave with a loop is a perfect illustration, since I met exactly this problem: the loop was done with "unsigned char" index, I changed in the "config.h", one of constant (maximum number of some entries), and this resulted in a computer hang (since it was in a device driver). Diagnostic after much time wasted: infinite loop, with exactly your little loop (loop index was 1 byte, boundary was 'int' 4 bytes and >= 1000).

    So let me get this straight. You used unsigned char as a loop counter, and now you're annoyed that it's messed up? Sorry, I have no sympathy. char types are not suitable loop counters. You should be using int or some custom type, unless you have a very good reason for doing otherwise (which you clearly didn't).

    If you started forcing char types to do automatic overflow checking, you'd break text handling (particularly strings), which is what they're actually for. Don't blame the language for your own inappropriate use of its features (and ignoring the warning that would have been generated by every single C or C++ compiler I know when you made this error).

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  569. You were doing so well... by Anonymous+Brave+Guy · · Score: 2

    ...until you wrote:

    C++ templates are easily replaced by Java interfaces, so it's all good

    That statement is so completely off-base that I'm afraid you don't really know what you're talking about. You can use C++ templates to write type-safe containers and algorithms, but they're also useful for many other idioms (traits, metaprogramming...). Java interfaces aren't even close to providing equivalent functionality.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  570. Thank you! by Anonymous+Brave+Guy · · Score: 2

    jaoswald understands. :-)

    In a GC system, the concept of ownership (from a memory releasing perspective) doesn't exist; everything is effectively owned by the GC. Most of what's being said here then immediately becomes a non-argument.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  571. Re:true integers by Anonymous+Brave+Guy · · Score: 2
    So you are talking about roll your own. It is NOT EASY to write a high-performance multi-precision integer solution in C that smoothly integrates with fixed-precision integers and which you can use with the ease of a typedef. It needs to be built in the language from the start, not bolted on afterwards.

    I'm not talking about C, I'm talking about C++. And in C++, it's pretty straightforward to do what you describe. And it shouldn't be built-in to the language, because it doesn't need to be. Providing the optional facility via the standard library is a much better option for several reasons (notably ease of implementation, forward- and backward-compatibility and keeping to the zero overhead principle).

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  572. Well, if you're going to say that... by Lethyos · · Score: 2

    Every hammer and every nail are made up of atoms. So why not just put the atoms in place a more delicate way. I suppose we'd need colliders to break iron atoms off existing nails (one at a time of course). Maybe we could get the guys over at IBM to let us use their scanning-tunneling electron microscope so we can see exactly where we're placing the atoms. I suppose that after about 5 years of work, we could not only drive a whole nail, but also have it bonded quite nicely to the materials being assembled.

    Pfft. No. The hammer is an abstraction of the solution. The nail is the abstraction of the problem. We create these abstractions because it's easier to work with larger elements than all the atoms in a system. We *could* code everything in assembly, but why would we do that? We could NOT code everything in Pure Lisp, for example. That's a programming language. Can is solve every problem? Absolutely not. Maybe with some hacking...

    What it comes down to, using the wrong tool for the wrong job may still result in a solution. BUT, it will almost always take longer. If I want to add two numbers, I should probably not think about multiplying the two and then dividing by another number such that it produces the result of the addition.

    --
    Why bother.
  573. Re:reference counting by hding · · Score: 2

    Moreover, I don't believe that you're correct. Lisp AFAIK started out as a functional programming language, and Common Lisp added objects much later.

    He claimed that Common Lisp specifically (and not Lisp in general) was to provide an OO environment. From the history in the Hyperspec, object-oriented ideas in general were find their way into the Lisp world by the late 70s. While (as far as I can tell; I wasn't really old enough to be around the community at the time) the 1984 definition of Common Lisp didn't include CLOS, clearly people were thinking about it and the problems that had to be solved in getting an object system that would be as compatible as possible with the variety of object systems that had cropped up. (A little more information about this period can be found in Keene's book on CLOS, or in AMOP.) CLOS was officially adopted into Common Lisp in 1988 and appears in the second edition of Steele. It has always been part of the ANSI standard. Since the latter is what people mean when they casually say "Common Lisp" nowadays, I think it's fair to say that having OO facilities was a part of the goal of Common Lisp.

    Also, in the history from the Hyperspec we find the following:

    In 1986 X3J13 was formed as a technical working group to produce a draft for an ANSI Common Lisp standard. Because of the acceptance of Common Lisp, the goals of this group differed from those of the original designers. These new goals included stricter standardization for portability, an object-oriented programming system, a condition system, iteration facilities, and a way to handle large character sets. To accommodate those goals, a new language specification, this document, was developed.

    So at very least we have to conclude that by 1986 that this was one of the design goals of Common Lisp

  574. Re:true integers by jaoswald · · Score: 2

    The overhead of C++ is still going to be substantial.

    Hint: how do you plan on detecting overflow on integer operations? Most processors have flags that you can branch on, but C and C++ don't offer language-level access to that functionality. The results of integer overflow are purposely left *undefined.* As in, no standard way to detect it. Every C implementation I've seen defines it as "silently truncate result and continue," with no way to detect it in the language.

    Either you have to include assembly code in your C implementation (there goes portability), or you have to put a lot of tests in your common case to determine when the overflow is going to happen. That's a lot less efficient.

    That's why this stuff belongs in the base language--they can do the processor dependent stuff right the first time.

  575. Re:true integers by jaoswald · · Score: 1

    I said "C" several times in the parent post where I meant "C and/or C++"; from my perspective, they are equally broken in this area.

  576. Re:reference counting by jaoswald · · Score: 2

    Others are perhaps more qualified to comment on the history, but they've probably moved onto more productive threads ;-)

    Part of the purpose of Common Lisp was to define a *common* standard for Lisp programmers. The language had branched into a lot of different dialects, each with their own quirks. Some of this was just random evolution, some of it was alternative ideas being explored.

    My understanding is that OO was one of the areas where alternative ideas were being explored. There were a large number of OO extensions to Lisp that had been developed (e.g. Flavors) by various groups, and there had to be a reasonably large amount of discussion to determine which approaches were really valuable enough to standardize. CLOS was determined to be powerful enough to accomodate any important feature of the other approaches, so it could be standardized on without crippling some set of programmers.

    This is very different than the C++ standardization approach, where, as far as I can tell, only a few people work on new ideas, and test them out in whatever way they feel is appropriate, then it gets thrown to a committee. Common Lisp depended on there being *existing*, *widely used* implementations that behaved in the standard way, so that the quality of the solution was already widely acknowledged.

    That means that there is a lot more to many Lisp implementations than the standard discusses (e.g. GUI, network, database support, etc.). The standardization process did *not* include GUI features, for instance, because there is far too much variability between platforms, and because no one model is clearly successful enough to be forced on everyone. However, almost all Common Lisp implementations include GUI support.

  577. Re:true integers by Anonymous Coward · · Score: 0
    Not at all. C is a low-level language, and forcing the use of such high-level logic would be inappropriate there. On many systems, your arguments about performance are way off-base, and you would cripple it if you imposed such a requirement.

    What part of "at least as an option" don't you understand ? This is the usual way (other languages have usually the reverse option "remove overflow checking, usually providing only a few percentage performance improvement). Debugging symbols, profiling, boundary pointer checking are provided by gcc as an option, there is no reason why "overflow checking" can't be offered.

    So let me get this straight. You used unsigned char as a loop counter, and now you're annoyed that it's messed up? Sorry, I have no sympathy. char types are not suitable loop counters. You should be using int or some custom type, unless you have a very good reason for doing otherwise (which you clearly didn't.

    No, you didn't get this straight. I *didn't* use "unsigned char" as a loop counter, it is some other programmer, who saw that with his config.h was enough, the same way that "640 KB was enough for everyone" for Bill Gates, and the same way "int" should be enough for everyone according to you. I *changed* the program, but of course not his loop, because it was hidden somewhere. I just gave you an excellent example that actually happened to me *why* even your simple loop can overflow, and this can happen no matter what size of loop indexes your are taking, when code gets changed (you can get >= 4 GB files, and even 64 bits CPU cycle counter overflows after some time). And by very far, loops aren't the most likely part of the program to overflow, and it was an *example*. Just wait for your program to be modified in 15 years.

    If you started forcing char types to do automatic overflow checking,

    I'm not arguing for "char" overflow checking, I'm arguing for "int" overflow checking. This was an precise example of how things can go bad without.

  578. Re:true integers by Anonymous+Brave+Guy · · Score: 2
    What part of "at least as an option" don't you understand ?

    So what are you proposing? Do you want to mandate that every C compiler provide this option as standard, including those for embedded processors with 8K RAM, where it's just never going to be used? That's absurd. As you point out yourself, there is nothing to stop vendors of C or C++ compilers providing such extensions on their own systems, and several do.

    I *didn't* use "unsigned char" as a loop counter, it is some other programmer, who saw that with his config.h was enough, the same way that "640 KB was enough for everyone" for Bill Gates, and the same way "int" should be enough for everyone according to you. I *changed* the program, but of course not his loop, because it was hidden somewhere.

    And you didn't notice or ignored a warning to that effect, and you got what you deserved for doing so. You should have fixed the loop counter at that point; the compiler told you that you had a problem. Either that or you're using the only C compiler on the planet that doesn't warn on such a blatantly dangerous coding practice.

    I'm not arguing for "char" overflow checking, I'm arguing for "int" overflow checking. This was an precise example of how things can go bad without.

    int overflow testing wouldn't have helped here.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  579. Eiffel by buggered · · Score: 1

    I'm not going to say it's perfect, but it's far and away the best language I've used (in 27 years). I've been associated with several C++ projects that were total disasters. Wheras, several programs I have written in Eiffel have worked correctly the first time (no debugging required). And I've found that with the pre and post conditions, class invariants, etc. *MOST* of the time they are easier to debug. It is really a very simple language to learn ("Object Oriented Software Construction" is the best book I have ever read on OO software). It has garbage collection and multiple inheritence. I use the SmallEiffel http://smalleiffel.loria.fr (the GNU Eiffel Compiler) and it works on almost any platform with a C compiler (it converts Eiffel to C).

  580. Re:true integers by Anonymous Coward · · Score: 0
    So what are you proposing? Do you want to mandate that every C compiler provide this option as standard, including those for embedded processors with 8K RAM, where it's just never going to be used?

    Yes. If it costs you too much, you don't use the option, that's as simple. It can be used in debugging anyway, it's not like you need 10 MB of RAM to do a single trivial overflow test. I want it as an mandary (for compilers) option (for users) at least in C++.

    And you didn't notice or ignored a warning to that effect, and you got what you deserved for doing so. You should have fixed the loop counter at that point; the compiler told you that you had a problem.

    Pure bullshit. gcc -Wall gives 0 warning, none, nada, zilch ; nor does VC++. And, again, that was only an *example* of how overflow commonly happen when another person maintains the code. But of course you cut the point of my post, and bitched wrongly about some unrelated detail.

    int overflow testing wouldn't have helped here

    Well you're right, I would actually want char overflow checking ; what I don't want is arbitrary precision chars. What actually happened is that the programmer defined types "uint8", "uint16", "uint32". This sorry mess only exists because of an "typedef unsigned char uint8", which was only possible because "unsigned char" is an arithmetic type (hint: incremeting characters is forbidden in most other computer languages). So, yes, I want overflow checking of all arithmetic types. I don't understand your initial statement why this breaks text handling.

  581. Re:true integers by Anonymous+Brave+Guy · · Score: 2
    Yes. If it costs you too much, you don't use the option, that's as simple. It can be used in debugging anyway, it's not like you need 10 MB of RAM to do a single trivial overflow test. I want it as an mandary (for compilers) option (for users) at least in C++.

    The problem on minority platforms isn't in the cost to the developer, it's in the effort required to stick such code in a C compiler, when it's never going to be used.

    As noted previously, this would be a reasonable candidate for an addition to the next standard C++ library, which would indeed make it an always-available option for programmers. Perhaps you could hope over to comp.std.c++ and suggest it?

    gcc -Wall gives 0 warning, none, nada, zilch ; nor does VC++.

    My apologies; it's actually Lint that's objecting in my VC++ setup, not the compiler itself. It's a bit sad that two of the most popular compilers around don't object to this, though; it's an obvious and easily tested-for problem, and many other compilers do pick it up.

    Well you're right, I would actually want char overflow checking ; what I don't want is arbitrary precision chars. ... I don't understand your initial statement why this breaks text handling.

    It's switching to arbitrary position if you detect an overflow that breaks the text handling (noting that C strings are just char arrays, and all elements in an array must have the same size). I agree you could have just the overflow test without breaking this, but then you have to work out what you do if it goes wrong.

    And yes, char is broken in C and C++ for historical reasons; so is the handling of boolean values and tests. The sad thing is that newer languages in the family often haven't learned from such mistakes...

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  582. Re:off topic- in defense of my sig. by PsiPsiStar · · Score: 2

    You're totally ignoring the points that I've made, and arguing with the points that you think I should have made. Yes, both parties took money from Enron. Enron gave money to hundreds of individuals. That, in itself, is not a crime (though I wouldn't mind seeing campaign donations get a lot more regulation).

    What should be a crime is removing federal oversight so that a company can get away with fraud. You've consistently failed to address this point. Likewise, knowing Enron's financial status and continuing to help them should be a crime. It remains to be seen whether Bush will be implicated here. Enron helped determine the actual people in Bush's cabinet, re: the link I posted earlier. They didn't have that kind of influence with Clinton. If they managed to get someone into Clinton's cabinet and I'm missing somthing, post the link and let me know.

    The information regarding Bush and Clinton's diplomats was from NPR. I don't have time to post a bunch of links here regarding how lobbying info consistently winds up in Republican sponsored bills, since I'm at work. If you're interested in the facts, you're probably smart enough to research it yourself. If you're only interested in asserting that 'your side is right', nothing I say here will matter much anyway.

    --

    ___
    It's the end of my comment as I know it and I feel fine.
  583. Well, here's your problem. by blair1q · · Score: 2

    Some of your "requirements" aren't language requirements, or even IDE environments.

    Some of them are OS requirements, and others could be ORB requirements.

    So you've got bigger fish to fry.

    --Blair
    "Big, boss-sized lunkers from the look of 'em."

  584. Re:Only language I can think of would be Smalltalk by Anonymous Coward · · Score: 0

    Bullshit. Python has lots of IDE: idle, VisualPython, etc.

  585. What makes a powerful programming language? Delphi by Anonymous Coward · · Score: 0

    Your list of requirements describe Borland Delphi. Microsoft will never port to any other platform other than their own! The only item on the list that Delphi falls short on is garbage collection, but thats just sloppy programming. Borlands IDEs are very easy to use, visual development is a snap, and the inheritence is truly OOP. VB.NET still is not true OOP. Multiple inheritence can be accomplished with a COM interface. Delphi has been our language of choice for over 7 years.

  586. Dylan by ngreenfeld · · Score: 1

    While you really have to fit your problem, your environment, and your programmers, you might consider the language Dylan. See

    comp.lang.dylan in the newsgroups,
    Functional Objects for a commercial version (http://www.functionalobjects.com/) , or
    the open source "Gwydion Dylan" at http://www.gwydiondylan.org/

    The F-O "about Dylan" area is full of information, enough for you to see it satisfies all of your criteria.

  587. Re:Operator overloading by querty_not_dvorak · · Score: 1

    Jalapeno (http://www.research.ibm.com/jalapeno/) is fast and almost entirely Java (1kloc oc c to bootstrap the VM).

  588. Line Numbers! by Anonymous Coward · · Score: 0



    10?"Frrpp!!":GOTO10

  589. Choosing programming language by pli-tom · · Score: 1

    I looked at the list of requirements and you need to ask why the items are there. If the mission statement is flawed you will have problems. I haven't heard of this approach for many years, this was the way it used to be done, a bit more cerebral, I think. But why do you think you need overloading. I assume you want to maiantain the code for some time. Visual PL/I from IBM is probably what you want, you don't want to train future maintainers about your overloaded class libraries

  590. better lanaguage by merlin82 · · Score: 1

    a better language would be great for programming one that is straight forward and has the abilities to do all that today's modern languages can do. but this type of lanaguage would have to be easy to learn and not like java c++ and the other that take years to master why not a language that is english based and does what you type and not use special code names and settings to run

    but that is what i think a new language should be like

  591. What Programming Language to Pick by Kaleem_Baig_Born_Dev · · Score: 1

    Look for these features:

    Exception Handling.
    Error Handling.
    Debuging Features.
    Garbage collection.
    Multiple Inheritance.
    Operator Overloading.
    Execution time performance.
    Platform Independence.
    Interfacing to hardware.
    Support for GUIs.
    OOPs Design.
    Pointers, References.
    Object Slicing.
    Compiler/Interpreter Driven.
    Dynamic memory.

    If I were to design a programming language from ground up I would look for something with these features :

    1 . A true OO based language like Java with a true OO hierarchy.
    2 . Support for GUI like VB.
    3 . Efficiency of C.
    4 . Programmer flexiblity like C++.
    5 . Platform independence of Java.
    6 . Data types can be primitive as well as
    Classes, providing more support for
    programmers like Java.
    7 . Automagic Garbage collection of Java.

    Use of Multiple inheritance(MI):
    If we think about it, how many cases and what practical situations would you use MI.I also think it is not a very good OOPs design, if
    you have to come up for MI unless it cant be avoided.C++ does handle it very well by providing Virtual Base Classes but if you look at java, most of the time you can still incorporate MI in
    java using Interfaces.
    Operator Overloading:
    I dont know why, but never in my life did Ihad to write a program where I used operator overloading, so clearly this cannot be a
    criteria to decide is a language is good or not.

    For all you geeks if I offened any of you about your favorite programming language please excuse me, but I love all languages.