Slashdot Mirror


New Programming Languages Come From Designers

eldavojohn writes "A very lengthy and somewhat meandering essay from Crista Videira Lopes has sparked off some discussion of where new programming languages come from. She's writing from the viewpoint of academia, under the premise that new languages don't come from academia. And they've been steadily progressing outside of large companies (with the exception of Java and .NET) into the bedrooms and hobbies of people she identifies as 'designers' or 'lone programmers' instead of groups of 'researchers.' Examples include PHP by Rasmus Lerdorf, JavaScript by Brenden Eich, Python by Guido van Rossum and — of course — Ruby by Yukihiro Matsumoto. The author notes that, as we escape our computational and memory bounds that once plagued programming languages in the past and marred them with ultra efficient syntax in the name of hardware, our new languages are coming from designers with seemingly little worry about the budget CPU being able to handle a large project in the new language. The piece is littered with interesting assertions like 'one striking commonality in all modern programming languages, especially the popular ones, is how little innovation there is in them!' and 'We require scientific evidence for the claimed value of experimental drugs. Should we require scientific evidence for the value of experimental software?' Is she right? Is the answer to studying modern programming languages to quantify their design as she attempts in this post? Given the response of Slashdot to Google's Dart it would appear that something is indeed missing in coercing developers that a modern language has valid offerings worthy of their time."

