Project Mono, an effort to create an open source version of the Microsoft Corp. .Net Framework, expects to release version 1.0 of its software this year, probably in the fourth quarter.Also, OpenLink announced the release of a project to turn Wine into a library that can be used dynamically from Mono. This work simplifies the work on System.Windows.Forms as it is no longer necessary have a special version of the GC, nor have a stub program. There is still some work to be done.
Here are some screenshots running GTK# applications.
Elsewhere, dotGNU 0.5.6 was released recently.
Monopoly power can be a good thing after it has amassed a nice fortune and is forced by competition to innovate. If you have perfect competition nobody makes enough money to take a big risk like Microsoft continues to do. Of course we wouldn’t see much innovation from MS if OSS hadn’t come along and kicked it on the butt.
Seeing as there’s now a high chance of getting C# to run on non MS platforms, I just might give C# a go.
Multi paltform one great language. 1.5 really seems to be the best language so far for msot things. And its a lot easier beign an expert when you have to know only 1 language. ina ddition Mono will probably lose compatibility with .net and already it needs WINE to emulate some windows things.
Well then why not go with Python – it’s also multi platform and easy to get the hang of (and it even runs in a jvm)
Anyway I believe that work is underway to integrate all these languages into the mono vm. If they succeed in doing that mono would really rock.
Java is a fine language, but I feel that C# is better (delegates, value types on the stack, properties, operator overloading…). The good news for java developers is that because of the competition with .NET it has forced SUN to finally start adding some new language constructs, e.g. for-looping iterating over objects and enums. Let’s hope they get VM sharing into a near-term future release of the java platform. Java will be on servers for a long time to come, but it lost on the client-side and it’s too late to try and make a comeback. Yeah, there’s Limewire and Eclipse, but those are the exception and not the rule. Note that IBM had to develop a new gui toolkit because of the problems with Swing.
.NET will probably never be as binary cross-platform as Java, but for the Mono project that’s never been the primary goal. the port of SWT to c#, QT#, and gtk# are all alternative toolkits to winforms which MS has stated will be completely re-worked anyway.
I’m looking for a good IDE on linux for c#. Right now, the only one I’ve found is Slickedit which costs $300 and isn’t nearly as feature-packed as say Eclipse or even Sharpdevelop. Yes, Sharpdevelop is in the process of being ported, but it’s probably going to be a little while. The Sharpdevelop team is now starting the process of merging another SWT port to c# into their port codebase.
Mono also runs java. So you can select C# or you can go with java, which as been out for years already and is the lowest common denominator.
Though mono has got me interested in learning C# (already know some java).
Those of you looking at Mono hoping for a cross-platform may be disappointed. It has been pointed out many times that Mono will not necessarily work well for porting windows programs to linux. Now, if it works that’s great, but if it doesn’t, that wasn’t the point in the first place.
The idea is that programmers LIKE .net. I know, I’ve used it and it’s fantastic. Bringing this environment to linux is good for everyone regardless of how cross platform it ends up being.
As to the “use java/python instead” argument… why? I am sure every programmer has at least seen, if not written a java program or two in their day. Everyone knows what it’s capable of and if they want to use it, they will. I programmed java for three years, and yet I sat right down at .net and felt at home. I don’t know about you, but to me that is better than any advertising I’ve seen.
Python? Well, I will say for speed, learnability, ease of use, and fun, Python is hands down the single best language one can learn (if you can call spending 20 minutes playing with stuff that takes hours to do in other languages learning). But it isn’t for everything or for everyone.
>> If you have perfect competition nobody makes enough money to take a big risk like Microsoft continues to do.
>>
Java was a very innovative thing. In retrospect, it doesn’t have the best design, but it certainly was very innovative.
Mono will probably lose compatibility with .net and already it needs WINE to emulate some windows things.
Uhh, earth to genius: Wine is not an emulator. It’s an implementation of the Win32 API/ABI. Instead of reimplementing Windows Forms, the developers of Mono simply borrowed the relevant code from Wine, rather than doing their own implementation. That’s simply sensible code reuse.
Java was a very innovative thing.
There was nothing in Java that hadn’t been done better in another language a decade earlier. The only innovation was taking those ideas and presenting them in a way that would appeal to people who thought the whole world was C and C++.
Listen, I assume there will be much mud slung about in regards to this technology Michuel and his associates are chasing, but that does not reflect at all upon the importance of this technology WRT GNU/Linux in the enterprise world.
I am a studying CS major at an important technology school, and just last semester we had three seperate gatherings at our conference center concerning M$ .NET technology (essentially an M$ rep came and slung shit at us, try to convert us to M$ 🙂 I hung my LUG flyers all over the walls and doors
To speak honestly, as a programmer, the possibilities the .NET technologies open are quite broad and important. I have had people offer to me (heroine?) their copies of .NET studio, which I downright refuse, because I respect IP.
J/K. Really, I have no interest in M$’s take of .NET (even though they invented it), as I see any furtherances of this programming base to be rooted in their gaining more monetary signifigance.
So I’m drunk and rambling, let me say, the long and the short, I cannot wait for MONO to be released; from what I have seen it is a perfect merger of the OSS methodology and bleeding edge availability framework software.
Let Slackware rule forever
Para Rox
IMHO C# if far better then java 1.5 will be. It is very sad because C# really not 100% platform-independent, but it is true.
I have been coding in Java for last 5 years and I have to say it is a awsome language. My code that I wrote 3 years ago still is running in production yes I did change the api as I upgrade to JDK 1.3.1 from 1.2 but that is all. And by the way my porting of apps from windows 2000 to Linux was seamless I just dropped the ear file to linux in Weblogic 7 and it ran.
I think if you want application to be scalable and stable use Java. Java has most support from opensource (Jakarta), IBM, BEAB, Oracle, SUN. This makes the language rich.
.Net is propietory and the reason MS got mono out is due to Java is so popular in enterprise application. MS will always have the last call in mono since MS hates opensource.
I use Java a lot. One of the main things I wish it had are templates (from C++) and automatic boxing/unboxing of primitives (from C#).
I don’t really need operator overloading (I stay away from this), delegates (use interfaces instead), properties, or rectangular arrays (could be implemented at VM level).
C# looks like a nice language and like I said, now that it runs on non-MS platforms, I’m going to give it a go.
“And its a lot easier beign an expert when you have to know only 1 language.”
Actually you are a very inefficient expert compared to an expert who has many languages to his disposal. Use the best tool for a given task. No single language (C# included) is best for everything.
I had a recent project, where I *need* to check whether or not a long had been set. I could not get this to work in VB.NET, is this possible in C#?
In Java I can just use the datatype Long, and if it’s reference is null, then it obviously hasn’t been set.
How is this done in C# – without doing a wrapper!
if(!longvariable.Equals(null)) ??
>if(!longvariable.Equals(null)) ??
Nope, please test
Well, since long is a value type, it always has a value (the default is 0). So you can not check wether it is null. If you want a variable that can have each value of long, and can also be not set (null), you need to use boxing (the same as in java). The best way to do thins would be to declare the variable of type object.
long x;
if(x!=null) {
//this won’t compile since x is a value type
Console.WriteLine(“x is “+x);
} else {
Console.WriteLine(“x is not set”);
}
object y;
if(y!=null) {
//this will work since y is a reference that
//contains a boxed long.
Console.WriteLine(“y is “+y);
} else {
Console.WriteLine(“y is not set”);
}
>The best way to do thins would be to declare the variable of type object.
yeah, that is also what I figured, but unfortunately that would change the datatype from long to object, which would break introspection. AFAIC, it’s a fatal flaw in .NET. Only way to solve it is to introduce a Long class – but this isn’t possible, since that type is used in VB.NET
> yeah, that is also what I figured, but unfortunately that would
> change the datatype from long to object, which would break
> introspection. AFAIC, it’s a fatal flaw in .NET. Only way to solve
> it is to introduce a Long class – but this isn’t possible, since that
> type is used in VB.NET
I think it is a flaw in the design of the class you are using. If you had a java class like this:
class Bla {
long x;
}
you could not have x uninitialized. It would have a standard value of 0. Of course you could change it to
class Bla {
Long x;
}
but that would change the signature of the class, which you do not want to do.
I really can not see the difference between Java and C# in this sample. And of course you can always write a wrapper class.
“but that would change the signature of the class, which you do not want to do.”
That *is* the signature of the class I am handling! It DOES use the Long type instead of the long.
“I really can not see the difference between Java and C# in this sample.”
There’s a *huge* difference!
Java has both a long value type, and a Long object type.
C# (indeed .NET) only has the value type.
“And of course you can always write a wrapper class.”
Exactly, thats what I end up having to do :/
class MyLong {
public Long longValue;
public MyLong(long value) {
longValue = Value;
}
}
There is an inherent difference between using a langage that has reference semantics and using a language that has value semantics. In languages that have (primarly) value semantics, like C/C++, you would assign the long object a special “uninitialized” value, like 0 or -1. The initialized value would be anything besides 0 or -1. If you couldn’t afford truncating the range of the data type, you’d either use a larger datatype, or you’d wrap the long into a struct with a bool member indicating whether or not it was initialized. If you can’t afford to change the datatype, then you’re code is probably too tightly coupled to the introspection mechanism.
Using C++ definitely does not mean you have to use dummy-values to see if the variable is set or not.
That’s what is great about C++, you can have it any way you want it!
So quit whining about which dumbed down language is more powerful and use a professional tool that allows you to make your own decisions.
template <typename T>
class SetWrapper {
public:
SetWrapper(): _set(false) { }
T& operator=(const T& value) {
_value = value;
_set = true;
}
T& operator T() {
return _value;
}
bool set() {
return _set;
}
private:
bool _set;
T _value;
};
SetWrapper<int> foobar;
assert(foobar.set() == false);
foobar = 23;
assert(foobar.set() == true);
Of course you could make a custom datatype, but the original poster indicated that he did not want to change the signature of the item in question. The merits of the design being so tighty coupled is a different matter.
Actually, it’s the opposite. Established companies tend to go with formulaic, “safe” products to protect their bottom line, while young competitors tend to realize that they need to be innovative to have any impact at all on the market. If you take a look at Microsoft’s “innovations” you’ll realize that they were usually just purchased from a smaller company. For example, Direct3D was purchased from Reality Labs, and the .NET CLR was purchased from Colusa Software. C# it self is nothing innovative, being little more than a rather standard OOP language in the style of Java.
The conversion operator would handle most signature problems, ie. it could still be used as it was before. (As with most useful constructs though, there’s no such thing in Java)
And he wouldn’t have to write a different wrapper for each new type.
I can’t for my life understand what professional programmers see in Java and C#!
I for sure can understand what they see, and I’m still not a professional
It’s possible to create delegates on the fly with BCEL although it is not a standard Java feature.
You can write a method and append it at the runtime to any object that you want (again with BCEL
Delegate is not such an innovative thing but it only increases the number of language constructs which may not be a good thing.
Although I don’t like the syntax in which we declare delegates, I believe it’s an interesting feature.
But after all, I choose Java. Go to hell .JERK
Ah, the introspection-less land of C++ I think the original poster’s problem was that external code depended on the exact long type. The same problem would occur in C++ with a shared library that exported a type.
“it is very sad because C# really not 100% platform-independent”
C# IS platform independent. .NET, at this time, is not. C# != .NET.
-G