Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

What, no design notes? #12630

Closed
DavidArno opened this issue Jul 20, 2016 · 92 comments
Closed

What, no design notes? #12630

DavidArno opened this issue Jul 20, 2016 · 92 comments

Comments

@DavidArno
Copy link

Hello @MadsTorgersen et al.

There have been no design notes from the dev team since May; over two months ago. Aside from Mads appearing on .NET Rocks and disingenuously claiming that in C# 7, pattern matching will be 80% done (the real figure will be nearer 8% than 80), there haven't been any announcements on progress and plans.

Any chance of an update soon?

Thanks.

@MgSam
Copy link

MgSam commented Jul 20, 2016

While .NET, TypeScript, and other MS projects have become fully open source projects with major community contributions, my impression is increasingly that the Roslyn project is becoming much more of a source dump than an open source project. After some initial excitement when the code was first open-sourced on CodePlex, there seems to be little interest from the team outside of @gafter (and occasionally @mattwar, @ljw1004, @CyrusNajmabadi) in interacting with the community. Mads pops up literally only to occasionally post design notes and then disappears back into the ether.

Compare this to the repos for any of the other MS projects, where the principles regularly engage with each other and the community on Github.

This really is a shame, as I think the community can have a lot of valuable insights and contribute meaningfully (not counting myself in this, as there are lots of folks much smarter than myself who hang around here).

I'm starting to wonder if C# and Roslyn are being de-prioritized at MS. It's either that or it's being severely mismanaged. It's telling that a full 50% of features of C# 7.0 are championed by one person. Despite the stated goal of releasing more frequently, the pace of progress is still glacial compared to many other modern language being actively developed (C++, Swift, Rust, TypeScript, the list goes on and on).

It will have taken two full versions of the language, or at least 5 years, to add binary literals and digit separators, the simplest of simple features, from when they were first proposed. TypeScript has had 5 versions released in the last year. They will have designed, implemented, and shipped non-nullable types all while the C# team has punted this feature into a future version that is probably years away.

And that's not even mentioning that when they do meet, the LDM seems to choose at random what features they're going to talk about- the last design notes were on extension members which isn't even being considered for C# 7. This when there are many outstanding design issues for features that are on the table. Talk about putting the cart before the horse.

This project is desperately in need of some effective leadership and organizing, and for the sake of C#, I hope it happens.

@roterdam
Copy link

@MgSam You can't compare C# to TypeScript. One is a transpiler system and toolchain (sure mirroring ES6) and the other is a language used for more (without sounding too offputing) traditional software development.

You know what I hate. Tuples and Pattern Matching. I find them totally repulsive. Guess what? C# 7 will move at a pace that also accommodates and caters to a crowd that can be more conservative than you.

I love C# because it has a set of designers that are patient, thoughtful and decisive about the features they want.

It's not entirely a bad thing.

C++17 hasn't added much, C++14 didn't go too crazy either. Sure C++11 was a big jump, and it's been 5 years for that too.

I'm terrified at some of the "pro performance" proposals being made, by the same lot of people. Game developers are coming to C# and they want Unsafe APIs, allocating reference types not on the GC heap, MSIL inside methods, etc.

Then there is the pro F# gang. I open a .fs file and I go bananas, I don't understand anything. And now it seems there will be more of it in C# and it'll make me less productive. Nobody in the community thinks of that, but I'm so glad people steering C# as a language do think like that.

I will one day have to read C# code one of you may have written and I'm concerned I will not be able to understand much of it, because it'll be F# like "->" code all allocated on the non-GC heap with intertwined MSIL doing .tail prefixes and localloc's all over the place.

/end rant. There is another side of the story, that is being somewhat conservative to bring everyone along for the ride. I humbly request people who watch issue to see that side too.

@CyrusNajmabadi
Copy link
Member

CyrusNajmabadi commented Jul 20, 2016

What would you like to know about? :)

And that's not even mentioning that when they do meet, the LDM seems to choose at random what features they're going to talk about

Language design is hard. It's inappropriate to focus solely on the near future, without also taking a thoughtful eye toward where you want to be heading in the long term. We continuously discuss a wealth of topics to make sure we feel that we're on the right path and we're not making decisions in the short term that we'll regret later on.

he last design notes were on extension members

One of the reasons to discuss extensions members is because it affects our thinking on how we do things in the tuples/pattern matching/deconstruction space. For example, if we felt that extensions could be used for deconstruction if they were tweaked slightly, then talkign about where we wanted them to go was sensible. Similarly, things like extension constructors or extension conversions becomes very important if as we consider how different types might convert to/from tuples.

Language features are not designed in a vacuum. We have to consider how they work with the entirety of the language so far, as well as how they may work with what we think may be coming in later. We want to make informed decisions, and that means thinking and talking about all these concerns continually.

@AlgorithmsAreCool
Copy link

@MgSam I don't think this is being fair. TypeScript is still brand new as a language, they don't have 15 years and untold millions of lines of legacy code to consider. On top of that, typescript is still 80% javascript. They more or less just need to parse, type check and then strip out their syntax additions.

Roslyn needs to do sophisticated checking, lowering and compiling into a completely different language target (IL) along with the very ambitious goal of providing a public compiler API that serves major clients with different needs such as aspnet and visual studio while still being accessible to simple analyzers.

That being said, i am a bit disappointed by the change in tone from codeplex where the discussions where richer and more two-way. This is probably due to the larger community here that depersonalizes the discussion as well as creates a flood of messages to the same limited number of respondents.

