C# 4.0
-
I was wishing for such a thing just yesterday. Ended up using an array, but the calling code is much uglier for having to unpack it. Actually, what would be great would be something like the destructuring assignment syntax recently added to JavaScript. Imagine being able to do this:
double w;
double h;
double d;
...[w,h,d] = CalculateDimensions(...);
:-D
----
You're right. These facts that you've laid out totally contradict the wild ramblings that I pulled off the back of cornflakes packets.
Yup. Exactly the sort of thing I was talking about. The brackets would probably be easier syntax anyway than what I recommended for the parser to figure out.
Kyosa Jamie Nordmeyer - Taekwondo Yi (2nd) Dan Portland, Oregon, USA
-
In a language where most things are passed by reference, there's even more value in an interface making an explicit promise to not alter an object that it is given to work with. How does it limit the programmer ? If you want to alter an object, don't mark it const.
Christian Graus No longer a Microsoft MVP, but still happy to answer your questions.
-
harold aptroot wrote:
Why const? What will it even do besides limit the programmer in the usage of said parameters?
Well, that's kind of the point. You want to limit the usage of const parameters to minimize side-effects.
-
You would have to make sure that you correctly assigned the return value in order for this to work, right? eg:
int x = funcA( "blah" )
tells the compiler to use the version that returns int, but what about these calls?funcA( "blah"); object o = funcA( "test" );
They're ambiguous calls and the compiler can't help you any more. :)Sunrise Wallpaper Project | The StartPage Randomizer | The Windows Cheerleader
It's been awhile since I did any c++, but I believe you would get a compile warning with Borlands old c++ compiler and then it would take it's best guess. Casting the function call would make the compiler happy. They could do the same with next version c#.
MrPlankton
-
Yeah, I've often thought it was kind of dumb that languages didn't do this in the first place. I think the reason though is in how the parameters are wound on to the stack. I agree, though, that if they can make it work, it'd be worth it.
Kyosa Jamie Nordmeyer - Taekwondo Yi (2nd) Dan Portland, Oregon, USA
You use to be able to do this in c++.
MrPlankton
-
So now that C# 4.0 is being talked about, I was wondering what people thought would be good additions to the language. Sorry if this is a repost, but I went through several pages, and didn't see anything, so... What I'd frankly love to see would be tuples. Rather than having to use multiple 'out' parameters, you'd just return multiple values:
public int,int MinMax(int[] numbers)
{
int min, max;
// Code to calculate min/maxreturn min, max;
}What do you think? What would be good for the next version?
Kyosa Jamie Nordmeyer - Taekwondo Yi (2nd) Dan Portland, Oregon, USA
Jamie Nordmeyer wrote:
I was wondering what people thought would be good additions to the language
Oh, I forgot to address that. 1) Pseudo-virtual constructors: I may have a class with a constructor that takes a parameter. If I derive from that class, I have to implement a constructor to call the base constructor:
public class X
{
public X ( string S ) { ... }...
}
public class Y : X
{
public Y ( string S ) : base ( S ) {}
}In this example, the Y constructor does nothing but call the base constructor, I'd rather not have to write it, it's busy-work that the compiler could do. Currently, if Y doesn't have a constructor it's an error. But the compiler already knows how to add a "default constructor", why not have it add the appropriate constructor(s) in cases like these as well? This would be most handy when defining a hierarchy of Exceptions. 2) Allow
enum
as a generic type constraint:public class X where T : **enum** { ... }
There are operations one can perform on enum values which are rather difficult without allowing enum as a constraint. -
So now that C# 4.0 is being talked about, I was wondering what people thought would be good additions to the language. Sorry if this is a repost, but I went through several pages, and didn't see anything, so... What I'd frankly love to see would be tuples. Rather than having to use multiple 'out' parameters, you'd just return multiple values:
public int,int MinMax(int[] numbers)
{
int min, max;
// Code to calculate min/maxreturn min, max;
}What do you think? What would be good for the next version?
Kyosa Jamie Nordmeyer - Taekwondo Yi (2nd) Dan Portland, Oregon, USA
I'd like them to include a compiler switch to treat extension methods as errors. I'd also like them to place a "feature freeze" on the language. A good programming language need not be updated every three years.
Sunny Ahuwanya "The beauty of the desert is that it hides a well somewhere" -- Antoine de Saint Exupéry
-
So you limit yourself - how about promising yourself not to alter it without writing it down? Saves time and space.
Because it will end like most of promises you (easily) give to yourself, it will almost certainly be broken. :sigh:
-
So now that C# 4.0 is being talked about, I was wondering what people thought would be good additions to the language. Sorry if this is a repost, but I went through several pages, and didn't see anything, so... What I'd frankly love to see would be tuples. Rather than having to use multiple 'out' parameters, you'd just return multiple values:
public int,int MinMax(int[] numbers)
{
int min, max;
// Code to calculate min/maxreturn min, max;
}What do you think? What would be good for the next version?
Kyosa Jamie Nordmeyer - Taekwondo Yi (2nd) Dan Portland, Oregon, USA
I want C# that helps me write less buggy code. This can be accomplished by integrating some Spec# features like
[Pure]
,[Immutable]
, etc. I want to be able to writeyield return someEnumerable;
. I want a terse syntax for enumerables, now that they're everywhere with LINQ.private IEnumerable<Foo> SomeFunc(IEnumerable<Bar> input) { ... }
is just too wordy.Tech, life, family, faith: Give me a visit. I'm currently blogging about: Feelings-Based Morality of the Secular World The apostle Paul, modernly speaking: Epistles of Paul Judah Himango
modified on Wednesday, October 1, 2008 6:39 PM
-
Twice, yes. Both times the C# team argued about the complexity of introducing named optional params, and I said, I'm not asking for that. just some simple syntactic sugar ( the compiler can just generate the methods that pass the defaults through ). Like banging your head against a wall. Of course, now I am not an MVP, because I hate Vista, so I can't suggest anything anymore.
Christian Graus No longer a Microsoft MVP, but still happy to answer your questions.
Christian Graus wrote:
now I am not an MVP, because I hate Vista
Ultimate conspiracy?
-
Sigh. As I've said above numerous times, it's not NEEDED, it'd just be nice. :) The ?? operator is not needed. But it's a great shortcut. The foreach construct isn't needed. But it's a great shortcut (you could do the same thing with a while loop, checking whether the MoveNext method of the enumerator returns false). Same with the idea of tuples. I'd rather be able to return 3 or 4 values than have to deal with the messiness of out parameters, or having to define multiple structs to handle each return combination that I might need.
Kyosa Jamie Nordmeyer - Taekwondo Yi (2nd) Dan Portland, Oregon, USA
Actually, foreach is needed. Without foreach, you can't guarantee that the Enumerable pattern is followed. You don't expect developers to consistently follow the pattern using a for or while loop.
Sunny Ahuwanya "The beauty of the desert is that it hides a well somewhere" -- Antoine de Saint Exupéry
-
So now that C# 4.0 is being talked about, I was wondering what people thought would be good additions to the language. Sorry if this is a repost, but I went through several pages, and didn't see anything, so... What I'd frankly love to see would be tuples. Rather than having to use multiple 'out' parameters, you'd just return multiple values:
public int,int MinMax(int[] numbers)
{
int min, max;
// Code to calculate min/maxreturn min, max;
}What do you think? What would be good for the next version?
Kyosa Jamie Nordmeyer - Taekwondo Yi (2nd) Dan Portland, Oregon, USA
-
How about a function's return type being part of it's signature and not just the arugment list; so int functA(string abc); string functA(string abc); does not cause a compile error when they are in same class.
MrPlankton
Yeah, but what method should be called if I want to ignore return value? 1.
int i = functA("a"); // ok int functA(string) is called
2.string s = functA("a"); // ok string functA(string) is called
3.functA("a"); // wtf?
-
I'd like them to include a compiler switch to treat extension methods as errors. I'd also like them to place a "feature freeze" on the language. A good programming language need not be updated every three years.
Sunny Ahuwanya "The beauty of the desert is that it hides a well somewhere" -- Antoine de Saint Exupéry
Sunny Ahuwanya wrote:
A good programming language need not be updated every three years.
True... but we're talking about C#. :-\ </cheapshot>
----
You're right. These facts that you've laid out totally contradict the wild ramblings that I pulled off the back of cornflakes packets.
-
Because it will end like most of promises you (easily) give to yourself, it will almost certainly be broken. :sigh:
-
So now that C# 4.0 is being talked about, I was wondering what people thought would be good additions to the language. Sorry if this is a repost, but I went through several pages, and didn't see anything, so... What I'd frankly love to see would be tuples. Rather than having to use multiple 'out' parameters, you'd just return multiple values:
public int,int MinMax(int[] numbers)
{
int min, max;
// Code to calculate min/maxreturn min, max;
}What do you think? What would be good for the next version?
Kyosa Jamie Nordmeyer - Taekwondo Yi (2nd) Dan Portland, Oregon, USA
well, I understand it's bothersome to define a class for each possible return type. but in this simple case, how about: public int[] MinMax(int[] numbers) { int min, max; // Code to calculate min/max return new int[] {min, max}; } BTW I don't like Power Collection, they code is convilted and my implementation of RedBlackTree is 7 times faster. OK I'll share it very soon!
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
-
I'd really really really like to see absolutely no changes whatsoever. Seriously.
"It's so simple to be wise. Just think of something stupid to say and then don't say it." -Sam Levenson
Me too. I think they already degraded the language in C# 3 by adding extension methods and partial methods just to sell LINQ.
Sunny Ahuwanya "The beauty of the desert is that it hides a well somewhere" -- Antoine de Saint Exupéry
-
Why const? What will it even do besides limit the programmer in the usage of said parameters?
1. one of main differences between high-level languages and assembly language is that they introduces many ways to limit the programmer 2.
const
keyword is not only a limitation it is also a reminder for you and for others that there is a reason why something should not be changed. Andconst
is certainly a better solution than running around the office saying 'promise me that you will not try to change data returned bySomeLongAndCrypticFunctionName
' -
Yes, it's something the compiler could easily do for you.
Christian Graus No longer a Microsoft MVP, but still happy to answer your questions.
Christian Graus wrote:
compiler could easily do
Nope, or at least not around '04 http://blogs.msdn.com/csharpfaq/archive/2004/03/07/85556.aspx[^]
[My Blog]
"Visual studio desperately needs some performance improvements. It is sometimes almost as slow as eclipse." - Rüdiger Klaehn
"Real men use mspaint for writing code and notepad for designing graphics." - Anna-Jayne Metcalfe -
well, I understand it's bothersome to define a class for each possible return type. but in this simple case, how about: public int[] MinMax(int[] numbers) { int min, max; // Code to calculate min/max return new int[] {min, max}; } BTW I don't like Power Collection, they code is convilted and my implementation of RedBlackTree is 7 times faster. OK I'll share it very soon!
A train station is where the train stops. A bus station is where the bus stops. On my desk, I have a work station.... _________________________________________________________ My programs never have bugs, they just develop random features.
Elegant, indeed, and I've done this before. But it gets messy if you want to return an integer, 2 strings, and a DateTime, for example. You can create a struct to return this data, and object array (yuch), or use out parameters. Tuples just look cleaner to me. :)
Kyosa Jamie Nordmeyer - Taekwondo Yi (2nd) Dan Portland, Oregon, USA