The Mono folks released new Mono, Monodoc, mod_mono versions. This release includes the PPC JIT engine running ‘Hello World’ and ASP.NET is considered feature-complete.
How to make permanent native binaries using mono? I belivei it is with the -aot option, but it just generates an .exe.so file, which cannot be run. (If you try you just get a segfault).
No, there is no way to make native binaries as you’ll always be dependent on the Mono runtime. Ahead of time compilation just means that your application will start up faster as it doesn’t get compiled each time it is launched.
Does anybody know if the debugger for mono is back in a working state? I know it was broken for a long time.
Hopefully we can get Sharpdevelop running on mono soon. I’ve got parts of it compiling on mono, but obviously the gui issue is still in the way and I have a feeling that other parts of mono aren’t quite primetime even if the gui problem is worked out. I’ve been thinking about trying to get a basic editor and project management working using SharpDevelop and wx.NET.
“But if this can be cleared it can be the best programming platfrom under linux.”
No, there is no single best programming platform under Linux or elsewhere. Or do you want to tell me that Mono is the best platform for logical constraint programming? Please! It maybe the best platform for Gnome hacking or C# programming but not the best for everything.
Like I have said before. I am totally for .Net in *nix. But you guys have to realize that with every release of Mono you are securing Microsofts dominance in their server market. Imagine an Exchange, SQL, or whatever .net server, that had all their interfaces exposed through a web service or even a library that was not Windows dependent. Now start to think IT departments start developing applications in .Net so that both the *nix people and windows people can use them. ( I know java has this functionality, but they don’t have interfaces to the .net servers )
Microsoft wins because people are now buying their servers to run both Windows and *nix applications. Also I don’t think that Microsoft will ever take away Mono, because it is great for their business. People aren’t going to be building servers like Exchange or SQL on Mono they will mainly be using it on the desktop. Microsoft already owns the desktop so if they can get that extra 10% that doesn’t use Windows to start using Microsoft Servers, I don’t see how they can loose.
Anybody else have an oppionion on this? Anybody see a _realistic_ circumstance where Microsoft would loose money by Mono succeding?
Yes it is true. But .NET exists. And if the developer companies choose between .NET and Java IMHO the most of companies will select .NET. The companies only care with the costs of development. Mono only give easy way to this companies to porting their applications to *nix.
The biggest advantage to using .Net over Java is there are a wide array of professional level servers that many companies already have in place. There is also a great number of Microsoft API’s for these servers that are already in managed code.
In addition to being to the new and hottest thing in the IT sector. (Not to say better just more hyped) But .Net seems to have a more portable solution than that Java ByteCode. The CLI seems to be a more portable solution and can be compiled by many different languages that are currently being used in many legacy applications. If you don’t beleive me just look for COBOL.Net and see some of the Case Studies where companies have ported their old COBOL applications to the web.
I just find the CLI more portable because of the multi-lanugage support. With Java you have to reprogram everything from COBOL to Java or ADA to Java. In .Net you just have to make changes where the code breaks. Some good examples: are the porting QuakeII to managed code (CLI code), (http://codeproject.com/managedcpp/quake2.asp) this would be very difficult to do in Java in a short amount of time, but with Managed C++ it took only a week or so. It has also had alot of success running in Linux under Mono in managed code. (Not perfect, but the Mono library isn’t really complete yet)
> 1. Better programming language (operator overloading, properties, etc).
Isn’t this more of an artifact of having Managed C++. Operator overloading is inheritly problematic and a pain to debug. This is why, to my understanding, SUN left it out of Java.
> 2. Acceptable resource requirements (not start new virtual machine for every application, native widgets, etc).
Now granted – I would agree that the ability to program in a variety of languages is a MAJOR plus for .NET. And the continually improvement of MONO and dotGNU are not only awesome for the opensource community but overall IT industry. And I will humble myself to state that I do find VS.NET to be massively superior to almost any other IDE out there and is why in particular that Microsoft has greatly succeed in making Windows the dominant OS.
Hmm. I think .NET/Mono is to Java as Linux is to Windows. That is, it has lots of zealots who rant on about it and what a panacea it is all the time, but its really not better or as proven for many applications. Meanwhile, Java people really don’t care all that much about .NET.
I think its good for clientside GUI development if you don’t have to worry about targeting something other than windows and don’t care about vendor lock-in. For mono, yes, all very well in theory but no serious company is going to trust their IP to something on such shakey IP foundations, never mind that it will never be entirely compatible with .NET proper or particularly usable from that POV. Its another WINE really, always chasing but never getting there, and with dodgy performance to boot.
It might also be good for low-grade serverside stuff. It certainly doesn’t compete with j2ee in any real way, so don’t expect it to make great inroads into the enterprise, but for small businesses with simple server needs (where MS has always rightfully excelled) it is an improved and better solution for them.
From a language perspective, it strikes me as worse. It has all sorts of syntactical sugar (like operator overloading) that greatly retard the readability and beauty of code. Nobody wants to have to “context switch” and look back at definitions in completely different parts of the program to see what exactly a + or a * is doing in this instance. Pointers and such also retard its reliability and make it open to root exploits that have baned every nasty old umanaged app. Its all a bit ugly – they’ve tried to better java, without realising that by including these things that java deliberately shuns, for very good reasons, they are making their language worse.
In any case, at the end of the day the language doesn’t matter at all. What matters is the platform. Nobody cares whether .NET supports multiple languages, languages are just grist to the mill, who cares? The vast majority of development on it is done in c#. No company wants to start a project using 6 different languages when that means they’ll have to always have people on staff who can understand all thsoe different languages and who can’t interoperate as effectively, least not on the same platform.
Still, for my money Java and .NET are not in competition really. They serve completely different market niches. .NET is more clientside focused, and better for small businesses. Java is more serverside orientated usually, much more multiplatform and excellent for the big business enterprise. In many ways there’s not much to choose between them, but their strengths are clearly in completely different arenas. The .NET people may get off on trashing java here, but I think that’s because they don’t really understand what its about. Its very hard for me to understand how someone can like one and dislike the other, given that they are indeed very similar in so many ways. Its religious zealotry, as is often transmitted by emotional early adopters of a minority technology. Perhaps when their little community matures they will come into the mainstream fold and be much more sensible about things.
Thank you for taking the time to write your response. I found many things you said to be interesting and ensightful, especially the idea of .NET for client-side and Java for server-side activity.
Programming languages are compiled. Dispite Microsoft’s inability to use words properly, only VC++.NET have the option to be compiled. All other languages are translated to MSIL, they are not compiled.
I’ve gone of this many times on OSNews.com, luckily there are at least a few real professional programmers that visit this site, that know the differences.
>Isn’t this more of an artifact of having Managed C++. Operator overloading is inheritly problematic and a pain to debug. This is why, to my understanding, SUN left it out of Java.
No the debugger does an awsome job with the overloading of operators, this is mostly due to the face that there aren’t any primitives in .Net. If an error occures in the overload it is shown. In .Net there is very little to no difference in an overloaded “+” sign and a method called “Add”.
>This is should be coming with the release of 1.5
Well I guess .Net is ahead of the curve then.
> What about Eclipse? And in particular:
Even many of my Linux/Java friends say they are jealous of the power of VS.Net and say Eclipse has nothing on the product.
I don’t want to start a clintonian debate about the meaning of the word “compile”, but AFAIK, java compiles source code to bytecode, and so does .net (maybe not called bytecode, but is basically the same thing, please correct me if i’m wrong)
“Programming languages are compiled. Dispite Microsoft’s inability to use words properly, only VC++.NET have the option to be compiled. All other languages are translated to MSIL, they are not compiled.”
Actually you couldn’t be more wrong. Maybe you should spend more time looking at the real meaning of the word “compiled” instead of just assuming you know what it means. Definition number 2 from dictionary.com states “To put together or compose from materials gathered from several sources”. That really sounds like taking a bunch of C# files and compiling them into 1 dll (MSIL). Only the 3rd term down gives you definition, but you also have to remember it is below the first 2, so it is the third most common use for the word.
“I’ve gone of this many times on OSNews.com, luckily there are at least a few real professional programmers that visit this site, that know the differences. ”
You probably need to reevaluate this sentance because you really are just trying to be a troll and not really offer anything to the conversation.
> “Programming languages are compiled. Dispite Microsoft’s inability to use words properly, only VC++.NET have the option to be compiled. All other languages are translated to MSIL, they are not compiled.”
Yes, your correct – the option is to compile C++ in UnManaged mode. I have still yet to figure out why someone would want to run C++ in Managed mode expect possibily to prevent buffer overflow.
Also, actually in Java – the JVM evaluates freq. used code and will “compile” it to speed up the application.
Compilation in .NET doesn’t stop with MSIL. This is the default to ease distribution to other platforms. Before any .NET application is run, the MSIL is compiled to native code. The MSIL can be JIT-compiled at runtime, compiled during installation, or it can be pre-compiled. If it is pre-compiled, the app will only run on the CPU for which it was compiled, just like unmanaged code.
First of all, operator overloading is only bad if you use it a nonsensical way. If you want to look at a mess then look at the mess you’ll see when adding a few BigIntegers together in Java. There were heated debates among Bill Joy and James Gosling about Gosling “dumbing down c++” too much when he did Java. I wonder if enums or Java’s version of “foreach” would have even made it into Java if MS hadn’t come along with a little competition. The vast majority of people are not going to use pointers in c#, but I’m glad it’s there. Are you going to tell me that JNI is better than the way c# interacts with native code? I don’t think so.
Some points I agree with you on.
– Nobody is doing java on the client anymore and there is already tons of code written for java in the server world that won’t be rewritten for .NET. Since Longhorn is built around .NET, almost all windows programming will be done in a managed environment in the future.
– Having multiple languages for a project is a management nightmare so you’re right about that one. But the cool thing is if someone writes a nice little library that is in another library, but is .NET producer compliant, then you don’t really care. You can just derive from it’s class or just use it’s features without really worrying about what language it was written in.
Generally, .NET is good tech even if it did come from MS. The apis are well thought out(better than java), you don’t have to go through years of Sun fumbling around with awt/swing/JIT vs. Interpreted business.
Some zealots wish Mono would just go away. It’s going no where and I, for one, hope it is used on non-ms platforms a lot. As Miguel said, even it isn’t 100% binary compatible(which I think isn’t that big of a deal anyway), it’s still a good platform to develop on.
Its about balance for me. Sure, operator overloading is sensible and aids readability when implemented by “good programmers” for sensible situations. Likewise, a good programmer will never write c programs that suffer from buffer overuns and such, and will write readable and maintainable perl code, and so on and so forth. But the problem is, from a business standpoint, most programmers aren’t that good and even good programmers have to do half arsed jobs in minimal time. Features like operator overloading and other syntactical sugar, while good in theory, can often be rather a curse in those situations and result in difficult to read and maintain code.
For java on the client, its certainly rarely used for shrink-wrapped consumer products. its used a fair amount in some businesses for client-side apps, usually to interface with whatever java backend they have, and it is used a ton on clients like mobile phones etc.
A good example of java’s strengths is eg vodafone, where I work. Its used as middleware between back end dbs and front end clients, which can range from people phoning up from their mobiles with top-up card numbers, to ATMs, to the web, to a million others, millions of people all over the UK doing this every day. Its very important to have a powerful technology that’s reasonably free from vendor- and platform- lockin that is utterly tailored for this sort of task. Its excellent middleware stuff. .NET I don’t think could fulfill the same role nearly as well, but it can certainly shine where java can’t – especially on the windows desktop, for small businesses, for many server needs that’re windows orientated, etc etc.
I don’t have anything against .NET or mono really. I think they are interesting and worthwhile technologies. But, I think mono would do best to concentrate on providing a good development platform for gnome than to pimp itself as a .NET clone, I believe this is what they are tryign to do in any case. They stake out their own identity and utility quite apart from .NET.
It just annoys me when people trash java, or .NET, for silly and, really, quite irrelevant little details, or seem to violently take sides for one or against the other. They’re both too similar for that to really make any sense.
I don’t have anything against .NET or mono really. I think they are interesting and worthwhile technologies. But, I think mono would do best to concentrate on providing a good development platform for gnome than to pimp itself as a .NET clone, I believe this is what they are tryign to do in any case. They stake out their own identity and utility quite apart from .NET.
I’ll agree on that. Mono winforms with wine handling the backend will probably always be hackish at best. There are libraries that mono will probably never have that .NET has. As I mentioned before I don’t even think binary compatibility is that big of a deal. It’s getting to the point now that someone could take Sharpdevelop, rework the gui to use gtk#, rip out some win-specific parts of it, integrate monodoc and the debugger, and have a kickass development IDE for mono/Gnome.
My biggest problem with mono as it stands now is that I consider writing c# code in vim and not having a working debugger(that might have changed recently) to be a big pain.
The good thing is that I think some of the major Gnome developers are starting to come around to c# and mono for doing non-core stuff.
I knew there would be replies from trolls. Especially when these trolls call other people they are jealous of, trolls.. oh well, Osnews will always have trolls, unfortunately. Out of all the trolls who replied n4acer and anonymous are actually people who know what they are speaking of. Anyways, trolls keep me happy, because I always know they lerk somewhere nearby.
Before msil is executed, it is compiled We know that. When you compiled unmanaged (real) code in VC++, it compiles directly into the finish product. Try that with the .NET scripting languages. It translates into MSIL, then is compiled on runtime, or use NGen and remove all the advantages (and major disadvantages/design flaws) of JIT.
Anyways, no more of that. Trolls can reply as they always do.
As I understand it all languages are translated, however the difference between compilation and interpretion is that a compiler translates the entire code to a lower level language for example machine language (but not necessarily for example it can be an intermediate language such as MSIL or byte code), and an interpreter translates the code line by line or statement by statement.
I think that with .Net, a ‘compiler’ translates the entire C# code into MSIL, and than an interpreter (which they call a JIT compiler) translates the MSIL line by line into machine code that is executed by the runtime environment.
can you please tell us what makes you a real professional programmer and who told you a language not directly compiled to native code is a scripting language. I googled a lot and everything I found proved you are completly wrong. I think you are only a real professional lamer. Sorry for being so unfriendly, you really asked for it
Maybe he equated scripting language with interpreted language. Since the virtual machine consists of an interpreter among other things and the intermediate language is executed line by line by an interpreter, than in that context it is similar to a scripting language. On the other hand, C# and Java are full programming languages that support complex data types and generalized objects that are organized by namespaces and that the library user specializes.
One of the most important things to keep in mind is that Mono and Java support a software layer that lies ontop of the operating system layer. This is a more manageable structure or architectural solution for basing a commercial product because it is more flexible than programming directly to the system interface. It’s good and it’s bad for other reasons, but using Linux it’s good because the user does not loose the platform.
“I think Shannara needs a good whack with your pimpin cane.”
lol, I’m not such a bad ass like the blaxploitation movie character Dolemite was back in 1975, but you dig where my nick is coming from, most people think of some european mountains called the dolomiten
Dolemite/Alan6101: Sorry, I will no longer respond to trolls in this thread.
Anonymous: I think you are correct. I basically see scripting languages and interpreted languages as the same. Definately different then programming languages or else they would of not been labelled otherwise. However, after you definated that, you say C# and Java are actual programming languages? How do you figure, by their features? By your def, they would both be considered “interpreted”, no?
I can see how this software layer could be good. But also seen how it is completely worthless for anybody who are writing closed-source desktop/client software with it. I use .Net for a server based and in-house desktop/client solutions ONLY. The reason, is because I do not like distributing my source codes to the world, which is mandatory with .NET if you release your software into the world. *shrugs* If it wasnt for that design flaw, .NET would definately be respectable.
For Mono to clone it, right down to the flaws, speaks volumes about it.
The reason Sun left operator overloading out of Java was because Java was designed to bind the hands of programmers to keep them from hurting themselves. Operator overloading is not really an extra feature. Rather, preventing operator overloading is a restriction on the language that breaks orthogonality. If operator+ is just a function (it sure as hell isn’t a primitive operation as it is in C) then it is natural to be able to overload it, just like you can overload other functions. The fact that operator overloading is not supported leads to weirdness like the String *class* doing things that regular classes are not allowed to do, namely, overload operator+.
There’s a difference between .NET’s JIT and normal interpreters. When MSIL is JITed, the MSIL that was translated to native code remains as such. Upon subsequent execution of that code, no further interpretation is required. The native code that was produced the first time is executed as-is.
In the usual scenario, it is likely that all code within the application won’t be executed on first run. On subsequent runs, if one of the initially unexecuted code paths is used, the JIT then works on these paths as it comes across them to convert them into native code. As, stated above, this code then requires no subsequent JITs when the code is run at a later time.
A couple advantages of MSIL and JIT is that the developer can distribute one package that runs on multiple CPUs, and when the code is compiled, it can take advantage of any CPU/platform specific features to increase performance (if implemented in the runtime/compiler for that platform).
RE: Release of source
The code can be obfuscated making it harder to get usable results from disassembly. Ultimately, any language can disassembled.
Java or Mono are ideal for solution implementation, but they are not established platforms for system implementation, in other words, the developer reuses the research and development in the ‘vendor’ libraries through inheritance and specialization, rather than doing his own research and development and construction of his own libraries. That is the primary premise, and through reuse of their extensive framework libraries, your company can rapidly build solutions for their domain. The solution developer is not focused on building the architecture but on reusing the vendors architecutre that conforms to the vendors product line which includes supporting technology such as servers (or services).
There is one other key point, oh yeah, it’s data. The new vendor strategies are to make data generic. So the vendor is concentrating on appealing to corporations data and not their source code. So to the vendor, source code should be closed, but data is generic under the constraints of their product line. In other words if you use Java or Mono, than you will be able to leverage generic data between services. You will in a sense be able to reuse data, and there is value in that for corporations, but in order to utilize that idea which is not being developed in vendor offerings, you must give up some control and rely on the vendor’s research and development through their product line such as middleware (Java or Mono).
The idea of open source is underdeveloped but it is much more powerful than anything we know at this time, but you can not depend on a vendor to lead in this area. The concept of generic code and generic open source code reuse is the ultimate breakthrough, but it is not being realized.
I think that if you have a business interest than you should cooperate and learn Java or Mono middleware and that you will be able to market a product successfully, just that it will not be a system because that is the domain of a vendor, instead it will be a solution offering.
And Java or Mono, they are not scripting language, that issue is over. However I do think well of your ‘thinking’ and the fact that you would make such a statement, it’s good that you think on your own. It’s okay to error if you are thinking on your own, against the flow, that’s the only way to get ahead and you will be correct more times than you will be wrong…but not this time.
IMHO it is a good tool for a good programmers. And bad tool for lamers. But if you not a professional programmer you can create wrong code without operator overloading. The other lamer thing in the Java the missing properties. These are very useful things in RAD environment (and some other cases).
From abstract:
ASP.NET is considered feature-complete.
Does this include Web Forms?
yes
How to make permanent native binaries using mono? I belivei it is with the -aot option, but it just generates an .exe.so file, which cannot be run. (If you try you just get a segfault).
s/belivei/believe
No, there is no way to make native binaries as you’ll always be dependent on the Mono runtime. Ahead of time compilation just means that your application will start up faster as it doesn’t get compiled each time it is launched.
I see some really good things in Mono. Making all the API’s consistent, adding better internationalization support, tracking .NET 1.2, etc.
Once the patent issues are cleared with Microsoft, it has a lot of potential.
Once the patent issues are cleared with Microsoft, it has a lot of potential.
It is the biggest problem with mono IMHO. But if this can be cleared it can be the best programming platfrom under linux.
Mono is coming along nicely and now with the Novell acquisition of Ximian even more resources can be put into it.
I hope core Gnome developers start to embrace mono more. I think some of them are starting to come along, because c# really is a nice language.
Does anybody know if the debugger for mono is back in a working state? I know it was broken for a long time.
Hopefully we can get Sharpdevelop running on mono soon. I’ve got parts of it compiling on mono, but obviously the gui issue is still in the way and I have a feeling that other parts of mono aren’t quite primetime even if the gui problem is worked out. I’ve been thinking about trying to get a basic editor and project management working using SharpDevelop and wx.NET.
They screwed themselves because now it is not easy to even find the download. I hope this isn’t a sign of things to come from Novell.
“But if this can be cleared it can be the best programming platfrom under linux.”
No, there is no single best programming platform under Linux or elsewhere. Or do you want to tell me that Mono is the best platform for logical constraint programming? Please! It maybe the best platform for Gnome hacking or C# programming but not the best for everything.
Wow.. can’t wait till it hits 1 point 0 release
Best platform for the business and similar applications. And IMHO this applicaitons are the most important things for linux to survive.
Like I have said before. I am totally for .Net in *nix. But you guys have to realize that with every release of Mono you are securing Microsofts dominance in their server market. Imagine an Exchange, SQL, or whatever .net server, that had all their interfaces exposed through a web service or even a library that was not Windows dependent. Now start to think IT departments start developing applications in .Net so that both the *nix people and windows people can use them. ( I know java has this functionality, but they don’t have interfaces to the .net servers )
Microsoft wins because people are now buying their servers to run both Windows and *nix applications. Also I don’t think that Microsoft will ever take away Mono, because it is great for their business. People aren’t going to be building servers like Exchange or SQL on Mono they will mainly be using it on the desktop. Microsoft already owns the desktop so if they can get that extra 10% that doesn’t use Windows to start using Microsoft Servers, I don’t see how they can loose.
Anybody else have an oppionion on this? Anybody see a _realistic_ circumstance where Microsoft would loose money by Mono succeding?
The link is at the top of the site just incase you didn’t notice it up there.
Yes it is true. But .NET exists. And if the developer companies choose between .NET and Java IMHO the most of companies will select .NET. The companies only care with the costs of development. Mono only give easy way to this companies to porting their applications to *nix.
> They screwed themselves because now it is not easy to even find the download. I hope this isn’t a sign of things to come from Novell.
The link to download is entitled “Download” and located at the header of every page at http://www.go-mono.com. If you need the direct link, see below:
http://go-mono.com/download.html
> It is the biggest problem with mono IMHO. But if this can be cleared it can be the best programming platfrom under linux.
Not to start a flame – what are the advantages/disadvantages of useing Mono/.NET over JAVA?
See the post I put in previously to this board.
http://osnews.com/comment.php?news_id=5291#173239
The biggest advantage to using .Net over Java is there are a wide array of professional level servers that many companies already have in place. There is also a great number of Microsoft API’s for these servers that are already in managed code.
In addition to being to the new and hottest thing in the IT sector. (Not to say better just more hyped) But .Net seems to have a more portable solution than that Java ByteCode. The CLI seems to be a more portable solution and can be compiled by many different languages that are currently being used in many legacy applications. If you don’t beleive me just look for COBOL.Net and see some of the Case Studies where companies have ported their old COBOL applications to the web.
I just find the CLI more portable because of the multi-lanugage support. With Java you have to reprogram everything from COBOL to Java or ADA to Java. In .Net you just have to make changes where the code breaks. Some good examples: are the porting QuakeII to managed code (CLI code), (http://codeproject.com/managedcpp/quake2.asp) this would be very difficult to do in Java in a short amount of time, but with Managed C++ it took only a week or so. It has also had alot of success running in Linux under Mono in managed code. (Not perfect, but the Mono library isn’t really complete yet)
1. Better programming language (operator overloading, properties, etc).
2. Acceptable resource requirements (not start new virtual machine for every application, native widgets, etc).
3. Effective: Web forms, M$ Visual Studio…
> 1. Better programming language (operator overloading, properties, etc).
Isn’t this more of an artifact of having Managed C++. Operator overloading is inheritly problematic and a pain to debug. This is why, to my understanding, SUN left it out of Java.
> 2. Acceptable resource requirements (not start new virtual machine for every application, native widgets, etc).
This is should be coming with the release of 1.5
> 3. Effective: Web forms, M$ Visual Studio…
What about Eclipse? And in particular:
http://dev.eclipse.org/viewcvs/indextools.cgi/%7Echeckout%7…
———–
Now granted – I would agree that the ability to program in a variety of languages is a MAJOR plus for .NET. And the continually improvement of MONO and dotGNU are not only awesome for the opensource community but overall IT industry. And I will humble myself to state that I do find VS.NET to be massively superior to almost any other IDE out there and is why in particular that Microsoft has greatly succeed in making Windows the dominant OS.
Hmm. I think .NET/Mono is to Java as Linux is to Windows. That is, it has lots of zealots who rant on about it and what a panacea it is all the time, but its really not better or as proven for many applications. Meanwhile, Java people really don’t care all that much about .NET.
I think its good for clientside GUI development if you don’t have to worry about targeting something other than windows and don’t care about vendor lock-in. For mono, yes, all very well in theory but no serious company is going to trust their IP to something on such shakey IP foundations, never mind that it will never be entirely compatible with .NET proper or particularly usable from that POV. Its another WINE really, always chasing but never getting there, and with dodgy performance to boot.
It might also be good for low-grade serverside stuff. It certainly doesn’t compete with j2ee in any real way, so don’t expect it to make great inroads into the enterprise, but for small businesses with simple server needs (where MS has always rightfully excelled) it is an improved and better solution for them.
From a language perspective, it strikes me as worse. It has all sorts of syntactical sugar (like operator overloading) that greatly retard the readability and beauty of code. Nobody wants to have to “context switch” and look back at definitions in completely different parts of the program to see what exactly a + or a * is doing in this instance. Pointers and such also retard its reliability and make it open to root exploits that have baned every nasty old umanaged app. Its all a bit ugly – they’ve tried to better java, without realising that by including these things that java deliberately shuns, for very good reasons, they are making their language worse.
In any case, at the end of the day the language doesn’t matter at all. What matters is the platform. Nobody cares whether .NET supports multiple languages, languages are just grist to the mill, who cares? The vast majority of development on it is done in c#. No company wants to start a project using 6 different languages when that means they’ll have to always have people on staff who can understand all thsoe different languages and who can’t interoperate as effectively, least not on the same platform.
Still, for my money Java and .NET are not in competition really. They serve completely different market niches. .NET is more clientside focused, and better for small businesses. Java is more serverside orientated usually, much more multiplatform and excellent for the big business enterprise. In many ways there’s not much to choose between them, but their strengths are clearly in completely different arenas. The .NET people may get off on trashing java here, but I think that’s because they don’t really understand what its about. Its very hard for me to understand how someone can like one and dislike the other, given that they are indeed very similar in so many ways. Its religious zealotry, as is often transmitted by emotional early adopters of a minority technology. Perhaps when their little community matures they will come into the mainstream fold and be much more sensible about things.
Thank you for taking the time to write your response. I found many things you said to be interesting and ensightful, especially the idea of .NET for client-side and Java for server-side activity.
> 1. Better programming language (operator overloading, properties, etc).
Correction: Best scripting language. Professional programmers know the difference between the two.
2. Acceptable resource requirements (not start new virtual machine for every application, native widgets, etc).
I would consider that better resource requirements. But for being such a memory hog for a scripting language, it leaves much to be desired.
> 3. Effective: Web forms, M$ Visual Studio…
I love the Web Forums, hate the over priced scripting studio though… maybe the $1K is for the debuger….. bah.
C# is a scripting language ? Why ?
If .Net is a scripting language (which it isn’t) then Java must be too (which it isn’t).
Because Shannara is not correct.
C# is not a scripting language. I think he is a troll…
Programming languages are compiled. Dispite Microsoft’s inability to use words properly, only VC++.NET have the option to be compiled. All other languages are translated to MSIL, they are not compiled.
I’ve gone of this many times on OSNews.com, luckily there are at least a few real professional programmers that visit this site, that know the differences.
Then Java is a scripting language also ?
C# is compiled into MSIL which is then run by the runtime environment. How is this different from Java ?
>Isn’t this more of an artifact of having Managed C++. Operator overloading is inheritly problematic and a pain to debug. This is why, to my understanding, SUN left it out of Java.
No the debugger does an awsome job with the overloading of operators, this is mostly due to the face that there aren’t any primitives in .Net. If an error occures in the overload it is shown. In .Net there is very little to no difference in an overloaded “+” sign and a method called “Add”.
>This is should be coming with the release of 1.5
Well I guess .Net is ahead of the curve then.
> What about Eclipse? And in particular:
Even many of my Linux/Java friends say they are jealous of the power of VS.Net and say Eclipse has nothing on the product.
>For mono, yes, all very well in theory but no serious company is going to trust their IP to something on such shakey IP foundations.
Then how can any compnay really trust anything that comes from Open Source such as Samba, NTFS Linux support, or even the (old)ASP mod for Apache.
I don’t want to start a clintonian debate about the meaning of the word “compile”, but AFAIK, java compiles source code to bytecode, and so does .net (maybe not called bytecode, but is basically the same thing, please correct me if i’m wrong)
“Programming languages are compiled. Dispite Microsoft’s inability to use words properly, only VC++.NET have the option to be compiled. All other languages are translated to MSIL, they are not compiled.”
Actually you couldn’t be more wrong. Maybe you should spend more time looking at the real meaning of the word “compiled” instead of just assuming you know what it means. Definition number 2 from dictionary.com states “To put together or compose from materials gathered from several sources”. That really sounds like taking a bunch of C# files and compiling them into 1 dll (MSIL). Only the 3rd term down gives you definition, but you also have to remember it is below the first 2, so it is the third most common use for the word.
“I’ve gone of this many times on OSNews.com, luckily there are at least a few real professional programmers that visit this site, that know the differences. ”
You probably need to reevaluate this sentance because you really are just trying to be a troll and not really offer anything to the conversation.
after googling I came to the conclusion he must be a wannabe professional programmer
> “Programming languages are compiled. Dispite Microsoft’s inability to use words properly, only VC++.NET have the option to be compiled. All other languages are translated to MSIL, they are not compiled.”
Yes, your correct – the option is to compile C++ in UnManaged mode. I have still yet to figure out why someone would want to run C++ in Managed mode expect possibily to prevent buffer overflow.
Also, actually in Java – the JVM evaluates freq. used code and will “compile” it to speed up the application.
Compilation in .NET doesn’t stop with MSIL. This is the default to ease distribution to other platforms. Before any .NET application is run, the MSIL is compiled to native code. The MSIL can be JIT-compiled at runtime, compiled during installation, or it can be pre-compiled. If it is pre-compiled, the app will only run on the CPU for which it was compiled, just like unmanaged code.
Compiling MSIL to Native Code
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cp…
Native Image Generator (Ngen.exe) [Precompiling]
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cp…
First of all, operator overloading is only bad if you use it a nonsensical way. If you want to look at a mess then look at the mess you’ll see when adding a few BigIntegers together in Java. There were heated debates among Bill Joy and James Gosling about Gosling “dumbing down c++” too much when he did Java. I wonder if enums or Java’s version of “foreach” would have even made it into Java if MS hadn’t come along with a little competition. The vast majority of people are not going to use pointers in c#, but I’m glad it’s there. Are you going to tell me that JNI is better than the way c# interacts with native code? I don’t think so.
Some points I agree with you on.
– Nobody is doing java on the client anymore and there is already tons of code written for java in the server world that won’t be rewritten for .NET. Since Longhorn is built around .NET, almost all windows programming will be done in a managed environment in the future.
– Having multiple languages for a project is a management nightmare so you’re right about that one. But the cool thing is if someone writes a nice little library that is in another library, but is .NET producer compliant, then you don’t really care. You can just derive from it’s class or just use it’s features without really worrying about what language it was written in.
Generally, .NET is good tech even if it did come from MS. The apis are well thought out(better than java), you don’t have to go through years of Sun fumbling around with awt/swing/JIT vs. Interpreted business.
Some zealots wish Mono would just go away. It’s going no where and I, for one, hope it is used on non-ms platforms a lot. As Miguel said, even it isn’t 100% binary compatible(which I think isn’t that big of a deal anyway), it’s still a good platform to develop on.
Its about balance for me. Sure, operator overloading is sensible and aids readability when implemented by “good programmers” for sensible situations. Likewise, a good programmer will never write c programs that suffer from buffer overuns and such, and will write readable and maintainable perl code, and so on and so forth. But the problem is, from a business standpoint, most programmers aren’t that good and even good programmers have to do half arsed jobs in minimal time. Features like operator overloading and other syntactical sugar, while good in theory, can often be rather a curse in those situations and result in difficult to read and maintain code.
For java on the client, its certainly rarely used for shrink-wrapped consumer products. its used a fair amount in some businesses for client-side apps, usually to interface with whatever java backend they have, and it is used a ton on clients like mobile phones etc.
A good example of java’s strengths is eg vodafone, where I work. Its used as middleware between back end dbs and front end clients, which can range from people phoning up from their mobiles with top-up card numbers, to ATMs, to the web, to a million others, millions of people all over the UK doing this every day. Its very important to have a powerful technology that’s reasonably free from vendor- and platform- lockin that is utterly tailored for this sort of task. Its excellent middleware stuff. .NET I don’t think could fulfill the same role nearly as well, but it can certainly shine where java can’t – especially on the windows desktop, for small businesses, for many server needs that’re windows orientated, etc etc.
I don’t have anything against .NET or mono really. I think they are interesting and worthwhile technologies. But, I think mono would do best to concentrate on providing a good development platform for gnome than to pimp itself as a .NET clone, I believe this is what they are tryign to do in any case. They stake out their own identity and utility quite apart from .NET.
It just annoys me when people trash java, or .NET, for silly and, really, quite irrelevant little details, or seem to violently take sides for one or against the other. They’re both too similar for that to really make any sense.
I don’t have anything against .NET or mono really. I think they are interesting and worthwhile technologies. But, I think mono would do best to concentrate on providing a good development platform for gnome than to pimp itself as a .NET clone, I believe this is what they are tryign to do in any case. They stake out their own identity and utility quite apart from .NET.
I’ll agree on that. Mono winforms with wine handling the backend will probably always be hackish at best. There are libraries that mono will probably never have that .NET has. As I mentioned before I don’t even think binary compatibility is that big of a deal. It’s getting to the point now that someone could take Sharpdevelop, rework the gui to use gtk#, rip out some win-specific parts of it, integrate monodoc and the debugger, and have a kickass development IDE for mono/Gnome.
My biggest problem with mono as it stands now is that I consider writing c# code in vim and not having a working debugger(that might have changed recently) to be a big pain.
The good thing is that I think some of the major Gnome developers are starting to come around to c# and mono for doing non-core stuff.
I knew there would be replies from trolls. Especially when these trolls call other people they are jealous of, trolls.. oh well, Osnews will always have trolls, unfortunately. Out of all the trolls who replied n4acer and anonymous are actually people who know what they are speaking of. Anyways, trolls keep me happy, because I always know they lerk somewhere nearby.
Before msil is executed, it is compiled We know that. When you compiled unmanaged (real) code in VC++, it compiles directly into the finish product. Try that with the .NET scripting languages. It translates into MSIL, then is compiled on runtime, or use NGen and remove all the advantages (and major disadvantages/design flaws) of JIT.
Anyways, no more of that. Trolls can reply as they always do.
I’m not a compiler writer yet…
As I understand it all languages are translated, however the difference between compilation and interpretion is that a compiler translates the entire code to a lower level language for example machine language (but not necessarily for example it can be an intermediate language such as MSIL or byte code), and an interpreter translates the code line by line or statement by statement.
I think that with .Net, a ‘compiler’ translates the entire C# code into MSIL, and than an interpreter (which they call a JIT compiler) translates the MSIL line by line into machine code that is executed by the runtime environment.
I don’t like Mono because it reminds me of MS! I’d rather use Java.
can you please tell us what makes you a real professional programmer and who told you a language not directly compiled to native code is a scripting language. I googled a lot and everything I found proved you are completly wrong. I think you are only a real professional lamer. Sorry for being so unfriendly, you really asked for it
I think Shannara needs a good whack with your pimpin cane.
Maybe he equated scripting language with interpreted language. Since the virtual machine consists of an interpreter among other things and the intermediate language is executed line by line by an interpreter, than in that context it is similar to a scripting language. On the other hand, C# and Java are full programming languages that support complex data types and generalized objects that are organized by namespaces and that the library user specializes.
One of the most important things to keep in mind is that Mono and Java support a software layer that lies ontop of the operating system layer. This is a more manageable structure or architectural solution for basing a commercial product because it is more flexible than programming directly to the system interface. It’s good and it’s bad for other reasons, but using Linux it’s good because the user does not loose the platform.
“I think Shannara needs a good whack with your pimpin cane.”
lol, I’m not such a bad ass like the blaxploitation movie character Dolemite was back in 1975, but you dig where my nick is coming from, most people think of some european mountains called the dolomiten
Dolemite/Alan6101: Sorry, I will no longer respond to trolls in this thread.
Anonymous: I think you are correct. I basically see scripting languages and interpreted languages as the same. Definately different then programming languages or else they would of not been labelled otherwise. However, after you definated that, you say C# and Java are actual programming languages? How do you figure, by their features? By your def, they would both be considered “interpreted”, no?
I can see how this software layer could be good. But also seen how it is completely worthless for anybody who are writing closed-source desktop/client software with it. I use .Net for a server based and in-house desktop/client solutions ONLY. The reason, is because I do not like distributing my source codes to the world, which is mandatory with .NET if you release your software into the world. *shrugs* If it wasnt for that design flaw, .NET would definately be respectable.
For Mono to clone it, right down to the flaws, speaks volumes about it.
The reason Sun left operator overloading out of Java was because Java was designed to bind the hands of programmers to keep them from hurting themselves. Operator overloading is not really an extra feature. Rather, preventing operator overloading is a restriction on the language that breaks orthogonality. If operator+ is just a function (it sure as hell isn’t a primitive operation as it is in C) then it is natural to be able to overload it, just like you can overload other functions. The fact that operator overloading is not supported leads to weirdness like the String *class* doing things that regular classes are not allowed to do, namely, overload operator+.
There’s a difference between .NET’s JIT and normal interpreters. When MSIL is JITed, the MSIL that was translated to native code remains as such. Upon subsequent execution of that code, no further interpretation is required. The native code that was produced the first time is executed as-is.
In the usual scenario, it is likely that all code within the application won’t be executed on first run. On subsequent runs, if one of the initially unexecuted code paths is used, the JIT then works on these paths as it comes across them to convert them into native code. As, stated above, this code then requires no subsequent JITs when the code is run at a later time.
A couple advantages of MSIL and JIT is that the developer can distribute one package that runs on multiple CPUs, and when the code is compiled, it can take advantage of any CPU/platform specific features to increase performance (if implemented in the runtime/compiler for that platform).
RE: Release of source
The code can be obfuscated making it harder to get usable results from disassembly. Ultimately, any language can disassembled.
Java or Mono are ideal for solution implementation, but they are not established platforms for system implementation, in other words, the developer reuses the research and development in the ‘vendor’ libraries through inheritance and specialization, rather than doing his own research and development and construction of his own libraries. That is the primary premise, and through reuse of their extensive framework libraries, your company can rapidly build solutions for their domain. The solution developer is not focused on building the architecture but on reusing the vendors architecutre that conforms to the vendors product line which includes supporting technology such as servers (or services).
There is one other key point, oh yeah, it’s data. The new vendor strategies are to make data generic. So the vendor is concentrating on appealing to corporations data and not their source code. So to the vendor, source code should be closed, but data is generic under the constraints of their product line. In other words if you use Java or Mono, than you will be able to leverage generic data between services. You will in a sense be able to reuse data, and there is value in that for corporations, but in order to utilize that idea which is not being developed in vendor offerings, you must give up some control and rely on the vendor’s research and development through their product line such as middleware (Java or Mono).
The idea of open source is underdeveloped but it is much more powerful than anything we know at this time, but you can not depend on a vendor to lead in this area. The concept of generic code and generic open source code reuse is the ultimate breakthrough, but it is not being realized.
I think that if you have a business interest than you should cooperate and learn Java or Mono middleware and that you will be able to market a product successfully, just that it will not be a system because that is the domain of a vendor, instead it will be a solution offering.
Thanks n4cer, I was not aware of that detail. I have never studied .Net at all!
All u people so dump ?!?!?!?!
Explain this guy what he doesnt want to understand!!!!
Whats that ? ByteCode Compiled = Scripted ??????
Scripted -> Interpreter reads code as said , statement by statement and runs those statments as they are.
You read a book , you understand the ideea of a phrase , you write the ideea down.
3 operations! performed by you
Someone X reads your ideeas to get a picture of the book.
——————————————————
Bytecode Compiled -> you read the book once! (1/2) , you understand it only one time ( 1/2 ) then you write the ideea down (1)
1/2 + 1/2 + 1 = 2 operations;
Someone Y reads your ideeas to get a picture of the book.
——————————————————
Now , when X and Y are small the performance is kind of simillar
but when someone read pow(10,23) books you will have to do:
scripting : X will do 3 x pow(10,23) operations
bytecode : Y will do 2 + pow(10,23) operations
GOT THE DAMN PICTURE , YOU PROGRAMMER TROLL !!!!
And Java or Mono, they are not scripting language, that issue is over. However I do think well of your ‘thinking’ and the fact that you would make such a statement, it’s good that you think on your own. It’s okay to error if you are thinking on your own, against the flow, that’s the only way to get ahead and you will be correct more times than you will be wrong…but not this time.
IMHO it is a good tool for a good programmers. And bad tool for lamers. But if you not a professional programmer you can create wrong code without operator overloading. The other lamer thing in the Java the missing properties. These are very useful things in RAD environment (and some other cases).