As to the design 'monopoly' by @gafter....i don't mind. C# 7.0's feature list looks GREAT right now to me. I want every feature (and non-nullables and records) as soon as i can get them.

What concerns me the most is the monotonically increasing open issue count in roslyn that would seem to indicate that the project is either under-resourced or mismanaged.

I hope that @MadsTorgersen can comment on this issue, but i think that his email box has 10,000 unread emails from github on it and this will be lost in the noise.

@CyrusNajmabadi
Copy link
Member

What concerns me the most is the monotonically increasing open issue count

It should be noted that different people feel very differently about bugs and bug counts. I, for one, have no problem with bug counts going up. What i care about is quality, and that doesn't have a direct correlation to bug count or trending direction.

@CyrusNajmabadi
Copy link
Member

CyrusNajmabadi commented Jul 21, 2016

That being said, i am a bit disappointed by the change in tone from codeplex where the discussions where richer and more two-way

Feel free to ask continue asking questions. People will converse, as before, when time permits. :)

@AlgorithmsAreCool
Copy link

AlgorithmsAreCool commented Jul 21, 2016

@CyrusNajmabadi

What i care about is quality, and that doesn't have a direct correlation to bug count or trending direction.

You are of course correct, but I think that an ocean of open issues makes things difficult to track effectively.

Edit:
It is not so much that the work isn't getting done as it is issues get fixed or obsoleted and never get cleaned up.

@HaloFour
Copy link

@CyrusNajmabadi

What would you like to know about?

There was an LDM last week on 7/13. Decisions came out of it which are changing syntax that had already been discussed here. I'd like to see the notes that came out of that meeting, perhaps with some bits of the discussion that led to the change. The team used to be quite good at writing up these notes and offering them here.

I think @AlgorithmsAreCool is right, maybe the team needs some kind of emissary who's role is to help coordinate the communication. Even if that were more one-way and resulted in better dissemination of the team communication to the rest of the community I think that would be a huge win over the situation today.

@iam3yal
Copy link

iam3yal commented Jul 21, 2016

@roterdam You can't compare TypeScript and C# when it comes to technologies because they are doing two different things but you can certainly compare their development process! one is more transparent and open and the other just pretends to be open, the C# team shares the news with us when it's already too late to make any changes.

That's how I feel, maybe I'm completely wrong but that's just the feeling I have.

@ghord
Copy link

ghord commented Jul 21, 2016

I think a lot of this is caused by looming 2.0 milestone. I'm sure roslyn guys are focusing on bugfixes and design work will pick up once next version ships.

@AlgorithmsAreCool
Copy link

@ghord I was feeling the same way before RTM shipped. The team can't stay heads down forever.

@vbcodec
Copy link

vbcodec commented Jul 21, 2016

The reason that there is no new design notes or low level of conversation, may be that there is lack of developers who want to read and participate on this site. The fact is that there is small group 10-20 enthusiasts who daily track every news and changes. Others are visiting this site only to post bugs, or simple high-level ideas.
This is some disappointment, because there are millions of C#/VB developerr, and 'Future of C#' was fourth most viewed session on Build 2016, with 300k viewers
https://channel9.msdn.com/Events/Build/2016?sort=viewed&direction=asc#tab_sortBy_viewed

@AdamSpeight2008
Copy link
Contributor

I'd be happy with an update once a quarter.

@DavidArno
Copy link
Author

@vbcodec,

There are nearly 3,000 open issues here, a great many of which are related to new feature proposals etc. I think you are wrong in claiming that there's a lack of developers who want to participate. However, having posted their ideas, they are normally to be told (by a community member) that that feature has already been proposed in another issue. They read that, see that the comments are normally only from other community members, give up and leave.

The only way that Mads' team will see more people getting involved is by them being more involved themselves. MS claim C# is now "developed in the open". This is clearly untrue. We have a public source dump here, but the language is still developed behind closed doors. C# is failing as an open source project, because it's not developed in the open. Until the team start holding language design discussions in the open (or at the very least, publishing minutes of all internal discussions), there is no incentive for the community to get involved.

@ghord,
According to the last update to the plans for C# 7 (three months ago!), three of the features proposed are still in "feature specification" stage. That doesn't sound like an imminent release to me. If a release is imminent, then Mads really needs to buck his ideas up and get better at updating such status pages!

@HaloFour
Copy link

@vbcodec

The reason that there is no new design notes or low level of conversation, may be that there is lack of developers who want to read and participate on this site.

I agree, this is disappointing. However, I would argue that being less transparent will not likely attract a larger audience.

I don't know what the team could do in general to improve this situation. Certainly more exposure through the usual channels like Channel 9, MSDN Magazine, local events, etc. But I also don't know what the level of interest for a project like this really is, or the breakdown between people who view the repo and browse the issues v. people who actively participate to any real degree. I would expect that the real language enthusiasts would probably be a small minority.

@DavidArno

Until the team start holding language design discussions in the open (or at the very least, publishing minutes of all internal discussions), there is no incentive for the community to get involved.

This is what I would like to see. I would assume (and hope!) that minutes are taken of the LDMs anyway if only for the team to reference. It would be nice if that content were made available, even if in somewhat rough form. This would fit the bill of the role I had mentioned, an emissary between the team proper and the community. Someone on or close to the team who can sit in on these meetings and take these notes, clean them up somewhat for public consumption and then post them here.

