Mono Poises to Take Over the Linux Desktop 925
Edd Dumbill writes "Miguel de Icaza and the Mono team recently hosted a two day open meeting in Boston. O'Reilly have just published
my report of the meeting. Highlights include
Miguel's view that 'C is dead!' and the Mono approach
to dealing with Microsoft patents on .NET."
.NET (Score:5, Insightful)
It would certainly benefit us to learn about these technologies and leverage them, rather than to unilaterally declare them evil, wrong, stupid, etc. and just bury our heads in the sand and pretend they dont exist.
Foot-in-Mouth Disease (Score:5, Insightful)
C is not dead (Score:3, Insightful)
MS and solid? hmm...
Learning and applying. (Score:5, Insightful)
I think that about a lot of Microsoft technologies -- but to be fair, I'd say that the mere existence of Mono is evidence that a process such as you have described is already in motion.
C lives (Score:3, Insightful)
Also, .NET is much like Java, and C hasn't died from the adoption of Java.
Overnight (Score:5, Insightful)
Yes, it took at a least a couple of days to copy all the Java libraries and ReCapitalizeMethods,
Seriously though,
Now if they'd come up with something like Haskel# as the primary language (instead of hamstringing other languages and making all of the core libraries Java like) or something really different that actually advanced the field of programming as a whole, then I might be more appreciative But as it is I see the tremendous duplication of effort across the world to do the same things in Java and C#, and it just makes me sad.
You can't beat Microsoft.... (Score:5, Insightful)
You can't a better
Anyone remember "a better Windows" than Windows called OS/2?
If I wanted MS .Net, I'd run MS... (Score:5, Insightful)
As it is, I don't want to even attempt to emulate another 'grand MS idea'...especially since there are already superior non-MS systems out there that puts .net to shame. No, I'm not going to cite those systems...do your own research. You'd be surprised.
Die Mono Die!
Re:Um, no. (Score:5, Insightful)
But that said, I have never developed software more rapidly than in C#.
I really wish that Linux had a stable
I applaud MONO. It's far from ready, but keep going. Keep working. Please - make MONO (or something else) as good as C#,
Re:.NET (Score:4, Insightful)
I disagree. After a few months of working with C#, I have come to the conclusion that it's nothing but a bastardized clone of Java that had every little piece of sugar they could snarf from VB and C++ added to it, whether it made sense or not.
For example, the braindamaged distinction between structs and classes as value and reference types respectively. What if you want to make both value and reference objects of the same class? Or treat the same object as value or reference as needed? The stupidity becomes even more apparent when you find out that the System.Array.Initialize() function will only initialize value arrays, not reference arrays (WTF? Is there ANY reason to even have the [,] array creation operator if you still have to construct the members one by one after creation?). I could go on and on about "features" that were clearly hacked on in five minutes to fit some deadline, with little thought or care.
C# does have some nice things that, say, Java lacks. Operator overloading, automatic boxing and unboxing of primitive types, and properties come to mind. The first two, AFAIK, will be in Java soon, and properties are just syntactic sugar to replace observer methods. Honestly, I'm not impressed, and I don't intend to use C# ever again unless I absolutely have to.
Re:Overnight (Score:1, Insightful)
Dealing with MS patents .... (Score:5, Insightful)
2) Convert everything to run on Mono C#
3) Get sued bad by the world's most deep pocketed software publisher except that unlike SCO vs. Linux this time the evidence is on the side of plaintif.
What a choice... (Score:3, Insightful)
Exactly (Score:5, Insightful)
I formed this opinion long ago, just around when C# first came out, when I read an article by one of the founder of Eiffel talking about how Eiffel# would work (I wish I had not lost the link - I can no longer find this article). He saw opportunity at that point to gain new Eiffel programmers. But I saw only a tar baby, where the longer you worked with the system the more you just said "Well, all I'm doing is calling C# libraries with this weird syntax so I might as well make life easier by just using C#".
It's a cloning effort, you fool! (Score:1, Insightful)
Hell yea PyGTK! (Score:3, Insightful)
slashrank [slashrank.org]
That is where you are mistaken (Score:5, Insightful)
Yes,
Re:Platform Independence (Score:3, Insightful)
Uhm, why would MS do this?
Introducing a crippling change for Longhorn would not only hurt this goal, but it'd bring down the rath of a few regulatory agences all over again--and piss off everyone using
Now, if you said "my guess is that MS will introduce custom APIs in Longhorn that make
Why Mono Will Fail (Score:5, Insightful)
The Linux culture has so far prevented Linux from taking the next step. Just look the (essentially) complete lack of interest in gcj (gcc open-source java). Just look at the slow pace of Mono. It isn't goind to happen anytime soon, unless the Linux app community wakes up and sees the future. Yeah, 10 years from now we'll still be doing manual memory management. Sure...
This is the time... (Score:4, Insightful)
Now, I'm not trying to start a flamewar here, so I'm not going to insist on specifics here, but what needs to be done is to create essentially a "distribution" of a powerful language (I'd use Python), a good cross-platform widget set (I'd use Qt, were it not for the license issues - personally I don't blame Trolltech for the licensing scheme, as $2500 is chump change to any real development house anyway, but in this case it would hinder adoption. Maybe wxWidgets then, or GTK+ configured in a way to appear like native widgets, but gah, GTK+ is such a hideous API), a selection of useful Python (or whatever) modules, and so on.
Like I said, this is nothing that didn't exist before, but it should be packaged in such a way as to provide a standardized environment on every platform that applications can rely on. Come to think of it, rather than use a specific language like Python, maybe the whole thing should just be wrapped around Parrot.
Anyway, the specifics don't matter. It's the idea of having a good competitor to
claim less, do more (Score:3, Insightful)
So now Miguel de Icaza is saying all that stuff is soooo passe, everyone cool has moved on to the next big thing. Excuse me? It can be passe if it isn't even stable and working yet!
Okay, YMMV. Maybe my experience is particular to what I'm doing, which is compiling from source using the FreeBSD ports system. But I have to say that the experience wasn't much different when I installed binaries rather than compiling from source. The shared libraries are changing their APIs constantly and breaking binary compatibility.
And then there's the performance issue. The last time I tried the GNOME desktop, it was just ridiculously slow. I mean, I'd click on an icon in the file manager, and I'd have to go get a cup of coffee and come back and see if it had opened it. People said, "OK, that was the old versions, now GNOME is more optimized," so I came back and tried it again, and it was just as slow. Well, if it's that slow when you're running all the stuff written in C, imagine what it'll be like when you're running .NET.
Re:C is Dying? (Score:3, Insightful)
Re:Platform Independence (Score:5, Insightful)
For the same reason they did it with Java - if it's "write once, run anywhere", then why would you buy Windows licenses? Microsoft (quite naturally) wants everyone to run a Windows server and a Windows client, and having Linux be able to take either role with ease doesn't give them the leverage they need to continue their marketshare.
Me too. (Score:2, Insightful)
Re:Um, no. (Score:5, Insightful)
Why don't you use Java?
Re:.NET (Score:4, Insightful)
And, unlike
Will.
Re:Foot-in-Mouth Disease (Score:5, Insightful)
"A great deal of serious end-user application coding on Linux still goes on in C or C++"
"Where does this place the future of the Linux desktop..."
"The expectation for GNOME 3.0, however, is that a lot of the platform will use Mono, rather than the C implementation it has now"
Probably no one writes kernels in C# and there is less and less reason to write user applications in portable assembly. Programming languages are tools, and we use different tools for different jobs. I prefer to use higher level languages where it is feasible because I'm more productive. I use C where I have to, because it has features that other tools don't.
Re:C is dead? (Score:5, Insightful)
I think C deserves a little more respect than a blanket comment like this.
We still have assembly languages today for several reasons, even though it's been "dead" since the 80's. Driver writers, compiler writers, and high performance inner-loops of scientific apps NEED snippets of assembly.
Thanks to the design goal of c (as the paint on the metal), you can now program in mixed c/assembly and thus never have to actually write anything in raw assembly files anymore. But you still write with the intention of generating specific sections of assembly.
The people that write c are those that are resource conscious. I am not aware of ANY other language that is allows resource management as well as C. "performance" is just one resource, and I know many argue that JIT's counter-balance the performance advantages of optimized c. I still refuse to belive JIT's have ever approached -O3 performance, but am willing to concede that a well written VM app can perform acceptibly.
ButMemory is another key resource management position that sometimes requires hard computer science to derive workable solutions.. When you abstract how resources are utilized (via a VM), then it negates the value of such hard computer science. Note that this ONLY applies to a particular problem space. Though, a non-trivial problem space to be sure.
The point is thus that the classic paradigm of "the right tool for the job" is essential here. There are MANY problems that are best done with low level, very concise languages like c. Most OS components, VMs, or fast-duty-cycle applications should very well have core work done in c/assembly.
The obvious other end of the stick is managing large amounts of code, for which assembly need not apply, and c is indeed becoming a distant memory as I think you are implying. Yes, web-services and many such fast-to-deploy applications transcend c, but don't be too quick to write-off the value in having a generation of computer scientists that are not well enough versed at writing low level applications.
Re:What language is .NET written in ?? (Score:2, Insightful)
Miguel even says in his very next statement words to the effect "c is dead, except for the JIT".
In other words, as far as application development is concerned (the main target of the CIL) c is dead.
Come on, lets not go on flaming without at least considering context.
Re:C# vs. Java, and I like C# better (Score:3, Insightful)
So the most interesting thing for free software is not if windows apps are written in C#. The interesting thing is to port free Linux apps to windows, and so to speek invade the windows domain with free software.
That way windows users can get a first taste of what Linux can offer without leaving the confort of their familliar windows environment. It will also force propriatory software companies to compete against free software on the windows arena. Their chances of being succesful in that competition increases if they can offer cross platform solutions just like their free replacements.
If windows users start to use these free apps instead of closed source ones from venders like Microsoft. It will be much easier to switch OS from windows to Linux.
Re:Um, no. (Score:2, Insightful)
Now we've moved to
So yeah, JAVA would be ok but wasn't allowed (prior to my obtaining this position) and VB was already prolific in the enterprise so the move to
Comment removed (Score:4, Insightful)
Re:COMPLETELY different (Score:4, Insightful)
First, I would say that Operating systems are in the same boat as operating systems. Maybe this was supposed to say "Operating systems aren't in the same boat as programming languages"?
I think the implication is that, if you trust Microsoft to set the standards, you'll spend all your time and effort playing catch-up to them when they change to a new standard.
For an example of this, look at the Samba project. Yes it's been successful, but look at how difficult some of the advanced functionality was to get correct (Active Directory for starters)
Mono will always be a second-class citizen in the .Net world, precisely because it isn't supported or backed by any truly large player that can hold some influence with Microsoft.
New Slogan: Catch Mono! (Score:4, Insightful)
DotNet, of course, is a Java wannabe.
Why not just use Java? Oh, that's right:
Microsoft - Duplicates anything they don't own and control
Open Source Movement - Duplicates anything someone else owns and controls
Re:.NET (Score:4, Insightful)
Value/Reference is a class-based distinction. It has nothing to do with instance, and I can't say I've ever had a real world problem with this. Can you?
Or treat the same object as value or reference as needed?
Real world example?
the System.Array.Initialize() function will only initialize value arrays, not reference arrays
Of course. C++ is no different. Remember how in C++ you have to write "delete [] x" instead of "delete x"? Simply because you have to communicate to the compiler that it must call the destructor on each array member... but the constructor is much more difficult. What if the array element type has no default constructor?
I could go on and on about "features"
And I could equally as well refute your points.
It is ignorant to simply dismiss .NET or C# because it is something you don't know and don't understand. Take the time to learn it... there are valid criticisms, but you haven't found them yet.
Re:What language is .NET written in ?? (Score:3, Insightful)
C not dead, .NET/C# not interesting (Score:4, Insightful)
If I need to write a quick script, but make sure it's clear enough to understand next week, I use Ruby. A lovely, well-designed language. Why bother with compiling and linking? Go dynamic.
If I want to use an awesome development environment, I use Mac OS X. Aside: sometimes I wonder if people who rave about the latest scripting language or the latest Windows dev tool, have ever actually *used* NeXTSTEP/Cocoa! It's still light-years ahead of what most people use. Look how many examples in the Gang of Four patterns book come from NeXTSTEP!
And, if I need to write a
C# is a nice improvement on Java. Which isn't hard to do.
Like a lot of folks I look at Mono and I just don't get the point of it. It's Microsoft's technology, it's always going to be playing catch-up... to a mediocre environment.
Give me
Re:.NET (Score:2, Insightful)
Danger! (Score:5, Insightful)
I respect Miguel, but I think he seriously underestimates the risk posed by MSFT's patents in this area. Quoth the article:
Microsoft has granted a license to use this technology under so-called "reasonable and non-discriminatory" terms.
"Reasonable and non-discriminatory" (RAND) does not imply "free". RAND was the proposed licensing requirement for W3C patents that was howled down by the community.
Given that MSFT is willing to finance SCO to use arguably illegal tactics to destabilise and discredit free software, who would expect that they are above enforcing a small fee for every patent needed to implement Mono? They needn't do this immediately, in fact it is in their interest to wait until the technology is widely adopted, so they can slug everyone at the same time. Note that the usual legal defences against "submarine patents" won't work either if the terms have been disclosed to be RAND all along.
Re:C is Dying? (Score:5, Insightful)
Re:c is dead... (Score:3, Insightful)
Please MS punish us? (Score:3, Insightful)
Do ANYONE think that MS would let the oppurtunity to use a patent against OSS go by?
Without a written consent from Microsoft openly stating they wont sue and slander i cannot give in to Mono. If gnome is built upon it i will go elsewhere with my business.
Call it damage control in advance.
No language can replace C ... (Score:3, Insightful)
No language can replace C until it can compile its own compiler written in itself.
What a load of rubbish (Score:5, Insightful)
Intel [intel.com] have a C compilers on a bunch of platforms. So does GNU [gnu.org] (and Sun, and Microsoft).
Software doesn't suddenly become useless simply because another vendor releases a competing implentation on the same platform. If MS do release a
Re:Miguel is dead! (Score:3, Insightful)
Of course, that's tongue in cheek, and yes, C's concept of arrays is perhaps too tied to a specific kind of machine architecture (and to BCPL's concept of arrays),
but
while C is far more portable and easier to code in than assembly, one great feature of C is that, if you know a particular machine's assembly language, you can look at your C code and pretty easily guess what assembly instructions will be generated from it.
I recall when I was first learning C++ -- and no, I'm not a C++-hating C bigot -- one thing that annoyed me was the realization that what seemed a straightforward C++ function call -- or even more straightforward, an operation like i + j, when performed on class instances, could be much much more involved.
(Consider the example I just gave, i + j: in C++ this could easily be i.operator+( j ), which might involve an implicit converting function or constructor to make j into the right type for i's operator+, and operator plus could easily be a virtual function that did some work and then called a super-function to do the rest of the work, and it wouldn't be a good operator+ unless it returned by value, which would mean that there'd be a (probably implicit, in the code) call to the constructor for whatever class i was an instance of. And we haven't even mentioned Handle-Body Idiom or Template Method Pattern or Pimpl Idiom or exception handling yet.)
I soon got over my annoyance when I realized that it was precisely this ability to concentrate this much -- and much of it mostly automatic, as with converting functions of constructor calls -- into the semantics of addition, i + j, that makes C++ such a powerful tool in the hands of the right programmer.
The trade-off, of course, is not being able to see the assembly language instructions in your mind anymore. The good programmer chooses his tools and his trade-offs.
So to bring this back onto the topic of the post, I highly doubt C is dead or even dying or even a bit ruffled around the edges -- there are still, and for the foreseeable future, there will be, very very good reasons to use C -- it's the portable lingua franca of programming, and it's a remarkably clear language that allows one to concisely describe what otherwise would require lots more asembly instructions.
Re:MonoDevelop IDE (Score:5, Insightful)
Bah, you probably wanted something written in C#. So much wasted effort.
Re:.NET (Score:4, Insightful)
Operator overloading, while in some occasions quite handy, must be used with great care. Unfortunatelly, for quite a lot of programmers out there, it seems to be misused as a yet another way to obfuscate a program into oblivion! If you ever get to analyse the code written by a BOOZFH (Bastard Operator Overloading Zealot From Hell), you'll know what I'm talking about.
Re:Miguel is dead! (Score:2, Insightful)
Not necessarily. It could just as easily be a gaping hole. It depends on the quality of the code.
Would it be a bloated pig? Now that's another story.
Seriously... There is no magic bullet.
No miracle language, no supa dupa development method, no virtual virtualization, is going to replace a competent coder. Get over it.
Re:Miguel is dead! (Score:3, Insightful)
Re:.NET (Score:5, Insightful)
Value/Reference is a class-based distinction. It has nothing to do with instance, and I can't say I've ever had a real world problem with this. Can you?
Or treat the same object as value or reference as needed?
Real world example?
Easy. Value types allow you to transparently create copies of data, essentially letting you deal with immutable objects without the added complexity of calling a clone() operation every time you need a new copy to work with. This has nothing to do with class characteristics, and everything to do with the particular code you're using.
the System.Array.Initialize() function will only initialize value arrays, not reference arrays Of course. C++ is no different. Remember how in C++ you have to write "delete [] x" instead of "delete x"? Simply because you have to communicate to the compiler that it must call the destructor on each array member... but the constructor is much more difficult. What if the array element type has no default constructor?
If it has no default constructor, then you make it an error for value types (duh) and a nop on reference types. Alternatively, you could make it an error on both. If there's no default constructor, you don't call Initialize(). Your comparison to C++ loses, because 1) we're not discussing C++, and 2) we're not discussing "telling" the compiler how to do a job, we're discussing how the compiler doesn't do said job no matter how you "tell" it to.
I could go on and on about "features"
And I could equally as well refute your points.
That's great to hear. Start any time you want.
It is ignorant to simply dismiss
I wouldn't go as far as to call you ignorant, but I know for certain it's stupid to dismiss my claim without actually addressing it. If you scroll up and actually read my post and yours, you'll notice that you either didn't read my claims properly, didn't think the matter through properly, or didn't type your reply properly.
Why do I claim this? Well, 1) you don't seem to understand how you can use value and reference types interchangeably in a real world situation, yet you go ahead and talk about it. 2) You try to address my issue with Initialize() by pulling a textbook Chewbacca defense with C++'s delete[] syntax. And 3) you tell me there's "valid criticisms", yet you fail to mention any. All you know is mine don't work, yet you also fail to adequately explain why.
In the end, I have no option but to classify you as a troll until you prove otherwise. I suggest you start doing so by addressing my initial post with clearly thought out answers.
Re:Miguel is dead! (Score:5, Insightful)
Re:Miguel is dead! (Score:5, Insightful)
I'd like to point out that there is absolutely nothing wrong with writing "C with Classes." It makes a whole lot more sense than trying to fake it with structs and function pointers with only a minimal loss of efficiency. Certainly replacing all char pointers with strings would make up for the inefficiency with the huge amount of time saved debugging. Just because operator overloading, templates, references, etc. exist doesn't mean you have to use them. I mean, no one puts a gun to your head and forces you to use Swing in Java just because it is standard.
Second, that question should have been rather simple to answer for anyone who was aware that the std::complex template has a copy constructor with an implicit conversion. Not everyone knows that simply because complex isn't exactly the most widely used thing in the world. If you are going to ask that quesiton, I'd recommend defining a template in the code to make it obvious.
The language features in C++ can be abused, but a huge number of errors I see are from misusing APIs and none of the high level languages like Java are going to make sure you are paying attention to what you are doing.
OSS is already screwed by MSFT patents (Score:3, Insightful)
Re:Miguel is dead! (Score:5, Insightful)
Seriously dude, that is most definitely not a straightforward question. It's carefully designed to test your understanding of some of the subtle tricks and traps of C++. And one of the "tricks" it uses to mislead you has nothing to do with inheritance, rather with implicit casting.
I must admit I got tripped up on it though, mainly because I'd forgotten the distinction between hiding and overriding. The question is nasty, ugly, and was intended to be as confusing and tricky as possible... and any programmer that writes code like that (especially something involving changing the default value of a parameter for an overriden method) ought to be shot.
BTW, if you're asking questions out of GOTW as interview questions, I can only say that that's pretty nasty - except perhaps as a final round question for some of the really cocky smart-arse types :-). Or if you're looking for a seriously hard-core C++ expert, in which case you'd probably expect him/her to have read all of GOTW and Sutter's books and know all the answers off by heart anyway.
There's certainly a depressing number of such people about - though nowadays they're mainly moving into Java, a language better suited to their limitati^Wcapabilities. And I say "Hooray!" to that :).
Pete (who has for the last two months been maintaining/debugging/adding features to a 1998-era MSVC6 project, written by a guy who really had no idea about C++. Sigh.)Re:Miguel is dead! (Score:2, Insightful)
The idea that a C/C++ program is more likely to be buggy than a VM that is also a C/C++ program is a bit off. They are both C/C++ programs... hey! I know... do what the geniuses that work on JIT or VMs do!
I have a theory that programmers should understand memory.
I also have a theory that next programmers will complain about having to use end-paren and close-bracket... "we're only intested in begining the function parameter list... the computer should close it for us!
and of course (Score:3, Insightful)
Because functions declared in structures is 90% of what C programmers wanted out of it at the time. Having constructors and destructors was also quite nice. And that is enough to use C++ right there.
You are not supposed to use all the esoterica.
Re:.NET (Score:2, Insightful)
but its Microsoft's Language.
they have never done anything to earn trust.
atleast sun has.
Some day i will try to comprehend how anyone can say this. Do you guys not realize that Sun has NOT allowed Java to be submitted to open standards bodies, and instead chooses to keep it proprietary - while microsoft has already submitted C# and fully published it as an open spec?? Since this is the most relevant example of "earning trust" I can think of for the sake of this discussion, I can't imagine what more you need.
Re:.NET (Score:3, Insightful)
For example, the braindamaged distinction between structs and classes as value and reference types respectively.
I, for one, am glad they put this distinction in. The difference in treatment between the two can have some profound effects on the way allocation, array handling, and memory footprint operate.
With an array of objects, you get an array of references (checked pointers) to the objects, requiring an allocation per object (the size of the allocation depending on the particular derivative) and indirection to access the pieces.
With an array of value types, the size can be predetermined (in much the same way stack-based object variables were in C++) and the items therein laid out end to end, giving a single block allocation and no extra reference per item required.
Some of these pieces are especially important because of the Managed Code model - you can't lay out a stretch of bytes and cast it directly back and forth to an object type. Having tricks like this that can let you keep your performance and still declare the code provably 'safe' is invaluable.
I've been playing with C# and Delphi-for-.NET, and ported one of my frameworks across. It's been an interesting experience - I was expecting something insubstantial when I first heard about the initiative, but now that I know Anders H. was behind much of it, its low disagreeability factor is well-explained :)
Operator overloading, automatic boxing and unboxing of primitive types, and properties come to mind. The first two, AFAIK, will be in Java soon,
I attended a seminar on the Java 1.5 extensions being introduced, and they were: generics, autoboxing/unboxing, varargs (for lack of a better term :), improved and generic-aware for syntax and enumerations. Interestingly, generics made a strong case for a number of the other features, especially boxing (we were treated to "before-and-after" syntax possibilities for each feature). Looks interesting.
and properties are just syntactic sugar to replace observer methods.
You're thinking of delegates, and in a way they're syntactic sugar on observer methods, but besides cutting out a lot of need for anonymous or named action observer classes, they implement some of the Active Object pattern with BeginInvoke, which will asynchronously delegate something until EndInvoke is called. Very useful with remoting calls.
Properties on the other hand are syntactic sugar. Goobery syntactic sugar over the myField()/setMyField() set. I do make a lot of use of them in Delphi, and all they do is basically tie the getter and setter together in an explicit way instead of relying on convention. The main beneficiary of this is the IDE/inspection tools, which can query reflection/RTTI to find out what to display and how to hook up a property update. JavaBeans was in part based on Borland's experience here (I was quite shocked looking at the docco for the JavaBeans and seeing things with names right out of DsgnIntf.pas :) - I believe they ended up relying on naming conventions for Java's purposes.
Re:Miguel is dead! (Score:3, Insightful)
However note that you can write insecure code even with MSWord or Excel macros.
(but yeah, I agree with you in general - high level applications shouldn't be worrying about the stuff you mentioned)
Re:Miguel is dead! (Score:5, Insightful)
I know a dozen other people have probably already said this, but if you think that question measures whether someone is an effective C++ programmer then the problem is with you.
It's a neat trick and the last bit (where default params are resolved based on static type while method calls are resolved based on dynamic type) fooled me. But it has nothing whatever to do with a software engineer's job, unless that job is writing C++ compilers.
Put away your book of trick questions and hire a C++ programmer who understands patterns, algorithms, project management, requirements, and important standards and protocols.
Re:c is dead... (Score:3, Insightful)
I have to agree. C is not suitable for general application development any more. 'back in the day' we were forced to use C because of performance reasons, but now computers have more than enough horsepower to run higher-level languages smoothly.
You can already see this with web applications: almost nobody writes them in C. They use PHP or Perl. There languages are just far better suited for web development than C.
It may well be that Mono/C# is becoming more suited for general application development than C. Or maybe Python. Or Perl.
I think that in the not-so-distant future C will only be used at places where performance really counts, hidden deep away in libraries and the operating system.
The advantage of replacing C with a higher level language: programmers will be able to concentrate more on the application they're writing and less on the low-level things like coding linked lists, hash tables, etc. This will improve the quality of the applications. Or make applications more complex with constant quality.
An advantage of C#: developers will be able to distribute just one binary version of their application, it'll run on any platform. Not very important in the world of Open Source, but still a nice thing to have.
Re:Miguel is dead! (Score:4, Insightful)
That link is a good puzzle but I don't know how well its going to help you find good developers in an interview. I remember I was about a year out of college when I discovered such details of C++. I was like, "WTF? I'mn not overloading that one...why am I here?". About 5 minutes and 1 small program resembling the one in your link I had my answer and moved on.
So was it that one year of experience you would be seeking? Or would it be my problem solving skills that when my code doesn't work I'll find the answer quickly and consistently? When I interview, I try and discover one's problem solving abilities, not one's specific knowledge. It obviously all depends on what role you need filled.
A C/Java world with no C++? Most of the software I've written in the past few years has been C++ with lots of C influence. Lots of functions, few objects. I probably have more structs in cvs than classes. Its really nice to have my function/struct style code and my message/class style code coexist freely.
For example, I have a system I wrote that the backend database is all in shared memory. I played with classes in shmem and I put some templates there, too, with the Allocator. In the end, I chose structs because I was able to exploit their fixed size to make things quite speedy.
But now I have a Phd physicist that needs to do some serious matlab-style maxtrix maninpulation of my struct-based data. And he can 'kind-of' code. It was nice wrapping up access with some matrix classes so it all looked more like matlab to him.
I think there is still value in having all that in one language, even though it can make it an ugly one.
Re:Why Java is Failing on Linux (Score:2, Insightful)
I code C, Ruby, Perl (when I have to), Java, on a daily basis and I still disagree with you. Before you go making uninformed statements, ask yourself: Have you actually any foundation to make claims about Java?
Re:Or... (Score:3, Insightful)
Re:.NET (Score:3, Insightful)
Add one more to your list:
In C# it is insanely easy to use external C-based libraries because you just have to "import" the function and away you go. This is much easier than the convoluted Java JNI stuff.
Python and data types (Score:3, Insightful)
My concern is that Python is still a work in progress as a Java replacement. Notable lacking is an array type (list of elements of all the same type making it more efficient than the list-of-objects approach in both memory and speed). How is a person supposed to do graphics by computing rasters without a good array type? I believe Lisp was originally everything-is-a-tree-data-structure, but they must have added proper array types in the Lisp machine days.
But what about Numeric? Well yes, you can use C extensions to define whatever kind of Python container object to serve as a proper array, but that container object becomes this atomistic entity that requires copying all the elements in and out to Python lists to interface with just about everything else. And Numeric is a work-in-progress because it is being replaces with NumArray which is in some state of beta test. And are these things standardized enough that you can say (like in Matlab), here is an array of pixels I have created, plot them as a bitmap image?
Re:and of course (Score:2, Insightful)
BFD. (Score:3, Insightful)
It's just Another effort to make Gnome "multiple programming language friendly" than "user friendly". Geez aren't they obsessed.
Time can be better spent elsewhere, for example, using network transparancy of CORBA, adding back features deleted from Gnome 1.4 in the name of "simplicity" (sorry, it is not defined that way), creating a better open file dialog box, and fixing bugs.
I completely agree with this previous story and think Miguel is leading Gnome to a wrong direction. I'll stay with the other favorite desktop.
Re:ActiveState screwed up (Score:3, Insightful)
But, I think that if anyone can pull this off, Jim can. The concern I have is whether he can keep the language alive. Development on his Jython project seems to have ground to a halt since the release of Jython-2.2a1 last summer.
Re:COMPLETELY different (Score:1, Insightful)
Yes! This is the biggest problem I have with any Microsoft standard. They have done this since they started; create/coopt a standard, change the standard with every release and deliberately break compatibility with any previous version. It allows them to "churn" all their competition, tying them up with changes just to make existing stuff keep working while Microsoft "innovates".
Mod me as Troll if you must, but the biggest problem with
In Contrast to DotGNU... (Score:2, Insightful)
Re:Miguel is dead! (Score:2, Insightful)
Re:Miguel is dead! (Score:2, Insightful)
ANSI/ISO standard C++ code runs on any machine with a C++ compiler just like Java code runs on any machine with a JVM. Note that I'm assuming that you're using C++ for its C++ features and not for some of the ultra-low-level C features like embedded assembly language and what not.
It is my opinion that jobs are simply human economic slavery (stop rolling your eyes
I am a conservative, but I also agree with you for the most part. Most people do a job that they hate because they have to pay the bills. I wish they could/would do a job that they like instead.
Therefore, I don't know how you can honestly call for the vast majority of programmers to be fired. If the vast majority of programmers should be fired because they are "bad", then the same should apply to police officers, doctors, scientists, sanitation workers, and so forth.
Well, I think if they're not good at their job, they should be fired. If you can't handle the job and aren't qualified, then you have no business doing the job. You may think this makes no sense, but I don't think people with no skill should be doing skilled jobs. It's not in the employer's best interest to employ people who suck at their job. I don't think you should develop languages so that bad programmers can make bad software. You should develop languages so that good programmers can make great software. I'd even be ok with allowing mediocre programmers to make good software, but I feel that a lot of the new languages are dumbing things down so that bad programmers can make bad-but-not-terrible software. Yes, C++ allows a bad programmer to make catastrophic software, but they have no business making software at all.
You seem to create a totally efficient world where humans are operating at 100%. Unforutnately for you, it isn'g going to happen. You literally have to replace humans with robots for that to happen.
I don't really want 100% efficiency. Sure, it'd be great because 100% efficiency would pretty much mean that humans can sit around and do as much or as little as they want, and everything would "magically" appear like in Star Trek. In our current system though, I just think you should get the best person for the job and develop tools to allow them to work better instead of developing tools to allow unqualified people to work somewhat less dangerously but in other ways more dangerously. (I assert that software should work perfectly, fail gracefully, or fail catastrophicly. Software written in "high level" hand-holding languages by bad programmers will often fail silently, continue running, and break important things due to logic errors. At least C++ will usually cause the problem to dump core due to a memory error before it smashes things up too bad.)
I expect bad programmers in India just like in USA. In any case, jobs are being outsourced for financial reasons--not quality.
Perhaps I wasn't clear enough. What I meant was that in my experienced it's bad programmers who get outsourced because you can get better-or-equal performance for a lot less money. Good programmers don't tend to get outsourced because they're cost effective. That is to say, I don't think bad programmers in the US deserve the same salary as good ones.
Re:Miguel is dead! (Score:2, Insightful)
It's source-portable, not binary portable. Java and C# aren't machine portable anyway. They're bytecode portable and interpreted by the VM into machine code at runtime. That's why I said it's portable as long as you have a compiler, but non-standard C++ isn't C++. Non-standard Java isn't Java, and non-standard C# isn't C#. The standard defines the language.
Only a minority of people are good (in the sense that they do the work, perform well at school, etc). Yet you cannot only have schools for these good people. You need schools for everyone.
You can fail them until they learn the material, or you can make the school teach them how to do things in a way that they can learn.
But that is never the intention. I am sure that the computer scientists who create new languages never have the intention of building a language for bad programmers.
I'm sure that they don't, but if a language hinders good programmers while enhancing the performance of bad programmers, I think it's a bad language. That's all.