435 comments

  1. Quite obviously... by Anonymous Coward · · Score: 5, Funny

    All you need to create a good programming language is a beard. The more epic the beard, the better your language will be

    1. Re:Quite obviously... by Chrisq · · Score: 1, Flamebait

      All you need to create a good programming language is a beard. The more epic the beard, the better your language will be

      I personally look forward to the zombie Muhammad programming language

    2. Re:Quite obviously... by lvxferre · · Score: 1

      This is only needed if you're programming games like Dwarf Fortress and Angry, Drunken Dwarves. In this aspect, more beard == better.

      --
      Nerdy news for your nerdy needs? http://www.soylentnews.org Soylent News is people!
    3. Re:Quite obviously... by Anonymous Coward · · Score: 2, Funny
    4. Re:Quite obviously... by MysteriousPreacher · · Score: 5, Funny

      It was tried, but failed. It had no support for graphics, and stability and a lack of standardization were major problems.

      While the majority of programs ran reasonably fine, a significant minority would deliberately crash themselves and other applications. This instability is due to a feature by which Zombie Mohammed code ensures correctness. Unlike Catholic++, Zombie Mohammed certification is very decentralized, and has reached the point at which each individual program considers itself to be the sole arbiter of correctness. When a program encounters another that doesn't adhere perfectly to its own standards, it will attempt to crash it - which normally leads to both applications being killed. Although widely claimed that Zombie Mohammed code will only attack other languages, such as Borland's Turbo Presbyterian, the truth is that Zombie Mohammed code is far more likely to kill its kin than foreign languages.

      To this day, many Zombie Mohammed developers claim their language to be stable, and that crashing programs are the result of the language being distorted or misused. Oddly enough though, the "stable" developers seem unable to explain exactly how the rogue developers' code is a misuse of the language, and are slow in condemning their actions. Even now in developed nations that have discarded archaic languages, criticism of these outdated languages attracts threats of violence - with many people and publications opting for self-censorship. Zombie Mohammed is gaining popularity in Europe, which some have likened to the idiocy of buying a top of the range modern PC in order to run Windows 3.11. Sensitivities considered, it would be a good idea if the immigration process would encourage those who wish to use modern languages. It doesn't mean that use of Zombie Mohammed in Europe should be prohibited - more than immigrants must understand that Zombie Mohammed is just one of many languages in use, and that it shall not be protected from criticism or ridicule. Really, how can they expect no criticism when they use a dysfunctional programming requiring an interpreter?

      The language remains popular in some parts of the world considered socially backwards and unsophisticated, where pretty much anything is an excuse for a flag burning angry mob. Whether Zombie Mohammed is a cause or a symptom of social retardation is unclear, and certainly such issues are not restricted to this language. One of the largest and most developed countries uses JC (albeit in thousands of variations), yet there is regular in-fighting between various schools of JC developers, and antics that baffle the rest of the developed world, such as JC developers trying to have a programing language taught in religious ed. Thankfully thus far religious leaders have presented a united front in claiming that computer programming is more suited to science than to religious education.

      --
      -- Using the preview button since 2005
    5. Re:Quite obviously... by f3rret · · Score: 3, Insightful

      Dude, Sean, chill. You thought way to hard about that.

      --
      Admit nothing. Deny Everything. Make Counter-accusations.
    6. Re:Quite obviously... by MysteriousPreacher · · Score: 3, Interesting

      Yeah, started as a quick joke, but grew in to an Uncyclopedia article. I'm going to sit down with a cup of tea.

      --
      -- Using the preview button since 2005
    7. Re:Quite obviously... by foniksonik · · Score: 1

      I thought it was awesome. Kudos. And I'm some random guy. That tells you something?

      --
      A fool throws a stone into a well and a thousand sages can not remove it.
    8. Re:Quite obviously... by Chrisq · · Score: 1

      Yeah, started as a quick joke, but grew in to an Uncyclopedia article. I'm going to sit down with a cup of tea.

      Seriously, its worth posting there!

    9. Re:Quite obviously... by MysteriousPreacher · · Score: 1

      Cheers. I'll nick off back there - been a while. At the very least it gives me an excuse to knock-up some amusing and life-threatening images.

      --
      -- Using the preview button since 2005
    10. Re:Quite obviously... by justforgetme · · Score: 1

      Hilarious articles, the English is a bit off though.

      --
      -- no sig today
    11. Re:Quite obviously... by Anonymous Coward · · Score: 0

      Life-threatening as in you getting death threats if you post those images?

      BTW, as a freebie, you might want to mention that. Perhaps something similar to a badly-behaved image processor?

    12. Re:Quite obviously... by Anonymous Coward · · Score: 0

      Absolutely genius. This needs to be re-made in the form of a comic similar to XKCD. I may have to share this story just for this comment XD

    13. Re:Quite obviously... by jythie · · Score: 1

      Sad thing is, you are probably not far off. As far as I can tell, the difference between a good and bad language tends to be 'what are the cool kids using?'.. then most others take their cues from there. I am always amazed at just how social 'solitary' technology use tends to be.

    14. Re:Quite obviously... by celle · · Score: 2

      I got catholic++ and turbo but of all the relatively bad languages out there which one(s) in your opinion fits Zombie M?

    15. Re:Quite obviously... by celle · · Score: 1

      Oh and by the way it was quite hilarious.

    16. Re:Quite obviously... by Anonymous Coward · · Score: 1

      What about the leather sandals and white socks?

    17. Re:Quite obviously... by Anonymous Coward · · Score: 0

      This is *so* biased, and ignorant. Didn't you see that Zombie Mohammad forked from Zombie Christian, written by a pair of self-proclaimed Christian Evangelicals, who were horrified by operating systems that had things called daemons and so forth? This, in turn, was forked again, with one fork, Zombie Coffee Haters, attacking software written in any language it defines as liberal, as defined by having non-static libraries , while the other, True Zombie Christian, would attack software, or the o/s, if written in any other language.

      I will confess that the latter had serious problems, as, depending on the coding stye and naming conventions of the programmer, it freqently would attempt to crash programs also written in TZC.

                        mark "#include;main() { fprint ("The One True Lang: %s\n, "K&R C"); exit; }

    18. Re:Quite obviously... by Anonymous Coward · · Score: 0

      Catholic++ after Vatican II (aka C++11) is much more inclusive and allows many new ways to program. Just because some Amish still use assembly does NOT mean the rest of us are antiquated!

    19. Re:Quite obviously... by steelfood · · Score: 1

      Not sure exactly what you're preaching, but it sounds really mysterious.

      --
      "If a nation expects to be ignorant and free in a state of civilization, it expects what never was and never will be."
    20. Re:Quite obviously... by MysteriousPreacher · · Score: 1

      Honestly, no idea, but cheers.

      --
      -- Using the preview button since 2005
  2. I love lolcode by Anonymous Coward · · Score: 1

    I love lolcode

    1. Re:I love lolcode by Anonymous Coward · · Score: 1

      I love lolcode

      `
      Does this come from academia?
      http://en.wikipedia.org/wiki/Whitespace_(programming_language)

    2. Re:I love lolcode by obsess5 · · Score: 1

      I discovered this language some years ago. If I remember correctly, the language was developed after a late-night drinking binge. There are some languages that use MIDI music files as their source code; e.g., Velato.

  3. Doomed by Joce640k · · Score: 2, Insightful

    Aren't the basic programming concepts understood and defined now? All a new language can really bring to the table is a different syntax.

    The successful new 'languages' these days are those that include a big set of libraries, eg. Java and C#. People use them for the libraries more than the language. Without the libraries Java and C# are nothing more than reinventions of the UCSD p-system.

    --
    No sig today...
    1. Re:Doomed by Anonymous Coward · · Score: 5, Interesting

      Not quite true. There are believed to be a very large number of possible models for computation, of which functional and imperative programming are but two.

      Most of them are unlikely to be particularly useful, but there is plenty of scope for new languages which exploit them.

    2. Re:Doomed by ledow · · Score: 2, Insightful

      This.

      Pretty much, after you learn your second or third programming language, they are all pretty much the same. There are some oddball ones for very specific purposes (e.g. PROLOG), but pretty much they are all the same things with different syntax and different libraries.

      Some of them are slightly more suited to different tasks (e.g. LISt Processing, etc.) but there's really not much to choose between them. I'm not a fan of the newer languages - anything that LOOKS like gobbledegook from a distance usually does a good job of masking gobbledegook close-up. Just looking at some of the Ruby examples on the Wikipedia page makes my programming-mind want to vomit. I find C++ quite obtuse too. C99 is pretty much the best compromise that I've found between gobbledegook and flexibility.

      Does your language compile to the target? Does your language run and compile from your development host? Does your language enable you to do the things you want without unnecessary hindrance? Almost every programmer who chooses a language asks themselves that and if they aren't satisfied it's true, will move to something else.

      To an extent, OOP is just a formalisation of things that function programmers have been doing for decades into a space-saving syntax. Similarly for other "paradigms" of programming. In the end, the compiler still has to squeeze it all into the same instruction set and it's just whether it bothers to check for over-runs, abstract away certain details, make certain optimisations, etc. that makes any difference. The end code is usually pretty indistinguishable.

      This is my answer when someone wants to choose a language to "start programming": Any of them. It doesn't really matter. Probably good to start with something you can understand immediately but it really doesn't matter what you do it in. It's like a child who's started learning to speak wondering what language they should speak - whatever is available, practical and you can manage.

      Programming is communication of some instruction to the computer, that's why we call them "languages". What language you use is merely a practical consideration (i.e. verbosity, popularity, availability, what others can understand, etc.) that's pretty much made for you. Some languages aren't available, don't have a compiler (only an interpreter), need external libraries for everything, aren't cross-platform, etc. Beyond that, the only thing that matters is the message - the program itself - not the language.

      Since I was a teenager, I thought of writing my own language that would pick bits I like out of each language and merge them. It would just create a hideous mess, of course, but if I've considered it, it usually means lots of other people have done it before me. Any language that purports to be the collation of the good points of others will be regarded by everyone else as a collation of the bad points of everything else.

      A one-man language isn't, in and of itself, a bad thing. The problem comes when it literally does nothing you can't already do, albeit with slightly different syntax and slightly more work.

      Basically, if you wanted, you could rewrite a C pre-processor to compile any of those languages directly to C syntax, and vice-versa. There's nothing "new", just some "shiny" things.

      Things haven't moved on since C, really. Sure, we've prettied up the syntax, clarified some edge-cases, added some libraries, etc. but it's all just spit-and-polish on a language made in the 60's. The fact we use those slightly-cleaner versions for the vast majority of software today (including the compilers of most of those other languages) means that there really wasn't any huge paradigm shift, or change in the way we work, or need to move on.

      The only thing I think might change the way we work in quantum computing. That's going to need a serious rethink and redesign in order for people to "program" them effectively. But, you know what? I have a suspicion that the first practical languages for that will be "C with knobs on".

    3. Re:Doomed by TheRaven64 · · Score: 4, Insightful

      Aren't the basic programming concepts understood and defined now? All a new language can really bring to the table is a different syntax.

      If you really believe this, then you've been stuck in Algol-derivative land for far too long.

      --
      I am TheRaven on Soylent News
    4. Re:Doomed by Anonymous Coward · · Score: 1

      Basically, if you wanted, you could rewrite a C pre-processor to compile any of those languages directly to C syntax, and vice-versa.

      sure all *imperative* languages look and feel all the same, but please go ahead and do that with a declarative or a functional language.
      Sure it's doable, because of Church, but that doesn't mean it's simple.

    5. Re:Doomed by aaaaaaargh! · · Score: 1, Insightful

      Aren't the basic programming concepts understood and defined now?

      Not when it comes to parallel programming with the inherent synchronization issues. Particularly the attempts to automatically parallelize seemingly sequential programs are still in their infancy and even if these are more problems of compiler optimization these need a certain amount of support in the core language such as immutable data structures in the right place or a particular synchronization model.

      But yeah, it is annoying that many recent languages are worse than what was there before in terms of readability, security, or practical expressivity. I'm not a big fan of Ada because of its sometimes arcane syntax and its verbosity, but you've got to admit that many modern languages barely have half of its features. Or, take those languages who shall remain unnamed whose inventors try to sell dynamic scoping as a good thing (whereas in reality they were probably just unable or too lazy to implement lexical scope).

      That being said, in the end it's the libraries that count, and another big problem is that libraries are constantly being rewritten for each language or interfaced from inherently buggy and unsafe languages like C and C++. It's understandable and somewhat unavoidable but still idiotic.

    6. Re:Doomed by Anonymous Coward · · Score: 5, Insightful

      Good grief, what a profound misunderstanding of the entire field this post represents.

      If you have an interest in this field, you need to spend some serious time with Haskell and LISP before you even begin to think about writing longwinded comments about how all languages are fundamentally the same.

      It is trivially true that any program you can write in [language X] you can also write in assembler, and therefore C. If the entire field of programming languages could be summarized like this, why aren't we all using assembler?

      The insight only comes when you understand this thing called "abstraction" and why it's useful. There is a reason I use Django templates, and don't usually write HTML-producing code in C. There is a reason I use LISP when I'm doing natural language processing. I can do more work in one line of Python than you can do in 100 lines of C. The right language for the job can make two orders of magnitude difference in productivity. If you don't understand that, please, STFU.

    7. Re:Doomed by dabadab · · Score: 1

      it's just whether it bothers to check for over-runs, abstract away certain details, make certain optimisations, etc. that makes any difference

      Pardon?... Last time I looked checks, abstraction, automatic optimisation and stuff like that were the reasons to have computer languages too.
      Unfortunately no programming language will bring world peace but none aims to do so - they are about the stuff you just trivilialized.

      --
      Real life is overrated.
    8. Re:Doomed by PiMuNu · · Score: 1

      I basically agree. But I would say not just libraries - C++ was invented so that the compiler can do type checking for you. But yeah, looks like Turing was right after all.

    9. Re:Doomed by Nursie · · Score: 2, Insightful

      C/C++ inherently buyy and unsafe?

      No more buggy than code written in any other language, and only unsafe in the hands of people that don't know what they're doing. Arguably these people shouldn't be allowed near any programming language anyway.

    10. Re:Doomed by OeLeWaPpErKe · · Score: 4, Interesting

      Compiling functional languages down to C is extremely simple. Functional code is imperative, it's just accepting the rule that you can never reassign a variable. It's the reverse that's hard.

      But just because it's hard doesn't mean it's not done. Pretty much every C compiler with the partial exception of gcc compiles C code into a functional-style imaginary assembly-like language, because that allows more optimization algorithms to work. It's hard and complex, but it gains you a few percent of efficiency.

      Most high-level programming languages easily "compile down" to C, in a straightforward and easy manner. Just look at the gnome source code to recoil in horror at the manual, convoluted and incomplete reimplementation of C++'s virtual method tables. Complete with the "your destructor isn't virtual" gotcha just waiting to bite you, except without the compiler warning when you do screw it up. Or the linux kernel's way of dealing with all sorts of datatypes, like a file handle. It *is* object-oriented, both gnome and the kernel, they just prefer to compile manually.

      Want to give C "all the power of python" ? Just make all variables part of a huge dictionary, and do everything with symbolic lookups. ( x.y(z) => (*dict_get(dict_get(global, "x"), "y")) (dict_get(global, "z")), and all types reduced to "void *". There's people who actually do stuff like this (like, again, gnome).

      The new linux iptables code looks like an extremely basic lisp implementation, because they know how to make that fast. The previous one looked like an interpreter for an extremely convoluted language (much slower because of the 2 strands of execution : first the interpreter itself, second the actual rules being executed. This hinders cache efficiency a lot).

      Going down is never the problem. Compiling any highlevel language down to C is an easy exercise (I won't go as far as to say it's trivial, it's not). Imho it's not the best option. C is hard to optimize (but code is available to do that), so compilers necessarily miss a lot of opportunities. The compiler actually has to determine the programmer's intention, prove difficult properties about portions of code, before a lot of optimizations can be applied. Needless to say, this is very hard. Dataflow oriented languages, by contrast, are much easier to optimize and beat C in performance. But nobody knows them, and so actually coding such a compiler is a very hard, very lonely exercise.

    11. Re:Doomed by Viol8 · · Score: 1, Insightful

      "Haskell and LISP"

      Functional and list processing languages are not magic despite what the fanboys would have us believe. And if they were the best solution on a day to day basis they'd be used far more often than they actually are.

      "I can do more work in one line of Python than you can do in 100 lines of C"

      You must be a pretty lousy C programmer then. Python may be higher level than C but its not THAT mush higher.

    12. Re:Doomed by Joce640k · · Score: 2

      I find C++ quite obtuse too. C99 is pretty much the best compromise that I've found between gobbledegook and flexibility.

      To an extent, OOP is just a formalisation of things that function programmers have been doing for decades into a space-saving syntax.

      The big advantage of C++ over C is resource management (using "RIAA").

      With C++ you can define a smart pointer type, use STL containers and strings and everything pretty much manages itself. With C you simply can't do that. Writing big/complex programs in C is an awful lot more work than in C++.

      Exceptions too. If you're parsing a complex data file several layers deep then error handling will make C code enormously complex. With C++ you just throw an exception and let stack unwinding free all the temporary data for you.

      --
      No sig today...
    13. Re:Doomed by Joce640k · · Score: 1

      C++ compilers can do a lot more than check types. They automate an awful lot of programming work for you, eg. via stack unwinding.

      --
      No sig today...
    14. Re:Doomed by Mabhatter · · Score: 3, Interesting

      This is like arguing for good Engineering. The Efiel Tower is a great piece of engineering and applied sciences. It is also a terrible house or car factory.

      What these "bad" languages provide are tools to do a TASK well. The classic case of a well designed and engineered language would be Java. The underlying computer science is excellent.... But it doesn't SOLVE PROBLEMS PROGRAMMERS ACTUALLY HAVE. Java is like a store full of Craftsman tools of every type.. A langauge like Perl is a master lockpicker's toolset... Not much to look at, but get the job done.

    15. Re:Doomed by TheRaven64 · · Score: 4, Informative

      Pretty much every C compiler with the partial exception of gcc compiles C code into a functional-style imaginary assembly-like language, because that allows more optimization algorithms to work.

      Really? Because I've worked on several C compilers, and that's not something I've ever seen. Unless you're talking about SSA form, in which case you're wrong on several counts. First, GCC does use SSA form and has for about five years. Second, SSA form is usually quite restricted: memory is not SSA, for example, so it's not very like a functional style at all. I'm not even going to talk about your conflation of vtables with object orientation.

      --
      I am TheRaven on Soylent News
    16. Re:Doomed by GiganticLyingMouth · · Score: 1

      Yes. C/C++ are inherently predisposed towards being buggy and unsafe, relative to more modern languages. They trade runtime checks for minimal runtime overhead (and I'm not saying that's a bad thing), but they don't make any effort to assist the programmer in the area of code correctness. Even the few compile-time systems in place to prevent programmer error (i.e. the type system) is pretty easy to circumvent. Take for example assigning one struct to a (completely different) one (which is an illegal operation); type1 t1; type2 t2; t1 = *(type1 *) It's as easy as that to completely subvert the type system. This is because C assumes the programmer knows what they're doing/is always right, which more often than not is not the case. However, if as you say, people who write unsafe code "shouldn't be allowed near any programming language anyway", then we'd have precious few (i.e. zero) programmers. You can never tell that there's a security vulnerability in your code until it's been found, and you can never conclusively prove your code to be security-hole free. In addition, very often in industry software security is an afterthought, as it's not as tangible as implementing new features. As a result, no one spends any meaningful time on detecting vulnerabilities (which can be very subtle). This is why having a language that makes it easy to write good code and hard to write bad code is so important. C will always have a place in embedded systems and OSes because of its flexibility and speed, but it's high time that we moved away from such low level languages in other software contexts.

    17. Re:Doomed by JasterBobaMereel · · Score: 3, Insightful

      C was widely used because it was well supported on all platforms and had extensive libraries ..
      C++ see above (and the syntax is similar to C)
      Java - See above for cross platform (and the syntax is similar to C/C++)
      JavaScript - See above for Web-browsers (and the syntax is similar to C/C++/Java)
      C# See above (for Windows and some other systems) (and the syntax is similar to C/C++/Java)

      Do you see a pattern here, can I learn a language similar to what I already know, that will be well supported on the platform I am using, and will have all the libraries I will need ...

      Languages that are better in every respect will fall by the wayside if they don't meet these criteria regardless of how much better they are ...

      C and it's descendents are not the universal perfect language that people suppose, they are just popular, and now are just popular because they are near ubiquitous ...

      --
      Puteulanus fenestra mortis
    18. Re:Doomed by cptdondo · · Score: 1

      I learned to program at a time when structured programming was just coming into view. There was a huge amount of experimentation going on. I still think fondly of languages like SNOBOL, which was absolutely awesome in its text handling. Most of the regex concepts were tried and tested in SNOBOL.

      Seems like a lot of the new languages are scripting languages, written to scratch an itch; sometimes they stick. NASAL comes to mind. Great scripting, limited applicability.

      I really wish that people would take off their blinders and really, really *try* radical new concepts.

      Everything that can be invented has been invented.
      Charles H. Duell, Commissioner, U.S. patent office, 1899 (He didn't really say that but it's a great quote anyway).

    19. Re:Doomed by buchner.johannes · · Score: 5, Insightful

      I disagree. For me, there are three important points to discuss programming languages:

        1. Syntax
        2. Access
        3. Community

      ad 1) We know all about and can analyse the syntax. Fine. All the discussion happens here.
      ad 2) But what does the finest Haskell help me if I can't access a CD, Bluetooth or a XMPP server, and whether it makes a difference where I want to run the code (web server, mobile phone, mainframe, laptop). In principle, all languages are Turing-complete and equivalent, and I can write wrappers between languages, but as long as I can't *practically* do all the things I need, I'm stuck. The available libraries/access methods draw a picture of what is possible. Here C due to its age, Java with it's tendency to make package that are reusable and Python are among the best (from my experience). As an aside, .NET lacks here, and massively because there is no spirit to make libraries available to others for free causing a non-availability of free libraries.
      ad 3) A language is also dominated by its users. This is most noticable with PHP. The background of users dominates what a language should do. Also, this determines the amount of help and easy-to-access documentation. Which again makes a language popular or not.

      One individual is not capable of addressing (2). Also, whether a language is picked up by the masses (3), or whether you can build and hold this community, is not a rational, predictable process. When designing a language, you don't have full control over success.

      When comparing two languages, don't just look at (1), also look at (2) and (3).

      --
      NB: The message above might reflect my opinion right now, but not necessarily tomorrow or next year.
    20. Re:Doomed by Anonymous Coward · · Score: 5, Funny

      The big advantage of C++ over C is resource management (using "RIAA").

      I think you meant RAII (resource acquisition is initialisation), also known as SBRM (scope-bound resource management). The RIAA would just disable all your copy constructors to stop copyright infringement.

    21. Re:Doomed by Joce640k · · Score: 2, Insightful

      Just because it can be done, doesn't mean you should do it.

      Most arguments against C++ are of the "Look, I can do this and it's bad!!!" type. Real C++ programmers just ignore them and carry on writing code which doesn't do that.

      Yes. C/C++ are inherently predisposed towards being buggy and unsafe, relative to more modern languages. They trade runtime checks for minimal runtime overhead (and I'm not saying that's a bad thing), but they don't make any effort to assist the programmer in the area of code correctness.

      Modern C++ implementations usually have run time checking on by default. eg. In Visual C++ std::vector checks the range of all indices to see if they're legal. If you do C++ right then the only memory error you'll is a null pointer (just like super safe Java).

      C++ isn't problem-free, but all the old mid-1990's arguments aren't applicable any more, sorry.

      PS: C and C++ are completely different languages, writing "C/C++" only shows your ignorance.

      --
      No sig today...
    22. Re:Doomed by chocapix · · Score: 1

      I can do more work in one line of Python than you can do in 100 lines of C.

      I think a few IOCCC winners would disagree with you on this.

    23. Re:Doomed by Anonymous Coward · · Score: 0

      Even the few compile-time systems in place to prevent programmer error (i.e. the type system) is pretty easy to circumvent.

      The problem isn't that it's easy to circumvent. The problem is that you can circumvent it with code that looks completely normal. Compare that with Ada, in which you'd have to use subprograms or attributes with "unchecked" in them, such as Unchecked_Conversion, or import pragmas, that can be spotted much more easily.

    24. Re:Doomed by betterunixthanunix · · Score: 2, Informative

      Exceptions too. If you're parsing a complex data file several layers deep then error handling will make C code enormously complex. With C++ you just throw an exception and let stack unwinding free all the temporary data for you.

      Except that C++ exceptions are tricky beasts; this is a classic "hard to shoot yourself in the foot, but if you manage it you'll blow your leg off" situation. Aside from how easy it is to get exceptions wrong (e.g. when your exception types are part of an inheritance hierarchy), there are also hidden "gotchas" like this:

      SomeClass::~SomeClass(){
      log.print("Destroying SomeClass Object");
      }

      See the problem? Wondering why this is relevant to exception handling? The body of this destructor might throw an exception, which is OK sometimes but deadly if the destructor was called as part of the stack unwinding process that resulted from another exception being thrown (which causes abort() to be called).

      The C++ standard library also has (or at least as of C++98, had) poor support for exceptions. You must explicitly activate exceptions in some classes; "new" may or may not throw exceptions; the number of exceptions that might be thrown is very limited. There are some parts of the C++ standard library that require you to check return types or to check class members on your own (sometimes this is a good thing -- throwing an exception at the end of input would be horribly annoying).

      C is not much better, since error states are advisory and people often ignore them (how many times do you see people fail to check the return value of printf?). What C++ needs (and perhaps this is in C++0x) is a better definition for exceptions, one that does not cause programs to abort (which is even worse than checking return values) and to make better use of exceptions in the standard library. Unfortunately, this would create all sorts of headaches for compiler writers, who would have to rethink their code generation strategies, so I do not think it is likely that we will see this happen any time soon.

      --
      Palm trees and 8
    25. Re:Doomed by betterunixthanunix · · Score: 1

      Aren't the basic programming concepts understood and defined now?

      I am not an expert, so perhaps someone who is can weigh in on this: is there some reason to think that we have discovered every programming paradigm that could possibly exist? I suspect the answer is "no," but perhaps I am wrong.

      All a new language can really bring to the table is a different syntax.

      Or there could be a new paradigm that requires a new language. Prolog is not just "different syntax" from Java, it is a different approach to programming.

      --
      Palm trees and 8
    26. Re:Doomed by Nursie · · Score: 1

      It's true, you can't guarantee security.

      But you can have people who know what they're doing and keep it in mind, because security and stability are often very similar things, e.g buffer overflows.

      BTW - 'in industry' or at least in the huge multinational I'm part of, we do spend quite a lot of time thinking about this stuff, complying with various standards, applying static analysis tools etc etc. This may not be all that commonplace, but we supply various government and military places, so it's necessary. To us it is a feature.

    27. Re:Doomed by psmears · · Score: 2

      Compiling functional languages down to C is extremely simple. Functional code is imperative, it's just accepting the rule that you can never reassign a variable.

      No it's not. There's also the small matter of first-class functions (e.g. being able to return a function as a result from your function, where the returned function still has access to the local variables of your called function.) C doesn't natively support this. It can be simulated, of course, but it's certainly not easy, because (roughly speaking) the lifetime of locals is no longer tied to the lifetime of the stack frame for that function.

      And then there's laziness - being able to define a function that contains an infinite loop (say, calculating all the prime numbers one by one), and then applying another function to it to ask for the first 100 results - and having it do what you want (e.g. returning the first 100 primes) without looping forever.

      This can certainly all be achieved with translation to C - as the existence of ghc proves - but it is far from "extremely simple".

    28. Re:Doomed by betterunixthanunix · · Score: 1

      Languages that are better in every respect will fall by the wayside if they don't meet these criteria regardless of how much better they are ...

      I would agree if "syntax similar to C" were not one of the requirements. Common Lisp remains in use, and has been used successfully in several very big projects. Python is becoming increasingly popular as a general purpose language.

      C has acceptable syntax (better than brainfuck) but there is nothing magical about C syntax. Many programmers learn a language with C-like syntax in school, but that is where the importance of that syntax stops, both in theory and in practice. With many schools moving to Python, I suspect that C-like syntax will start becoming a hindrance to language adoption pretty soon.

      --
      Palm trees and 8
    29. Re:Doomed by umghhh · · Score: 1
      why some men like blonds more than red heads and then bound to brunettes? Well we are all different, have different addictions and end up bending under external pressure (this of course applies to all of human kind not only poor males from my analogy).

      Now as for you love to python - I do not think GP actually did say anything against python, GP also did not say all is assembler and we should write our code in it. He generalized about languages and he was essentially right.

      BTW: I believe your productivity with Python (to keep your example) would be null in place like I am at now where I use specialized and very old language to control a complex real time engine and this is not because Python is useless but it is just not suitable/feasible/possible for this particular purpose.

    30. Re:Doomed by Anonymous Coward · · Score: 0

      "Functional and list processing languages are not magic despite what the fanboys would have us believe. And if they were the best solution on a day to day basis they'd be used far more often than they actually are."

      Even if you never use them in real life, they will improve your C (or PHP, Ruby, or pretty much any other language). Just because they will give you a different perspective.

    31. Re:Doomed by JoeMerchant · · Score: 1

      I have a suspicion that the first practical languages for that will be "C with knobs on".

      I suspect it will depend a whole lot on the personal tastes of the particular group doing the work.

      I was shocked at the strong presence of FORTRAN in the highly optimized parallel world in 2005.

    32. Re:Doomed by Bengie · · Score: 1

      C isn't a perfect language? The base language reads like a cross between Macro'd ASM and algebra. This IS the perfect syntax.

      The goal of a language is to abstract away the repetition of writing pure ASM, while not detracting from its power. Descendants of C added a few extra things like lambdas, but the base language still remains.

      Type-less languages are the worst. Abstracting away basic types like int and floats is just a horrible idea.

      50% joking + 50% not joking = 100% opinion

    33. Re:Doomed by JoeMerchant · · Score: 1

      "I can do more work in one line of Python than you can do in 100 lines of C"

      You must be a pretty lousy C programmer then. Python may be higher level than C but its not THAT mush higher.

      I would also argue that all that really needed doing could be expressed in 5 lines of C, and that other 95 lines of Python Power is actually wasted overhead.

    34. Re:Doomed by TheLink · · Score: 5, Insightful

      1) Some programming languages are great for all the code you have to write. They are very powerful, very expressive, high performance, etc etc.

      2) Other programming languages are great for all the code you DON'T have to write! They have lots of _good_ well documented standard or defacto standard libraries, modules, so you don't actually have to write stuff for a lot of things.

      Being a crappy lazy programmer I prefer languages that satisfy both 1) and 2), but with 2) as a priority. Because I end up having to write a lot less and it's not my responsibility to document, support and fix those libraries. Yes I may have to fix or workaround some of the library bugs, but it's not really my job...

      The good libraries are written by programmers far better than me, so if I use their stuff instead of reinventing it, it means fewer bugs and higher quality.

      Of course, if you are a great programmer your priority would be 1). 2) only being a minor factor.

      --
    35. Re:Doomed by Anonymous Coward · · Score: 0

      I'm curious, how do you implement a hash table in five lines of C? With Python, they're built right into the language, of course.

    36. Re:Doomed by AttillaTheNun · · Score: 1

      I do not have a specialized education or interest in the field of language design, but I agree with the premise that they are all abstractions over the implementation language, which is typically a CPU's micro-code. Given this, what I fail to understand is why some languages (I'm looking at you, C++) attempt to be the all-purpose language for all (or most) programming paradigms (imperative, generic, procedural, OO). This is sold as a benefit, but I'm not convinced. Why not use the best tool for a given job and design a language that abstracts one paradigm well and concisely. Implement interoperable components so you can mix and match the best of each breed.

    37. Re:Doomed by VortexCortex · · Score: 1

      With C++ you can define a smart pointer type, use STL containers and strings and everything pretty much manages itself. With C you simply can't do that.

      Yes you can. It won't be as efficient or pretty, but a lot of the grunt work can be hidden with macros.

      All the structures that need cleaning up have a pointer to their cleanup function, as well as a void pointer to the next object on the clean-up stack.

      int RAII_Function( void ) { OH_LOOK_A_GUARD; // macro that creates the object stack
      CREATE( MyObject, instance);
      CREATE( MySmartPointer, pointer, instance );
      // ... Do stuff with your damn smart pointer.
      RETURN( 42 ); // also does CLEAN_UP; macro (used when no return is needed).
      }

      You can even do reference counted objects in run-time allocated memory. Like I said, it's not as pretty as C++, but if you don't need all of C++'s features, sometimes it's acceptable to roll your own OOP or RAII, etc. I've yet to find anything "you simply can't do" in C, as this would imply it's not possible in any language.

      Interestingly enough, I've also seen/used C++ with similar macros to provide EXCEPTION_GUARDs.

    38. Re:Doomed by aaaaaaargh! · · Score: 1

      Sigh. I can't say that I haven't seen that coming (including the Insightful) but still couldn't resist... Anyway, I'll never understand language afficionados.

      C/C++ inherently buyy and unsafe?

      No more buggy than code written in any other language, and only unsafe in the hands of people that don't know what they're doing.

      A programming language is a tool, and you've got to chose the right tool for the right job. If you like a particular language and want to advertise it you should better emphasize its strong points rather than living in constant denial and invent silly arguments why weak points are in fact a strength. The argument that language X is only unsafe for people who don't know what they're doing is just ridiculous nonsense. But how much convenience, speed, or safety you need depends on the purpose, right? It's just a tool. In comparison to languages like Eiffel, Haskell, and Ada, C and C++ are inherently buggy and unsafe. There is no point in denying that. That doesn't mean that they are not the right choice for some (or most, if you think so) projects.

      Regarding high integrity systems, maybe we should force advocates of language X to fly airplanes and drive cars that have been programmed from bottom to top in language X and let natural selection to the rest...

    39. Re:Doomed by Anonymous Coward · · Score: 3, Insightful

      Of course they're not magic. But they offer abstractions which are very different to what C offers. Haskell's type system in particular needs to be studied to really understand what I'm talking about - if you think functional languages are only about list processing you're just reading the back of the cereal packet.

      You must be a pretty lousy C programmer then.

      Indeed, I only have 22 years of experience with that language and its successors.

      Of course you can write your 100 lines of C in a library and say "hey, I'm only calling a library", but in Python what you can do in one line of ad-hoc code can take 100s of lines of ad-hoc C code. Look up list comprehensions. And yes, eventually a library interprets those, but high-level languages allow you to escape the bounds of that kind of thinking (all programs reduce to how they execute) and think in terms of higher-level abstractions. And that is the whole point which the "everything boils down to C eventually" argument misses.

    40. Re:Doomed by scamper_22 · · Score: 2

      It's a little more than just libraries... but the general point is true. It is also the tools, debugger, documentation, compiled format, general programming environment.

      For example, one of the major differences between Java/C# and C/C++ is that C/C++ says nothing about how the code is actually compiled. Whereas Java/C# specify how their compiled output is specified (as they are tied to a runtime platform). This makes things like importing libraries trivial in c#/Java. Just grab the library and click import... problem solved. All the information on the library is contained in the library itself... types and everything. The compiler can derive a lot of information just from this and most importantly, can count on it being there. You don't need to worry about linking issues or naming issues or compile flags of some library...

      Also things like debuggers. You can get a lot of functionality in C++ by using smart pointers or the STL. But rarely is the debugger support that nice. Stepping into calls means you're always stepping through smart pointer code. Similarly, you dig into the details of STL structures just to view the contents of a map or something. Nothing is impossible and there are 'systems' in place to help the debugger decode things... but in general, the support is not there.

      Divorcing the 'language' from the rest of the environment is like talking about 'operating systems' strictly in terms of the kernel. Sure it can be an interesting technical discussion, but these days, most of what matters is in the system taken as a whole (kernel, default application, shell, configuration, interface...)

    41. Re:Doomed by Anonymous Coward · · Score: 0

      You must be a pretty lousy C programmer then. Python may be higher level than C but its not THAT mush higher.

      How so? Built into the language is arrays and nesting of data. In C that is all explicit (which is its strength).

      For example in python

      x = [a, b, [50, 60, 70], "abcd", 0]
      in c that would be at least 2 mallocs (prob 3, 1 if you are using a fixed structure, '0' if you use the stack), 7 sets, one strcpy, and if your being nice 2-3 if conditions.

      Python also is flexible but it comes at a cost of speed and memory. As in python that 1 line probably cost a couple of k in memory.

      They *just* added data iterators into c++.

      Look I like C/C++. But python is a much more modern language in getting things done.

    42. Re:Doomed by Anonymous Coward · · Score: 1

      PS: C and C++ are completely different languages, writing "C/C++" only shows your ignorance.

      Well, C++ started as a hacky extension of C. C++ is also an extension of C in the sense that you can make any mistake in C++ that you can make in C plus thousands of new ones.

    43. Re:Doomed by Anonymous Coward · · Score: 0

      and how much of the power of that one line of Python vs 100 lines of C is due to the *language*, as opposed to libraries?

      If you're writing 100 lines of C to do the work of one line of Python, then you're probably comparing a library call to doing something from scratch.

    44. Re:Doomed by Anonymous Coward · · Score: 0

      "I can do more work in one line of Python than you can do in 100 lines of C"

      You must be a pretty lousy C programmer then. Python may be higher level than C but its not THAT mush higher.

      Interesting debating turn: AGREEMENT + INSULT.
      It's not yet included in the general structure of arguing on the internet -- perhaps you could add it?

    45. Re:Doomed by im3w1l · · Score: 4, Insightful

      4. IDEs and tools

      Does it have a wysiwyg gui designer?
      Can I hotswap code during debugging?
      Refactoring?
      Can I get documentation on a function just by hovering my mouse over it?
      Are there automated bug finders?

    46. Re:Doomed by Johann+Lau · · Score: 1

      Scripting languages encourage sloppy programming - you can always just edit the script and run ... and if it works, what the heck, right? After all, it's not like you have any strict type checking because it's just a stupid script. You don't need to declare your variables - it'll create them on the fly - and even change their type without warning you.

      That makes no sense -- why would that make the user of a scripting language sloppier? Where is the difference between "I can just compile, if I missed something I'll get warnings" and running the script? Zero. And flexibility in regards to variables and types is only a problem if you lost track of what you're doing to begin with, and in that case I doubt more hand holding by the compiler will help.

      If all you know is how to write scripts, you're not a real programmer. Tsk, tsk.

      And if you use a compiled language for every single thing, you're incredibly leet, and totally not wasting time.

    47. Re:Doomed by jsternberg · · Score: 1

      The statement about std::vector is... mostly wrong.

      http://www.cplusplus.com/reference/stl/vector/operator%5B%5D/

      operator[] does not do a runtime check, and will result in code that potentially segfaults if you do an out of bounds array access (similar to doing the same thing with a C-style array. The "at" function will throw an exception and signal an error.

      This isn't to say that you shouldn't use operator[]. I use it all the time, because I often already know the size of the array (I use iterators far more often than operator[] though). The fact that there is no check is one of the advantages of C++, as in Java, there is always a check that can't be disabled (thus effecting speed).

      You'll also notice this function returns a reference, not a pointer. It's impossible to pass a NULL with a reference in C++. No matter how you look at it, it's impossible for an access to a vector to return NULL. You either have "at", which throws an exception, or operator[], which gives you junk.

      As C++ is a systems language, this is fine and expected. As an application level language, this is unacceptable.

      The argument, "Look! I can do this and it's bad!" is because it's perfectly possible for the greatest programmer in the world to have an off-day and mess up. It's just a part of being human. It's nice when the programming language makes messing up harder to do, which C++ does not do well. That's why people say C++ is bad. The only current problem is that for the systems-level domain of highly efficient code, there aren't a whole lot of choices.

    48. Re:Doomed by Viol8 · · Score: 0

      "Of course you can write your 100 lines of C in a library and say "hey, I'm only calling a library", but in Python what you can do in one line of ad-hoc code can take 100s of lines of ad-hoc C code"

      Python is effectively 1 big C library given thats what its written in, so if you exclude using libraries from your argument then you can't use python to start with. High level languages are generally nothing more than a load of libraries rolled into an interpreter or runtime.

    49. Re:Doomed by koper · · Score: 1

      Aren't the basic programming concepts understood and defined now? All a new language can really bring to the table is a different syntax.

      I absolutely don't agree with that. Let me take an example from the area I work in and know a bit about: web development.

      Web development today is still extremely messy, with often a bundle of technologies (server-side language, client-side language, web framework, database) thrown in together and the developer having to deal with their different models and concepts.

      The company where I worked developed Opa (http://opalang.org) a single language for writing web apps. It unifies server-and-client coding in one coherent language that is translated to native code on the server and to JS on the client and the compiler handles all the communication between them. It has strong typing, which is also heavily used for security (essentially to prevent all sorts of injection attacks). Persistence (database) is also cleanly integrated.

      Just different syntax? I don't think so...

      (yes, of course there are competing similar approaches like node.js or, lesser known, Ur/web, but they are all cutting-edge and innovative and not just more of the same old).

    50. Re:Doomed by mestar · · Score: 1

      "The base language reads like a cross between Macro'd ASM and algebra. This IS the perfect syntax."

      lol what a stupid thing to say.

      smalltalk reads like an... actual sentence. that is the perfect syntax.

    51. Re:Doomed by Anonymous Coward · · Score: 0

      Where "built into language" means "implemented in hundred lines of C behind the scenes and included through the runtime library".

      Here, let me implement it in one line of C in same disregard-the-man-behind-the-curtain way:

      #include "hashtable.h"

    52. Re:Doomed by Viol8 · · Score: 1

      When you say "built into the language" you mean someone has done the hard work for you in the python C source code. So in theory you could pull that C code out of python, roll it into a library and call it from a small C program. Or does that not count?

    53. Re:Doomed by jythie · · Score: 1

      Pretty much. The only thing I have seen come out of new languages for a decade now is more syntactical sugar for automating things (which is not necessarily a bad thing) and lots of re-inventing the wheel.

      On the other hand, something that has been changing, and I am not sure if this is really for the better, is languages are bit by bit trying to include 'everything'... if language A has feature X and language B has feature Y, slowly A is getting Y and B is getting X, making languages more and more similar with the only real difference being stylistic and, more importantly, inability to run each other's code. Which is something I am finding increasingly frustrating since we are getting more and more languages, but fewer and fewer of them have ways to interact at a binary (as opposed to some kind of bridge) way... resulting in an increasing number of single-language ghettos. (I admit, part of my grrr there has to do with the difficulty of using code written in a non-web language in a web language).

    54. Re:Doomed by Surt · · Score: 1

      +1, and one that too many people underestimate. It's why ruby struggles, the IDE/toolchain sucks with the single exception of rails.

      And why I love Gosu:
      Syntax : powerful, yet comfortable (c/java derived and not 'out there' like scala)
      Access: calls into java, so a huge set of libs already available. ronin/tosa if you want to find out what rails could have been.
      Community: small (definitely its weakest point right now), but supportive
      IDEs and tools: oh yeah. Light years ahead of all the other '4th gen' languages.

      --
      "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
    55. Re:Doomed by mfnickster · · Score: 2

      What these "bad" languages provide are tools to do a TASK well.

      Agreed. The language is usually designed to do a task that the designer needs done, e.g. Larry Wall invented Perl to solve problems in that his available tools didn't do as well.

      Or at least, didn't fit his working style. It seems most languages are conceived to fit with the developer's working style, which makes sense as you usually prefer to use a tool that works well for you. If it works well for others too, so much the better.

      --
      "Slow down, Cowboy! It has been 3 years, 7 months and 26 days since you last successfully posted a comment."
    56. Re:Doomed by Surt · · Score: 1

      My experience maintaining c++ code suggests you may be incorrect about real c++ programmers carrying on and writing code that doesn't do that.

      --
      "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
    57. Re:Doomed by Anonymous Coward · · Score: 0

      Yes, someone has done the hard work for you in the Python runtime, just like when you start throwing around any C feature, someone has done the hard work for you in your C compiler.

      And of course your example doesn't count, because pulling the hash table libraries out of Python and using them in your C code is a hell of a lot more work than using them in Python. I mean, I could take the compiled version of that C code, disassemble it, and copy that asm into my own asm project, but I'd probably want to avoid that if at all possible.

      I swear, half the programmers here are masochists: they pick one level of abstraction to work with and then consider that to always be the correct one. Protip: sometimes you want to use a language like Python, and sometimes you want to use a language like C. Saying that one is better than the other under all circumstances is idiotic, it's like saying that a hammer is always better than a screwdriver.

    58. Re:Doomed by Anonymous Coward · · Score: 0

      Damn it, laughed too hard and accidentally hit Overrated. But you're AC, so I'm not wasting the rest of my mods in this thread to undo yours.

    59. Re:Doomed by Barbara,+not+Barbie · · Score: 0

      Where is the difference between "I can just compile, if I missed something I'll get warnings" and running the script? Zero.

      Really? So you'd rather wait until a user reports a weird bug that is oh-so-hard-to-duplicate because a type got changed on the fly? Not too smart.

      If all you know is how to write scripts, you're not a real programmer. Tsk, tsk.

      And if you use a compiled language for every single thing, you're incredibly leet, and totally not wasting time.

      Your "rebuttal" is anything but - I never said that you have to use a compiled language for every single thing. Real programmers have options that script kiddies don't. Ever hear of "the right tool for the job?"

      --
      Let's call it what it is, Anti-Social Media.
    60. Re:Doomed by Anonymous Coward · · Score: 0

      you could at least read the line you're quoting even if you don't read the whole post - he said "than *you* can do".

    61. Re:Doomed by oreiasecaman · · Score: 1

      "I can do more work in one line of Python than you can do in 100 lines of C"

      You must be a pretty lousy C programmer then. Python may be higher level than C but its not THAT mush higher.

      Maybe its a very very long line of code who knows!

      --
      This is a UDP joke, I don't care if you get it or not...
    62. Re:Doomed by Anonymous Coward · · Score: 0

      You forgot two to three frees.

    63. Re:Doomed by Anonymous Coward · · Score: 2, Funny

      There is a reason I use LISP when I'm doing natural language processing.

      Is it for the irony? Because I'd totally do it for the irony.

    64. Re:Doomed by Nursie · · Score: 1

      In comparison to languages like Eiffel, Haskell, and Ada, C and C++ are inherently buggy and unsafe. There is no point in denying that. That doesn't mean that they are not the right choice for some (or most, if you think so) projects.

      'Inherently buggy' does not equal 'easy to get wrong' in my book, sorry. It's also not 'inherently' unsafe for the same reason. I don't consider this any form of denial. If you want to say 'not foolproof', 'doesn't hold your hand', not the best tool for every job' or whatever else, go for it.

      There are better tools than C or C++ for a lot of jobs, I'm not that wedded to one way of doing things. Python, for instance, is good for RAD, for scripting and a whole bunch of other stuff. Javascript is 'good' for certain values of good in the web sphere, for creating rich client in-browser apps. Other languages have their niches and uses, or in some cases they don't. Most of them have a runtime or compiler written in C or C++.

    65. Re:Doomed by Terrasque · · Score: 1

      high-level languages allow you to escape the bounds of that kind of thinking (all programs reduce to how they execute) and think in terms of higher-level abstractions. And that is the whole point which the "everything boils down to C eventually" argument misses.

      Thank you! As one that really likes to work in python, I'll say that this is exactly the thing everyone miss!

      Whenever I see people who say things like "It's just with different syntax" 90% of the time they just continue writing that low level language with a different syntax.. Instead of actually using the new language strengths.

      The result can be a lot like this. And sure, that first code works, it solves the problem, and it kinda shows their point.. Done that way, it IS just a different syntax. And can probably be frustrating since you might bump into the language weaknesses, without seeing any of it's strength.

      Which, again, proves their point to themselves, and since people love to be right..

      --
      It's The Golden Rule: "He who has the gold makes the rules."
    66. Re:Doomed by Nursie · · Score: 1

      Oh believe me, I've had to maintain some utterly dreadful C and C++ in my time, and I have no trouble at all saying that the people that wrote that code should not be touching any language that allows you to do much more than draw a circle on the screen at a position of their choosing.

      Maybe after a couple of years of moving circles around they'll be allowed to pick the colour too. Maybe.

    67. Re:Doomed by Anonymous Coward · · Score: 0

      Bollocks.

      "new" (using the standard syntax) has always, and will always throw in standard C++ when unable to fulfil the request. The requirement of explicit activation is not a sign of poor support, but rather of long legacy.

      Exceptions are defined just as well as they can be: to this day, no one has come up with more an intuitive way of handling "double exceptions" than termination because it's very likely there isn't one. Fortunately, it's _very_ easy to trap all exceptions being thrown from destructors (and one should probably do so).

    68. Re:Doomed by Anonymous Coward · · Score: 0

      If you're parsing a complex data file several layers deep then error handling will make C code enormously complex. With C++ you just throw an exception and let stack unwinding free all the temporary data for you.

      You realise that C has setjmp()/longjmp(), and that until recently GCC still supported an "SJLJ exception" model (I.e. catch/throw are decomposed into setjmp()/longjmp()) when compiling C++?

    69. Re:Doomed by Johann+Lau · · Score: 1

      Really? So you'd rather wait until a user reports a weird bug that is oh-so-hard-to-duplicate because a type got changed on the fly? Not too smart.

      You use "on the fly" as if it meant "nilly willy". But it doesn't. If you trust user input, then that's the problem, not anything downstream from it?? And If you don't blindly trust input, what in the world would make types change in unpredictable ways? Give me one real example where that's actually a problem.

      Ever hear of "the right tool for the job?"

      Sure, that's why I just told you exactly that... while you seem to be telling me that it's generally preferable to use a compiled language so "types don't get changed on the fly", haha?

    70. Re:Doomed by Bill_the_Engineer · · Score: 1

      I think most of the criticisms come from the fact that you can easily do wrong, not that it isn't possible to do the right thing.

      PS: C and C++ are completely different languages, writing "C/C++" only shows your ignorance.

      You were making some interesting points then you dropped the ball with this comment. I've been programming C and C++ longer than many of the slashdot crowd have been alive. C++ is a superset of C. I admit I never understood the "C/C++" moniker since I interpret "C++" as C with OO extensions but evidently people like to treat them as two separate entities.

      While it is true I can make an application with purely C++ constructs, I often have to designate blocks of code as "C" since name mangling in C++ makes it difficult to do complex applications that required mixed languages.

      --
      These comments are my own and do not necessarily reflect the views or opinions of my employer or colleagues...
    71. Re:Doomed by Anonymous Coward · · Score: 0

      God what idiots fanboys can be.

      You do realize that Cristina Videira Lopes was one of the initial researchers ( along with Gregor Kiczales ) in aspect oriented programing? That she played a bnig role in the creation of AspectJ and probably has forgotten more about Lisp,CLOS and the CLOS MOP then you will ever know?

    72. Re:Doomed by Viol8 · · Score: 1

      You've completely missed the point. If someone has written a hash table library in C (which they have - google) then it won't be much harder to use or take many more lines of code on your part than the python equivalent.

    73. Re:Doomed by Rary · · Score: 1

      Go study something like Prolog*, then come back and tell me that all a new language can bring to the table is a different syntax.

      * I'm not suggesting that Prolog is a new language, just that it's representative of how a language can introduce completely different programming concepts.

      --

      "You cannot simultaneously prevent and prepare for war." -- Albert Einstein

    74. Re:Doomed by Anonymous Coward · · Score: 0

      I have an RIAA compiler, but I had to buy 16 other software products on the same DVD.

    75. Re:Doomed by Anonymous Coward · · Score: 0

      If you do C++ right then the only memory error you'll is a null pointer (just like super safe Java).

      Yes, but the syntax for C++ is complete and utter shite.

    76. Re:Doomed by shutdown+-p+now · · Score: 1

      Aren't the basic programming concepts understood and defined now? All a new language can really bring to the table is a different syntax.

      Not just that. What a new industry (as opposed to academical) language brings to a table is a cherry pick of features that, in the eyes of language designer, offers the best balance between power, conciseness, performance, promotion of good habits, and understandability by mere mortals. That's the purpose of Java, C# and the likes.

      More interestingly, the cherry pick actually changes with time as concepts become more mainstream. When Java was designed back in the day, they considered closures and decided against them; later on they've added a limited form of them - anonymous inner classes - but with a very verbose syntax, because conciseness was not viewed as important. C# 1.0 also ignored closures, for the most part, but it did add function types (delegates) and the ability to pass a method, optionally with a bound receiver, as a first class value - again, because that narrow feature was perceived as giving most practical utility while being understandable.

      Fast forward to 2005, when rapidly rising popularity of Ruby (due to Rails) and JS made a lot more people familiar with the concept of first-class functions and function literals - and C# 2.0 gets true closures (anonymous delegates), and then 3 years later C# 3.0 adds a terse syntax with type inference and expression bodies, Haskell style. Java is historically more conservative at adding language features, but even they have realized that closures are now truly mainstream, and it's time to have them supported.

    77. Re:Doomed by shutdown+-p+now · · Score: 1

      Python is effectively 1 big C library given thats what its written in, so if you exclude using libraries from your argument then you can't use python to start with.

      You do realize that there are many Python implementations out there, including some that output native code directly? In fact, one of them - PyPy - is itself written in Python.

      Even if we restrict ourselves to CPython, GP mentioned list and sequence comprehensions - how is that abstraction just a library?

      High level languages are generally nothing more than a load of libraries rolled into an interpreter or runtime.

      Yeah, and C is nothing more than a load of helper assembler subroutines.

    78. Re:Doomed by Xest · · Score: 1

      "Where is the difference between "I can just compile, if I missed something I'll get warnings" and running the script? Zero."

      What an absolutely terrible misunderstanding of the benefits of compiled code. You don't just get warnings with compilers, you get errors, which completely block compilation.

      Scripting languages do not give such errors until a user stumbles across them. The developer may or may not stumble across them when developing and so may or may not fix them before release, with a compiled language they must always be fixed for release.

      Your argument lies on the blatantly false premise that all compilers do is produce warnings and then proceed to produce compiled object anyway. Obviously that's not true, they produce errors, which prevent compilation.

      "And flexibility in regards to variables and types is only a problem if you lost track of what you're doing to begin with, and in that case I doubt more hand holding by the compiler will help."

      This basically screams "I've never worked on a large system, or had to take over someone elses code".

    79. Re:Doomed by Hentes · · Score: 1

      You complain about lack of innovation yet discard syntax changes as "ugly" and don't care about semantic changes as they all "compile to the same machine code". The fact that you are not interested in new things doesn't mean they don't exist.

      Does your language compile to the target? Does your language run and compile from your development host?

      When do you live? These problems are nonexistent. Real languages are all crossplatform (maybe except C#).

      To an extent, OOP is just a formalisation of things that function programmers have been doing for decades into a space-saving syntax.

      OOP is much more than that. True, can implement encapsulation in many languages like Javascript does, but that doesn't make it an OO language. The real power of OOP comes from inheritance and polymorphism, and the OO way of coding that focuses on the data rather than the algorithm.

      Similarly for other "paradigms" of programming.

      You have already mentioned logical(Prolog), but maybe you haven't heard of functional(Haskell), message-passing(Smalltalk) or stack-based(Forth) languages.

      Basically, if you wanted, you could rewrite a C pre-processor to compile any of those languages directly to C syntax, and vice-versa. There's nothing "new", just some "shiny" things.

      As C is Turing-complete, you can rewrite any language compiler in it, and true enough many new languages have compilers that produce intermediate C code. On the other hand, you can't rewrite an interpreted language in C.

      Things haven't moved on since C, really. Sure, we've prettied up the syntax, clarified some edge-cases, added some libraries, etc. but it's all just spit-and-polish on a language made in the 60's. The fact we use those slightly-cleaner versions for the vast majority of software today (including the compilers of most of those other languages) means that there really wasn't any huge paradigm shift, or change in the way we work, or need to move on.

      While it's true that most languages are still imperative, what we need is not a new low-level paradigm. Most low-level problems are already solved, the real advances are in higher-level concepts. Memory management, concurrency, modularity, persistance and portability are the things where the new languages are strong at.

      The only thing I think might change the way we work in quantum computing. That's going to need a serious rethink and redesign in order for people to "program" them effectively. But, you know what? I have a suspicion that the first practical languages for that will be "C with knobs on".

      Quantum computing will enable mass paralellisation and nonlinear programming. Many new languages are good at those, but C is not even close. I seriously doubt that there will be a C-like language for quantum computing.

    80. Re:Doomed by shutdown+-p+now · · Score: 1

      "new" may or may not throw exceptions

      Stock "new" always throws std::bad_alloc when it fails, unless used as new(std::nothrow), or you overload it. Many compilers allow changing its behavior to return null instead, but this is not permitted by C++98, so when you use a compiler in such mode, you're not dealing with standard ISO C++.

      What C++ needs (and perhaps this is in C++0x) is a better definition for exceptions, one that does not cause programs to abort (which is even worse than checking return values)

      Pretty much every other language aborts the program if it's unhandled. The general rule is that, if something unprecedented happens in your code that you did not expect, which strongly indicates that your data is in an unknown and a potentially invalid state - like, say, an exception you didn't expect and therefore didn't handle - the best thing to do in most cases is to fail fast and hard, so that it is very clear that things went wrong, and also the precise point at which they did.

      If you are rather complaining about exceptions leaking from destructors crashing everything, that is also not really a C++ specific problem, it's just that other languages make different (but also bad) choices. Throwing in destructor in C++ is, effectively, equivalent to throwing in a finally-block in Java while stack unwind due to another exception is already in progress. If you don't fail fast as C++ does, you have to discard one of the exceptions entirely, and only bubble up another - which is what Java does. This is also pretty obviously bad, since by the time you catch whatever came out from the finally-block, you've lost the original exception. Hence why good practice in Java is similar to the one in C++ - if an exception can be thrown in finally, catch it right there.

    81. Re:Doomed by Xest · · Score: 1

      It's a disease I like to call noobitis, and if I'm honest, I suffered for it myself for sometime.

      It stems from the recognition that many of the most popular languages - C#, PHP, C, C++, Java etc. all have the same basic constructs like for, if, while, and so on that let you do the same things across each language. With these basic statements you can do a lot, everything you'd probably expect to do as a novice developer.

      But as you state, there are more to languages - even those that share similar syntax as those listed above, things like lambdas, LINQ, expression trees and so forth in C# add a lot of additional tools that aren't available in some of the other listed languages (though that's changing of course with new versions).

      The viewpoint is one that demonstrates a novice programmer who doesn't know as much as he thinks he knows. It's a trait born of the fact that you can actually hack away with the basic common fundamentals of such languages and get roughly what you want, it's naivety towards the fact that these languages have many tools that go beyond that, that let you do what you wanted to do more efficiently and better.

      With a move towards more multi-threaded programming due to the rise of the cores, it's only becoming more and more prominent - different languages and toolsets are offering different solutions to the multi-threaded problem, and whilst you could use pre-existing libraries just as easy using the basic tools available, you'll fail to take advantage of the fact that the new multi-threaded support in languages will let you write code that is much less bug free, likely more efficient, and do it faster to boot.

      If you're one of those people that thinks that pretty much all languages are the same, then do yourself a favour - consider that you might be wrong, and pick up an advanced book for your language, such as C# in Depth if you're a C# dev, or books on things like template metaprogramming if you're a C++ dev, or just learn about things like lambda expressions, hell, learn scheme even. You'll soon realise that there's a whole world of features out there that you wish you'd known about and used all this time. You'll kick yourself for thinking you'd reached some level at which point there's simply no more to learn - there's always more to learn.

    82. Re:Doomed by shutdown+-p+now · · Score: 1

      operator[] does not do a runtime check, and will result in code that potentially segfaults if you do an out of bounds array access

      To be more specific, invoking operator[] with an out-of-bounds index results in "undefined behavior" per spec. This means that a particular implementation can do a runtime check - it's just that people generally expect them not to, because in C++ you're supposed to get the fastest possible thing by default, and explicitly ask for extra checks only when you need them.

      That said, some implementations still do out-of-bounds and invalidation checks when compiled in "debug mode" - e.g. VC++ does that for all STL containers and also for iterators.

    83. Re:Doomed by shutdown+-p+now · · Score: 1

      The problem isn't that it's easy to circumvent. The problem is that you can circumvent it with code that looks completely normal.

      C++ 101 is that any presence of a C-style cast automatically makes the code suspect. So it certainly doesn't "look completely normal" to a good C++ programmer.

    84. Re:Doomed by Anonymous Coward · · Score: 0

      C++ is a superset of C

      Really? So this is valid C++ code?

      void foo(int num) {
              int variableArray[num];
      }

    85. Re:Doomed by Anonymous Coward · · Score: 0

      Can I find a programmer please who can program without being dependent on an IDE?

    86. Re:Doomed by phantomfive · · Score: 1

      My main problem with C++ is it's huge, and because it's full of 'gotchas' can take a while to learn to program in a way that avoids all the problems.

      And then once you've figured it out, you need to work on someone else's code, who has a completely different way to avoid all the problems, which you then have to spend more time learning. And that is assuming you are working with other people who are competent. If they aren't, then you have a whole other mess of issues.

      --
      "First they came for the slanderers and i said nothing."
    87. Re:Doomed by Barbara,+not+Barbie · · Score: 1
      Again, you need to work on your language comprehension, instead of putting words in my mouth and setting up straw men.

      Here's what you claim I'm saying:

      while you seem to be telling me that it's generally preferable to use a compiled language

      That's not what I wrote. Indeed, I went out of my way to write:

      I never said that you have to use a compiled language for every single thing

      in my last reply.

      All this shows is that people who think scripting languages are all you need are retarded.

      --
      Let's call it what it is, Anti-Social Media.
    88. Re:Doomed by Johann+Lau · · Score: 2

      What an absolutely terrible misunderstanding of the benefits of compiled code

      Try to keep up. The person I replied to argued that scripting languages make for lazy programming, and generally acted as if void pointers and casting types were totally unheard of, and as if types changed on the fly out of nowhere, without any connection to what is going on in the program.

      You don't just get warnings with compilers, you get errors, which completely block compilation.

      ORLY? You don't say. Way to miss the point: If the compilers offers more checks for well formed code, if anything *that* would make people more lazy.

      Scripting languages do not give such errors until a user stumbles across them.

      Neither do compiled languages, if what you do is technically correct, but still a bug in the context of the app.

      Your argument lies on the blatantly false premise that all compilers do is produce warnings and then proceed to produce compiled object anyway.

      What? You're just babbling. What argument am I making? I'm simply refuting an argument someone else is making, and I don't see you addressing any of that, you just go on about strawmen and endulge in more of the pitiful ad-hominems. Oh noes, the "real programmers" are speaking... it's just that they're not saying anything.

      This basically screams "I've never worked on a large system, or had to take over someone elses code".

      Yeah, and? Did I claim otherwise? No, I just called bullshit on bullshit statements. You on the other hand cannot even keep up with a discussion on Slashdot :/ I guess it's the lack of type checking that makes you fail so hard ^^ Bad code is bad code, you can produce unmaintanable code in just about any language you could mention. It's just unmaintanable code where you always know an int is going to be an int, awesome.

    89. Re:Doomed by Johann+Lau · · Score: 1

      No example then. Figures.

      And just because I'm calling you out on your bullshit, doesn't mean I think scripting languages are "all you need", wtf. I mean for starters, there's usually a compiler behind it that creates the VM.

      I never said that you have to use a compiled language for every single thing

      Yet you moan about them, without any context or point...

    90. Re:Doomed by Anonymous Coward · · Score: 0

      The monologue is in no way justification to avoid exceptions. Exceptions are vastly superior to return values - so long as they truly are exceptions. The rule is, only use destructors to, surprise, destruct your class. Which basically means, uninitialize whatever was initialized in the constructor and perhaps free any associated resources acquired duing runtime. Done properly and sanely, exceptions are vastly superior to return values.

      One of the big problems with exceptions is that people use them improperly, where I'll cite your example as an example. I've even seen code where people tried to use exceptions as a return value, whereby the normal code path was triggering an exception. That's such a bad idea on so many levels. And its not like I'm making this stuff up. Proper use of exceptions has been well documented for over a decade now. For someone to be making such silly mistakes says tons about how innept a programmer they are and almost nothing about the language. That's not that far removed from placing a nail in your teeth, and hitting the back of your head with a hammer to drive the nail in. At no point is the hammer or nail part of the problem. And once you remove the idiot and his teeth from the equation, the hammer and nail are still the primary elements of a solution.

    91. Re:Doomed by Fnord · · Score: 1

      I keep trying IDEs and have yet to find one that I work faster in than emacs and command line tools.

    92. Re:Doomed by Barbara,+not+Barbie · · Score: 2

      Simple example - "automagic" unicode translation in perl - the only way around it was to write a program in c to crawl 40 gigs of data and manually get rid of the foreign characters.

      --
      Let's call it what it is, Anti-Social Media.
    93. Re:Doomed by Anonymous Coward · · Score: 0

      Java doesn't solve problems programmers actually have? Say what? I think one of the largest programming communities and ecosystems out there would disagree with you.

    94. Re:Doomed by Anonymous Coward · · Score: 0

      I'd say that the Eiffel Tower would be an awesome house. Great view, Great location, easy to add security to keep the burglars out. The house would be so awesome that you can charge admission to your guests!

    95. Re:Doomed by sjames · · Score: 1

      You must be a pretty lousy C programmer then. Python may be higher level than C but its not THAT mush higher.

      In some cases, the ratio really does approach 100:1. Getting to that requires some fairly elegant Python programming, but it can happen.

      In MOST cases, the ratio isn't that high, but Python is inevitably more compact and contains a lot less distracting low level stuff.

    96. Re:Doomed by sjames · · Score: 1

      And C is little more than a really sophisticated macro assembler (at least until implementation details like optimization are considered). The second C compiler might have been written in C, but the first one couldn't be.

      The power of C over a macro assembler and of Python over C is in the syntax we use to specify the "library calls" and how effectively the distracting and uninteresting details are kept out of the way.

      Meanwhile, a macro assembler is just a really sophisticated hex editor.

      It turns out all those Xs that are really just very sophisticated Ys are really useful.

    97. Re:Doomed by blueforce · · Score: 1

      As an aside, .NET lacks here, and massively because there is no spirit to make libraries available to others for free causing a non-availability of free libraries.

      Gonna have to disagree with you on that point. The .Net languages, runtime, and framework libraries are all included in the .Net / Windows SDK and it's freely available: http://www.microsoft.com/downloads/dlx/en-us/listdetailsview.aspx?FamilyID=6b6c21d2-2006-4afa-9702-529fa782d63b You can download and install the SDK and start coding right away.

      Don't confuse Visual Studio with the languages / framework.

      Even if you're referring to the availability of free-as-in-beer/speech libraries there are quite a few of those on CodePlex, GitHub, and CodeProject, depending on what you need.

      --
      If you do what you always did, you get what you always got.
    98. Re:Doomed by betterunixthanunix · · Score: 1

      Many compilers allow changing its behavior to return null instead, but this is not permitted by C++98, so when you use a compiler in such mode, you're not dealing with standard ISO C++.

      Thank you for the clarification, I mispoke on that point.

      If you are rather complaining about exceptions leaking from destructors crashing everything, that is also not really a C++ specific problem, it's just that other languages make different (but also bad) choices

      I think there are better ways; in Common Lisp, you can catch exceptions before the stack is unwound, which basically solves this problem (a simpler exception handling mechanism that is similar to C++ and Java is available too, which follows the Java semantics for finally/unwind-protect exceptions). The problem with C++ and Java (and related languages) is that the stack is unwound as part of the process of entering the exception handler; this is not the only way to do things.

      --
      Palm trees and 8
    99. Re:Doomed by shutdown+-p+now · · Score: 1

      I think there are better ways; in Common Lisp, you can catch exceptions before the stack is unwound, which basically solves this problem (a simpler exception handling mechanism that is similar to C++ and Java is available too, which follows the Java semantics for finally/unwind-protect exceptions). The problem with C++ and Java (and related languages) is that the stack is unwound as part of the process of entering the exception handler; this is not the only way to do things.

      So far as I can see, catching an exception before stack is unwound means that you need some form of spaghetti stack (since, on one hand, you have the original stack, and, on the other, you have the stack frame in which the exception handler executes, and said handler can spin off further frames by calling other things). That would require some non-negligible overhead even for the more common no-exception case.

    100. Re:Doomed by bbn · · Score: 1

      I've yet to find anything "you simply can't do" in C, as this would imply it's not possible in any language.

      A common mistake. C is not assembler. Obvious things not possible in C but very possible in assembler: Function calls using a different ABI, most types of garbage collection memory allocation strategies, automatic stack descriptors for use by said garbage collectors and some exception handler schemes and probably loads of other stuff I just haven't run into yet.

      Also C is pretty bad for optimizing compared to other languages. This is due to the fact a pointer can do just about anything, which takes away guarantees other languages would be able to provide to the optimizer. C might be better at _manual_ optimizing than most other languages except assembler.

    101. Re:Doomed by Grishnakh · · Score: 1

      The other big problem is that Python is an interpreted language, so that really kills the speed by itself. What'd be helpful is if they made compiled versions of many interpreted languages, like the GCC project did with gcj for Java. Interpreted languages have some advantages, such as rapid development (you don't have to recompile it every time you make a change), and very easy modification (it's distributed as source code, so it's easy to go in and change something if you want, rather than setting up a build environment and downloading a ton of -devel packages for all the libraries used), but their performance is generally horrible. For many things, that doesn't matter that much; for simple scripts and such, you just won't notice the difference. Even for websites, PHP works pretty well because the things it's asked to do aren't all the complex. But when you try developing large, comprehensive application programs in an interpreted language like Python, the performance is horrible, and they're noticeably much slower than comparable applications written in C++.

    102. Re:Doomed by Grishnakh · · Score: 1

      The nice thing about C++ is its flexibility. You can take C code, add a few C++ constructs, and get it to compile and work file (as C++ is a superset of C). You can do full OOP with it. You can use extra libraries like Qt and make it much better for application development, while still being able to get yourself in trouble with other parts of the language. C++ is a bit like Perl: there's lots of ways to do the same thing. If you restrict yourself to a subset of the things available, you can do things very safely and maintainably. But there's always that potential for screwing things up.

      But for developing applications, there just don't seem to be many alternatives that offer the performance and compatibility of C++. There's Python, but the performance is utter crap because it's interpreted. There's Java, but the performance again is crap (but not as bad as Python), because it's compiled to bytecode and run in a VM (plus, Java is ridiculously verbose). There's C#, but that pretty much restricts you to Windows platforms (you can use Mono, but it isn't very popular, and consequently there aren't many other libraries and other support for it), and you still get the same performance problems as Java. If you want high performance (i.e. natively compiled) applications that can be compiled on just about any platform, C++ is it.

    103. Re:Doomed by Anonymous Coward · · Score: 0

      But what does the finest Haskell help me if I can't access a CD, Bluetooth or a XMPP server...

      Well, yes, one should choose the right tool for the job. If you have boring things (like accessing a CD) to do, by all means choose a boring langauge.

      I chose Haskell for my last project -- exploring fractal structures in interated Hypercomplex equations -- and Haskell worked like a charm. And it worked well for the previous one too (three-dimensional CA based on sphereical close-packing geometry).

      True stories!

    104. Re:Doomed by bbn · · Score: 1

      This isn't to say that you shouldn't use operator[]. I use it all the time, because I often already know the size of the array (I use iterators far more often than operator[] though). The fact that there is no check is one of the advantages of C++, as in Java, there is always a check that can't be disabled (thus effecting speed).

      Modern languages have very little overhead for boundary checks. The compiler will move the check out of loops and thus effectively optimize it away.

    105. Re:Doomed by Anonymous Coward · · Score: 0

      What you're missing is that JavaScript was inspired by Java, Self, and Scheme (a derivative of LISP). Did you know that if you use newlines correctly, you can omit most of the semicolons? They're only really required when you want multiple statements on the same line. This comes from the influence of Scheme.

      Now, the intent may be to make JavaScript look more like a common language (e.g., Java), but that doesn't mean they're the same. Just because a syntax looks the similar doesn't mean the language is functionally equivalent.

    106. Re:Doomed by aztracker1 · · Score: 1

      As to your aside... I've yet to find something in the .Net universe that doesn't already have a library available (freely), often open-source. Beyond that, the ease in which to access C-based libraries makes it very suitable for those types of integration points. That said, may NodeJS rise to smite all others in userspace development. ;)

      --
      Michael J. Ryan - tracker1.info
    107. Re:Doomed by steelfood · · Score: 1

      I think it's a fundamental misunderstanding of the difference between what you can express, and how to express it.

      Most languages can express the same things, as long as they're Turing complete. In fact, that's the definition of Turing completeness. Of course, not all languages are Turing complete, so those that aren't won't be able to express everything that a Turing complete language will be able to express.

      Most of the differenciation between languages is how they express certain things. Sure, the same work software written in a functional programming language, say Haskell, does can be done in C++ with recursion and clever template usage. The real difference is in the complexity of the C++ code, vs. the complexity of the Haskell code. In Haskell, everything's done under the hood, so to speak, so that the programmer is presented with a clean, neat language to read and write. Lacking this ability to hide the intricacies under the hood, the C++ code that does the same thing, would neither be clean nor neat.

      What separates Haskell and C++ is the ease of expression for certain constructs. Some constructs are easier in C++, some are easier in Haskell. That's the real difference between all turing complete programming languages, and why there are so many different languages out there.

      --
      "If a nation expects to be ignorant and free in a state of civilization, it expects what never was and never will be."
    108. Re:Doomed by Half-pint+HAL · · Score: 1

      Implement interoperable components so you can mix and match the best of each breed.

      Well that's the thing, isn't it. Cross-calling isn't as easy in most current products as it could be -- just look at SQL handling in many languages: you end up collecting a big long string, call the SQL library then having to do all manner of casts and abstractions to get the answer into a useable form.

      But SQL should be simple, because it's not really a persistent thing, and you can handle queries OK as objects, but certain programming paradigms are fundamentally incompatible. Functional languages tend to "evaluate late" by passing about "curried functions". So that means that a procedural language interfacing with a functional language has to maintain that curried function -- it's not a matter of "call other language, get answer" any more. And then what happens when you pass that curried function to an object oriented language? Do you have to create a particular object CurriedFunction? Do you just use a non-specific Object *? How are you going to manage a destructor, and any other required properties or methods in your chosen language?

      --
      Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
    109. Re:Doomed by Half-pint+HAL · · Score: 1

      Not any more. C and C++ have both changed C++ 98 wasn't pure-C compatible, IIRC, particularly after C99, although C11 has attempted to bring back the cross-compatibility to an extent.

      --
      Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
    110. Re:Doomed by Bill_the_Engineer · · Score: 1

      Really? So this is valid C++ code?

      Depends what you mean by valid. The g++ compiler will not complain about your code segment and functions outside of classes are still valid C++. Maybe you are being sarcastic?

      --
      These comments are my own and do not necessarily reflect the views or opinions of my employer or colleagues...
    111. Re:Doomed by Half-pint+HAL · · Score: 1

      e.g. Larry Wall invented Perl to solve problems in that his available tools didn't do as well.

      Or at least, didn't fit his working style. It seems most languages are conceived to fit with the developer's working style, which makes sense as you usually prefer to use a tool that works well for you. If it works well for others too, so much the better.

      Which brings us neatly back to the question of academics vs hobbyists as language designers.

      The hobbyist imposes his personal working style on the product. As this working style is based on other environments, it will be familiar and "feel good" to other users of the other environments. However, it will impose the author's style. If the author's style is good, this will be a good thing. But if the author has a few favourite hacky "dirty" code techniques, they'll effectively become a fundamental feature of the language.

      Meanwhile the academic is likely to be trying to impose a clean coding style and he's trying to remove the hacks.

      But Joe Coder immediately sees the academic as "limiting" him instead of freeing him from bugs, and goes for the buggy, hacky amateur language....

      --
      Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
    112. Re:Doomed by Thing+1 · · Score: 2

      Scripting languages do not give such errors until a user stumbles across them.

      Well, "perl -c" processes a Perl script and reports any issues, without running it. This is similar to the errors and warnings you are expecting before deployment.

      --
      I feel fantastic, and I'm still alive.
    113. Re:Doomed by OeLeWaPpErKe · · Score: 1

      The problem with C# (and most microsoft languages) is the quality of the libraries. It's terrible.

      Which is a damn shame, because C# should allow very clever API designs.

    114. Re:Doomed by OeLeWaPpErKe · · Score: 1

      Simulating first-class functions is simple. There's 2 obvious ways : either you use macros (sadly, often done), or you pass along the variables needed.

      Lazy evaluation is another thing gnome often simulates. It works in the java version. Basically you return a function instead of just the answer, complete with the "who's going to free() this" problem.

    115. Re:Doomed by OeLeWaPpErKe · · Score: 1

      Well you're right. But I didn't say it would be fully functional, just functional-style.

      It's not just SSA form. That was the first such transformation getting implemented, a few years ago. These days it has a few brothers. It's also rewriting functions and loops into new forms that allow for vectorization. As for memory not being SSA, sadly that pretty much requires garbage collection. I've seen at least one compiler that does do that though.

    116. Re:Doomed by Anonymous Coward · · Score: 0

      Depends what you mean by valid.

      Valid means part of the language. Variable Length Arrays are not part of the C++ Language but are a part of the C99 language. There for C++ is not a superset of C.

      Q.E.D.

    117. Re:Doomed by OeLeWaPpErKe · · Score: 2

      I work at a company that does lots of work in python, and the level of frustration with it is astounding. Lots of people *are* implementing important stuff in python, and it's always greeted with much enthousiasm, and even more sighing. You see, python is slow. Due to how we work it takes about 3 seconds to start a python program (we basically use a pip + virtualenv clone that allows you to take the fully downloaded virtualenv and package it into an executable file), which is not much but irritating as hell. And iterating through a large dataset takes ages.

      The same routine, one that basically downloads a few tens of megabytes from the nearest datacenter was rewritten in C++. Why ? It's speed was about 2.6 MB/s (over a gigabit network). The C++ version was about 62 times faster (and faster inside the datacenter, where the rtt was much lower). And we have a java version that's also more than 50 times faster.

      While it wasn't impossible to optimize the python version, that made it ugly, and even our best optimizers couldn't get it above about 15 MB/s.

      "Language speed doesn't matter" - Sure it does. It basically makes it impossible to use your language for a big range of tasks. And it's such a shame. Python is a great language, strongly typed, with coding conventions that basically say "you must assign with static types", and structured in a way that almost all code can be compiled. And imho, what gives python it's power is the __* functions. It's much more like C++ with garbage collection than most people realize.

    118. Re:Doomed by Bill_the_Engineer · · Score: 1

      Variable Length Arrays are not part of the C++ Language but are a part of the C99 language.

      You may have it backwards. Variable length arrays are supported by C++ and wasn't supported by the C language until C99.

      --
      These comments are my own and do not necessarily reflect the views or opinions of my employer or colleagues...
    119. Re:Doomed by rk · · Score: 2

      I think you have that backwards. Good programmers know what to write; great ones know what to steal.

    120. Re:Doomed by Anonymous Coward · · Score: 0

      Nope. They were discussed for inclusion in C++11, but were dropped. They might be supported as vendor extension, like in g++ --std=gnu0x mode.

    121. Re:Doomed by Surt · · Score: 1

      It's because there's a (significant!) per-tool overhead. If I can use the same tool for everything I do, I can be much more efficient.
      Recognizing that there are limits to this and that a small number of tools is probably best is beyond most people.

      --
      "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
    122. Re:Doomed by softwareGuy1024 · · Score: 1

      IMO, C++ needs checked exceptions. Functions should declare any type they are going to throw, and the compiler should enforce that functions throw only declared types, and that all callers catch those exceptions. As it stands, the throw operator only creates a run time check, that by default exits the program if the wrong type is thrown (not very useful). Until it can be enforced a compile time so I can make sure everything is handled, I will avoid exceptions in C++.

    123. Re:Doomed by AuMatar · · Score: 1

      So, you want to write in COBOL all day? It actually is a sentence. It's also widely considered a really really bad idea. There's a reason why COBOL died, and why smalltalk is a joke language.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    124. Re:Doomed by betterunixthanunix · · Score: 1

      So far as I can see, catching an exception before stack is unwound means that you need some form of spaghetti stack (since, on one hand, you have the original stack, and, on the other, you have the stack frame in which the exception handler executes, and said handler can spin off further frames by calling other things). That would require some non-negligible overhead even for the more common no-exception case.

      I am not really sure why that needs to be the case. The exception handler itself can use a different stack, or it can just start at the top of the original stack, and can receive simply receive a pointer to the stack frame/instruction that should be returned to once the exception handling routine is finished. To support this, Common Lisp allows you to register a function as an exception handler; this function is called when the exception is caught, and the exception is an argument to the function.

      --
      Palm trees and 8
    125. Re:Doomed by shutdown+-p+now · · Score: 1

      I am not really sure why that needs to be the case. The exception handler itself can use a different stack

      Only if it's outside of the context in which the code which threw the exception was called. E.g. in Java or C++, you can return from the function or break a loop from within catch. It needs to be in the context of the original stack frame for that to work, or at least be able to restore it right before that point.

      or it can just start at the top of the original stack, and can receive simply receive a pointer to the stack frame/instruction that should be returned to once the exception handling routine is finished.

      That would work.

      Interestingly enough, I've realized that Win32 low-level exception model (SEH) already has something along these lines: when an exception is thrown, it walks the stack without unwinding it, and calls the so-called "filter" callbacks for every registered exception record. Those filters return a value that tells the stack walker to either use that particular exception record to handle the current exception, or else to keep walking the chain. The stack walker than unwinds all records up until the one located, and executes its callback. The intent is that actual exception occurs in the main callback after the unwind, and the pre-unwind filter is only used to determine whether exception matches what the block can handle. But, in practice, filter is just a function, and it can just as well handle the exception entirely inside its body.

      A similar facility exists in .NET, in form of exception filters, and is exposed in VB (as Catch ... When), but not in C#.

    126. Re:Doomed by Bill_the_Engineer · · Score: 1

      Either way, a divergence between C99 and C++ doesn't fully invalidate that C++ is a superset of C. It just means C99 is a fork. :P

      --
      These comments are my own and do not necessarily reflect the views or opinions of my employer or colleagues...
    127. Re:Doomed by Bill_the_Engineer · · Score: 1

      Found this in the last freely available draft of the C++11 standard Section 1.2:

      C++ is a general purpose programming language based on the C programming language as described in ISO/IEC 9899:1999 Programming languages — C (hereinafter referred to as the C standard). In addition to the facilities provided by C, C++ provides additional data types, classes, templates, exceptions, namespaces, operator overloading, function name overloading, references, free store management operators, and additional library facilities.

      --
      These comments are my own and do not necessarily reflect the views or opinions of my employer or colleagues...
    128. Re:Doomed by bill_mcgonigle · · Score: 1

      ad 2) But what does the finest Haskell help me if I can't access a CD, Bluetooth or a XMPP server...

      See also, "scriptability".

      ad 3) .... Also, this determines the amount of help and easy-to-access documentation. Which again makes a language popular or not.

      And in the case of an Internet-connected language, it's so much more. I still use perl a lot, not because of the syntax (which is OK, but sometimes a bit frustrating) but because of CPAN (the module collection), CPAN the software to install it, the RPM guys who care to package all that for me, the CPAN admins who ages ago got contributors to sign their packages, the perlmonks guys who always are eager to help, and the community that is intolerant of inconsistent interfaces and crummy performance. And not only intolerant about such issues, but willing to help make it better. "Lazy with a capital 'L'," as Larry says.

      I keep trying all the others and the new ones, but the lack of the above keeps me from jumping ship and becoming less efficient.

      If I use a different language, it's only because it's really so much better of a tool for the job, and then sometimes I'll still use perl for glue (just learned a new DSL yesterday and used this model...).

      --
      My God, it's Full of Source!
      OUTSIDE_IP=$(dig +short my.ip @outsideip.net)
    129. Re:Doomed by Anonymous Coward · · Score: 0

      We keep firing people with your attitude because they can't keep up with the team members who use modern tools. Oddly, they insist we're wrong even when we show them the numbers.

      One starts to think nerds of your stripe are delusional.

    130. Re:Doomed by TheLink · · Score: 1

      If you are writing a lot of stuff nobody has written before, it makes sense to prioritize 1) instead of 2). I'm just guessing that the great programmers will be doing more projects like that. e.g. testing some completely new AI paradigm, writing a new OS for new hardware.

      The rest of us writing "Yet Another Web App/Server" should prioritize 2).

      --
    131. Re:Doomed by TheLink · · Score: 1

      Oh yeah... Another reason to prefer a powerful/flexible or high performance language- when you are creating a new programming language (and haven't got to the self-hosting stage yet).

      --
    132. Re:Doomed by Joce640k · · Score: 1

      Stop obsessing over syntax.

      The point is: When you write C++ you think in an entirely different way then when you write C. You approach problems from an entirely different angle.

        (Or at least, you should...)

      --
      No sig today...
    133. Re:Doomed by Joce640k · · Score: 1

      The statement about std::vector is... mostly wrong.

      http://www.cplusplus.com/reference/stl/vector/operator%5B%5D/

      operator[] does not do a runtime check, and will result in code that potentially segfaults if you do an out of bounds array access (similar to doing the same thing with a C-style array.

      It's not required to...but in theory it can ... and in reality it *does*

      (on Visual C++ at least you have to explicitly turn it off and I'm betting only a small percentage of people actually do because they don't even know it's doing it).

      --
      No sig today...
    134. Re:Doomed by Joce640k · · Score: 1

      That said, some implementations still do out-of-bounds and invalidation checks when compiled in "debug mode" - e.g. VC++ does that for all STL containers and also for iterators.

      The latest versions of VC++ do it in release mode unless you explicitly tell them not to.

      --
      No sig today...
    135. Re:Doomed by Joce640k · · Score: 1

      The same is true of any language.

      Read The Daily WTF for while, you hardly ever see C++ on there (I'm not sure why, maybe it's because noobs don't try to use C or C++ any more...)

      The problem isn't the language, it's the programmers. We require licenses to install wiring or pipework in people's houses but any fool can pick up a compiler and call him/herself a programmer.

      --
      No sig today...
    136. Re:Doomed by Joce640k · · Score: 1

      PS: C and C++ are completely different languages, writing "C/C++" only shows your ignorance.

      You were making some interesting points then you dropped the ball with this comment. I've been programming C and C++ longer than many of the slashdot crowd have been alive. C++ is a superset of C. I admit I never understood the "C/C++" moniker since I interpret "C++" as C with OO extensions but evidently people like to treat them as two separate entities.

      It may be a superset from a syntactic point of view but the mindset is totally different. For proof just look at how many C programmers still seem to have an irrational hatred of all things C++ (eg. Linus Torvalds).

      --
      No sig today...
    137. Re:Doomed by Joce640k · · Score: 1

      My main problem with C++ is it's huge, and because it's full of 'gotchas' can take a while to learn to program in a way that avoids all the problems.

      I agree.

      And then once you've figured it out, you need to work on someone else's code, who has a completely different way to avoid all the problems, which you then have to spend more time learning. And that is assuming you are working with other people who are competent. If they aren't, then you have a whole other mess of issues.

      That's true of any programming language.

      --
      No sig today...
    138. Re:Doomed by Joce640k · · Score: 1

      LOL!

      Yeah, I really meant RAII...

      --
      No sig today...
    139. Re:Doomed by Joce640k · · Score: 1

      With C++ you can define a smart pointer type, use STL containers and strings and everything pretty much manages itself. With C you simply can't do that.

      Yes you can. It won't be as efficient or pretty, but a lot of the grunt work can be hidden with macros.

      If you're going to go down that road I have to ask why you're programming In C instead of assembly language - assembly language can do *everything*, right?

      When you have a nice clear answer, edit it to replace 'C' and 'assembly language' with 'C++' and 'C' and you'll have my argument for why I use C++ instead of C.

      --
      No sig today...
    140. Re:Doomed by Joce640k · · Score: 1

      Yes, I realize that.

      How does longjmp() free up all the little bits of memory you allocated in your file reader?

      --
      No sig today...
    141. Re:Doomed by Joce640k · · Score: 1

      If you're using exceptions at a 'global' level you're probably doing it wrong. Not as wrong as a BASIC programmer who uses "ON ERROR RESUME", but really there's not much you can do at that level.

      Exceptions should be much more localized, eg. for my 'file' example:

      try {
          magic_ptr p = readTheFile();
      }
      catch (std::bad_alloc&) {
          debug() "Not enough memory to read the file";
      }
      catch (...) {
          debug() "The file failed to load";
      }

      --
      No sig today...
    142. Re:Doomed by narcc · · Score: 1

      COBOL isn't even close to dead. The financial world runs on COBOL.

      Just for fun:COBOL: It’s Not About the Language

    143. Re:Doomed by narcc · · Score: 1

      There is a massive problem with checked exceptions: lazy programmers code around them to satisfy the compiler.

      See any Java project for an example. Java is a bit overzealous when it comes to checked exceptions, so you'll very often find large chunks of code wrapped in a try/catch that does ... absolutely nothing when an exception occurs save to ignore the error -- the modern equivalent of On Error / Resume Next.

      I'm willing to bet that checked exceptions have caused more harm than good.

    144. Re:Doomed by Xest · · Score: 1

      You still don't seem to get it, the fact is compilers reduce errors that might confront the user at runtime. They're not some magical foolproof solution, but they do produce more solid code on average simply by virtue of the fact that at least some major areas are forced to be caught and dealt with before the end product even reaches the client. You're still trying to make the implication that the amount of problems that can get past a compiler is equivalent to the amount of problems an uncompiled language will face which is blatantly not true.

      The reason there's a perception, rightly or wrongly, that scripting languages allow coders to be lazy is because the compiler forces you to deal with many classes of problem - you can't be lazy and just ignore them, whereas in scripting languages developers may simply do just that - ignore them and hope they don't cause a problem.

      There's also the point that in many scripting languages you don't declare your types, this means you can lazily stick any data anywhere which can have some large implications. Many compiled languages are statically typed and so you have to plan and declare your intentions for variables - this is another reason that builds the perception that interpreted languages breed laziness vs. compiled languages, because it often (but of course not always) is also a case of dynamic vs. static typing.

      "Yeah, and? Did I claim otherwise? No, I just called bullshit on bullshit statements."

      Re-read what you actually wrote, I'll requote it for you (what was that about not being able to follow a discussion?):

      "And flexibility in regards to variables and types is only a problem if you lost track of what you're doing to begin with, and in that case I doubt more hand holding by the compiler will help."

      I was pointing out that this makes no sense in the context of most professional development, I was calling bullshit on YOUR bullshit. If you think that there's no circumstance in which a talented programmer would be aided by being able to trivially keep track of what data, and what types of data are stored in what variables then you're merely demonstrating a massive lack of professional development experience. It's good that you admit that, but realise that in admitting that you're accepting you're an amateur trying to argue with vastly more experienced professionals.

      You're right that any language can have bad code, but the point still remains that with compiled languages there is a baseline as to how bad the code can be because the compiler enforces that baseline, whereas with scripting languages there simply is no baseline.

      There's a good reason companies like Microsoft have focussed on things like support for strongly typed views in ASP.NET MVC and so forth - because strong typing that allows for compile time checking simply allows for inherently less scope for problems to arise later on at runtime. The same simply cannot be said for a language like PHP even with some of the better frameworks like Zend.

      I'm not even arguing against scripting languages, merely pointing out that your arguments were dishonest and not based on the facts. You were intentionally ignoring important points to try and make your point and it was pretty blindingly obvious. That might work with the growing number of younger devs on Slashdot who were brought up in the PHP era, but those with a bit more experience in a wider variety of languages aren't that stupid.

      Still, stick to your O'RLY's, emotes and trolls if you want, that's a sure fire way to tell someone is out of their depth - when they have to jump to that kind of defensive reaction. I'm not sure why you really got so stressed about it, it's a post on Slashdot, not a big deal, I think you probably need to lower your blood pressure if you get angry and feel the need to troll when someone points out that you're wrong.

    145. Re:Doomed by Xest · · Score: 1

      Yep, which is a great feature, but not all scripting languages have this and even fewer developers use it when it is available. With a compiler you don't even get anything to execute until you've fixed the most glaring errors so it's enforced.

    146. Re:Doomed by Thing+1 · · Score: 1

      You sound like preaching. With a proper development checklist (every developer uses checklists, right?), the step would also be "enforced".

      --
      I feel fantastic, and I'm still alive.
    147. Re:Doomed by Bill_the_Engineer · · Score: 1

      It may be a superset from a syntactic point of view but the mindset is totally different.

      I refer to section 1.2 of the C++11 standard that I mentioned above.

      For proof just look at how many C programmers still seem to have an irrational hatred of all things C++ (eg. Linus Torvalds).

      Someone's personal preference isn't an indication on mindset of a language just that particular person.

      Anyway I wouldn't call it irrational. Maybe he doesn't like the performance hit caused by tree searches being done by C++ to resolve function and data addresses, or the larger code size that comes with supporting the additional functions C++ provides. I think it may actually be the fact that it's easier to have interrupt service routines in C than it is in C++ thanks to name mangling. Just because he has his reasons doesn't mean they are irrational.

      --
      These comments are my own and do not necessarily reflect the views or opinions of my employer or colleagues...
    148. Re:Doomed by Bill_the_Engineer · · Score: 1

      One more thing:

      It may be a superset from a syntactic point of view but the mindset is totally different.

      I would hope so since one is a functional language, while the other allows object oriented methodology to be used.

      --
      These comments are my own and do not necessarily reflect the views or opinions of my employer or colleagues...
    149. Re:Doomed by Bill_the_Engineer · · Score: 1

      I think it may actually be the fact that it's easier to have interrupt service routines in C than it is in C++ thanks to name mangling. Just because he has his reasons doesn't mean they are irrational.

      Name mangling makes it hard for other languages to use the libraries produced by C++.

      The interrupt service routines would require a static function that could be referenced by the vector table and coming up with a way for the static function to reference its object. In pthreads I usually pass a pointer to the object in the static function call, however you have no such luxury with ISR. I'm sure there a way, heck you can just write that portion in C.

      Anyway my coffee is kicking in and I wanted to make a correction.

      --
      These comments are my own and do not necessarily reflect the views or opinions of my employer or colleagues...
    150. Re:Doomed by Xest · · Score: 1

      I'm not preaching, just speaking from experience. I don't think I've ever heard of anywhere doing such a thing - as I say, many interpreted languages don't even have such a feature. If companies want that level of confidence in their code they just use a compiled language in the first place, interpreted languages aren't really designed for the sort of situation where you'd care about that level of confidence. As I say, some of the popular interpreted language don't even offer such a tool, so what exactly do you stick on your checklist then?

      Languages are always about the right tool for the job, interpreted languages just aren't the right tool for solid scalable applications - they're the right tool for rapid development, and certainly for prototyping but trying to hack them to work for something they're just not brilliant for is silly when a number of tools that are designed for the job are already out there.

    151. Re:Doomed by phantomfive · · Score: 1

      That's true of any programming language.

      In some ways that's true, but I've come to respect Java for what it is. It is designed to limit the amount of damage and ugliness people can do, and as long as the code mostly works, you can route around their ugly code without breaking things. I don't particularly like Java for my own projects, but if you are forced to work with a bunch of semi-competent code monkeys, Java is the way to go.

      --
      "First they came for the slanderers and i said nothing."
    152. Re:Doomed by shutdown+-p+now · · Score: 1

      The latest versions of VC++ do it in release mode unless you explicitly tell them not to.

      No, they don't.

      Some older versions of VC used to complain if you used the default STL algorithms rather than MS-specific "checked" versions, which do iterator checking - you might be thinking about that? But even so it was just a compiler warning (generated by #pragma warning from STL headers), you could still use the "unchecked" standard stuff. And the warning is gone since VC10.

    153. Re:Doomed by AuMatar · · Score: 1

      THere's a huge amountof existing applications being maintained in Cobol. Nobody is doing new development in it.

      --
      I still have more fans than freaks. WTF is wrong with you people?
    154. Re:Doomed by Nursie · · Score: 1

      That's a great strength and a weakness of computer programming - it's a strength because the tools are often free, the techniques public, and anyone can learn. A weakness because (as you point out) anyone can do it, without any training or guidance, and then can make a mess.

    155. Re:Doomed by Thing+1 · · Score: 1

      Well, I do agree about the experience part. Where I currently am, my scripting output is significantly better than the compiled language output of the developers, in terms of number of issues caused. But, I am older, have a rigorous methodology which includes checklists for myself, and I value my output. "Kids these days" just, well, don't; so if you are hiring people who do not have a good work ethic/development methodology and mentality, then yes, forcing them to always sit behind a compiler might make business sense. I also agree about the right tool for the job -- I disagree that a compiled language is always the right tool, that's all.

      --
      I feel fantastic, and I'm still alive.
    156. Re:Doomed by Xest · · Score: 1

      Finding good devs is a challenge in itself, sadly the reality is that sometimes you have to put up with less than ideal candidates and that becomes a factor in your choices of tools.

      One of the things I've been forced to learn over the years is that making architecture and development decisions is far from just about the technical merits of a solution, but all too often dogged in the politics and unfortunate realities of the environment you're working in. This may mean that whilst you don't want to make decisions based on the fact your devs are less than ideal, you're sometimes left with little choice.

      We've been trying to rectify this in recent years by recruiting fresh graduates with a genuine passion for software development rather than a skill in any specific technology so that we can start with a near blank sheet and better guide their careers to be far more useful to the industry than the second rate monkeys who went into software because it pays the rent, and don't particularly care beyond doing the bare minimum. It's working okay so far, I got a cruel satisfaction seeing some of said second rate devs quitting in a huff when the first batch of grads from a few years back got promoted past them due to simply having put in the effort to be better at their jobs :)

    157. Re:Doomed by Thing+1 · · Score: 1

      That strategy works great if you have "competent guiders". Sadly, many organizations have a "specific process" that is not very well defined or thought out, and teaching that to college grads (I have witnessed) is a frustrating experience for all parties. "Please be specific?" vs "Why can't you understand my ambiguous commands!!?!"

      And, while there is some satisfaction in seeing deadwood remove itself, my brain always tries to see it from all sides; perhaps management was putting more resources into "molding the new employees" and not enough into "(re-)training existing employees" and they saw the writing on the wall?

      I strongly believe that there is considerably more value in the experienced coder who costs 2-3 as much as the college grads. Generally, that individual provides ten times as much value -- simply in the experience of knowing what not to do, and communicating that to the junior coders. But there are young superstars; it isn't as easy to detect them, but I agree, once you know that you have one, nurture it.

      --
      I feel fantastic, and I'm still alive.
  4. C isn't dead...yet. by Anonymous Coward · · Score: 2, Interesting

    Well there is always been two sides of the medal balancing each other - convenience and performance, and i doubt it will ever change. And i think Ruby is really stands apart from other mentioned languages, a lot more sophisticated and carefully designed.

    1. Re:C isn't dead...yet. by durrr · · Score: 3, Interesting

      Convenient programming should be prioritized nowadays, most people at an entry level don't plan to code anything massive and performance critical anyway.
      While I do love ruby(and processing, and ruby processing) I think there's a lot of room for improvment in convenience, perhaps at a massive expense of performance, but most people have a core or two, or five sitting idle most of the time anyway.

      Ideally, programming should be a playground accessible to all, not like today where it's more of a military discipline camp accessible to all.

    2. Re:C isn't dead...yet. by TheRaven64 · · Score: 5, Insightful

      It's also worth remembering that performance doesn't mean the same as it used to. An Erlang program, for example, typically runs at about a tenth the speed of a C program doing the same thing... when you have one core. On the other hand, it's pretty easy to write Erlang programs that scale up to 1024 processors (I've written Erlang code that, without any special effort, scaled almost linearly when moved from my single-core laptop to a 64-processor SGI machine and the profiling data indicated that the load was still pretty evenly distributed between Erlang processes so going to 512 or more CPUs would have been easy). When even mobile phones are multicore, this matters a lot more than single-threaded performance. There are lots of things in C that make it very difficult to get good performance when you go beyond about 16 threads (e.g. no differentiation between thread-private and shared data, no immutable-after-creation data types) but which were not a problem for single-threaded performance.

      --
      I am TheRaven on Soylent News
    3. Re:C isn't dead...yet. by Anonymous Coward · · Score: 0

      I meant language semantics, implementation that's another story :) .

    4. Re:C isn't dead...yet. by alex67500 · · Score: 5, Insightful

      Ideally, programming should be a playground accessible to all, not like today where it's more of a military discipline camp accessible to all.

      I very strongly disagree. Good programming can't allow for lack of discipline. People who go for more "elaborate" languages, with loads of libraries available, should be forced to understand what goes on behind the scenes.

      I remember a researcher in a biotech company I used to work for, who tried to get help on forums on the Internet, and published parts of her ruby code (she'd had a 4 hour lessons of ruby once at university). The code included (read-only) account passwords to a research database and her own AD password in the company. Plus the variable names left little doubt as to what she was working on at the time.

      Bottom line is: she didn't know what she was doing, but someone trusted her with code, and put the company's research at risk. So no, programming is not a playground, it's a serious matter. And as far as you don't understand what a buffer overflow is (and a load of other things), your employer shouldn't allow you to code.

    5. Re:C isn't dead...yet. by durrr · · Score: 4, Insightful

      I did not advocate abolishing good coding practice or the "hard" languages, or intelligent thought.

      I mean there ought to be a programming language my little sister could use casually. An intially level and smoothly steepning ramp to ease users into the world of coding. Not the current case where it's pretty much a solid veritical wall that is only slowly chipped down.

      Example of inexperienced people doing stupid thing with professional grade stuff is common, your example is equivalent to some dense person in a workshop that ruins some woodworking tool by putting metal it in. Which is not an argument for banning all entry grade powertools. It's just an anecdote about a stupid guy, or girl in your case.

    6. Re:C isn't dead...yet. by bertok · · Score: 2

      Good grief... so you're saying that by using Erlang you need a minimum 20 cores to get a measly 2x speed-up over a single-threaded program, which is probably easier to write too?

      Multi-threaded programming is not unique to Erlang, writing parallel code in Java, C#, or even C++ is not exactly rocket surgery, so the comparison to strictly single-threaded code is unfair. I can get a program in any one of those languages to scale up to at least hundreds processors without breaking a sweat. Heck, any web application is automatically multi-threaded with both Java and C#, and with version .NET Framework v4.5 or later it can be trivially made asynchronous as well on top of that! You don't need a single lock or threading primitive of any kind to achieve that. If you want to get more advanced, all three platforms give you easy to use and powerful libraries to make multi-threading safe and efficient.

      It's only the crappy open-source platforms written by non-professionals that struggle to scale, which is why Erlang looks so good in comparison to a lot of beginner programmers, and why Node.js is so fascinating to them. Ooo... look... we've invented asynchronous calls, which is brand new and fascinating, because clearly nobody has ever done that before...

      The real benefit of Erlang is not speed, but reliability and online maintainability. It's designed for non-stop systems where uptime is more important than performance. This is explicitly stated in its documentation as the primary design goal of the language! Using Erlang to improve the performance of code is asinine. If speed matters, any of the three popular languages will run circles around Erlang.

      That fancy 64-processor SGI box of yours? You've lost 90% of its performance to Erlang's inefficiency, so I could get the same performance out of a 6-core computer with an efficient programming language. I have 6 cores in my desktop. I bet it cost a few digits less than your SGI box.

    7. Re:C isn't dead...yet. by Viol8 · · Score: 3, Insightful

      "There are lots of things in C that make it very difficult to get good performance when you go beyond about 16 threads"

      What on earth are you on about? The language has nothing to do with threading, thats down to the OS. The pthreads API on unix scales to any number of threads and if the threads arn't being spread evenly among cores than thats down to a problem in the OS kernel , not the C library.

      Also I suspect Erlang is a managed language and would therefor probably be pretty hopeless when used for multi process as opposed to multi threaded.

    8. Re:C isn't dead...yet. by TheRaven64 · · Score: 1

      It's only the crappy open-source platforms written by non-professionals that struggle to scale, which is why Erlang

      Uh, what? You realise that Erlang is from Ericsson and was specifically designed for high-availability systems? If you've made a telephone call in the last 10 years, odds are that at least one leg was routed by some Erlang code...

      --
      I am TheRaven on Soylent News
    9. Re:C isn't dead...yet. by TheRaven64 · · Score: 4, Informative

      What on earth are you on about? The language has nothing to do with threading, thats down to the OS

      Nonsense. Well, sure, if you have 1024 threads doing totally unrelated things then the language doesn't matter, but then you may as well be using separate OS processes and getting some isolation for free.

      Back in the real world, threads need to communicate and they need to share data. How the language represents this has a massive impact on scalability.

      --
      I am TheRaven on Soylent News
    10. Re:C isn't dead...yet. by gl4ss · · Score: 1

      It's only the crappy open-source platforms written by non-professionals that struggle to scale, which is why Erlang

      Uh, what? You realise that Erlang is from Ericsson and was specifically designed for high-availability systems? If you've made a telephone call in the last 10 years, odds are that at least one leg was routed by some Erlang code...

      from the paren-parentt: "The real benefit of Erlang is not speed, but reliability and online maintainability. It's designed for non-stop systems where uptime is more important than performance. This is explicitly stated in its documentation as the primary design goal of the language! Using Erlang to improve the performance of code is asinine. If speed matters, any of the three popular languages will run circles around Erlang."

      the point of the rebuttal was that erlang is no magic bullet that would make your linear problem get solved faster with more parallel cpu's and that parallel problems are easy to share over multiple cpu's in plenty of languages. basically that 64 cpu sgi box was still just running at 1/10th of what it would have with even a friggin java implementation.

      --
      world was created 5 seconds before this post as it is.
    11. Re:C isn't dead...yet. by bertok · · Score: 1

      I phrased that part of my point somewhat poorly: my point was that Erlang looks good to programmers used to shitty languages like PHP. Erlang itself is a good language that is well designed for a specific task.

      When you're used to using only a single blunt instrument, everything looks better in comparison, even a tool that's still not the appropriate one for the task at hand.

    12. Re:C isn't dead...yet. by lars_stefan_axelsson · · Score: 2

      What on earth are you on about? The language has nothing to do with threading, thats down to the OS. The pthreads API on unix scales to any number of threads and if the threads arn't being spread evenly among cores than thats down to a problem in the OS kernel , not the C library.

      Not even close. Erlang even uses it's own threading model since Posix threads are much too heavy weight. You can have (perhaps) a thousand threads, but hundreds of thousands; forget it. And a typical "telecom router" (like the AXD 301) Erlang implementation typically has a million or more running.

      Also I suspect Erlang is a managed language and would therefor probably be pretty hopeless when used for multi process as opposed to multi threaded.

      I don't know what you mean exactly by "managed" here, but no. Erlang was built for dependability, i.e. situations where you need more than one computer. It's built on message passing, and hence works just as well (or badly) all the way to the receiving thread being on another computer across the internet. The difference being that since it's functional and message passing is part of the language, it actually works and gets used. That's why we've seen some pretty amazing scaling at i.e. Ericsson, just by adding more computers/cores.

      You'd do well to actually surf over to www.erlang.org and read some of the papers/reports on performance etc. I.e. while it's typically (much) slower than e.g. C on micro benchmarks, it's much faster on real application size projects. (The same as assembly was faster in micro benchmarks in the eighties and C was faster when it came to whole programmes.)

      That said. These projects *also* contain a lot of C, it's just used where it's good, i.e. for device drivers and stuff like that. Not code with any "intelligence" in it.

      --
      Stefan Axelsson
    13. Re:C isn't dead...yet. by JoeMerchant · · Score: 1

      And as far as you don't understand what a buffer overflow is (and a load of other things), your employer shouldn't allow you to code.

      I code mostly in C/C++, I know full well what a buffer overflow is, that doesn't mean that I don't appreciate libraries (tantamount to languages, in my opinion), that do garbage collection, protect me from buffer overflows and otherwise take care of the obvious stuff without effort on my part.

    14. Re:C isn't dead...yet. by Tacvek · · Score: 1

      The key though is that programmers will generally take the path of least resistance. So while it is theoretically possible to write C++ code that uses the same concurrency model as erlang, it is far more work to do so than the "simpler" shared variables/shared memory based communication commonly found in C++ programs (which generally requires complex locking logic, and has somewhat higher risk of bugs).

      Also it does not help that C++ does not make it easy to enforce strict adherence to the erlang concurreny model (or pretty much any model except the raw shared variables/shared memory model), and thus it is easy to inadvertently end up with a prrogram that has mixed models and thus has difficult to track down bugs.

      --
      Stylish sheet to fix many problems in Slashdot's D3: https://gist.github.com/801524
    15. Re:C isn't dead...yet. by JoeMerchant · · Score: 1

      There are lots of things in C that make it very difficult to get good performance when you go beyond about 16 threads (e.g. no differentiation between thread-private and shared data, no immutable-after-creation data types) but which were not a problem for single-threaded performance.

      So, extend C(++) with libraries that perform those functions, or spend 3 months "researching available languages" to try to understand which ones do what you want, or an extra 6 months "creating a language" that essentially does the same thing you could accomplish with good set of library functions.

    16. Re:C isn't dead...yet. by JoeMerchant · · Score: 1

      Ideally, programming should be a playground accessible to all, not like today where it's more of a military discipline camp accessible to all.

      Say what? A new PC costs about a 40 hour paycheck from McDonalds? When I bought my first computer it was more like 300 hours of minimum wage pay, and let's not even try to guess at the performance difference here 30 years later.

      If you want to program, buy your own hardware, take your own time and do it. Compilers, instructional texts, and support forums are available for a $15/month internet access fee.

      If you don't like the "military discipline camp" feel of wherever you are, just do it yourself. It's easier to freelance program while waiting tables to pay the rent than it is to try to get a start as a (take your pick) actor/actress, artist, stock broker, etc. etc. etc.

    17. Re:C isn't dead...yet. by foniksonik · · Score: 1

      Node is gaining popularity because developers focused on web facing applications can write both client and server in the same language. It's a vote for convenience while attempting to address performance and scalability (don't know enough about Node to judge their success).

      Microsoft has tried the same with Silverlight. It wasn't accessible enough.

      --
      A fool throws a stone into a well and a thousand sages can not remove it.
    18. Re:C isn't dead...yet. by umghhh · · Score: 1

      well it helps if language provides some help in form of structures and mechanisms but w/o them it is also possible and not that difficult at least if you know what you are doing. I use ancient language currently (probably older than c++) that was designed to do parallel processing and it does exactly that without concept of those threads that people are so hot about. Threads appears far below in VM to which me moved from dedicated processors that we used before. Not fancy but it works. The only concern is productivity but considering how scalable the system really is I wonder if other languages are something more than a silver bullets that are flying around every now and then.....

    19. Re:C isn't dead...yet. by JoeMerchant · · Score: 2

      I mean there ought to be a programming language my little sister could use casually. An intially level and smoothly steepning ramp to ease users into the world of coding.

      MIT Scratch

    20. Re:C isn't dead...yet. by Anonymous Coward · · Score: 0

      From the NPTL announcement (Linux Native Posix Threading Library) in 2002 (Pentium 2 era):

      "Even on IA-32 with its limited address space and memory handling running 100,000 concurrent threads was no problem at all."

    21. Re:C isn't dead...yet. by Viol8 · · Score: 1

      "Back in the real world, threads need to communicate and they need to share data"

      Which is down to the OS process model. Get a clue FFS.

    22. Re:C isn't dead...yet. by Anonymous Coward · · Score: 0

      I mean there ought to be a programming language my little sister could use casually. An intially level and smoothly steepning ramp to ease users into the world of coding. Not the current case where it's pretty much a solid veritical wall that is only slowly chipped down.

      I would look for one of the Basic flavours then.
      I recall that Blitz Basic for the Amiga was pretty much what you are asking for. Perhaps the modern PC-port is similiar.
      It allowed you to write things in basic using nice prepared objects where the basic handled the garbage colection and everything. Internally the objects used the same structure as the rest of the system so they could be passed on to standard system routines once you started to use them.
      It also supported inline assembler and a debugger/memory monitor and an easy interface to move data between basic variables and CPU registers.
      If I recall correctly even some commercial games like Worms were written in Blitz.

      Could be worth having a look at Blitz Basic and see if it still is easy to get started with.

    23. Re:C isn't dead...yet. by Viol8 · · Score: 1

      "Erlang even uses it's own threading model"

      If those are real threads as opposed to the runtime doing timeslicing itself, erlang at some point it'll still have to interact with the OS threading subsystem. And when it does it'll still be down to the OS to decide what thread runs where.

      "Posix threads are much too heavy weight."

      I'm not sure what you mean by heavyweight - on unix they're just a wrapper over the OS ABI.

      "And a typical "telecom router" (like the AXD 301) Erlang implementation typically has a million or more running."

      Apples and oranges. A telecom router will be running a specialised OS which is probably tightly intergrated with erlang. You won't be getting that sort of threading out of erlang on an x86 running windows or linux. If you put C on that router you'd probably get the same performance.

      "These projects *also* contain a lot of C, it's just used where it's good, i.e. for device drivers and stuff like that. Not code with any "intelligence" in it."

      Plenty of intelligent systems are written C/C++ - eg high speed trading. Sounds to me like you've spent too long in an ivory tower.

    24. Re:C isn't dead...yet. by Hatta · · Score: 1

      That's not a problem with people being unable to code well. That's a problem with people leaking sensitive data. Dumb mistake, but hardly a reason to forbid people from coding.

      --
      Give me Classic Slashdot or give me death!
    25. Re:C isn't dead...yet. by Anonymous Coward · · Score: 0

      Someone who can't keep passwords a secret is unlikely to understand what a buffer overflow is...not that buffer overflows have anything to do with publishing your password.

      I'm shocked that a researcher in biotech could do something that stupid.

    26. Re:C isn't dead...yet. by lars_stefan_axelsson · · Score: 1

      Apples and oranges. A telecom router will be running a specialised OS which is probably tightly intergrated with erlang. You won't be getting that sort of threading out of erlang on an x86 running windows or linux. If you put C on that router you'd probably get the same performance.

      Nope, it's Linux. The mapping/slicing of Erlang thread to OS thread is indeed done by the Erlang runtime. And you most definately will get that amount of threading. Otherwise you wouldn't be using your cell phone.

      Plenty of intelligent systems are written C/C++ - eg high speed trading. Sounds to me like you've spent too long in an ivory tower.

      Didn't say they hadn't. Said that they weren't the best tool for the task. (Given a certain set of requirement of course.) I am saying that using a tool (Erlang) that was developed to build these kinds of large scale multiply redundant systems given the very considerable experience of how to build such systems is most probably the right tool.

      And I don't get the "Ivory tower". That's usually reserved for academia. Erlang is industry, through and through. Started there and stayed there. And I have experience of all the tools you mention. I've worked as both a C/C++ programmer and an Erlang one. You obviously don't know much about Erlang.

      Again. You need to read; e.g. Joe Armstrong's thesis , or his blog or something. (Don't worry, he's not an "academic" he got his thesis years *after* having developed Erlang.

      --
      Stefan Axelsson
    27. Re:C isn't dead...yet. by Ash+Vince · · Score: 1

      I very strongly disagree. Good programming can't allow for lack of discipline. People who go for more "elaborate" languages, with loads of libraries available, should be forced to understand what goes on behind the scenes.

      Maybe your right, but the real world simply is not like that.

      You can't force people to work the way you want them too. There are plenty of people out there who produce satisfactory results for their employers day in, day out who do not care one little bit about what goes on behind the scenes. They might not be producing the best and neatest work they could do, but they probably do not care about that either. The code they write works though even though it might take slightly longer to make changes to it or it not be quite as efficient as it could be.

      How do you force these people to fit in to your ethos, even though they do not see any issues with what they are producing already. The only person who sees and lack of efficiency or whatever is the person who has spent longer understanding the inner workings more thoroughly. You can tell them all you like but unless they trust you and value your opinion you are wasting your breath.

      Don't think people with this mindset are too rare either. Developers like this are ten a penny, often because they are easier for managers to relate to than geeks who live the languages they code in.

      --
      I dont read /. to RTFA, I read /. to offend people in ignorance.
    28. Re:C isn't dead...yet. by YoopDaDum · · Score: 1

      Not in Erlang, it doesn't depend much on the OS as the Erlang "process" (think of it as an actor or lightweight process) is handled in user space by the runtime. On uniprocessor systems Erlang used to use a single OS thread. Now on SMP systems it uses at least as many threads as cores of course. The runtime also handles all I/Os in a non blocking way (poll / select or equivalent).

      The goal here is to have a much lighter implementation for a concurrency context than what even an OS thread can provide. As a result creating / destroying Erlang processes is more efficient than OS threads, and the footprint of an Erlang process is much lower than a kernel thread (a page at the minimum for a thread). This allows better scaling in the amount of concurrent contexts than if directly using OS level threads, while providing the isolation of an OS process thanks to the language semantics.

      More information in the Erlang doc and wikipedia page.

    29. Re:C isn't dead...yet. by lars_stefan_axelsson · · Score: 1

      I see you 100k and raise you an order of magnitude (at least). From Wikipedia

      They are neither operating system processes nor operating system threads, but lightweight processes[citation needed] somewhat similar to Java's original âoegreen threadsâ.[clarification needed] Like operating system processes (and unlike green threads and operating system threads) they have no shared state between them. The estimated minimal overhead for each is 300 words;[8] thus many of them can be created without degrading performance: a benchmark with 20 million processes has been successfully performed.[9]

      But numbers aside, the threading/process model of Erlang really *is* orders of magnitude less taxing on resources than almost anything else out there. You can always use a thread in Erlang without thinking about "cost". No thread pools or other tricks like you have to resort to with e.g. Posix threads etc.

      This is not surprising. It was made for this. I stems from the observation that telecoms software typically runs tons of little state machines, and the most straight forward way of programming a state machine is by doing it in message passing (i.e. CSP) straight line code, one process per state machine. (Though Ericsson tried other solutions before Erlang, e.g. Plex, that didn't work out so well in practice.)

      --
      Stefan Axelsson
    30. Re:C isn't dead...yet. by gbjbaanb · · Score: 1

      except C++ didn't have defined threads until recently, and the threading libraries you could use were either very low level OS-provided ones, or thread libraries like Intel's TBB or OpenMP. These are very much "easy to use".

    31. Re:C isn't dead...yet. by gbjbaanb · · Score: 1

      LOGO was traditionally used for this, followed by BASIC (not the now-bloated VB.NET of course)

      Or there's assembler, which although you might think "no way, WTF that's the hardest of them all", its only true when you try to make very complex systems, for simple stuff (ie learning how it all works), assembler is the simplest there can be. I wouldn't want to write a large GUI enterprise app in assembler, but hello world isn't particularly difficult to write it in, and it really shows logic and how computers work under the hood.

    32. Re:C isn't dead...yet. by Viol8 · · Score: 1

      "Not in Erlang"

      Unless we're talking about an OS specifically written to run erlang then yes , in Erlang. It won't have a choice in the matter. The OS and only the OS creates and assigns system threads. If erlang wants to do its own internal timeslicing inside its runtime and call each context a thread then fine, but thats not an OS thread and it won't get a choice about which CPU they run on. If you don't believe me try it on Windows or Unix sometime.

    33. Re:C isn't dead...yet. by Viol8 · · Score: 1

      "Nope, it's Linux. The mapping/slicing of Erlang thread to OS thread is indeed done by the Erlang runtime"

      In which case it'll still be relying on the linux threading subsystem to do all the thread CPU assignment and other thread management tasks. It won't have any choice in the matter.

      "Otherwise you wouldn't be using your cell phone"

      I'm not sure if you believe that all base station code is written in erlang but I can assure you it isn't.

      "Erlang is industry, through and through."

      Erlang is telecoms, specifically Ericsson. Its barely used anywhere else.

      "You obviously don't know much about Erlang."

      I only know what I've read about it , however I do know about unix operating system kernels.

      Anyway , your homepage states you work with Ericsson so you're hardly unbiased in this discussion.

    34. Re:C isn't dead...yet. by Anonymous Coward · · Score: 0

      But the point about Erlang was that it was trivial to write concurrent code that scales well to the number of cores/boxen. Good luck doing that with Java. Do you know what a GC is? Do you know that 4 or 5 nines is unacceptable in the kind of apps Erlang is used for?

      People do not care if Java is 10x faster than Erlang if it needs to pause to perform GC and if it takes much longer to develop the software and if, in the end, it's way trickier to get right / to debug etc.

      I think you totally missed the point about Erlang...

    35. Re:C isn't dead...yet. by lars_stefan_axelsson · · Score: 1

      In which case it'll still be relying on the linux threading subsystem to do all the thread CPU assignment and other thread management tasks. It won't have any choice in the matter.

      Sure. But that's a no brainer, when the runtime don't run (substantially) more threads than there are cores. The runtime doesn't use the scheduling of the OS much (if at all).

      I'm not sure if you believe that all base station code is written in erlang but I can assure you it isn't.

      No, like I said there's also lots of e.g. C. And that's specifically used for e.g. "base stations". (Which do mostly signal processing, so they're written in e.g. VHDL, truth be told. That part of the equation is much more about building hardware. Forwarding code is also typically C, however "management", i.e. making decisions etc. is Erlang. This has all been published, so it's no great secret.

      I only know what I've read about it , however I do know about unix operating system kernels.

      As do I. We used to write our own. Then used a mix of realtime and Unix e.g. wxWorks (no it doesn't) and Solaris, and then finally Linux. On hardware we built... It's not a "stock" kernel.

      Anyway , your homepage states you work with Ericsson so you're hardly unbiased in this discussion.

      Not any longer. I used to work *at* Ericsson, but that was quite a few years ago. But of course I'm biased. I haven't seen anything else that worked as well in the kind of large "firm" (somewhere between soft and hard) real time systems. By the sound of you it's as if we (users/developers of Erlang) didn't know about the possible alternatives. We do. But more importantly Erlang embodies the accumulated knowledge of how to build systems like these. Just like 'C' is the embodiement of the knowledge of what it took to write UNIX (and OSes in general) by the guys at AT&T.

      --
      Stefan Axelsson
    36. Re:C isn't dead...yet. by durrr · · Score: 1

      Seems very child oriented. Maybe I forgot to mention my little sister is an adult, just not fluent in computers.

      Maybe what I'm looking for really is just even more libraries to Ruby or perhaps NLP compatible syntax too.

    37. Re:C isn't dead...yet. by gestalt_n_pepper · · Score: 1

      . People who go for more "elaborate" languages, with loads of libraries available, should be forced to understand what goes on behind the scenes.

      Oh, really? I suppose you advocate that bricklayers should understand chemistry before being allowed to lay bricks, and that your car mechanic should understand enough about how quantum probability works before he attempts to fix the electrical system that failed and made your left headlight go out.

      Dude, people have to get real work done, OK. Sometimes they have to use a programming language to sort a list and export a file. Not all of these people need to be, can be or should be experts down to the nth degree.

      --
      Please do not read this sig. Thank you.
    38. Re:C isn't dead...yet. by Viol8 · · Score: 1

      "It's not a "stock" kernel."

      Well obviously if you alter the kernel code and intergrate the language with your modifications then you can do anything you want. Thats slightly different to what we were discussing.

    39. Re:C isn't dead...yet. by scamper_22 · · Score: 2

      Many people... not just employers don't understand the details of someone else''s craft.

      I don't really understand the details of what my mechanic does. I don't really understand the details of a pharmacist's job. I don't really understand the details of a home repair/contractor/plumber/electrician person.

      To me, a pharmacist seems like a glorified cashier. All conflicting medications can just be looked at in a database.

      But what do I know...

      I'm sure to someone else, the care I put into my craft is just extra fluff... and things can be done to work by someone else with much less knowledge and care.

      The only question is do you want to regulate it.
      You can ensure a certain level of professionalism by making something a true profession and restricting access into it. That's what doctors, lawyers, pharmacists... do. Has a nice side effect of keeping pay and working conditions okay.

      But it's downside is less innovation and a lot of self-interest.

      Would a web-site like slashdot even exist if it required regulated professionals to write code?

    40. Re:C isn't dead...yet. by JoeMerchant · · Score: 1

      http://www.facebook.com/ladieslearningcode - I think they're kind of geographically restricted, but them or something like them might help.

    41. Re:C isn't dead...yet. by phantomfive · · Score: 1

      Not even close. Erlang even uses it's own threading model since Posix threads are much too heavy weight. You can have (perhaps) a thousand threads, but hundreds of thousands; forget it.

      Have you tried? The most I've tried was around 60,000, but the Linux kernel handled it no problem. I tried a thousand on Windows in Java yesterday, and it had no problem with that either (I tried pushing it up to 10,000, but the Java memory model was giving me problems, and I couldn't find the right configuration option to change it).

      --
      "First they came for the slanderers and i said nothing."
    42. Re:C isn't dead...yet. by Anonymous Coward · · Score: 0

      a workshop that ruins some woodworking tool by putting metal it in.

      Obviously a stack based workshop...

    43. Re:C isn't dead...yet. by dwpro · · Score: 1

      I tend to think of HTML as a pretty good language for this: relatively straightforward, very forgiving, and instant gratification in the way of visual output. Throw in some javascript to start scaling up, or add an in line scripting language like PHP to add some controller action and metaprogramming.

      --
      Millions long for immortality who do not know what to do with themselves on a rainy Sunday afternoon. -- Susan Ertz
    44. Re:C isn't dead...yet. by lars_stefan_axelsson · · Score: 1

      Have you tried?

      Not in the last 7-8 years no. But last time I did Erlang was a couple of magnitudes of order (say two) better. Which is no surprise since Erlang processes were made to be very light weight.

      But sure, if you wait long enough, the hardware will eventually catch up... :-)

      --
      Stefan Axelsson
    45. Re:C isn't dead...yet. by lars_stefan_axelsson · · Score: 1

      No, we don't (typically) mess with the treading model/scheduling etc. It was just to point out that we do know how the Linux kernel works. Erlang wasn't made/used due to ignorance of the options.

      --
      Stefan Axelsson
    46. Re:C isn't dead...yet. by K.+S.+Kyosuke · · Score: 1

      In that case, try JRuby 1.7 running on Java SE 7 with server HotSpot.

      --
      Ezekiel 23:20
    47. Re:C isn't dead...yet. by Grishnakh · · Score: 1

      There's nothing shitty about PHP; it's a perfectly good tool for certain tasks, namely doing server-side programming for a web server where the performance requirements aren't very high. Obviously, it's no match for Java for doing really serious server-side programming (such as that needed for online banking, where reliability and correctness are most important), but if all you're trying to do is write some code to show a different, random image on a small website for each instance, using Java for that is massive overkill, and will take you much more time than just writing a few lines of PHP. Plus, it's easy to find cheap web hosts that support PHP, whereas finding web hosts that support Java isn't all that common.

      It's just like everything else: pick the correct tool for the job.

    48. Re:C isn't dead...yet. by TheRaven64 · · Score: 1

      It's more than that. Often, the strength of a language is not what it adds over another language, but what it removes. Erlang, for example, makes it trivial for the compiler to tell what data structures are shared between threads, and lacks mutable data structures. This means that the compiler can replace copy-and-modify operations with modify ones if nothing else will see the result but can also do things like copy data to improve locality on NUMA systems. Even if you implement CSP-style messaging in a C-family language (I have done) then you miss out on a number of the potential optimisations.

      --
      I am TheRaven on Soylent News
    49. Re:C isn't dead...yet. by TheRaven64 · · Score: 1

      Get a clue FFS

      For reference: I get paid to hack on a compiler used for HPC. The odds are that the one who is lacking the clue is not me...

      Which is down to the OS process model

      There is a lot that you are missing. First, modern systems are NUMA, although at the low end (and ignoring the GPU) they try to hide it. Even on cache-coherent systems, there is a cost associated with modifying the same data from two threads. Accessing data from a remote node or from another core's cache introduces latency. In languages that have a concept of threads owning data, rather than a flat address space, it is much easier for the compiler to do a whole range of optimisations. The simples of these is making sure that shared and unshared data are not in the same cache lines. Even that is difficult in a language like C, where the compiler has no way of knowing whether a pointer refers to memory that another thread will access. Beyond this there are a whole raft of optimisations that you can do if your language supports transactional memory (for example). On a NUMA system it is often a lot cheaper to copy a moderately large data structure and then merge two sets of changes (or retry one set in cases of conflict) than it is to try to do them simultaneously with the associated cache coherency issues.

      Beyond using OS threads (most operating systems, by the way, optimise for well under 100 threads per process because they assume that anything with that level of concurrency will use a lightweight thread on top, as languages like Go and Erlang do) a language with message passing can make more intelligent scheduling decisions. If you have just sent a message to another thread, it's probably a good idea to wake that thread up soon. The Spring operating system from Sun actually had a primitive for doing this, but most VMs for concurrent languages do something similar. In C you can almost do something similar with condition variables, but you're liable to run into the thundering herd problem.

      TLDR version: just because you're using lots of pthreads doesn't mean your code will be fast or even scalable. It's very easy to write code that, due to cache and scheduling issues, will run slower the more cores you add.

      --
      I am TheRaven on Soylent News
    50. Re:C isn't dead...yet. by phantomfive · · Score: 1

      But sure, if you wait long enough, the hardware will eventually catch up.

      Nah, the Linux Kernel rewrote their threading system a few years back. It's quite nice now. Windows might have too, I don't know.

      --
      "First they came for the slanderers and i said nothing."
    51. Re:C isn't dead...yet. by Anonymous Coward · · Score: 0

      If you're doing concurrency with OS processes you're only about 8 years behind the curve...

    52. Re:C isn't dead...yet. by lars_stefan_axelsson · · Score: 1

      Somehow still doubt they're down to 300 bytes per thread... :-)

      --
      Stefan Axelsson
    53. Re:C isn't dead...yet. by phantomfive · · Score: 1

      What kind of stack can you have with only 300 bytes per thread?

      --
      "First they came for the slanderers and i said nothing."
    54. Re:C isn't dead...yet. by lars_stefan_axelsson · · Score: 1

      Quoting the docs: "A newly spawned Erlang process uses 309 words of memory in the non-SMP emulator without HiPE support. (SMP support and HiPE support will both add to this size.) ... The size includes 233 words for the heap area (which includes the stack). The garbage collector will increase the heap as needed."

      --
      Stefan Axelsson
    55. Re:C isn't dead...yet. by YoopDaDum · · Score: 1

      Indeed, an Erlang process is not an OS thread (or process), that's the whole point. That's how it can be lighter and you can use more contexts concurrently.

      Any modern OS allows you to pin down on which CPU an OS thread will run. You can even do it at the OS process level through a GUI on Windows: just open the task manager, go to the process list, select a process and right click select "Set Affinity...". Then pick the core(s) on which you allow it to run. It's that easy. This is for XP by the way, YMMV.

      You seem to be under the impression that to benefit from Erlang you need to have a dedicated Erlang OS. That may have been the case earlier on, but it would be foolish nowadays. With the pining and thread priority control of any major OS that would be a pure waste of time. It's just easier and just as good to support Erlang on top of an existing OS.

    56. Re:C isn't dead...yet. by phantomfive · · Score: 1

      Nice

      --
      "First they came for the slanderers and i said nothing."
    57. Re:C isn't dead...yet. by benhattman · · Score: 1

      Not on scalability, but the language does have an impact on useability and maintainability of multithreaded code. You can write a C program (or even better, C++11 with a standard threading library) code that scales just as well as any erlang. The problem with that, is you'll probably need to rewrite some subset of the erlang language into C. That's hardly insurmountable, but from a development perspective it's clearly suboptimal.

    58. Re:C isn't dead...yet. by TheRaven64 · · Score: 2

      Even the, you have problems. For example, Erlang enforces the rule that nothing shared is mutable. This lets it trivially lay out data in memory so that things that are shared are not in the same cache lines as things that are going to be modified. This can cause a big reduction in cache-coherency-related bus traffic.

      While it's true that you can implement the message passing of Erlang in any language, it's worth remembering that it's often more useful to take things away from a language than add things. For example, removing pointer arithmetic makes a lot of things possible, such as accurate garbage collection and allows the compiler to rearrange data structures (this can be done in C if you have whole-program analysis and gives about a 10-20% speedup alone in something like the Linux kernel with a fairly naive implementation). A language like Haskell, which disallows side effects except via monads can reorder function calls and even perform them implicitly in parallel.

      This is one of the reasons why we're starting to see other languages approach and surpass C for performance for the first time. The reason that C is regarded as a fast language is that it makes the programmer do a lot of the compiler's work. There is a fairly trivial mapping from C code to machine code and a naive compiler can do a good job. Even something like LLVM really does a fairly simple set of optimisations with C code but gets good performance. In contrast, you need to do a lot more to get the same baseline performance with something like Erlang or Haskell, but you then have a lot more headroom too: there are a lot of optimisations that are then possible.

      --
      I am TheRaven on Soylent News
  5. Popularity... by Anonymous Coward · · Score: 0

    Yes, new languages come from "lone programmers". Academic people basically suck at making languages popular, which is why languages like PHP are incredibly popular depite offering litte more than "being good enough" (what a feature...) and repeating mistakes from the past.

    1. Re:Popularity... by Phrogman · · Score: 1

      PHP may be just "good enough", rather than good, or well designed, but by being so easy to learn it will undoubtedly get people interested in higher level languages who might otherwise never have tried them. Good enough is often good enough to serve your purposes.

      --
      "The first time I got drunk, I got married. The second time I bought a chimpanzee, after that I stayed sober" Arian Seid
  6. oh! by Anonymous Coward · · Score: 0

    was just what was missing! now that we have almost everything done by people who knows shit about that domain (ie: music), we'll have computer languages designed by people who understand shit about programming logic. COOL!

  7. They are not really new either by DarkOx · · Score: 2

    Ruby and python are really just variants of Object BASIC yes they have their unique syntax sugar and slight twists like Ruby where everything is a object even things like literal ints. None of that much matters having an itor on something like 5 does not really alter the design of my program it's just little shorter to type than for I=0 to 5; dosomething(I); endfor.

    None of this bad as developer I rather like it, but I agree with the author it's not really innovative

    --
    Repeal the 17th Amendment TODAY! Also Please Read http://www.gnu.org/philosophy/right-to-read.html
    1. Re:They are not really new either by TheRaven64 · · Score: 1

      slight twists like Ruby where everything is a object even things like literal ints

      Uh, slight twists? You mean something Ruby copied from Smalltalk, i.e. the first object oriented programming language? That's not a new feature or a twist, that's a return to older ideas. Ruby is Smalltalk with some extra convoluted syntax tacked on top.

      --
      I am TheRaven on Soylent News
    2. Re:They are not really new either by nsupathy · · Score: 1

      Smalltalk, i.e. the first object oriented programming language?

      Simula is the first object oriented programming language

      --
      #include std_disclaimer.h
    3. Re:They are not really new either by borgar · · Score: 1

      Just to keep the record straight, Simula 67 is considered the first object oriented programming language.

    4. Re:They are not really new either by TheRaven64 · · Score: 1

      No, Simula was the first class-based language. This is not the same thing.

      --
      I am TheRaven on Soylent News
    5. Re:They are not really new either by TheRaven64 · · Score: 1

      Depends on who you ask. If you ask Alan Kay, who invented the term 'object oriented' then he disagrees, and I'm more inclined to take his word for it than anyone else. Simula had classes (which are also in Smalltalk, but not required for object orientation, as Self showed), but it did not have the late binding and message passing required for an object oriented language.

      --
      I am TheRaven on Soylent News
    6. Re:They are not really new either by JoeMerchant · · Score: 1

      None of that much matters having an itor on something like 5 does not really alter the design of my program it's just little shorter to type than for I=0 to 5; dosomething(I); endfor.

      None of this bad as developer I rather like it, but I agree with the author it's not really innovative

      I disagree, something like foreach( item, list ) { ... } is an innovation over for( int i = 0 ; i list.size() ; i++ ) { item = list[i]; ... }, it is recognizing the common task and expressing it in a more convenient, compact, intuitive, and less error prone form, same as the evolution of pronouns and other shortenings in natural language.

    7. Re:They are not really new either by borgar · · Score: 1

      Well I'm leaving aside any discussion on which type of object orientation (static class vs prototype objects) is considered the "real" or "best" and are assuming that both Simula and Smalltalk qualify by todays perception as object oriented languages. Simula does preceded Smalltalk by a few years, and since I'm not aware of any earlier general programming language that has syntax supporting an object oriented programming paradigm directly wouldn't that make Simula the "first"?

    8. Re:They are not really new either by GreyWolf3000 · · Score: 1

      I agree with every statement but the last. Ruby's internal implementation is very different from smalltalk. It's syntax from the ground up is very different from smalltalk. It's syntax isn't even convoluted -- can you qualify what you mean by that? About the only convoluted part of the syntax I've found is the lambda/proc/block syntaxes -- they should seriously cut down the number of ways to create anonymous methods.

      Javascript does it right with function(){} syntax, but they don't have any way of creating blocks.

      --
      Slashdot: Where people pretend to be twice as smart as they really are by behaving like children.
    9. Re:They are not really new either by biodata · · Score: 1

      I have a different view of this. I think the second example is a more useful construct, as it exposes i, as well as list[i]. I have no problem with people using the first construct if they prefer, but it could be MORE error-prone if it leads you to make assumptions about the value of i. A use-case might be where you want to traverse two array structures in the same loop - you don't know i for sure in the first syntax, so you set up a variable which you increment, but you initialise it to 1 instead of 0, and suddenly your two structures are out of step. At least in the verbose example you can actually see what's going on.

      --
      Korma: Good
    10. Re:They are not really new either by Barbara,+not+Barbie · · Score: 1

      Actually, you're both wrong. Assembler was the first language you could implement object-oriented methodoligies in. Borland described it in their Turbo Assembler manuals, for example, and if yuo look around the net, you'll find plenty of ways to do it - same as you can do OOP in straight c - you just need tp pass an explicit pointer tho this as your first parameter.

      --
      Let's call it what it is, Anti-Social Media.
    11. Re:They are not really new either by Anonymous Coward · · Score: 0

      I would stack the guy you're replying to's knowledge of CS against 99 percent of the rest of Slashdot put together. You are probably wrong.

    12. Re:They are not really new either by Anonymous Coward · · Score: 0

      > A use-case might be where you want to traverse two array structures in the same loop

      You mean something like (array1, array2) zipped forEach { (x,y) => ... } or for (x - array1 ; y - array2) yield ...?

      Procedural programming has to go.

    13. Re:They are not really new either by Barbara,+not+Barbie · · Score: 1

      Instead of betting, why not look it up for yourself? BTW, I've written oop in straight c - it's not that hard. Anyone who thinks that c can't do oop should ask themselves why not - and give it a try.

      --
      Let's call it what it is, Anti-Social Media.
    14. Re:They are not really new either by Anonymous Coward · · Score: 0

      Ruby is different enough, has nice mixins and open classes (in the wrong hand those thing make it impossible to see what's going on without an IDE, though).

    15. Re:They are not really new either by Anonymous Coward · · Score: 0

      "You could implement object-oriented programming in Assembler and Assembler was invented before Smalltalk" != "Assembler is first OOP language". Implementations of OOP in Assembler borrow ideas from SICP for implementation and from Alan Kay for starting the OOP ball rolling, they were not there when Smalltalk was created.

      If you go with that logic, then from "Gunpowder can be used for reactive engines", "Reactive engines are basis of space flight" and "Chinese had gunpowder before everyone else" you can infer "China was first space-faring nation".

    16. Re:They are not really new either by Miamicanes · · Score: 1

      Ya know, one of the most psychologically-disturbing programming projects I worked on involved C++ and AVR microcontrollers. Why? Because for some reason that eludes me at the moment (it's been a few years... I think it had something to do with objects created with 'new' prematurely falling out of scope and either a libavrc or a toolchain bug), you couldn't actually use "new" to create objects -- you had to get a pointer from malloc(sizeof(DesiredObject)) and cast it to a pointer to an object of the desired type. Intellectually, I could deal with it. Emotionally, it was a total mindfuck. Everyone said it was just the way you had to do it (for the time being, at least), but it just plain felt *wrong*, if not downright *immoral*.

      Maybe I was just being stubborn, but it was a huge turn-off. It convinced me that C++ just wasn't an appropriate language to use for 8-bit microcontroller programming (well, that, and the fact that from what I remember, there was no official way to implement external SRAM in a way that the gcc libAVRc toolchain could gracefully take advantage of it... if you wanted to use anything besides on-die SRAM, you were basically on your own & sailing through uncharted territory).

    17. Re:They are not really new either by JoeMerchant · · Score: 1

      The first construct doesn't expose i because i is irrelevant outside of the current task... if you need i for other things, by all means, use the more verbose construct, but when I (often) do not care about order of operation and just want to process every item in a list, the foreach construct hides irrelevant detail from the code.

      If you're used to doing 8 bit assembly code, then you're used to seeing 16, 32, (and probably 24) bit ints represented as a verbose expansion of the individual byte handlers, quite long ones in the case of a 32 bit add operation. Personally, I'm just as glad to declare a char, short, or long somewhere above and go with it as a variable i in the code, let the compiler expand it out.

    18. Re:They are not really new either by shutdown+-p+now · · Score: 1

      Simula-67 did have late binding - it had virtual methods.

      And just because Kay invented the term "OOP" doesn't mean that it had retained the original meaning today. We can be pedantic about it, but it's one of those cases where it doesn't do anything useful - it's like people arguing that JavaScript lambdas are not true closures because they don't capture the context of "break" and "return" from the outer scope.

    19. Re:They are not really new either by shutdown+-p+now · · Score: 1

      Javascript does it right with function(){} syntax

      You mean, Javascript does it wrong with the function() syntax - given how verbose it is for basic stuff like a simple predicate or mapper.

      I mean, function(x) { return x + 1; } vs {|x| x + 1} or x -> x + 1. Meh.

    20. Re:They are not really new either by shutdown+-p+now · · Score: 1

      The problem with the verbose example is that it requires a data structure that is efficiently indexable. It doesn't work well with a linked list, for example. A generic foreach, on the other hand, can work with anything that exposes an interface for sequential enumeration of items.

    21. Re:They are not really new either by Barbara,+not+Barbie · · Score: 1
      Try responding to what a actually wrote, and not rewording it:

      Actually, you're both wrong. Assembler was the first language you could implement object-oriented methodoligies in.

      How is that not an accurate statement?

      Also, on a side note, people do tended to do things informally before someone else lays down a formal declaration of "this is how to do it."

      --
      Let's call it what it is, Anti-Social Media.
    22. Re:They are not really new either by Anonymous Coward · · Score: 0

      It's less "innovation", more "adoption", considering that 40 years ago Smalltalk already had "array do: [ :x | ... ]" (that's forEach), "array collect: [ :x | ... ]" (that's map) and "array inject: initial into: [ :acc :curr | ... ]" (that's reduce/foldLeft) - and that's just upper date bracket as I'm not very good with languages' history.

    23. Re:They are not really new either by Anonymous Coward · · Score: 0

      Right back at you.

      > Simula is the first object oriented programming language
      > No, Simula was the first class-based language. This is not the same thing.
      > Actually, you're both wrong. Assembler was the first language you could implement object-oriented methodoligies in.

      So, you say they're both wrong and to prove it you state an accurate, but unrelated fact.

      Try responding to what they actually wrote.

  8. Reinvention of LISP by Compaqt · · Score: 2

    > 'one striking commonality in all modern programming languages, especially the popular ones, is how little innovation there is in them!'

    http://c2.com/cgi/wiki?GreenspunsTenthRuleOfProgramming

    "Every sufficiently complex application/language/tool will either have to use Lisp or reinvent it the hard way."

    So why do people (hotshots) keep reinventing the wheel, instead of contributing to libraries for LISP and/or Scheme?

    For non-hotshots, get back to rowing at bottom of the ship with PHP and Java business-logic oars!

    --
    I'm not a lawyer, but I play one on the Internet. Blog
    1. Re:Reinvention of LISP by Anonymous Coward · · Score: 0

      (they '(are {afraid [of (all the brackets)]}))

      (though in reality, it's mostly not number of brackets, but their position)

      (here, count them)

      {define (foo x) (if x (g x) (f)) } ; Valid Racket Scheme

      function foo(x) { if (x) g(x); else f(); } // Valid JavaScript

    2. Re:Reinvention of LISP by icebraining · · Score: 1

      Now try running Racket Scheme on a browser without addons.

    3. Re:Reinvention of LISP by Anonymous Coward · · Score: 0

      LISP is dead (or at least, resting, after a very long squawk) because practical implementations have a monolithic philosophy (the whole program is in LISP) rather than bowing to the same pressures that every other language bows to in that you might maybe one day need to call some code not written in the source language.

      I love LISP, I think it's the most beautiful, powerful, awe-inspiring language ever devised. Do I use it for practical purposes? Hell, no. One project it's unsuitable because I need a lot of SIMD code; one project I can't use it because I need to call Direct3D; one project I can't use it because I need to run on iPhone; one project I can't use it because I need to subclass things in MFC; and so it goes, on and on. The list of two-week jobs I could do in four weeks in LISP by writing bindings is huge!

      And if I did write bindings, for which LISP am I writing them? You can't contribute "to LISP". You can contribute to clisp, or Corman Lisp, or SBCL, but not all at the same time.

    4. Re:Reinvention of LISP by Anonymous Coward · · Score: 0

      If using the JVM is not an issue, Clojure might be a good option for you, given that it is a LISP and can use Java libraries.

    5. Re:Reinvention of LISP by mikera · · Score: 1

      The future of Lisp is with languages like Clojure that avoid the monolithic approach and happily embrace and extend the Java ecosystem.

      This is why Clojure (and and other Lisp that takes a similar approach) will have a huge advantage - you get the power of Lisp *and* a great library ecosystem.

    6. Re:Reinvention of LISP by Anonymous Coward · · Score: 0

      I think it is naive to believe that LISP is strictly superior to all other language famillies. Sure, LISP-style meta-programming (code is data) is extremely expressible, but there are other issues than expressibility which must be considered in a programming language, such as efficiency and safety. One traditional way of increasing efficiency and safety is static typing, which seems very difficult to practically combine with a LISP, giving other language families an edge. Can those disadvantages of LISP be solved? I think that is an open question. Efficiency has been improved by advances in hardware, software, compiler and VM technology. And safety can for instance be somewhat improved by a stricter focus on functional programming, such as seen in Clojure with immutable data structures and safe language primitives for concurrent and parallel programming. But whether those advances are sufficient remains to be seen.

      Personally, I prefer languages that provide static typing. Being able to disprove certain bad behaviours if I design my program properly is nice. There have been many advances in programming language design that has increased the expressivity and productivity of languages without excluding static typing. For instance, with type inference, the productivity penalty of static typing is lessened considerably. But I must admit that newer LISPs such as Clojure does seem attactive.

    7. Re:Reinvention of LISP by Anonymous Coward · · Score: 0

      Clojure is wonderful indeed. However Paul Graham does have a very strong point: most (nearly all) programmers are average code monkeys. You've got 5-digits /. IDs here that simply do not have a IQ high enough to understand Lisp / Clojure... Let alone Haskell.

      Go read Haskell blogs. Then read the comments here.

      These are two different worlds. Code monkeys will yell "Real-World [TM]" bla bla bla.

      The real reason languages like Haskell or Lisp dialects aren't more succesful is that, sadly, they're way too complicated to grasp for the average {Java,Ruby,C#,PHP} fanboy. So said fanbois shall keep saying "Lisp is dead, TIOBE confirms it. I'm powering the Real-World [TM] with {Java,Ruby,C#,PHP}.

      So some languages, despite being amazing, simply cannot go mainstream: the average code monkey is unable to think in a non-imperative way. Go forbid using a DB other SQL.

      A sad state of affair.

    8. Re:Reinvention of LISP by Anonymous Coward · · Score: 1

      So the reason the LISP family is not popular is not because LISP isn't perfect, but because programmers in general are too stupid to "think in a non-imperative way"? That's nonsense. My experience with teaching functional programming shows that even "stupid" people and "bad coders" can understand functional programming. Sure, for some, it takes a bit of time to wrap their heads around it, but it generally doesn't take that much time. Another example is a LISP-like language being used as a scripting-language for non-coders (see Zillions of Games). If those non-coders can understand and use a LISP-language, how difficult is LISP, exactly?

      Blaming the lack of success on other people and not on the language is not right nor constructive. Instead, understanding the LISP family, and both its advantages and disadvantages, is much more useful. My own explanation for LISP's apparent failure is that while the LISP family is extremely expressive, it also has some disadvantages (such as efficiency and safety), and in these other categories other languages win by a large margin.
      For instance, take Haskell. You have functional programming, but you also have static typing and strong type-inference. With strong type-inference, static typing is much less of a bother, and you get the combined safety of both static typing and referential transparency. Why is static typing so great for safety? Because you can prove the absence of certain errors (testing is not a proper substitute, but instead a complement; it proves the presence of certain behaviours). In some ways, that basically makes Haskell much more safe than LISP, and better in that regard.
      Another example is C++. For certain problems, C++ (-implementations) simply is (/are) much more efficient than, for instance, Common Lisp or Clojure (-implementations). In that regard, C++ is better than LISP (-implementations). And writing safe, scalable and efficient code in C++ is generally NOT trivial. It definitely requires intelligence and thought. (Note; it may be possible that faster implementations of LISP-languages may result in equal or faster execution than C++ implementations. But that is not the situation today, and it won't be in the future either without advances in tools, technology and languages).

      In short; stop whining about how unfair it is that the LISP-family is not more popular, or that it is not popular because it is too perfect for the masses, and try instead to understand both the strengths and weaknesses of LISP. Because, if you don't understand the weaknesses, how are you going to invent the LISP-language of tomorrow that handles these weaknesses? And on that note; Clojure, for instance, helps address some of these issues, both with efficiency (JVM), safety (stronger focus on functional programming, such as immutable data structures) and the eco-system (JVM ecosystem).

    9. Re:Reinvention of LISP by Srath · · Score: 1

      Would Clojure with Webnoir fit the bill? http://webnoir.org/

    10. Re:Reinvention of LISP by Anonymous Coward · · Score: 0

      So why do people (hotshots) keep reinventing the wheel, instead of contributing to libraries for LISP and/or Scheme?

      Because people hate prefix. They always say it's the parens; but it's really prefix. People are trained to think in infix for math. People are also trained to think about how a procedure executes things in a linear fashion which is more postfix. That's why most people have no trouble grasping pipes in shell languages.

      Lisp tosses aside the familiar infix and postfix orders, and tries to shoehorn everything into prefix. That's the real problem I have with it. The parens are no more a bother than semicolons in C. I suspect many other people feel the same way; but because everybody else says it's the parens they say that too. Really though, it's prefix.

    11. Re:Reinvention of LISP by jelle · · Score: 2

      (((((*what))) are(((you)))saying)))?((((there))))?

      --
      --- Hindsight is 20/20, but walking backwards is not the answer.
    12. Re:Reinvention of LISP by Compaqt · · Score: 1

      Wait, what? The only language that browsers have now is Javascript.

      As for all the others (Dart, Shmittzle, Whatzit, and Whodat), you'd need browser extensions for those, too.

      Anyway, I wasn't specifically referring to browser languages.

      --
      I'm not a lawyer, but I play one on the Internet. Blog
    13. Re:Reinvention of LISP by Compaqt · · Score: 1

      I know you're just joking, but for anyone just following along, please don't be scared off by the parentheses.

      A good editor will keep track of the parentheses, and indent for you.

      Knowing LISP or Scheme is a huge brain training exercise. If you want to sing (as a programmer), you have to train your voice.

      Great Scheme implementation
      http://racket-lang.org/

      How to Design Programs
      http://www.htdp.org/

      Free LISP book
      http://www.gigamonkeys.com/book/

      --
      I'm not a lawyer, but I play one on the Internet. Blog
    14. Re:Reinvention of LISP by Compaqt · · Score: 1

      Question: is there a problem going from LISP to Java and vice versa like people encounter when trying to hook up object-oriented languages and relation databases?

      --
      I'm not a lawyer, but I play one on the Internet. Blog
    15. Re:Reinvention of LISP by Grishnakh · · Score: 1

      If average people are "too stupid" to grasp a particular language and use it effectively, the problem isn't the people, it's the language, unless your entire goal is to make a language that's reserved for the top 1% of programmers. The whole idea of a high-level computer language is to make programmers more productive, than if they were restricted to using assembly language (the existence of which is to make programmers more productive than if they were restricted to using machine code). Every language's raison d'etre is to be a level of abstraction. ASM is a very low level of abstraction (substituting mnemonics for opcodes), C is a low level of abstraction (basically one level above assembly), Python is a very high level of abstraction, etc. Higher levels usually carry a performance penalty, in exchange for allowing you to program faster, with fewer bugs, and being able to write code that's more maintainable.

      If your fancy language is so baroque that very few skilled people can use it effectively, then what is the point of using it? Are you seriously complaining that humans aren't all geniuses, and that this is a "sad state of affairs"? Sure, it'd be nice if humans were smarter on average, but we are what we are, and that hasn't changed for the past few hundred millenia. Or are you complaining that the activity of computer programming isn't restricted to a small number of geniuses? The whole point of computers and programming is to give humans (all of them) tools for improving society and getting jobs done, not to give a tiny number of geniuses something to wank off to. Are you going to advocate next that mechanic's tools should be made far more complex so that only a few geniuses are able to work on cars, even though most of the population (of western countries) relies on these machines for their daily transportation, just like almost all the population now relies on computers for all kinds of things in their daily lives, including transportation, finance, education, communication, and keeping the lights on?

    16. Re:Reinvention of LISP by bidule · · Score: 1

      If average people are "too stupid" to grasp a particular language and use it effectively, the problem isn't the people, it's the language, unless your entire goal is to make a language that's reserved for the top 1% of programmers.

      Most drivers are "too stupid" to learn to drive well: they have automatic transmission and keep hitting the brakes because they cannot modulate the accelerator. Had they started on manual they would have ended up better drivers.

      The top 1% programmer are way above average, not because they are smarter but because they are willing to stop and try different things until they understand it well enough. Of course the "pedal pusher" will never learn anything more than the bare minimum.

      Code without side-effect is hard to write but much easier to understand. Which would you rather debug 6 months later?

      --
      ID: the nose did not occur naturally, how would we wear glasses otherwise? (apologies to Voltaire)
    17. Re:Reinvention of LISP by Grishnakh · · Score: 1

      The problem is, you can't expect the top 1% of programmers to do all the programming the world needs, just like you can't expect the top 1% of drivers to do all the driving needed. There just aren't enough such experts to go around. So, the tools need to be made so that average users (whether drivers or programmers) can get good results from that. That may very well mean that the tools need to be made by the cream of the crop, so that the overall result is optimal. (I'm not going to say "average people" here, because at least in the case of programmers, they're a small subset of the population, not just random members of the general public.)

      In the case of programming, this means we need languages that average programmers can use to good effect and which will maximize their productivity (such as by making it difficult to create difficult-to-debug bugs). In the case of cars, this means we need cars that idiots can drive, until our society finally shapes up and builds SkyTran so that average poorly-skilled people don't need to drive themselves in the more populated areas.

    18. Re:Reinvention of LISP by bidule · · Score: 1

      In the case of programming, this means we need languages that average programmers can use to good effect and which will maximize their productivity (such as by making it difficult to create difficult-to-debug bugs).

      Yes, I hate this approach because it entail dumbing down instead of improving. I will add that "difficult-to-debug" is the birthmark of imperative programming. If students first learned functional programming and oddballs like Prolog, their mind wouldn't be hobbled by imperative programming and we could have a top 10%. Once you've learned to modulate the accelerator, you can do it on an automatic too.

      --
      ID: the nose did not occur naturally, how would we wear glasses otherwise? (apologies to Voltaire)
  9. Wrong premise by Anonymous Coward · · Score: 5, Informative

    >under the premise that new languages don't come from academia

    http://en.wikipedia.org/wiki/Guido_van_Rossum :

    >Van Rossum was born and grew up in the Netherlands, where he received a masters degree in mathematics and computer science from the University of Amsterdam in 1982. He later worked for various research institutes, including the Dutch Centrum Wiskunde & Informatica (CWI), Amsterdam, the United States National Institute of Standards and Technology (NIST), Gaithersburg, Maryland, and the Corporation for National Research Initiatives (CNRI), Reston, Virginia.

    Wrong premise.

    http://en.wikipedia.org/wiki/Yukihiro_Matsumoto

    >He graduated with an information science degree from University of Tsukuba, where he was a member of Ikuo Nakata's research lab on programming languages and compilers.

    Again wrong premise.

    1. Re:Wrong premise by Anonymous Coward · · Score: 5, Insightful

      By "from academia" they probably meant just "pure and untainted by worldly matters".

      Some time ago, Pacal and BASIC came from professors and were quite popular until recently.

      And this one is undeniably "from academia" in literal sense:

      History

      The design of Scala started in 2001 at the Ãcole Polytechnique Fédérale de Lausanne (EPFL) by Martin Odersky, following on from work on Funnel, a programming language combining ideas from functional programming and Petri nets.[5][not in citation given] Odersky had previously worked on Generic Java and javac, Sun's Java compiler.[5]

      Scala was released late 2003 / early 2004 on the Java platform, and on the .NET platform in June 2004.[3][5][6] A second version of the language, v2.0, was released in March 2006.[3]

      On 17 January 2011 the Scala team won a 5 year research grant of over â2.3 million from the European Research Council.[7] On 12 May 2011, Odersky and collaborators launched Typesafe, a company to provide commercial support, training, and services for Scala. Typesafe received $3 million investment from Greylock Partners.[8][9][10][11]

      Anyways, it's just too opinionated, from his 4 examples - PHP, JS, Python, Ruby - only PHP and JS are really widespread, with Ruby still rather rare and Python somewhere inbetween.

      And then there's this pearl:

      the languages designed by academics who are obsessed with internal consistency and correctness include a bunch of mostly dead tongues: Fortran, Cobol, Lisp, C and Smalltalk.

      TL;DR: This dude doesn't know shit about history (well, and present as well)

    2. Re:Wrong premise by BrentH · · Score: 1

      And now get off my premises!

    3. Re:Wrong premise by Anonymous Coward · · Score: 0

      GVR isn't exactly famous for being knowledgeable about programming language theory (or functional programming in general).

    4. Re:Wrong premise by Lobais · · Score: 1

      Anyways, it's just too opinionated, from his 4 examples - PHP, JS, Python, Ruby - only PHP and JS are really widespread, with Ruby still rather rare and Python somewhere inbetween.

      And then there's this pearl:

      From TIOBE http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html :
      6. PHP
      8. Python
      10. Javascript
      12. Ruby

      From LangPop http://langpop.com/ :
      4. PHP
      5. Javascript
      6. Python
      10. Ruby

      Just for the record. Certainly they are all very popular languages.

  10. what a croc - they never heard of Greenspuns 10th? by intronic · · Score: 1
    did anyone get through all that? I gave up after the intro which I found based on opinion rather than facts.

    How many more 'new' languages do we have to wade through until we fintd one with something significantly more interesting than already found in Lisp?

    So we have to forever endure individual designers who never heard of http://en.wikipedia.org/wiki/Greenspun's_tenth_rule ?

  11. The virtue of solving your own problems by jholyhead · · Score: 4, Insightful

    When someone designs a programming language to solve a problem that they have, they are designing a programming language that will likely solve the problems of a lot of other people (unless you have particularly esoteric problems).

    Matz has said that he built Ruby because he wanted a scripting language more powerful than Perl but more object oriented than Python. He solved his own need and that coincided with the needs of other people, making it a popular language.

    Design-by-committee languages tend to feel like they've taken a blind guess at what problems need to be solved without consulting the people experiencing those problems.

    1. Re:The virtue of solving your own problems by JoeMerchant · · Score: 1

      Design-by-committee languages tend to feel like they've taken a blind guess at what problems need to be solved without consulting the people experiencing those problems.

      It's not a blind guess, it's an informed guess by committee consensus, which is worse.

      "We don't have time to discuss this in committee,sweetheart.

      I am not a committee."

    2. Re:The virtue of solving your own problems by tepples · · Score: 1

      When someone designs a programming language to solve a problem that they have, they are designing a programming language that will likely solve the problems of a lot of other people (unless you have particularly esoteric problems).

      Given how many times Slashdot users have told me that my edge cases aren't anyone else's edge cases, I imagine that "particularly esoteric problems" might be more common than you think.

  12. Article contians junk by serviscope_minor · · Score: 5, Interesting

    "Languages designed by academics like FOTRTAN, COBOL, C"

    Were apparently desighned by academics obsessed with internal consistency and are now mostly deat tounges.

    These are contrasted with languages hacked up by people to get stuff done.

    WTF?

    FORTRAN was the first ever language and was hacked up by someone who wanted to get stuff done because ASM was too much of a pain in the neck. It was unlike the author's bizzare assertion the easiest to use language at the time of being written. That was the entire point! While its use may be on the decline, it has been in use for 55 years! And major important packages are still written in FORTRAN.

    And C? Seriously? Yet another language which was hacked up by a bunch of hackers to get stuff done. Apparently it's mostly dead. Even though it is the main implementation of 3 of the "less academic" languages listed.

    I'm surprised there isn't a "c++ is dieing haha lol!1!111" in there too. I'm glad the author never tried to argue that C++ has internal consistency (I do love C++, but...).

    And COBOL being an academic language? Oh dear.

    Conclusion: article is crap.

    --
    SJW n. One who posts facts.
    1. Re:Article contians junk by mapkinase · · Score: 1

      >And major important packages are still written in FORTRAN.

      Like what. I love FORTRAN as any other scientist that grew up in 70s, and there are a lot of wonderful and honorable computational biology programs in FORTRAN but I haven't heard of anything new being written in FORTRAN.

      The package I worked with in 90s was transformed into f95, but this is hardly new.

      Give us some examples of new stuff written in FORTRAN

      --
      I do not believe in karma. "Funny"=-6. Do good and forbid evil. Yours, Oft-Offtopic Flamebaiting Troll.
    2. Re:Article contians junk by mapkinase · · Score: 1

      >And COBOL being an academic language

      and

      >Languages designed by academics

      are essentially two opposite statements (that both can be true).

      First means that language is _used_ mostly by academics

      Second means that language is _created_ by academics.

      --
      I do not believe in karma. "Funny"=-6. Do good and forbid evil. Yours, Oft-Offtopic Flamebaiting Troll.
    3. Re:Article contians junk by serviscope_minor · · Score: 2

      Like what.

      Well, LAPACK, which is central to quite a lot of things, for one. It's not new, but development is in no way static either, especially with SCALAPACK, etc.

      I dodn't mean large new widespread things are being developed, but there are important things which are undergoing continuous development.

      Also FORTRAN is best at maths which rules it out for quite a bit of popular things. Certainly supercomputer people still work in FORTRAN for new stuff from time to time.

      Most visible programs don't do mathematical heavy lifting, and when they do, it's well hidden. Doesn't mean it isn't around, though.

      --
      SJW n. One who posts facts.
    4. Re:Article contians junk by serviscope_minor · · Score: 2

      are essentially two opposite statements (that both can be true).

      And both can be false :)

      Such as in the case of COBOL.

      In fact COBOL is the perfect example of a language that was designed to be easier to use (I doubt the concepts of consistency and correctness for programming languages had been crystalized into something so formal by that time). Which is why it proved to be incredibly popular for many years.

      --
      SJW n. One who posts facts.
    5. Re:Article contians junk by Anonymous Coward · · Score: 0

      Except that COBOL is neither. Author does not know her history. Article is junk.

    6. Re:Article contians junk by DrSkwid · · Score: 1

      > FORTRAN was the first ever language

      Step 1 : check your assumptions

      The A-0 system (Arithmetic Language version 0), written by Grace Hopper (In 1934, she earned a Ph.D. in mathematics from Yale) in 1951 and 1952 for the UNIVAC I, was the first compiler ever developed for an electronic computer.

      In late 1953, John W. Backus submitted a proposal to his superiors at IBM to develop a more practical alternative to assembly language for programming their IBM 704 mainframe computer.

      > And COBOL being an academic language? Oh dear.

      In the spring of 1959 a two day conference known as the CODASYL brought together computer experts from industry and government. Hopper served as the technical consultant to the committee, and many of her former employees served on the short-term committee that defined the new language, COBOL. The new language extended Hopper's FLOW-MATIC language with some ideas from the IBM equivalent, the COMTRAN.

      nice try

      --
      There are places where the networks are not touching,and there are places where they are-Boeing's Lori Gunter
    7. Re:Article contians junk by mapkinase · · Score: 1

      There is an important distinction between adding to legacy package and writing new from scratch.

      I was asking about the latter.

      Legacy code exists and maintained because

      1/ functionality in it is still needed
      2/ there is not enough manpower/desire/interest to refactor/rewrite/redo it without risk of undermining functionality

      Since FORTRAN is uses in science, 1/ some things created would serve forever, like molecular mechanics and 2/ nobody will give you a grant to refactor old package.

      That's why FORTRAN code still exists.

      --
      I do not believe in karma. "Funny"=-6. Do good and forbid evil. Yours, Oft-Offtopic Flamebaiting Troll.
    8. Re:Article contians junk by mapkinase · · Score: 1

      > Version 1.0 : February 29, 1992

      I agree, for FORTRAN code, this is relatively new.

      --
      I do not believe in karma. "Funny"=-6. Do good and forbid evil. Yours, Oft-Offtopic Flamebaiting Troll.
    9. Re:Article contians junk by serviscope_minor · · Score: 1

      Legacy code exists and maintained because

      It's not just maintained, it's actively developed. Completely new functonality is being added. For instance new, higher performance algorithms are being implemented from scratch for the package.

      --
      SJW n. One who posts facts.
    10. Re:Article contians junk by serviscope_minor · · Score: 1

      Step 1 : check your assumptions

      Curious way to put it, ITYM facts.

      Interesting, though. I didn't know that.

      nice try

      So, COBOL coming from industry and government people makes it an academic language?

      How is industry and governemt academia? It's pretty much a description of wehat academia isn't.

      --
      SJW n. One who posts facts.
    11. Re:Article contians junk by MadKeithV · · Score: 1

      I'm glad the author never tried to argue that C++ has internal consistency (I do love C++, but...).

      Wrong. C++ is consistently inconsistent, except when it isn't!

    12. Re:Article contians junk by mapkinase · · Score: 1

      Does not matter. One of very important reasons why they are developed within the rest of the package is because they need a functionality of the rest of the package: ergo, the choice of package and language.

      --
      I do not believe in karma. "Funny"=-6. Do good and forbid evil. Yours, Oft-Offtopic Flamebaiting Troll.
  13. All I want is one GOOD programming language. by blcss · · Score: 1

    A programming language that doesn't have any irritating flaws or omissions, that's all I want. Am I asking too much?

    Okay, maybe two. One optimised for system programming to replace C, and another, higher level, for applications. Give them both very similar syntax and semantics, except where differences are called for by their different purposes.

    Instead, we get dozens upon dozens of languages that are distinguished only by their various flaws, limitations and arbitrary differences in syntax and semantics. Why? Is no one even TRYING to get it right?

    --
    We don't need yet another new programming language. Let's just pick an existing language and fix its flaws.
    1. Re:All I want is one GOOD programming language. by jholyhead · · Score: 1

      Programming languages are tools. You pick the best one for the job, but no language is every going to be ideal for every possible application. It would be like a builder saying 'all I want is one good screwdriver'

      No one ever designed a language intending for their to be flaws or omissions.

    2. Re:All I want is one GOOD programming language. by Anonymous Coward · · Score: 0

      Programming languages are not like tools at all. A tool serves a purpose. A programming language represents the solution of a set of problems.

      In your analogy, the problem is "mechanical assembly", and the set of problems is "manipulation of physical objects". The screwdriver is just one function within one library.

    3. Re:All I want is one GOOD programming language. by Anonymous Coward · · Score: 0

      With LISP you can make your own tool for the job.

    4. Re:All I want is one GOOD programming language. by jandersen · · Score: 1

      A programming language that doesn't have any irritating flaws or omissions, that's all I want. Am I asking too much?

      Yes. What you need, IMO, is not "a good language", but to learn to master one or a few. Likely candidates could be C, C++ or Java, which one doesn't really matter. Whining about "nothing is good enough" is just stupid.

      Is no one even TRYING to get it right?

      Are you? Change your attitude and contribute something.

  14. Re:Examples include by freedumb2000 · · Score: 3, Insightful

    You should at least provide some arguments as to "why" you think those are bad examples. Otherwise do not be surprised to be modded flamebait.

  15. It's the libraries and frameworks, stupid by Anonymous Coward · · Score: 1, Interesting

    We don't really need any new languages. We need libraries and frameworks that are simple, flexible, minimalistic and don't force you into their own unintuitive way of doing things just so they can claim to have cobbled together 300 design patterns into a buzzword compliant mess. All the libraries and frameworks are complete ass. Java and .NET, C and C Sharp. All crap. We've actually gone backwards in the last 15 years. It use to be relatively easy to put together a program that did simple IO and database work. Now you have to create mappings and configuration that makes things slow and cumbersome. The solution when you get bogged down? Lightweight cobbled together languages that can't scale for shit. When I was programming int he mid 90s it use to take 2 hours to prototype a screen to show a customer. Now you're lucky if it takes a week, and you spend another week on test cases that have less to do with actually being useful than meeting some damn coverage quota. Programming, like most things has regressed in the last decade and a half.

    1. Re:It's the libraries and frameworks, stupid by Anonymous Coward · · Score: 0

      I don't know about Java, but you can do simple IO and database work in .NET without creating any mappings or configurations.

    2. Re:It's the libraries and frameworks, stupid by shutdown+-p+now · · Score: 1

      You can do it in Java, too. JDBC is still there, and offers largely the same level of abstraction as ADO.NET.

  16. Re:what a croc - they never heard of Greenspuns 10 by serviscope_minor · · Score: 1

    How many more 'new' languages do we have to wade through until we fintd one with something significantly more interesting than already found in Lisp?

    Sooner or later, everyone will realise LISP is the best language (Since 1985 (tm)).

    Lisp is wonderfully flexible, but the trouble is it has not syntax and you basically write your program as an AST (there's a reason for the A in AST in most languages).

    There's no parser for nice syntax, so you basically have to do undo the process of writing it in AST notation in your head to understand semantically what's going on.

    To me and many other people this makes it really a pain in the neck to read and therefore hard to use. It puts too much of a load on the programmer.

    The concrete syntax of other languages makes them much easier to read (and therefore write/debug). Sometimes, the benefits of being able to happly mess with the tree before running the program outweighs the benefits of being LISP. As other languages get better and more expressive, the times when the flexibility of LISP is a benefit get fewer and fewer.

    --
    SJW n. One who posts facts.
  17. Compilers by Anonymous Coward · · Score: 0

    I am still wondering why there are such huge differences in performance between the languages. We should have gotten to a point now where it doesn't matter what language/design pattern/paradigm you employ to solve your particular problem, therefore the language of choice would be the most legible/reusable etc. The ideal should be not to worry about the how and focus on the what; an application developer should focus on his application's functionality. Any specific optimization for whatever platform should be done by the respective compiler, i.e. should be only the concern of the programmers that write the compiler. There is no real reason why something written in Python or Ruby couldn't be compiled to a binary with the same performance as something written in C/C++.

    1. Re:Compilers by Thiez · · Score: 1

      > There is no real reason why something written in Python or Ruby couldn't be compiled to a binary with the same performance as something written in C/C++.

      Yes, there is. Because Python and Ruby use dynamic typing, the compiler gets to make fewer assumptions about the code, and it has to check types during runtime. You may end up with a binary that has performance that is close to C/C++, but for almost all cases you'll never quite get there. Having said that, it usually doesn't really matter if your code runs half (or even 1/10th) as fast as a comparable C/C++ implementation unless you're doing heavy number crunching or your code is used extremely often and does not spend most of its time waiting for IO.

    2. Re:Compilers by gbjbaanb · · Score: 1

      it usually doesn't really matter if your code runs half (or even 1/10th) as fast as a comparable C/C++ implementation unless you're doing heavy number crunching or your code is used extremely often and does not spend most of its time waiting for IO.

      I used to think that too, but as facebook (and all the accelerator libraries) has shown, there's a lot of inefficiency in running everything in a scripting language which overall slows your app down and doesn't let it scale so well.

      Its ok to say it doesn't matter as your app spends most of its time waiting for IO, if there are 1000 requests coming in at once, then you realise the CPU is running flat out.

      So now I think the best way to write your app is php or python or whatever in the web server grabbing requests from the browser and passing them on to a C++ app for crunching. You also gain a load of security by splitting things up like this, as well as 'enforced design' where the script developer cannot just hack in a quick routine without speccing it properly for the C++ app to implement.

  18. Compiled vs. scripting languages by Lazy+Jones · · Score: 3, Interesting

    The article seems to ignore modern compiled (and carefully crafted) languages like Scala, Limbo, Go and tries to criticize the wide adoption of scripting languages among people who aren't really pure developers (as if they mattered!) and those developers who value development speed over quality, maintainability and performance or in places where network and/or human input latency abolish any other performance concern.

    I would worry if important projects with large budgets and generous timeframes switched from Java to e.g. Ruby, but this won't happen. The existing compiled languages for such purposes are obviously very good already, so why should it matter that a new compiled-to-JS-language pops up every day?

    --
    "I love my job, but I hate talking to people like you" (Freddie Mercury)
    1. Re:Compiled vs. scripting languages by Anonymous Coward · · Score: 0

      Go is not carefully crafted.

    2. Re:Compiled vs. scripting languages by dkf · · Score: 1

      I would worry if important projects with large budgets and generous timeframes switched from Java to e.g. Ruby, but this won't happen.

      You're more likely to see large projects use multiple languages (e.g., Java to make components, JRuby to stitch them together). This makes a lot of sense because it is using languages for the purposes they were designed for; Building high-level apps in just low-level languages is a PITA because of the amount of work involved, and building low-level apps with high-level languages is a very peculiar kind of crazy, but using things for their strengths is just smart. By using such combinations, large projects can achieve much more than they would otherwise (or what would have been a large project could be brought within the grasp of a small team).

      I suspect that the real story of programming languages over the past few decades has been the slow death of monolingualism. These days, I only really see it with noobs and diehard C++/Lisp aficionados.

      --
      "Little does he know, but there is no 'I' in 'Idiot'!"
    3. Re:Compiled vs. scripting languages by Anonymous Coward · · Score: 0

      C++'s strategy of "one language for all needs" probably set back software engineering by a whole generation. Just like the old-timers say BASIC was considered harmful; I'm going to throw that at C++.

    4. Re:Compiled vs. scripting languages by Anonymous Coward · · Score: 0

      Your face wasn't carefully crafted either but I don't see anybody giving a shit.

    5. Re:Compiled vs. scripting languages by K.+S.+Kyosuke · · Score: 1

      Go is actually in the process of being very carefully crafted right now. Just because it isn't shaping up as the language you would like it to be does not make it crafted carelessly.

      --
      Ezekiel 23:20
  19. "coercing developers" by Daniel+Dvorkin · · Score: 1

    So is that where someone puts a gun to your head and says "develop in my new language or else," or where you sit down to try out a new language only to discover that it's changed you into a completely different type of developer?

    --
    The correlation between ignorance of statistics and using "correlation is not causation" as an argument is close to 1.
    1. Re:"coercing developers" by jholyhead · · Score: 3, Funny

      You've never been to a Rails convention have you?

    2. Re:"coercing developers" by Anonymous Coward · · Score: 3, Funny

      No. As a woman, I'm pretty sure I'm not allowed to attend.

  20. horses for courses by HarryatRock · · Score: 5, Insightful

    I have programmed professionally in more than 30 languages including machine codes, assemblers, FORTRAN, COBOL, Algol, C,C++, lisp, Prolog, and a variety of "4GL"s. I have used Java and Python since retirement and I can say one thing for sure about them all. Choose the right one for the job and you're half way done, choose (or be forced into) the wrong one and you you are going to pay for it in blood, sweat and eventually tears. On at least two projects (each being more than 50 man years of design and coding effort) it was worth devising a new language with a syntax suited to the problem and writing the compiler. For some jobs, readability of the code by non IT staff can give a huge payoff, for others raw performance is the only criteria. Real time interaction with physical systems usually needs a "lower" level, C or even assembler, Complex data requires object orientated structures and for once off "need it today" jobs, Java might be the answer. Maintainability brings another load of constraints, as does the intended "longevity" of the project, and don't get me started on the whole domain of "proof of correctness".
    It is very easy to forget that a language is just a tool. If you only have a hammer you will find screwing a problem, but then you are reading this on slashdot.

    --
    nec sorte nec fato
    1. Re:horses for courses by JoeMerchant · · Score: 2

      On at least two projects (each being more than 50 man years of design and coding effort) it was worth devising a new language with a syntax suited to the problem and writing the compiler.

      Hmmmph.... I guess that's what I've been doing with .XML (and, things very much like .XML before it was named as such) all these years.

    2. Re:horses for courses by 3seas · · Score: 1

      Oh my, a Programmer Guru on Slashdot. A very rare occasion indeed. Please be our new overlord.

    3. Re:horses for courses by 3seas · · Score: 1

      BTW, in old not-for-profit community theater, using a hammer to insert screws into the gussets/frames when making flats was an accepted practice as once the glue dried you could unscrew the screws for reuse. Today you probably won't see that. But it goes to show Exceptions to prove the rule..

      To be clear HarryatRock, you have my respect, for your programming background and wisdom.
      http://abstractionphysics.net/pmwiki/index.php

    4. Re:horses for courses by Inda · · Score: 1

      Hammers for putting screws in.

      Screwdrivers for removing them.

      It's the law.

      --
      This post contains benzene, nitrosamines, formaldehyde and hydrogen cyanide.
  21. Re:Examples include by mikael_j · · Score: 2

    Register globals has been off by default for I don't know how many years.

    Magic quotes is officially deprecated.

    What serious developer doesn't use PDO/mysqli and prepared statements?

    --
    Greylisting is to SMTP as NAT is to IPv4
  22. True creation is from a person alone, usually by hcs_$reboot · · Score: 2

    I had to create a few simple languages during my developer years. I see the creation of a language like the writing of a novel. There is a direction, a style, a set of consistent syntax and rules. C, C++ or Java are for me good examples of consistent languages, lisp and Perl also.
    And unlike the examples given in TFA, I don't think PHP represents a language created by a unique person - being too inconsistent on many respects.

    --
    Slashdot, fix the reply notifications... You won't get away with it...
  23. Languages by Anonymous Coward · · Score: 1

    You have to keep an open mind about things like this. I can see where the person comes from... PHP is always getting ragged on by the more seasoned programmers who can't get over themselves, but lo and behold, it's used in practically every damn website on the internet and then-some. So it's apparently doing something right--and PHP is still pretty young.

    It's great to be an old fart with skill and experience. It's great to be young and full of ambition... But both fail every time when they close their minds off to new concepts and ideas. You may think that one programming language is the same as the other 3 or 4 you've recently learned through the past however many years, but chances are you're not paying attention enough to see something that would otherwise make you think differently.

    (But I'm not sure if these languages come from designers... I'm sure some designers might've had their hand in them, but chances are most if not all had at least SOME programming experience. I mean, c'mon, you don't create languages without having that kind of experience.)

    1. Re:Languages by PPH · · Score: 1

      but chances are most if not all had at least SOME programming experience. I mean, c'mon, you don't create languages without having that kind of experience.

      Haven't been around academia much, have you?

      As has been pointed out, most new languages are driven by the requirements of a PhD thesis. But throw these people out into the cold, cruel world and you'll see them start to fall back on what's tried and proven.

      --
      Have gnu, will travel.
    2. Re:Languages by Anonymous Coward · · Score: 0

      fall back on what's tried and proven
      Tested, not proven. "Proven" applies to what they were using before they graduated.

  24. Re:Examples include by Richard_at_work · · Score: 3, Insightful

    The problem isn't "serious developers", it's those that aren't taking it seriously.

    You can take all the precautions you like, but short of getting your own dedicated server and running nothing but your own code (or code you have audited), you are always at risk of the issues introduced by someone else. On a shared host, an exploit in someone elses code is only one local exploit away from your data...

  25. Translation: by Anonymous Coward · · Score: 1

    For all of you that don't want to spend a minute reading this shit:

    "Computer Science is boooooring! Look at me! I'm a designer!!! I'm cool!"

  26. Re:Examples include by TheRaven64 · · Score: 4, Insightful

    Any Turing complete language provides an infinite number of ways of solving any given problem. The difference between a good language and a bad one is whether the easiest and most obvious way of doing something is the correct way. The existence of things like register globals and magic quotes that can only be used incorrectly is a good sign of poor design.

    --
    I am TheRaven on Soylent News
  27. Mod parent up by Viol8 · · Score: 2

    "o no, programming is not a playground, it's a serious matter. And as far as you don't understand what a buffer overflow is (and a load of other things), your employer shouldn't allow you to code."

    Amen to that. If only more people had the same views. Code is what keeps modern society running and the last thing thats needed is amateur hour when writing in critical systems. Just because any idiot can write simple code with a bit of training doesn't mean any idiot SHOULD be writing code. Any idiot could probably learn to fly a plane but I wouldn't want them at the controls of a 747 I'm in.

    1. Re:Mod parent up by JoeMerchant · · Score: 1

      Just because any idiot can write simple code with a bit of training doesn't mean any idiot SHOULD be writing code. Any idiot could probably learn to fly a plane but I wouldn't want them at the controls of a 747 I'm in.

      Absolutely, but, also recognize that most code written and deployed more closely resembles toy RC cars than 747s in terms of life safety, capital investment, and potential for collateral damage. The hobby landscape provides a rich training and development ground that ultimately leads to better products at the serious end of the scale.

      Hiring a high-school dropout script kiddie to work on a "big time serious system" would be an instant red-flag. What we also need to recognize is that some PhDs with "coding experience" are just as ignorant of best practices and as dangerous to a project as the script kiddie, potentially moreso if you don't give them adequate oversight and review.

      Note that programming language is totally absent in the discussion of safety above, you could attempt to throw it in there, but it's not really a significant component of safety compared to the people using the language, and the processes they use to ensure safety.

  28. what does not? by mapkinase · · Score: 2

    >New Programming Languages Come From Designers

    What does not nowadays?

    --
    I do not believe in karma. "Funny"=-6. Do good and forbid evil. Yours, Oft-Offtopic Flamebaiting Troll.
    1. Re:what does not? by El_Muerte_TDS · · Score: 1

      >New Programming Languages Come From Designers

      What does not nowadays?

      Solutions to actual problems.

  29. familiar and unfamiliar languages by Black+Parrot · · Score: 1

    The summary lists several popular languages as examples. Do her results hold if you include less popular, exotic, and experimental languages?

    --
    Sheesh, evil *and* a jerk. -- Jade
  30. I'm sorry but... by blcss · · Score: 2

    there's no way "the best tool for the job" can justify any of:

    Java's badly designed core class library, with its lack of logical consistency and its abuse of structured exceptions.
    C's preprocessor. There are better ways to implement constants and macros.
    Multiple inheritance and operator overloading in C++. *
    PHP semantics changing with each configuration.
    Perl's horrible syntax. *
    SQL's numerous security vulnerabilities.
    LISP's non-procedural pretensions, and the contortions that result.

    Nearly every language's dependence on its own class libraries, because interoperability is unthinkable. What's the point of living if you can't reinvent the wheel?

    * "Well, just don't use those features!" Go tell that to the guys who wrote the code I'm expected to debug. If you can manage to track them down somehow. They're long gone.

    --
    We don't need yet another new programming language. Let's just pick an existing language and fix its flaws.
    1. Re:I'm sorry but... by gbjbaanb · · Score: 1

      operator overloading and MI in C++ are good things, I expect you'd want the dumbed down version of them in languages like java or .net where overloading is basically add-on methods, and MI is single inheritance for the first class, and interface inheritance for the others. The latter is particularly depressing (ie choose one or the other guys)

      You can also forgive C's preprocessor, as it was needed way back in the day of low-power computers. Naturally, things you used back then stay with us if people still find them useful (eg goto is hardly ever used nowadays)

      SQL doesn't have any security. If you're thinking of sql injection attacks, that's a problem with the client not validating user input, not SQL. The client is persuaded to pass a different SQL string to the DB, but that SQL must still be valid.

      Still, different tools for different jobs is a good thing. I think we're missing a really good language for GUI creation, as that always seems to be implemented in whatever language the rest of the system is written in (which leads to the usual monolithic crappy apps we put up with, the exception being some web apps where the GUI has to be implemented differently).

    2. Re:I'm sorry but... by shutdown+-p+now · · Score: 1

      Why wouldn't I want to use multiple inheritance and operator overloading in C++? Both are extremely useful features that make the code both concise and more readable, when used for appropriate things (an example of both not being used for appropriate things is C++ iostreams).

    3. Re:I'm sorry but... by Grishnakh · · Score: 1

      "The best tool for the job" doesn't mean "the best tool that can possibly be invented right now, but which probably doesn't exist", it means the best tool that is currently available. If I want to hang a picture, the best tool for the job is a hammer and a nail and maybe a stud finder depending on the weight of the picture, because those are the tools I have available. The best possible tool would be a robot that I can order to hang the picture for me, and which uses laser sensors to find the best possible place to install the picture, and is able to install a special hangar system on the picture so that it's always square (top is perfectly horizontal, sides are perfectly vertical) and can't be bumped so that it's crooked, and is able to do this all for me with some simple verbal commands. However, no such robot exists currently (and if it did, it'd be far too expensive for me to buy one just for hanging some pictures), so I have to use the tools I have available to me. So I use a hammer and nail, rather than a circular saw or sandpaper.

      As for fixing (perceived) flaws, you can't do that. One of the hallmarks of most programming languages is compatibility. If you make a new version of Perl that cuts out a lot of the horrible syntax, it won't run a lot of Perl programs, so you can't really call it "Perl" any more, and people who want a Perl interpreter aren't going to use yours because they want something that can run any Perl program they throw at it, even if that means accepting horrible syntax. It's like making a super new screwdriver that only works with one special kind of screw. No one's going to buy that because they don't want to be restricted to your special screws, they want to be able to use their screwdriver on any screw, including ones they need to remove when working on an old house. They don't care that flat-blade screws suck, or that Philips screws are easily stripped, and that Torx screws are so much better. All the stuff they buy is made with Philips screws, so that's the screwdriver they're going to buy and keep for most jobs.

  31. Is she right? by JoeMerchant · · Score: 1

    'one striking commonality in all modern programming languages, especially the popular ones, is how little innovation there is in them!' and 'We require scientific evidence for the claimed value of experimental drugs. Should we require scientific evidence for the value of experimental software?' Is she right?

    Absolutely on point #1 - what dope smoking communist closet did she just stagger out of to come up with point #2? If it works and you like it, use it.

    Of course, of the languages listed (PHP, JavaScript, Python, Ruby), I've never done anything "real" in any of them (meaning, sustained development & support > 6 man months) though JavaScript is trying to weasel its way into my Qt world via Quick....

  32. I dont need to to learn another language just yet by Anonymous Coward · · Score: 1

    10 PRINT "Hello, world!"
    20 GOTO 10

    I'm still waiting for this to finish running so I can move on to lesson 2.

  33. How coercing works by blcss · · Score: 1

    "You code in the language we tell you to, or you're fired."

    Screw this, I'm gonna go look for another job.

    So you go on dice.com...

    "You code in the language we tell you to, or you don't get hired."

    --
    We don't need yet another new programming language. Let's just pick an existing language and fix its flaws.
  34. So efficiency is no longer a worthy characteristic by Jawnn · · Score: 3, Interesting
    FTA:

    ...marred them with ultra efficient syntax in the name of hardware...

    I stopped reading right there.

  35. Re:Examples include by i_ate_god · · Score: 2

    indeed, good thing they are removed then isn't it

    --
    I'm god, but it's a bit of a drag really...
  36. "Coercing developers" by Anonymous Coward · · Score: 1

    "....something is indeed missing in coercing developers that a modern language has valid offerings worthy of their time."

    What's missing is putting a gun to their heads.

    "Coercing" means forcing. Surely the article description meant "convincing."

  37. Re:Examples include by garaged · · Score: 3, Informative

    Register_globals was completely removed in the latest PHP version out in the world a couple of days ago

    --
    I'm positive, don't belive me look at my karma
  38. Re:Examples include by mikael_j · · Score: 1

    Right, I completely forgot they released 5.4.0 last week.

    Yeah, I think they nuked magic quotes with 5.4.0 as well.

    --
    Greylisting is to SMTP as NAT is to IPv4
  39. Best of both words by SolusSD · · Score: 1

    You can write incredibly performant code that is easy to reason about in Common Lisp or Clojure. We don't have to choose between performance and usability.

  40. Re:Examples include by justforgetme · · Score: 4, Interesting

    Which is something that affects every single computation ever done, from meta programming to processor microcode to pen and paper multiplication.
    So, yes it is true but also irrelevant.
    As is the question of the AC that spawned this debate.

    As is the story really (in my very honest opinion). I don't care where the language I program comes from as long as it behaves as I want it to. today languages are designed instead of being engineered. Ok, I'm pretty sure that when some mega corp or institute finds itself in dire need of creating a language, to solve all their computational problems, they will engineer one or design one depending on their needs. Compiler creation guidelines flow freely on the net and are available in books as well, Why wouldn't someone create a new language if he felt like it? And why wouldn't other people adopt it if they felt like it.

    Whoever thinks that all technological progress should come out of universities is fooling himself, nothing bad is happening here.

    --
    -- no sig today
  41. Minor quibble by brokeninside · · Score: 2

    The difference between a good language and a bad one is whether the easiest and most obvious way of doing something is a correct way.

  42. Re:Examples include by JoeMerchant · · Score: 1, Troll

    What serious developer doesn't use PDO/mysqli and prepared statements?

    I've been programming for 30 years, 20 for pay, 15 in some management capacity (always with at least 50% hands on coding time), and I don't know what the hell you're talking about, I suppose I could Google it, but why?

  43. Re:Examples include by justforgetme · · Score: 3, Insightful

    Come on Raven, this isn't even an argument. The two settings you talk about had a reason to be there, they provided functionality. Sure it is common sense now that this type of functionality has way too many drawbacks and this is why it is being iterated out of the language. All I see being talked about in this whole thread is features of languages that when used by some half informed programmer can have a bad effect.

    Dear everybody: Please, get over it. Every language will bite you in the ass if you are going to create a big enough program in it. Every C writer in history has at some point written a buffer overflow, every code monkey an SQL injection, every rails genius a mass assignment vulnerability and don't even get me started on MicrosoftLand...

    The fact of the matter is this: "It's not the language it is the DEADBEEF in front of the keyboard."

    --
    -- no sig today
  44. It is not where from, it is where to what matters by Anonymous Coward · · Score: 0

    It does not matter where computer languages came from, because ...

    They all will either fail or end up being Common Lisp.

    so, whatever your roots are, you will either fail or end up rediscovering academia.

    Kinda makes sense to me.

  45. Re:SNOBOL by Phrogman · · Score: 1

    I think I still have my manual for SNOBOL somewhere. I doubt I would have gotten rid of it. Anyways I remember it fondly as well, although I didn't end up using it a lot.

    --
    "The first time I got drunk, I got married. The second time I bought a chimpanzee, after that I stayed sober" Arian Seid
  46. Re:Examples include by Anonymous Coward · · Score: 0

    Serious developers need to code so their code either refuse to run or run correctly under any version of PHP: the code may be reused by others or moved to a different server with an older PHP. Therefore, the code must still contain all these hacks to deal with these braindead features.

  47. Re:I dont need to to learn another language just y by cowdung · · Score: 2

    Hey! You plagiarized MY first program!

  48. Re:Examples include by Richard_at_work · · Score: 3, Insightful

    No, it's not irrelevant, infact it's as far from irrelevant as it's possible to be.

    You can use all the correct methodologies you want, but if you haven't secured the environment then you are trusting everything else to be correctly coded.

    Now, with OSes etc that's always going to be a factor to a degree, but the situation here is when you are trusting every other developer hosting their code in a shared platform - in that case you can do everything correctly, you can use PDO, you can turn off Globals, but you can't trust someone else to have done the same.

    So its utterly relevant that the issue is not just applicable to "serious developers", it's the 14 year old who has banged something out before bedtime and uploaded it to their host - a compromised account is still a compromised account, whether it's a "serious developers" account or not, and their compromised account can expose your data without you ever doing anything wrong (other than picking a bad shared host).

    The problem isn't people creating new languages, its people creating new languages with gaping holes to start off with - register Globals should have been rejected from the outset, instead it became ingrained into the language to the point where it's taken a decade to get rid of it in the latest versions.

  49. strongly typed primitives by Anonymous Coward · · Score: 1

    So, that is why PHP and JavaScript are so damned basterdized. If these languages were strongly typed, I'd be much happier.

    Tell you what, come up with a new language to unify databases and HTML 5 such that it is secure and provides alot of compile time errors. Then I will be hapyy. I am few up with finding bugs only after uploading my PHP files to a server.

    1. Re:strongly typed primitives by PPH · · Score: 1

      Even one with a good spell checker would be nice.

      --
      Have gnu, will travel.
  50. Abstraction Abstraction, who's got the next..... by 3seas · · Score: 1

    ....abstraction. Better yet what they are made of ... http://abstractionphysics.net/pmwiki/index.php

  51. Re:Examples include by TheNinjaroach · · Score: 2

    What serious developer doesn't use PDO/mysqli and prepared statements?

    What serious developer uses mysqli? (Just kidding of course!)

    But really, all of our business data is on SQL Server or DB2/400. And the PDO drivers for either SQL Server or ODBC (DB2) are buggy and incomplete. Hell, the entire PHP implementation of ODBC is buggy, it intentionally trashes all numeric data types and instead treats them as strings.

    PHP is my bread and butter, but it's also kind of a ghetto.

    --
    I went to eat some animal crackers and the box said, "Do not eat if seal is broken." I opened the box and sure enough..
  52. Zork Implementation Language and Malaga by Anonymous Coward · · Score: 0

    Both ZIL and Malaga were designed to solve a particularly difficult case.

    You could not have fitted Zork to Commodore 64 with assembler, or you would become insane when trying to spell check Finnish language with Java.

  53. Re:Examples include by Barefoot+Monkey · · Score: 1

    Really? *goes to check the changelogs* And Magic_quotes was removed too! This is excellent news - disabling-by-default and deprecating did little to protect us from almost half the shared-host admins in the world switching those options back on.

  54. value(new lang) cost(learn new lang) by Anonymous Coward · · Score: 0

    Sure, there are tons of new languages springing up every day, each offering (presumably) some advantage in some problem space. The practical matter is, though, that if you're going to do something (e.g. write a program to meet some need) once, using the old inefficient language you know might cost less than the combined cost of learning the new language (and/or suffering through its birth pangs) and the increased efficiency of the new language.

    This is especially so when your new thing needs to integrate with a lot of old things. You're writing a new image processing algorithm and can choose any language you like, but it has to integrate into a larger system that is entirely written in FORTRAN. And it has to be maintained by others sometime in the future, so your choosing a new and different language (that perhaps you invented and know really well) imposes a requirement on everybody else downstream to learn that language.

  55. Re:Examples include by Surt · · Score: 1

    He omitted 'php' from serious php developer. Probably because we'd all have laughed at the notion.

    --
    "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
  56. Re:Examples include by Anonymous Coward · · Score: 0

    Not every "serious developer" is working on a wordpress/joomla/drupal clone.

  57. More than enough, and too alike. by Anonymous Coward · · Score: 0

    There are, and have always been big problems with programming languages
    - In the early days, 1960 ... 1975 the hardware was just too weak
    - Immediately after that the problem of Complexity was not understood, BCPL(Martin Richards) and C (Brian Kerrigan) excepted.
    - New Languages Pascal, Modula 1..n were a path to PhD and chair (Niklaus Wirth)
    - Good Compilers and Runtimes are very hard, Optimization is harder
    - Complexity is the first enemy of correctness (C++, PL/1), obscure syntax does not help (lisp, Python)
    - Long windedness and dependance on IDEs produced opaque rubbish (java, Cobol)

    Language Standards Committees, with industry packing are 80% of the problem and the reason that most language designs get worse.

    It is a real mess and Universities teaching programming religeon, without practical experience, are a big part of the problem.

    The compute resources are there to do a decent job, but the dead hand of established technology and debugged compilers (GCC) will make progress
    very slow.

    MFG, omb

  58. "The value of experimental software"!? by Anonymous Coward · · Score: 0

    "Should we require scientific evidence for the value of experimental software"
    Funny how nobody else has found this as scary as I do. Think about it. Who would be qualified to determine the value of, say, a programming language? Microsoft? Oracle? Novell? SCO? if so, would it surprise us how many languages would be found to be not of value...and how the "valuable" ones just happen to be a Microsoft (for example) staple.

    Miss Vidiera, let's not uncork that genie....please?

  59. Re:Examples include by Anonymous Coward · · Score: 0

    He's talking about php and database interfaces. If you haven't programmed in php you probably haven't come across it.

  60. Sounds Like Someone's Mad... by Anonymous Coward · · Score: 2, Informative

    Sounds like someone's mad that they spent a lot of time getting a PhD only to find out that a PhD wasn't necessary to be successful in computing.

    From TFA: "[T]here appears to be no correlation between the success of a programming language and its emergence in the form of someone’s doctoral or post-doctoral work. This bothers me a lot, as an academic. It appears that deep thoughts, consistency, rigor and all other things we value as scientists aren’t that important for mass adoption of programming languages. "

    If someone doesn't come from a scientific background it's simply impossible for them to have deep thoughts and rigor in what they produce? I doubt it. I'm fairly certain that deep thought, consistency, and rigor were put into the programming languages mentioned in the article.

    We need less elitism like that shown in this article. I may be jaded by the fact that at my university, our professors were horribly clueless about seemingly every modern computing concept and were still using Pascal to teach programming. When all academia taught was Pascal and even worse languages and old concepts, it's no wonder that people created other languages to get things done.

  61. Re:Examples include by Anonymous Coward · · Score: 0

    You're wrong! It's a sign of "no design".

  62. Re:Examples include by Half-pint+HAL · · Score: 2

    Come on Raven, this isn't even an argument. The two settings you talk about had a reason to be there, they provided functionality. Sure it is common sense now that this type of functionality has way too many drawbacks and this is why it is being iterated out of the language.

    But these are the sort of universal errors that computer science has been thumping on about for decades. New languages from within academia are generally rejected because they try to eliminate hacky coding and force good practice from the ground up. Meanwhile languages from outside academia are designed around the coder's own bad habits and reinforce those habits in others.

    So what's not an argument? Even if the original designer of PHP wasn't thinking about shared services, the academics were, and people refused to listen to the academics, even going so far as to tell them to enter "the real world".

    But sorry, if a job's worth doing, it's worth doing right.

    --
    Got them moderator blues I blieve I walk out the do', With these mod-points I been gettin', I 'most never post no mo'
  63. C is lame, but very much worth using by Medievalist · · Score: 2

    C isn't a perfect language? The base language reads like a cross between Macro'd ASM and algebra. This IS the perfect syntax.

    It doesn't have a data-type-independent exponentiation operator. It's got plus, minus, division, multiplication... but no exponentiation. Sorry, but that omission is just fundamentally retarded.

    And I am a big fan of C, incidentally - I prefer it above other languages for its efficiency and near-universal portability. Only perl comes close to being as portable, and perl is a nightmare of overlapping, gibberishy TMTOWTDI syntax.

    C's got serious problems. So does perl. Neither one is anything close to perfect, but they are almost certainly the best languages to write in because of their extreme portability. Using C, I can run code written for a PDP-8 on an MVS mainframe, a linux PC, or a DEC Alpha. Using perl, I can run the exact same code on windows and unix. It doesn't make sense for me to throw away that portability unless I am purposely writing a niche solution to compensate for a specific OS's problems.

    1. Re:C is lame, but very much worth using by Anonymous Coward · · Score: 0

      It doesn't have a data-type-independent exponentiation operator. It's got plus, minus, division, multiplication... but no exponentiation. Sorry, but that omission is just fundamentally retarded.

      Not sure what you're talking about here. Why would you want a data-type-independent exponentiation operator? And if you did, what's wrong with writing functions (or using the one in the library)? Plus, minus, division and multiplication all depend on the data-type. Some data-types don't have multiplication operators, for example, and therefore no exponentiation.

    2. Re:C is lame, but very much worth using by Medievalist · · Score: 1

      You're trolling, right? Basically, you're asking me "why do you want to own a chainsaw when your neighbor has a nice dull stone axe he's willing to let you borrow?" I actually find that hard to answer... mostly because of the laughter!

      OK, let's see; an example might help. In most languages (including C) you use a single operator, the addition operator, to add variables of any data type.

      You don't have to to know about the library that implements the add_*() family of functions, or define an add_float(a,b), add_integer(a,b), add_double(a,b) function for each data type, you don't have to write separate code for each one or spend hours figuring out how to make a generic one (which is actually not possible in C, but you can get really close). You just use a plus character and make sure you have matching data types for all the variables in the expression. For example, total = subtotal + entry does not have to use a special datatype specific operator, or include a math library, or any such pointless wastes of programmer time.

      In nearly all languages, not including C, exponentiation works the same way. You just say a_cubed = a^^3 or something like that. In scientific computing, exponentiation is very heavily used and in most languages it's dead easy.

      If you enjoy languages that waste your time and effort for no good reason, you'll just love exponentiation in C. You'll hate all the sane and normal C operators, though - so I recommend this language to anyone who thinks C's treatment of exponentiation is reasonable. You'll love it!

    3. Re:C is lame, but very much worth using by Anonymous Coward · · Score: 0

      Err, no, exponentiation operator is not very common outside of languages aimed at scientific computing, and it's quite reasonable - you rarely need more support for exponentiation than provided by x*x and x*x*x when you're not doing science.

      Oh, and if you want to see lacking operators that are really worth bitching about, go see Lua. It has _no_ standard bitwise operations. As in none whatsoever, not even as bitand(x, y) functions.

      And what's funny, it didn't stop its adoption at all, so your "I don't wanna type pow(x,y)!" sounds pretty weak in comparison.

  64. Re:what a croc - they never heard of Greenspuns 10 by Surt · · Score: 2

    LISP loses, and will continue to lose until they address the fact that the imperative-c-style is the right choice 90% of the time, and that the core advantages of lisp apply only to the other 10%. Which is why the languages that focus on getting the 90% right, and finding some way to manage the other 10% effectively will forever be leaving LISP in their wake.

    --
    "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
  65. liberlang? by tepples · · Score: 1

    Is there a widely used library to simulate Erlang's concurrency model on top of C++, much as Objective-C roughly simulates Smalltalk's object model on top of C?

  66. How to keep DB passwords secret? by tepples · · Score: 1

    Someone who can't keep passwords a secret is unlikely to understand what a buffer overflow is

    So in a PHP program that connects to a MySQL database or to web services using OAuth and the like, how do you recommend to keep the password accessible to the PHP program yet not accessible to the public?

    1. Re:How to keep DB passwords secret? by mandelbr0t · · Score: 1

      Easy. Create an account (or use the webserver's account) for the PHP program and store credentials in $HOME/.my.cnf. Ensure .my.cnf is only readable by the program's account.

      --
      "Please describe the scientific nature of the 'whammy'" - Agent Scully
  67. Re:So efficiency is no longer a worthy characteris by Errol+backfiring · · Score: 1

    Wow. This must be the first SlashBookMark.

    --
    Nae king! Nae laird! Nae yurrupiean pressedent! We willna be fooled again!
  68. Re:Examples include by Shotgun · · Score: 0

    New languages from within academia are generally rejected because they try to eliminate hacky coding and force good practice from the ground up.

    From my own experience, academic languages tend to be rejected because they turn out to be useless beyond creating the type of toy programs that one tends to create in academia. That is, the languages tend to be designed around the academics own myopia and lack of need for mechanisms that don't lend themselves to simple solutions.

    --
    Aah, change is good. -- Rafiki
    Yeah, but it ain't easy. -- Simba
  69. for (i, el) in enumerate(list) by tepples · · Score: 1

    I have a different view of this. I think the second example is a more useful construct, as it exposes i, as well as list[i]

    In Python, you can do that too: for (i, el) in enumerate(list). The function enumerate() wraps anything iterable with an iterator that returns (index, element) tuples.

  70. Oh, thank heaven. by blcss · · Score: 1

    Better late than never.

    --
    We don't need yet another new programming language. Let's just pick an existing language and fix its flaws.
  71. JavaScript by tepples · · Score: 1

    So why do people (hotshots) keep reinventing the wheel, instead of contributing to libraries for LISP and/or Scheme?

    Because they are using Lisp, after a fashion. The original plan for Lisp was to have a more traditional syntax called "M-expressions". These have been realized in JavaScript, which combines C-like syntax with the semantics of Scheme and Self.

  72. I must agree by gravis777 · · Score: 1

    I have found the most annoying language to program in to be Python. And I couldn't see the point of it. I had to do some debugging because, at my last job, some wise guy thought it would be a good idea to design our own database, and to program the entire thing in Python, then, right before it was finished, he left the company. There was nothing I saw that we couldn't have done in C or Java, the language was almost identical to C and Java, if you updated Python, suddenly your program broke, and as it wasn't a compiled language, the software ran pretty slow. Who the heck came up with that language? And really, what was the point? Sorry, but this experience just gave me an extreamely bad taste in my mouth for Python and these "new" languages

    1. Re:I must agree by shutdown+-p+now · · Score: 1

      the language was almost identical to C and Java

      Assuming that you're serious, it's a strong sign that you don't have any clue about what Python is.

    2. Re:I must agree by steveha · · Score: 1

      You don't sound like a troll, so if you are, good job for fooling me.

      Very briefly, Python is an elegant blending of object-oriented programming with some functional programming stuff built in. It has very useful basic data types built in, including "dictionaries" (associative arrays, where the index can be any hashable value). It was designed to be easy to extend using C code, so that performance-critical stuff could be handled in C (or other languages like FORTRAN).

      All languages are trade-offs. Python hits a sweet spot of being powerful and expressive, without being too slow to be useful.

      In sciences, especially including astronomy, Python is becoming a widely-used language. Scientists who just want to get their work done appreciate the friendly Python language, and the heavy lifting is done by compiled C and FORTRAN libraries. Google search for "SciPy" and read up on it. (There isn't a "SciRuby" or "SciPerl"...)

      Most of the database work I have done has been done in Python. I certainly didn't try to write my own database; I used Python as my interface to a real database. As I am not an SQL guru, Python helped to keep me from making dangerous mistakes and made me much more productive.

      Python is my favorite language. Give it a try sometime, away from whatever broken project you were saddled with at your work.

      steveha

      --
      lf(1): it's like ls(1) but sorts filenames by extension, tersely
  73. Re:Examples include by tepples · · Score: 1

    How long until Go Daddy and the other major shared web hosts make available "the latest PHP version out in the world"?

  74. She is right+++ by gestalt_n_pepper · · Score: 2

    The fact of the matter is that not just programming languages, but entire concepts, frameworks and practices in computer science are completely untested for efficiency, human factors and most importantly, return on investment!

    Examples include:
    1) Patterns (Please include a measured, verifiable example of anyone who has saved or made money on this).
    2) Agile (See parenthetical above. Extra points on why it's better than just meeting every day and discussing the problems and schedule).
    3) The *new* programming language [insert favorite here]!
    4) Programming languages with radically different syntax and models. Please don't bother with responses like, "They're *better* because... um....(mutter mumble) ... I like them!"
    5) Unit testing (Qualifier: It is possible to make this useful, except that most developers don't and don't know how to.)

    --
    Please do not read this sig. Thank you.
  75. Re:Examples include by shutdown+-p+now · · Score: 1

    The fact of the matter is this: "It's not the language it is the DEADBEEF in front of the keyboard."

    The fact of the matter is, it is both. Sure, qualification of the programmer is of most importance, but why would a good programmer want to use bad tools? and why would he be as efficient if he were forced to use them?

  76. What was Old is New again by Anonymous Coward · · Score: 0

    our new languages are coming from designers with seemingly little worry about the budget CPU being able to handle a large project in the new language

    As AC has already said, there are many very old languages like LISP, Prolog and Smalltalk that demonstrate with abundant clarity that their designers had little (or no) care for whether CPUs could run them efficiently. LISP is the second-oldest high-level programming language edged out only by FORTRAN for goodness sake and yet it has always been capable of placing tremendous capacity demands on a host computer.

    As for Smalltalk .. well, in any today's "modern" object-oriented programming languages are numeric literals treated as full objects? Of course not; modern language designers all reject that approach because it would place "too heavy" a burden on the host computer.

  77. Re:Examples include by JoeMerchant · · Score: 1

    He omitted 'php' from serious php developer. Probably because we'd all have laughed at the notion.

    Thanks, I quit listing all the languages I've programmed in after I got my first job (was probably 20ish then, honestly lost count by now), I certainly never got serious with php, but if that's your thing, PDO prepare yourself away, if that's really what needs doing.

    I kinda prefer languages (and implementations) that don't require a ton of boilerplate before anything starts happening.

  78. Lisp is a bad example by Hentes · · Score: 1

    Lisp is, in fact, the perfect example of why academia can screw up language design. It needed garbage collection, an interpreter, higher-order functions and tons of other techniques that weren't available at the time. And even after the first interpreter was coded, it was far too slow for any practical application. It wasn't until the eighties that these technologies have developed to a level to allow for optimal interpreters. Which is why the claim that academia always try to design for efficiency is wrong, with their supercomputers and funds for dedicated Lisp machines they didn't need efficiency.

    There are also languages today designed by academics, and a rise of programmers in language design is simply caused by the fact that nowadays everyone has a PC, and thus everyone has the means to design a language.

  79. Ob Car Analogy by StikyPad · · Score: 1

    And they've been steadily progressing outside of large companies (with the exception of Java and .NET)

    That's like saying "New cars have zero emissions (with the exception of those with internal combustion engines)." Java and .net are the elephants in the room.

  80. Doomed. And here's why by shiftless · · Score: 1

    Since I was a teenager, I thought of writing my own language that would pick bits I like out of each language and merge them. It would just create a hideous mess, of course,will be regarded by everyone else as a collation of the bad points of everything else.

    Slightly off-subject, but I'd like to point out the key difference between your hypothetical "crap" language which never got created, and other crap languages which did get created and became useful.

    Do you think the people who wrote Ruby, PHP, etc were able to do so by having an attitude of "I have some great ideas on how to make a good language, but meh, well, I'd do it but it'd probably turn out to be crap, and everybody would hate it and not want to use it"? Or do you think they said things more like "this might be a waste of time, but hell, what else am I gonna do? maybe I can have some fun with it."

    Please do yourself, but especially the people around you a favor, man, and DROP this draining, negative attitude you carry around. You are (presently, not necessarily permanently) the black hole that people like me will engage warp engines to get away from at all costs. You can start by believing in your own self. Maybe you will weigh your options and in the end choose not to create your ideal language, but please at least believe that it's possible and that you could do it, if you really wanted to badly enough.

  81. Root programming language by zildgulf · · Score: 1

    Doesn't everyone know that almost all new programming languages are dialects of C or Visual Basic?

  82. Re:Examples include by lgw · · Score: 1

    I kinda prefer languages (and implementations) that don't require a ton of boilerplate before anything starts happening.

    I do as well, but I've only ever found 2 (non-toy languages): C# and python. And both of those have their issues on large projects. I love me some C++, but only because I lug my boilerplate around with me. Java is the worst I've used for low % of lines of code that actually move the "real" program logic forward (with no macros and barely generics, there no damn way to get the clutter off the page - very frustrating).

    Have you found a language that works well on 100-person projects without boilerplate?

    --
    Socialism: a lie told by totalitarians and believed by fools.
  83. Re:Examples include by lgw · · Score: 1

    The quality of Python stands out by those standards, though. It has its share of issues, but it's had all the basics right for many years if you're doing anything small enough where you can live with soft typing. Oddly, I've never missed the lack of a macro language there, though that usually annoys me - maybe because you can properly structure code and yet keep it vertically dense.

    --
    Socialism: a lie told by totalitarians and believed by fools.
  84. Be WARNED-SOULSKILL!!! by Anonymous Coward · · Score: 0

    This article is written by SoulsSkill who is clearly misleading slashdot reader sinto a fantasy fictional world.

  85. .my.cnf on shared web hosting by tepples · · Score: 1

    How does a shared web hosting customer use .my.cnf? Or is it the case that anything with a database backend should be served over HTTPS so that sessions don't get firesheeped, and by the time one has set up the dedicated IP needed for HTTPS in an environment that still has IE on XP, one might as well get a VPS anyway?

    1. Re:.my.cnf on shared web hosting by mandelbr0t · · Score: 1

      As is always the case with shared web hosting vs. VPS, you will have to decide how much control you want over your website. The reason shared web hosting is so cheap is that someone else does the system administration. VPS is not really more expensive, and gives you full control over the site (including direct access to the filesystem). Bottom line: do research to ensure you get the hosting option that meets your needs.

      --
      "Please describe the scientific nature of the 'whammy'" - Agent Scully
  86. Handy flowchart by mrogers · · Score: 1

    I used to spend a lot of time evaluating new languages. Now I just use this handy flowchart.

  87. Re:what a croc - they never heard of Greenspuns 10 by Anonymous Coward · · Score: 0

    You really don't understand Lisp.

  88. Re:what a croc - they never heard of Greenspuns 10 by Surt · · Score: 1

    Making my point for me my friend.

    --
    "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
  89. Re:Examples include by Anonymous Coward · · Score: 0

    Then it's convenient that bread and butter is the type of food you would find in the ghetto.

  90. Re:Examples include by Anonymous Coward · · Score: 0

    You're fucking delusional, pure and simple.

  91. Re:Examples include by justforgetme · · Score: 1

    Because you don't write blogs in lisp and you don't setup HFT machines in Shockwave's lingo.

    I don't really see this as an argument, I have used a great variety of languages over my
    professional career and at no time have I found myself getting into trouble because of the
    language I selected. A good programmer will take the time to evaluate the weaknesses of his
    tools and act upon that knowledge. We are talking about PHP. PHP doesn't have weaknesses
    because of magic quotes it has weaknesses because of the misuse of magic quotes.

    --
    -- no sig today
  92. Re:Examples include by JoeMerchant · · Score: 1

    Have you found a language that works well on 100-person projects without boilerplate?

    I stay out of 100 person projects, usually 3-4 MAX.

    As far as boilerplate reduction, the Qt libraries on C++ are pretty good, and I usually extend them with functionality that makes our code as data driven as possible, so instead of 250 individual code chains to ferry events from inception through handling, we have 2 or 3 data driven interpreters, if you will; so, when a new function needs adding, stick it in the .ui editor with a couple of strings telling what it connects to and how and the back end just does it. Back end is necessarily more abstract, but I find much better code reuse this way, and much quicker illumination of rare bugs.

  93. Dunning-Kruger effect is everywhere by Anonymous Coward · · Score: 0

    Where's your blub, then?

    Is the ultimate language Corrado Bohm's P" , which has less syntax than any other turing-complete language?

  94. Re:Examples include by shutdown+-p+now · · Score: 1

    I do get the argument that some languages are better than others at certain tasks. Even so, we have languages that aren't better than others at any tasks. A good example of that would indeed be PHP compared to, say, Python or Ruby. It just doesn't do anything better, and it has many quirks that make it objectively worse.

    And I'm not talking about magic_quotes here. I'm talking about dumb design decisions like auto-converting string keys of associative arrays to integers if they can be so converted (which has the interesting side effect of $a['07'] becoming $a[7], but $a['08'] staying as it is).

  95. Re:Examples include by justforgetme · · Score: 1

    Hmm... I never got that issue.

    $str="08";
    $int=4;

    $arr=array(
        $str=>"this",
        $int=>"that"
    );

    var_dump(key($arr)); // string(2) "08"
    next($arr);
    var_dump(key($arr)); // int(4)

    var_dump(isset($arr[08])); // bool(false)
    var_dump(isset($arr['08'])); // bool(true)

    var_dump(isset($arr[4])); // bool(true)
    var_dump(isset($arr['04'])); // bool(false)

    var_dump(($arr)); // array(2) { ["08"]=> string(4) "this" [4]=> string(4) "that" }

    but maybe I'm not getting what you describe(been a long day).

    --
    -- no sig today
  96. Re:Examples include by shutdown+-p+now · · Score: 1

    My apologies, I did in fact mess this up. The conversion rules are that any string that is a canonical decimal representation of an integer is converted to integer. So if you set $a['7'], it's the same as setting $a[7]. However, if you set $a['07'], that key remains as is without conversion. Similarly, $a['-7'] becomes $a[-7], while $a['+7'] remains a string.

  97. Problems i often have to battle... by Anonymous Coward · · Score: 0

    Problem i often have to battle:

    Constructor leaving uninitialized POD member variables around. Has had horrible consequences and cost a lot of debugging.

    Problems i sometimes have to battle:
    Static initialization order fiasco. This one actually has a proper solution.
    Stack corruption. Not very easy to spot or debug.

    Problem i constantly have: balancing code complexity and code actually being safe. Keeping my head from exploding. Keeping in mind all the custom solutions we have - and corresponding guidelines what can and what can not be done so a complex application doesn't explode.

    I'm sure you'll find some on the list which are exclusive or predominantly C++ problems.