@ThatRendle
Copy link

I'm starting to wonder if C# and Roslyn are being de-prioritized at MS.

Yeah, what with: the release of .NET Core with a cross-platform implementation of C# (written in C#) and an open-source editor to go with it; the acquisition of Xamarin with their tools for creating mobile applications using C#; continual talking-up of Unity3D in a way that strongly suggests an acquisition is in the offing there too; and the talk of AoT compilation of C# code to native stand-alone binaries for Windows, Linux and Mac via CoreRT... it really just feels like Microsoft's hearts aren't really in it anymore.

What I'm seeing is features that — to me, at least — seemed really quite simple and straightforward when they were first announced, turning out to be much more nuanced and complicated, and a team taking care to do it properly. It's far easier to iterate on newer languages like TypeScript, Swift and Rust because there aren't billions of lines of code out there to worry about breaking. And the infinite monkey cage that specifies C++ can (and do) do whatever they like because C++ developers expect opening a project to be like walking naked into a forest of thorn-trees on a moonless night and diving headfirst down a deep, dark well that may or may not have a hungry honey-badger covered with angry bees at the bottom of it.

All that said, though, I'd like more updates too.

@CyrusNajmabadi
Copy link
Member

CyrusNajmabadi commented Jul 21, 2016

What I'm seeing is features that — to me, at least — seemed really quite simple and straightforward when they were first announced, turning out to be much more nuanced and complicated, and a team taking care to do it properly.

This. Although i would augment it is: it's pretty much always known that any interesting feature will not be simple and straightforward. The initial 80% of the design can happen very quickly, but the rest takes ages.

Just tuples alone has garned hundreds (maybe thousands) of pieces of feedback internally and externally on how people want it to work. There are all sorts of ways we can take it and make it do more stuff (for example, should KeyValuePair/Tuple have any relation? If so, what sort?). We try to strike a balance between not taking on too much, but also not making a new language feature so isolated from the rest that it won't be enjoyable to use.

Then there's verification that we're not breaking anything (C# has a much higher bar around back compat than, say, TypeScript does). This is a large added tax to the process that does slow us down, but which our community has given long continuous feedback that they absolutely want this. And that's just the language side of it. On top of that, there's the implementation side. Remember that C# actually has to sit on top of an actual runtime with certain capabilities that we expose through the language. These have to actually be in sync and correct. This is not the case with languages like TypeScript. For example, in TypeScript, it's trivial to write 2-3 lines of code which produce no errors, and which contain nothing that subverts the typesystem (like a type assertion) that are considered typesafe by the compiler but which produce a type error at runtime. For example:

 var x: { a: number, b?: number };
 var y: { a: number };
 var z: { a: number, b?: string };

// much later

x = { a: 1, b: 1 };
y = x;
z = y;
z.b.charCodeAt(0)

The comparison to TypeScript is not appropriate as each language has different goals and different features it promised. TypeScript wants to statically identify constructs that may be errors. But in doing so it might miss out on whole classes of issues (like above), or it may misidentify errors that will not actually happen. Because of this looseness, it's far easier to change the language and introduce new features as they have. That's a great boon to TypeScript, and i think it's the right choice for the domain it is going after. However, the same looseness does not apply to C#.

That's one of the reasons that certain features (like non-null) we consider much harder to supply. We strongly seek to make sure the feature descends through the entire language, without corners that leak bad behavior (either through false positives or negatives).

TypeScript also doesn't have to deal with things like metadata and how things are actually encoded and stored to be used by the .Net runtime. It is a 100% erased and only TypeScript source code is the source of information that TypeScript needs. The same is not true for .Net language likes C# which do not erase.

This has made even seemingly basic features (like Tuples) very richly complex. For example, because tuple names are represented in metadata as attributes, you can run into issues where when tuples are used in signatures that are inside the constraints of generic type parameters, then those names are lost. In TypeScript such an issue does not occur because they erase entirely and do not need to examine metadata to know what's happening. For C#/VB we have to, and this hole is something we need to plug because we know that if our customers hit this they will be both confused and upset. Without work here, the names they've put in their tuples would be lost, and they'd no longer get good tooling information about what these tuples actually represented.

This is just a tiny slice of the broad depth and time that has to go into just a single feature :)

Now compound that with multiple features, which themselves overlap (i.e. Tuples and Patterns) and you'll find that language design takes a long time and that it's well worth it to spend that time so you don't end up releasing something you regret later but can't change.

Note: i do not want to make this into a discussion about TS vs C#/VB. I just wanted to provide insight to help understand why direct comparisons between them aren't seeing the whole picture. C#/VB could operate more like how TypeScript does (and there are times i wish we could!). But we have strong evidence that doing so would likely produce language versions that would deeply upset many of our user base.

@iam3yal
Copy link

iam3yal commented Jul 21, 2016

@CyrusNajmabadi I fully agree with your posts, however, I think what some people want is not more features but more communication from the team.

@AdamSpeight2008
Copy link
Contributor

Also the discussion tends to be more C# focused, which gives the impression that the VB language isn't being worked on also.

@CyrusNajmabadi
Copy link
Member

AFAICT, right now, several team members that generally write up and notes are involved in an Ecma summit. :) I fully expect that once that is done that more recent notes will be forthcoming.

@CyrusNajmabadi
Copy link
Member

CyrusNajmabadi commented Jul 21, 2016

which gives the impression that the VB language isn't being worked on also.

Which is another thing that makes comparisons to other languages not quite on point :) We've also got to work through all this stuff across multiple languages. And we have to consider how we're going to expose this through the Roslyn API as well (with all of its' back compat guarantees). And on top of all of that, we go and make things work in a multitude of editors :)

At the end of the day, we're not just creating a language and a black box that takes in code and spits out IL. We're creating a whole API for working with the language and we're working on exposing all the APIs to allow you to work with it in an Editor context. It's a ton to do and we do the best we can at letting you see it by keeping the majority of our discussions and work happening here on Github.

My personal preference would be that we consider moving straight to github as the location where we write our minutes as the meeting is in progress. That might help with the delay between the meeting and the release. The downside is that it's very possible for things to be much more raw, unclear, and possibly even incorrect.

The current approach allows Mads the time to go through and dump a ton of expository content into teh notes explaining the wealth of positions presented, the thought process we went through, the pros and cons of the different approaches, and where we finally landed (if we did land). This makes the notes much more understandable and helps avoid misunderstandings and immediate off the cuff reactions.

@iam3yal
Copy link

iam3yal commented Jul 21, 2016

@CyrusNajmabadi I think we understand that you're doing ton of work and are aiming carefully so you won't miss anything in the process and get things wrong, I mean "better safe than sorry" right?

However, I doubt that people want you to exchange quality with communication, we're asking for more communication on your side when it's possible and as often as possible!

The most frustrating things for us is hidden changes and decisions that are made without any discussions or involvement of the community, you're going through things and decide what's relevant and what's not and by the time it gets to the community it's too late! I know we have no say about actual decisions and that's how it should be but it also feels like our opinions are meaningless! and that is the actual problem, at least for me.

There's no transparency in the process, people don't know whether proposed features were even discussed because all the important decisions and discussions are made internally

Now, it's pretty unreasonable to discuss every possible feature but features that are under discussions internally can be shared with the community, there are many smart people here, let them in!

People that propose features would also improve their future proposals if they could know what are the reasons for their proposals to be declined or approved.

It can also be nice if there was a clear roadmap for the language or at least blurry one that tells the community for say C# 7.x we're going to do that and in C# 8.0 we're going to explore this and that.

@CyrusNajmabadi
Copy link
Member

but it also feels like our opinions are meaningless!

I'm sorry it feels that way. It certainly isn't the case, and much of our discussions are precisely because we've heard feedback from the community about what they think. I routinely go and read through the hundreds of back and forth comments we've had on numerous discussion to help inform my own opinion on the feature and what i think is best moving forward.

By the time it gets to the community it's too late

i don't think there's a single feature that has been that way for C# 7. :) Our designs and impls have already changed a lot based on feedback we've gotten from teh community. It's true at some point there will be final decisions and those may end up being the "that's that" point for those features. That's true of any language being developed. You eventually get to the point that you've heard all the feedback, you've discussed things to death, you understand the tradeoffs between the multiplicity of different options, and you feel like you're making the best choice for the future of the language and ecosystem.

Now, it may be that those decisions are not ones you want. Lord knows there are many decisions we make that I personally don't prefer. But that's just part and parcel of the process :) As time goes on the process goes more from open ended questions and design spaces, to a more locked down path where it's a lot less around figuring out the direction, and instead ensuring that everything necessary is done based on that direction.

people don't know whether proposed features were even discussed because all the important decisions and discussions are made internally

Could you clarify this a bit? How would you prefer decisions be made? I think, currently, the opinion is that the LDM makes decisions. Decisions can take in feedback from people outside of it, but the decisions are ultimately in the hands of the LDM. As such, the process is inherently internal.

In other words, i'd love some clarification on what, precisely, is being asked for. Is it a faster cadence from LDMs to publications of the notes taken? Are there other asks from you guys as to what you'd want? I don't want to guess at things and i'd lke to know specifically so we can see what of those requests makes sense to us and what we can try to do better with.

Thanks!

@iam3yal
Copy link

iam3yal commented Jul 22, 2016

@CyrusNajmabadi First of all, thank you for taking the time to discuss this with us.

Could you clarify this a bit? How would you prefer decisions be made? I think, currently, the opinion is that the LDM makes decisions. Decisions can take in feedback from people outside of it, but the decisions are ultimately in the hands of the LDM. As such, the process is inherently internal.

Okay, so currently say we have a feature that is discussed internally by the team, now, what I'm asking and I think that many people would agree with me is to post a summary of the internal discussions and this how I'd imagine the process should look like:

  1. Internal discussion is taking place.
  2. Notes are being written.
  3. Notes are being refined for discussion.
  4. Team member creates a new issue related to this feature!
  5. Team member reference the issue to existing issue about it (if there is one).
  6. The community discuss the feature.
  7. Team members share their opinions in the open.
  8. Team members have the final word and an explanation is given to the community about it.

It can also be nice if there was a document that summarizes the issues that are created at step 4 or even a tag for it like "Internal Discussion" so the community would know what's hot! and can follow it.

Obviously, this is a rough idea of what I think it should look like.

Now, like @AlgorithmsAreCool said, maybe having a community manager for the language that will take some of the pressure off for refining the notes and posting them to the community can help tremendously.

You can probably ask the TypeScript team about their process and maybe learn something from them even though the technologies are vastly different.

So yes, we would like to have LDM notes as early as possible and we would like to know what's going on when changes are made especially when it comes to changes that were never discussed by the community.

Currently, it feels like the process is similar to this:

  1. Internal discussion is taking place.
  2. Notes are being written.
  3. Notes are being refined for discussion.
  4. Rinse and repeat until final decisions are made.
  5. Team member creates a single note called Design Notes for many LDMs that took place.
  6. Community "WHAT?"
  7. Yes! it's final.

Seems like the waterfall model to me.

Hopefully this clarifies few things for you.

Everything I wrote is from my own observation of the current state if I generalized and you share a different point of view please share it with us. :)

@ThatRendle
Copy link

For me personally, as primarily a lurker of the dotnet repositories, I like seeing updates regularly, even if they are just "Nothing much happened this week" or "We've had a design meeting but Mads is at an Ecma summit so the notes will be published when he gets a minute." It's about not going dark.

On a similar note, remember that GitHub tells you when something was last updated, and, for example, Language Feature Status.md hasn't been updated for 2 months. As outsiders we can't tell whether that's because there's nothing new to report or nobody's got around to updating it. And yes, we are developers too, and yes, we, too, suck at documentation and communication, but we hold you guys to a higher standard because you're Microsoft. :neckbeard:

The idea of minuting meetings directly into a GitHub issue or doc or something sounds good at first blush, but then I remember how some of the communications have gone over the last couple of years of this New Open Microsoft Adventure, and the not-necessarily-best ways certain changes/deprecations were (accidentally) announced, and, well... if I were you, I'd probably be wary of publishing anything that hadn't been carefully constructed and edited and probably proof-read by a couple of people for good measure. Remember: Fear The Rage.

@vbcodec
Copy link

vbcodec commented Jul 22, 2016

@CyrusNajmabadi
Thanks for your answers, but this is not what we want. How team work, is not our needs. We just want to know current state of Roslyn in terms

  • state of implementation particular features - compilers, editors and other tools
  • planned, changed, removed features - what, when and why
  • decision being made by team
  • active participation in discussions on language features and proposals

First two points are most important. We need design and implementation notes Design notes should be posted when team decide to design, change or implement feature (on prototype and final code), and are aimed mainly to gather feedback and discussions. Implementations notes should be posted regularly, just to track state of implementation features on booth prototype and final code..

Another problem is lack of any informations about VB. I am pretty fine that all proposals and discussions are made in context of C#, but I want to know what will be implemented in VB. Do you still maintain feature's parity between C# and VB ? Good news is that tuples will land in VB. But what with source generators, replace/original, typeswitch and other features ? None info about it. Recently I have found that team post progress on Twitter. For example here is news that Tuples work in VB
https://twitter.com/ThatVBGuy. But why no such post here ?

There is no official C#/VB site, with news, events, discussions, proposals and anything other related to C#/VB. Other languages have such official sites, and Microsoft should create such site for C#/VB, especially that they are expanding these languages to other tasks, communities and platforms. Twitter, github and MSDN Blogs combined, are poor dispersed and inefficient replacement for such site.

@AlgorithmsAreCool
Copy link

Well some good news is the DotNet Foundation has just brought in @rachelreese as Community Director.

This can only be a good change, but I still think we could use someone down in the github issue trenches to bridge the gap in communication. I think Rachel's role is much higher level than that.

@iam3yal
Copy link

iam3yal commented Jul 22, 2016

@AlgorithmsAreCool That's awesome! :D

@iam3yal
Copy link

iam3yal commented Jul 29, 2016

@vbcodec

GitHub is the site for any kind of engagement with Roslyn! currently we have no other alternatives unless you consider UserVoice that I really despise and dislike with all my heart.

I think that GitHub is a great place for discussions, whether you like it or not it's your choice! people can decide for themselves whether GitHub fits their need or not and it doesn't even matter what it was designed for as long as it fits your needs, it's simple.

Their approach is to use single site for any discussions, and that site is http://dlang.org, not github. Look at their github repos (https://github.com/dlang), there are no issues on most repos. They have on site forum, that is used to discussions, while github is only for code dump. This approach is good, because there is single site for any engagement, which is confortable.

So they have zero issues and they are going to a completely different site to post these issues where you cannot use mention and you cannot reference anything and you consider this a good approach... sorry but this doesn't make sense to me at all!

@vbcodec
Copy link

vbcodec commented Jul 30, 2016

@eyalsk
Now team must improve their engagement on github, by posting more design notes, clear some mess with issues and update obsolete non-code content. But github is not real HQ site, and labels are not real menus.

As for possible site, any forum's features may be added to provide great experience, the same or better than github,

@iam3yal
Copy link

iam3yal commented Jul 30, 2016

@vbcodec What's good about menus? they are hierarchical, you can't filter them and nested menus aren't pleasant, labels are are used for navigation just like menus would, the only difference is menus are sorted (for you) and labels aren't, meaning, you have to use the search, personally I like the search.

Bottom line, I guess we will have to agree to disagree. :)

@ljw1004
Copy link
Contributor

ljw1004 commented Aug 1, 2016

Swift does their language design over an email list. I read some interesting quotes...

That pipermail interface is barely an interface. I feel like the Swift guys are intentionally clinging to the mailing list as a method of weeding out contributors. If you want to participate, you have to put up with a pretty arcane communication system.

.

As a lurker curious about the language but not dedicated enough to read through a daily email log, I mostly get by with Erica Sadun's recaps.

.

I signed up for the mailing list and immediately regretted it. I am interested in helping, but this is miserable.

.

There's nothing arcane about using mailing lists for high volume discussion. They work extremely well for it and have for decades.

I personally manage a mailing list with ~20 posts per day. There's grumbling about email -- it's not archived, not easily searched, hard to keep track of the separate discussions. Some requested that we move over to github issues so it's easier to keep track of threads (with the idea that folks who prefer email can just rely on the github <-> email interface).

@AdamSpeight2008
Copy link
Contributor

The design notes are important as some contributors may not have been part of the project since it inception, or have access to other microsoft resources.

@MgSam
Copy link

MgSam commented Aug 5, 2016

I've been taking a break from commenting after venting a little bit in that post in the top of the thread. Some thoughts on things people have suggested:

  • More insight into what work is happening and why would definitely be appreciated. Also, involving the community in prioritization decisions would make more sense than what currently happens.
    • For instance, C# 7.0 is now confirmed to have dropped Source Generators. This makes the only "major" features, IMO, tuples and local functions. Both of these are pretty close to being syntax sugar and will not really enable new scenarios that weren't possible before. This means C# 6 and 7 will ultimately be syntax sugar releases. I would have gladly delayed every other C# 7 feature for Source Generators which many in the .NET ecosystem have been planning on in order to enable new functionality. Perhaps the larger community may have agreed or disagreed, but either way, they should have been given a vote.
  • I don't think splitting into more repos makes anything easier. If tags are used effectively, it is quite easy to find the LDM notes. A link to a filtered view of the repo could also easily be put on the Github landing page.
  • People got waaay too caught up in my comparison to TypeScript. TS is not the only language I compared to. For example, JavaScript and C++, 2 languages with code bases older and even larger than C#, are currently evolving much faster than C#. We have to stop sticking our heads in the sand here- C# is dropping in popularity, despite what Microsoft PR would have you believe. Every language popularity index has shown this.
    • I watched the video from Build this year where Mads proudly trumpeted C# being in the top 10 or something like that in popularity at Stack Overflow- a few years ago it was number one. The language needs to evolve or it will die- and the current (slow) pace of development just isn't cutting it. If this means the design team needs more team members or new leadership, then go out and hire them.

@vbcodec
Copy link

vbcodec commented Aug 5, 2016

@MgSam
Fresh or simple language may evolve faster than mature. While features increases linearly, complexity increases exponentially, so cadences must be longer.

@HaloFour
Copy link

HaloFour commented Aug 5, 2016

@MgSam

I agree with everything you say.

This makes the only "major" features, IMO, tuples and local functions.

And type-switch. To be fair there is a lot of ground work being laid for pattern matching between type-switch, deconstruction and wildcards (7.1). I agree that source generators will be big and I think they will open a big sandbox in which potential new features can be explored without changing the language proper.

I don't think splitting into more repos makes anything easier.

I whole-heartedly agree. I think that good labels and a good/maintained wiki will solve nearly all of those problems. Plus a landing page for the language that can help users for different audiences explore the language and development process.

As for the popularity, I don't think that the language is the big problem there. It's the ecosystem. Until C# can run directly in the browser (or transpile to JavaScript), run natively on embedded devices with blazing-fast speed and run in Linux-based ecosystems I don't think C# can do a lot to compete with the top players. People aren't choosing to use Java, for example, because it has better language features.

That's not an excuse for the C# evolution to slow to a crawl. But it's important to solve the problems and not chase the fads.

@MgSam
Copy link

MgSam commented Aug 5, 2016

@vbcodec I doubt anyone would claim C++ is either "fresh" or "simple", yet that language is now evolving faster than C# as well.

@HaloFour I agree that platforms are part of the issue, but they're not the sole determinant. Xamarin is certainly a useful thing that people use, but when you're a team starting a new cross-platform project the case for using Xamarin gets harder and harder to make when C# is stagnating compared to the alternatives.

I think if no one higher-up at Microsoft admits there's a problem here it's not going to get fixed. The issues are a lot bigger than the frequency of Mads dropping off design notes. Anders doesn't lead C# development anymore. Who has taken his place? From my outsider perspective it appears to be no one. The language design process cannot succeed without effective leadership.

@AdamSpeight2008
Copy link
Contributor

An example of why design notes are important, especially for offline discussions. Example

@CyrusNajmabadi
Copy link
Member

Anders doesn't lead C# development anymore. Who has taken his place?

The design team leads together on this.

I think if no one higher-up at Microsoft admits there's a problem here it's not going to get fixed.

A lot more evidence needs to be presented to indicate there is actually a problem to the level that you are indicating :)

So far, i've heard a bunch of good feedback generally related to the difficulty it is to keep track of what's going on in a project as large as roslyn with github as the medium. There has also been requests for different types of organizational structures around how we do things. It's clear to me things could be tweaked slightly to make things far nicer for a certain segment of users we have. However, that's a far cry from the intimation that there's a very large problem going on.

@CyrusNajmabadi
Copy link
Member

People got waaay too caught up in my comparison to TypeScript.

It's not that "people got waaay too caught up in the comparison". The point in the responses was to show why such comparisons are not suitable as different languages have different goals and issues they have to consider which can dramatically impact things like language velocity.

You cannot simply compare one language to another without considering deeply all the issues and concerns they have. There are pros and cons of the different sorts of approaches and release velocity is one factor among many.

@gafter
Copy link
Member

gafter commented Aug 5, 2016

I would have gladly delayed every other C# 7 feature for Source Generators

Dropping other features would not have helped. The difficulty with Source Generators is not the compiler - that part was fairly straightforward. The difficulty is getting all of the rest of the tooling working smoothly. There simply are not resources on the affected teams to get it all done in the C# 7 timeframe.

@jaredpar
Copy link
Member

jaredpar commented Aug 5, 2016

I would have gladly delayed every other C# 7 feature for Source Generators which many in the .NET ecosystem have been planning on in order to enable new functionality.

Expanding on what @gafter said here.

We actually invested considerable resources in source generators for this release. The compiler is the easy part and was done rather quickly. This is true even though the compiler work is actually two features: source generation and replace / overrides.

The challenge with source generators is not actually the language / compiler, it is instead the overall experience in the IDE. That includes semantic analysis, Intellisense, debugging, etc ...

From a compilation perspective source generators function a lot like analyzers. At a specific point in the compilation pipeline hand them a SyntaxTree, SyntaxNode, symbol, etc ... depending on how they registered. The output of the generator is a string which is immediately converted into a SyntaxTree and added to the pipeline. Some interesting items to consider with cycles + ordering but all very solvable.

From an IDE perspective though when to generate source is an enormous problem. This is essentially user code that can take an unbounded amount of time to complete. Yet the output of the generation is critical to the success of many IDE features.

Take Intellisense for example: Imagine if for example on generator is furiously spitting out extension members based on the code the user is currently typing. The only way Intellisense can be correct is if it considers the output of the generator based on the latest source code. That means functionally the generator must be run + completed on every key stroke before we display Intellisense.

That's a real problem. It essentially inserts 3rd party code directly into one of the most performance sensitive areas of the IDE. Doing so in this fashion is a recipe for bad performance and frustrated users.

An enormous amount of time in generators went to solving problems of this nature. A lot of progress was made here and we have worked out the basics of changes to the design that would make the feature significantly more palatable for a good development experience. But it does require a significant amount of work and it just doesn't fit into this release.

Perhaps the larger community may have agreed or disagreed, but either way, they should have been given a vote.

Voting wouldn't have helped here. The problem isn't that we didn't invest resources. Instead it's that the problem required more time than we had allotted for this release.

@vbcodec
Copy link

vbcodec commented Aug 5, 2016

@MgSam
C++ is not evolving faster. Their cadence is 3 years, while C# is average 2 years. C++ 11 was largest update with just new lamdas, type inference, and few minor tweaks. C++ 14 was minor tweaks, and C++ 17 is fail where all planned major features were rejected. They have serious issues with major features like concepts (over two decades of trials), GC, reflection, modules, async and others that are multi year dreams with many failed attempts.
Java is not progressing at all, and other languages are irrelevant,
C# delivers solid features with every release, and roslyn alone can be viewed as important feature especially for design team and other tools makers. Maybe tuples and type switch are just sugar syntax, but they are very useful, and this is most important for developers. C++ developers said for many years 'we have pointers to functions, so lamdas are not that necessary', but lambdas was added and now they say 'oh, it is so cool'.

@vbcodec
Copy link

vbcodec commented Aug 5, 2016

@jaredpar
While source generators may be problematic, but replace / original is free from such problems and code is delivered by developer, and this feature should stay in release. Replace / original is orthogonal to source generators, despite that they can be used together to provide highest potential.

@CyrusNajmabadi
Copy link
Member

As a language designer, one of the things i steadfastly work to avoid is adding a feature too early. For example, say we added replace/original in this release. Then for the next release we really tackled SourceGenerators. Let's say during that process we realized that replace/original was just not going to cut it and we would have to add something else that worked slightly differently but still shared similar goals and functionality.

Now we're in a situation where we've got to maintain this feature from every moment forward. We also have to consider how this feature impacts everything else we do in every successive release. That's a burdensome tax that will hang around us forever and which will definitely slow down our release cycle.

I think it is very important that we put features in when we feel that they're not only great, but really make the most sense for the future of the language.

@miloush
Copy link

miloush commented Aug 6, 2016

I always welcomed when the team decided not to push a feature into the release were they not 100% happy with it. Sometimes it prevented including things I personally found frightening, sometimes it prevented features I was looking forward to. Either way, it gives me a feeling of quality control in the process and I know that whatever makes it to the release is backed by sound design and firm belief of a team of experienced people that it is the right thing.

Unlike @MgSam, I think C# is evolving pretty fast, actually. You can't please everyone, but everyone can now try their own ideas and see how far they get. And if another language fits your task better, use that one instead.
I agree that tooling is critical, if the IDE does not support it, the feature is practically dead from the beginning (XAML 2009, multi-module assemblies, ...)

I am also not concerned about the language "popularity". At the very least, I am not convinced that the fact that a language is so confusing that people have to ask questions about it is a good sign of anything.

@AnthonyDGreen
Copy link
Contributor

AnthonyDGreen commented Aug 6, 2016

Hey all,

@jmarolf suggested that one way we could give you more insight into what we've been working on is by posting a summary of our end-of-sprint review. So I posted the summary here. Check it out. There are some bits of work that aren't yet public but I figured it was better to let you know that there was activity on stuff that you just can't see yet that's taking up some of our time and attention. Let us know if you think this kind of summary is helpful to you. You can find the summary here: #12974

@iam3yal
Copy link

iam3yal commented Aug 6, 2016

@CyrusNajmabadi

It's not that "people got waaay too caught up in the comparison". The point in the responses was to show why such comparisons are not suitable as different languages have different goals and issues they have to consider which can dramatically impact things like language velocity.

You cannot simply compare one language to another without considering deeply all the issues and concerns they have. There are pros and cons of the different sorts of approaches and release velocity is one factor among many.

Frankly, being more transparent and more engaged with the community has nothing to do with the product, it has nothing to do with complexity, it has a lot to do with the people working on the product and the process itself.

When we compared TypeScript and other teams at Microsoft to how things are done here we simply wanted to show that there are some teams that are doing it right and it's working for them, we didn't really compared products but we were speaking about the process of these teams working on different products, and when I speak about process in this discussion I really mean 1) How teams organize information? 2) How teams deliver this information to their communities? 3) How often this information gets to the community? these sorts of questions has nothing to do with how how mature the language is and how complex it is.

One of the things that I really think the team should do or at least start at is write a document that explains the current process and moving forward what it's going to be like.

Sorry if I've been blunt or harsh here, it isn't my intention to be disrespectful.

@AnthonyDGreen, @jmarolf and for the rest of the team thank you very much for posting the sprint summary, this is a great start!

@ljw1004
Copy link
Contributor

ljw1004 commented Aug 6, 2016

@MgSam wrote: "This means C# 6 and 7 will ultimately be syntax sugar releases."

Also, async ValueTask which is a small feature, but not syntactic sugar, and it does open up a new way of coding -- libraries with async for their inner loops.

@vbcodec
Copy link

vbcodec commented Aug 7, 2016

@CyrusNajmabadi

Let's say during that process we realized that replace/original was just not going to cut it and we would have to add something else that worked slightly differently but still shared similar goals and functionality.

Say 'hello' to my proposal #7300 where I've expressed scepticism for source generators and replace / original. Looks like team realized the same issues, mainly low performance and polluting language with unnecesary features. I've muted my scepticism when these features were promoted to 'high interest', but now I have new more complete proposal, that replaces rejected features, while preserving their goals and potential.

  • Make methods / properties precedence for partial classes. Function / property in partial class will have higher precedence than function / property in non-partial class. The same function in two partial classes won't be allowed and raise error. This precedence will allow for 'code injection', which will be complementary to existing 'methods, properties and fields injection'. This will fix many issues while using partial classes.
  • For AOP use IL code generation driven by metadata (similar to Postsharp). Alternaltivelly it may be implemented evem for JIT / Native code generation and will be available for any net language, but CLR team must be engaged This will save precious space in languages for better features
  • Move source generators from Roslyn level to Visual Styudio level. There is need for some basic tooling that will raise events when files (any type, not only with code) are modified by VS. These events for files are: creating , save , change content (keystroke), delete , include and exclude. These events will be handled by library specified by project's settings. This library will be placed in project's folder which will ease move project between computers without losing ability to generate sources, if changes will be made to the files.

@AdamSpeight2008
Copy link
Contributor

@ljw1004
Will there be an async valuetask analyser, that suggests a async value task could be a better approach.

@gafter
Copy link
Member

gafter commented Aug 7, 2016

@vbcodec

Let's say during that process we realized that replace/original was just not going to cut it and we would have to add something else that worked slightly differently but still shared similar goals and functionality.

... Looks like team realized the same issues, mainly low performance and polluting language with unnecesary features. I've muted my scepticism when these features were promoted to 'high interest', but now I have new more complete proposal, that replaces rejected features, while preserving their goals and potential.

Nothing has been rejected. @CyrusNajmabadi was just explaining that we have held back the replace/original feature until we have complete confidence that they fully solve the generator scenarios - which we will demonstrate by shipping them together when all the tooling is ready.

@CyrusNajmabadi
Copy link
Member

👍 on what Neal said. We still like this space, and i'm personally a fan of this source-based approach. But if we can't do it well, we should not rush something incomplete out the door. I'd much rather us spend the time necessary to make something amazing.

@vbcodec
Copy link

vbcodec commented Aug 9, 2016

@CyrusNajmabadi , @gafter
I am still sceptical especially for replace / original as tool for AOP (probably single important case for this feature). For simple AOP, replaced classes end up providing wiring (OnEnter/OnExit) to AOP system with linked subscribers. For more demanding AOP replaced classes will contain modified code copied from original methods, effectively doubling amount of code. This will decrease performance of editors to new level of sluggishness, as of today on newest CPU I can't avoid multi seconds pauses. This also will increase problems with source generators, where generators for C# can't be used with VB, and vice versa.

Better option is extensible system based on metadata and IL codegen, that will solve these problems created by replace / original.

@CyrusNajmabadi
Copy link
Member

CyrusNajmabadi commented Aug 9, 2016

We should leave the discussion of SourceGenerators to appropriate threads on that topic. It would be inappropriate to get into a long discussion on that topic here. The core point i was making was that we believe it's better to spend the time to get features right, versus delivering potentially wrong features too early.

@iam3yal
Copy link

iam3yal commented Sep 23, 2016

@jmarolf Is there anything going on with this website we proposed? or it's something that will come in the (shamelessly) far future?

I know you guys are probably very busy for RTM but can we expect to have one after it? I guess that's what I'm really asking. 😄

@jcouv
Copy link
Member

jcouv commented May 28, 2017

The thread seems to have settled. I'll close the issue.
Meeting notes are now getting posted at https://github.com/dotnet/csharplang/tree/master/meetings/2017

@jcouv jcouv closed this as completed May 28, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests