dotnet / vblang

The home for design of the Visual Basic .NET programming language and runtime library.
290 stars 64 forks source link

Open Letter on the Visual Basic Strategy 2023 #620

Open skurth opened 1 year ago

skurth commented 1 year ago

Dear Microsoft,

I have been a professional developer since 2006 and have been working for the same company since then. Starting with C/C++ (MFC), the main application was later extended with .NET applications, which are still maintained today and have thousands of users. These .NET parts are mostly written in Visual Basic and are based on WinForms (together with third-party tools from DevExpress, probably the most stable duo ever created). In the meantime, various web services (WCF and ASP.NET) have also been developed.

In 2017, there was a small shock with the release from Microsoft that Visual Basic will not receive the same updates as C#. With various other releases (including support for Visual Basic and .NET 5+), the shock was eventually overcome. In the meantime, we have even written a .NET 5/6/7 web service in Visual Basic (although there is still no template available in Visual Studio for this purpose). The project has several libraries and hundreds of classes in them. The only thing missing were the opportunities with Entity Framework, which is why there is a project for this in C#.

Are extensions also changes?

First of all: We are happy that Visual Basic does not have all the same changes as C#. With certain extensions in C#, we wonder who needs this? Or what is it for when you can write something abbreviated and save 1 second of typing effort, but then need several minutes to understand the code again half a year later. In our opinion, this has little to do with professional programming, considering how often you have to take over, read, understand, and expand other programmers' code. Back to the question: Are extensions also changes? We believe that extensions are not the same as changes. We don't want breaking changes to Visual Basic. We also don't need new spellings for existing features, such as a new Select statement. We don't need primary constructors either. No file access modifier. No abbreviations for string manipulations. No minimal APIs. The list could almost go on indefinitely, and many new C# features would be included in it. What we miss are simple features or keywords that are not covered in the current version of Visual Basic. To be specific, these are the following points:

As you can see, it is a very manageable list. Other Visual Basic developers will have some additional points, but we believe we all agree on what Visual Basic stands for. In our opinion, this does not change the syntax, it simply extends it. And in a tolerable way for all Visual Basic programmers (from beginner to professional). Nobody is forced to use these things. It also does not make the language itself more complicated; it simply simplifies the lives of professional Visual Basic developers.

Our suggestions

We have different ideas on how Visual Basic could be continued in a reasonable framework.

Microsoft also employs newer developers for whom such implementations would be excellent. They don't have to reinvent the wheel, but they have a certain template with C#. In addition, with "LangVersion" in the .vbproj file, everything is prepared to move forward with Visual Basic securely into the future.

A few words about Visual Studio

The specified strategy for Visual Basic in 2023 states: We will continue to improve the Visual Studio experience for Visual Basic developers, such as providing analyzers, code fixes, and IDE productivity features. That's great to hear, but in our opinion, it doesn't quite correspond to reality. For example, we miss IntelliCode (whole line completions). Also, and often opened as an issue (and closed every time), we miss a template for ASP.NET Core Webservice for Visual Basic. What has improved a lot lately (thanks!) are issues that concern refactoring or working in the IDE. There was a time when almost all issues regarding Visual Basic were directly closed, even if it didn't require any language change.

Summary

We hope it's clear from this text that Visual Basic shouldn't become a clone of C#. We also understand that Visual Basic is not supported in certain project types (Xamarin/MAUI, Blazor, ...), even if we would love it. Microsoft and Visual Basic should focus on project types where Visual Basic is strong (WinForms, web services, Windows services, ...). Nevertheless, we believe that certain features would make Visual Basic even stronger, without introducing the unnecessary complexity of C# in recent years from our perspective. We would like to thank Microsoft, especially the WinForms team, for supporting and maintaining Visual Basic for such a long time. Each of us can also program in C#, but we often choose Visual Basic because it is easier, clearer, and more understandable. It is the old, experienced, and smaller brother of C#, which does not tolerate every quirk, but in our opinion, still deserves to be maintained even in old age.

Best regards, some professional Visual Basic programmers

Notes:

aa4e commented 1 year ago

Agreed

KathleenDollard commented 1 year ago

Thank you. For now I just want to let you know that we do see this and appreciate the thought put into it. Will respond more fully later.

pricerc commented 1 year ago

@KathleenDollard

Since this is 'fresh', perhaps I can offer a related perspective.

Like the authors of this open letter, I don't see much value in many of the recent changes to C#.

But the changes to the C# language don't bother me. I don't want VB to be C# with words.

It's the changes to the framework that have broken VB that bother me. And that's certainly the vibe I get from most VB commentators.

.NET is supposed to provide a language-neutral ecosystem that enables the peaceful co-existence of many languages.

Microsoft long professed a commitment to maintaining VB as a "first-class" language within that ecosystem.

Except some recent changes to .NET have been breaking changes with respect to VB.NET. There are examples on this forum, and elsewhere, that highlight examples of this. This letter highlights some affected areas.

As long as both languages are targeting the same .NET version, a class written in (for example) C#, should be consumable without ceremony or 'hacks' in VB (or any other "first-class" language). And without having to write C# "proxy" shims.

If .NET (the framework) is going to add new features such as those identified in the letter, then these features should be available for use by any "first-class" language. Otherwise, that language is no longer a "first-class" language.

StefanDirnberger commented 1 year ago

You are completely right with your letter. We are developing professional applications with VB since VB 4 and we made the step to VB.Net with our fist apps rather late may be 10 years ago, because it was much easyer and more effective to move all our calculating logic to VB.Net than to any other language, including C#. Especially we have still a lot of VBA Macros in office and there it is so much more effective to copy code between VB.net and VBA. At that point we relied to MS that VB would stay a first place citicen, too. For us it is completely useless to switch to C#. But on the other hand we only seldomly missed functions in VB.Net especially the new ones in C# wouldn't give us any benefit. But after each new .NET Version we are looking, if there will be further support for VB. At the end this is not very funny.

@skurth so you are absolutely right with your statemant and we agree fully to you. Let's hope that MS will supprt us further on... KR some more VB programmers ;-)

VBAndCs commented 1 year ago

@skurth @StefanDirnberger

There is already a pre-release of the next VB.NET generation, called ModVB. It is forked from Roslyn by @AnthonyDGreen, the former PM of VB.NET before he left MS e years ago. ModVB willl go beyond all yopur expectations, not only at the syntax level like supporting JSON literals and patterns, but also it will provide support for AASP.NET core, Blazor, MAUI, so, VB.NET can get out the win desktop cage. Right now, you can already design VB.NET views in ASP.NET core with Vazor, and write Records in Vb syntax with RecGen. I also evolved MS Small Basic to Small Visual Basic to provide an easy and attractive entry point to VB.NET for kids and beginners, hopping that we can pass our love for VB to a new generation. It is also an open source fully written in VB.NET, so, it can be an easy training playground in compilers and their tools, before diving into Roslyn and contributing to ModVB.

skurth commented 1 year ago

@VBAndCs

Looks very exciting and thank you for the information. I was already familiar with ModVB, but I have only followed it peripherally. I would like to mention a few points to perhaps make our perspective a bit clearer:

a) I think it's absolutely fantastic that VB is receiving so much love from the community, and that such cool projects are emerging from it. For us (as a company), it's especially important that we can continue to develop existing software (for us, WinForms and services). Therefore, it's more important for us to have advancements in the language itself, rather than necessarily having to come up with new workloads (Blazor, MAUI, etc.) with VB. Even if we would love VB support in those workloads ;-)

b) This is again from the perspective of the company: I'm not sure if we can justify relying on features developed by individual persons or small teams, especially when they involve fundamental things like the compiler. We rely on the basics being stable and maintained, so that we can use these features.

c) As you mentioned, ModVB is based on a fork of Roslyn. What happens if there are changes/corrections to Roslyn itself? Are these changes incorporated into the fork? This ties into the same point as b).

Therefore, from the perspective of the company, it's more important for us to use widely supported products to develop our software. That's why we would prefer official adaptations to VB. Please don't misunderstand me, I think these projects are great and I will definitely be looking into them, but I'm not sure to what extent they should be used in professional software. But perhaps someone can alleviate my "fear" a bit ;-)

VBAndCs commented 1 year ago

@skurth I understand your fears, but note that:

  1. MS is leaving VB.NET behind for 6 years now. All your points makes no company create new projects with VB. They use C# or a non MS product.
  2. Anthony was there from day 1 in planning and implementing Roslyn and its VB.NET part. I can say that Anthony is the key player in VB.NET on Roslyn, and VB.NET is actually frozen after he left MS (whether it is a coincidence or not. I have no info about that)
  3. Anthony pulls new updates from Roslyn to his fork, and thankfully to MS, there is too few changes in VB.NET compiler over years, so it is easy to track them. Other changes in Roslyn out VB.NET are also easy to merge in ModVB, as there is almost no change in them in ModVB.
  4. Bill gates and his fried started all this empire from scratch. One professional person is more than enough to build on top of it!
  5. ModVB source is not published yet (not even released). I think no one can relay on it in business until it is open sourced.
  6. I remember that Anthony mentioned something about creating a non-profit foundation for ModVB, so, it will be no longer a one person work. VB companies can contribute to this foundation to get the support they need.
  7. After ModVB is released, I wish we can ask Bill Gates for a big donation. After all, VB is Gates legacy, and I expect he will not allow it to go to oblivion.
ocdtrekkie commented 1 year ago

I will note that while small, Microsoft did publish this yesterday, which at least was a nice indication they notice we exist: https://devblogs.microsoft.com/dotnet/update-to-winforms-vb-appframework/

LeshaNewsomc commented 1 year ago

Your suggestions for how Visual Basic could be continued in a reasonable framework are interesting. The idea of accepting pull requests from the community for Visual Basic would certainly be a democratic and community-driven approach to development. An annual survey among Visual Basic developers on which features from C# should be adopted in Visual Basic could also be a valuable way to gauge the community's preferences. Finally, Microsoft determining on its own which features make sense in Visual Basic would likely ensure that the language continues to evolve in a way that is consistent with its existing syntax and features.

In summary, it's clear that you have a passion for Visual Basic and believe that it still has a valuable role to play in the software development world. While I can't speak to Microsoft's plans for the future of Visual Basic, I appreciate your suggestions and hope that they will be taken into consideration.

skurth commented 1 year ago

@VBAndCs Thank you for your listing. We will definitely take a look at it, especially once it becomes open source and is maintained by more than one person.

In our company, there are dozens of computers that build the programs (developers, manual testing, automatic testing, build servers, etc.). It won't be easy to replace the compiler for all of them ;) I'm also not sure if it's worth it for our WinForms application. However, if it's for other types of projects, it may be different.

@ocdtrekkie I don't think the last two comments are from Microsoft... Looks more like GPT-bots :( @KathleenDollard

VBAndCs commented 1 year ago

@skurth ModVB will not replace VB.NET. It is a VS extension that you set up in a separate VS hive not to affect the main VS hive. ModVB is activated only in VB.NET projects that install some NuGets. So, you can still have both VB.NET and ModVB projects together in VS. Once again: Anthony is the Master of VB.NET. If you trust Vb.NET, then you should trust ModVB.

ocdtrekkie commented 1 year ago

@skurth Ugh, looks like you are right. Ew.

kingtu commented 1 year ago

Our company has developed a large number of enterprise information management platforms using VB. NET, and we hope that Microsoft can continue to support VB. Net to keep up with the pace of modern languages.

kingtu commented 1 year ago

Our company has developed a large number of enterprise information management platforms using VB. NET, and we hope that Microsoft can continue to support VB. Net to keep up with the pace of modern languages.

skurth commented 1 year ago

Thank you. For now I just want to let you know that we do see this and appreciate the thought put into it. Will respond more fully later.

Any news on this? @KathleenDollard I think there are so many (quiet) people around the world which would love important additions to VB, which can't be done in another way right now (like required properties, or other important keywords mentioned in the open letter). You could let VB in a legacy mode with in .vbproj file for all VB devs who don't like any new stuff. Everything would be safe. I think people in the community would love to commit to the VB language. And a small VB team could check the requests and/or implement the most important features (and I want to remind you, that Microsoft is a billions worth company, so I don't think this would hurt Microsoft ;-) Also I want to mention how many companies which used VB in the last decade(s) have contributed to where Microsoft is today by paying licenses).

From your updated strategy blog post:

Our job every day is to make it easier for you to do your job.

Please do that, some important keywords are missing and would make it easier for so many VB devs.

Once again, please re-think of your VB strategy.

Thank you very much.

cristianlt23 commented 11 months ago

@Skurth I want to congratulate you on your OPEN LETTER! If you allow me, I will make some personal considerations based on your text.

Points I fully agree with: • Visual Basic.net is not C# and really should not limit itself to following the same paths. C# is becoming too complex and sometimes even confusing within the same team. I consider C# a mishmash of dialects and it's been losing its initial proposal. VB doesn't need to make the same mistakes. • Lack of ease with Entity Framework. • Most of the new features in C# are not popular, and sometimes, many programmers wonder why so much effort for an unimpressive functionality.

Points I don't agree with: • "One idea would be for Microsoft to accept pull requests from the community for Visual Basic, with Microsoft continuing to lead." Here is a point I don't agree with, specifically with Microsoft continuing to lead the evolution of VB. In my view, the most successful languages do not depend solely on a maintaining company but on a passionate and interested COMMUNITY. This is the case with Python, JavaScript, and to some extent, C#. What VB really needs is an ACTIVE COMMUNITY, not just pragmatic programmers. This culture needs to be initiated among VB developers.

I'm keeping my fingers crossed that Anthony D. Green succeeds with ModVB, and that this project can be sustained by contributions from companies, professional programmers, and enthusiasts. My wish is that Anthony D. Green can have an income that allows him to work full-time on the development and improvement of ModVB. With the constant emergence of new languages, tools, frameworks, etc., maintaining a project like ModVB will be much cheaper for companies and professional programmers than constant courses, training, or rewriting a project in a new language every day. The market and the fad of programming languages are keeping us in a loop of redoing what is already working for tiny improvements.

What I think for VB.NET: For me, VB is too great an artwork to be limited to just WinForms. For now, I am very satisfied with Asp.net MVC 5, but we will have to evolve soon. In my opinion, VB should participate in Desktop, Web, Mobile development, and also be cross-platform. I think in the near future, the COMMUNITY can develop its own development tools without depending on Microsoft. Perhaps even its own IDE? How about VB++ as a name?

I personally believe that following the example of B4X is better for VB than following the path of C#.

I am still a VB.net student, but the main reason that made me fall in love with this language is precisely the syntax stability, easy understanding of long-standing code, and ease of learning.

Being part of the future of VB is a great honor for me. The possibility of helping in its evolution will change my status from just a technology consumer to a contributor.

New developers did not have the opportunity to know the great benefits and wonders of VB.NET, and taking advantage of this text, I want to congratulate a great master: Mohammad Hamdy Ghanem, for developing Small Visual Basic. It will undoubtedly be of great help in the promotion and learning of VB.net in the future.

skurth commented 11 months ago

@cristianlt23 Thank you for your response. I'd like to clarify or mention a few points:

Here is a point I don't agree with, specifically with Microsoft continuing to lead the evolution of VB. In my view, the most successful languages do not depend solely on a maintaining company but on a passionate and interested COMMUNITY. This is the case with Python, JavaScript, and to some extent, C#. What VB really needs is an ACTIVE COMMUNITY, not just pragmatic programmers. This culture needs to be initiated among VB developers.

I think VB would have an active community, but because Microsoft does not accept language changes (better: additions) to VB, it's irrelevant anyway. If it were like C#, it would be great or at least better than it is now, which is essentially dead.

As a company that relies on VB professionally, we are dependent on the fact that any (unsupported by Microsoft) further development is widely supported. From a company's perspective, we cannot commit to something that is only supported by a very small team. Therefore, it must be open-source and have an active community (as you mentioned), otherwise, switching would be too risky.

I am still a VB.net student, but the main reason that made me fall in love with this language is precisely the syntax stability, easy understanding of long-standing code, and ease of learning. Great to see that VB still has "students" ;-) We also love the syntax stability, but we want to differentiate between new syntax, which simply doesn't exist in VB compared to C#, where you can solve the same thing in 3+ different ways. Specifically, it's about things like Records, Read-Only Properties, etc., which are currently not properly solvable in VB.

For me, VB is too great an artwork to be limited to just WinForms. For now, I am very satisfied with Asp.net MVC 5, but we will have to evolve soon.

We use VB with .NET 7 as a Web API, so that's not a problem in principle, except that there's no template for it in Visual Studio.

ocdtrekkie commented 11 months ago

We use VB with .NET 7 as a Web API, so that's not a problem in principle, except that there's no template for it in Visual Studio.

I know that Visual Studio is a closed source product, but I wonder how much we could do if Microsoft committed to making a community process for adding to and iterating on those templates.

VBAndCs commented 11 months ago

@ocdtrekkie VS .NET is extensible, so you can add anything too it, like templates, code editors, compilers, menus... etc. I already created VB.NET templates for ASP.NET Core using XML literals instead of C# Razor, with html auto completion support. You can install it from: https://marketplace.visualstudio.com/items?itemName=ModernVBNET.Vazor I also used the Roslyn source generator to generate Records and read only structs in VB .NET with more superior syntax than C# records. You can install the NuGet from: https://www.nuget.org/packages/RecGen And @AnthonyDGreen created the ModVB compiler which can be added to VS by installing an extension and a NuGET! VS.NET is not closed at all!

AnthonyDGreen commented 11 months ago

@cristianlt23 @VBAndCs Thanks for the shout outs!

@skurth I totally understand where you and your company are coming from. I agree that we need a stronger organization to shepherd VB, not one or very few individuals in the spare time. That said, you (and anyone else reading) should consider visiting the VB discord set up by @dualbrain to discuss your challenges and how you're overcoming them: https://discord.gg/DbSnQh9k

@ocdtrekkie our challenges are really more political at this point than technical. This isn't 1998 or even 2008, so much is extensible and open source now we just need time/money/people/community.

I try not to chime in too much here because this is still an MS space and it seems a little weird to talk about stuff that's outside of their "vision" for VB in their backyard.

pricerc commented 11 months ago

@AnthonyDGreen

I try not to chime in too much here because this is still an MS space and it seems a little weird to talk about stuff that's outside of their "vision" for VB in their backyard.

They're not using this yard, and I like to think that some "chiming in" from their former product manager should give them a kick up the rear to get their act together.

skurth commented 11 months ago

We use VB with .NET 7 as a Web API, so that's not a problem in principle, except that there's no template for it in Visual Studio.

I know that Visual Studio is a closed source product, but I wonder how much we could do if Microsoft committed to making a community process for adding to and iterating on those templates.

I tried it twice that they add it: https://github.com/dotnet/aspnetcore/issues/34788 https://github.com/dotnet/aspnetcore/issues/40954

No luck :(

DualBrain commented 11 months ago

As @AnthonyDGreen pointed out, yes, please join us on https://discord.gg/Y8EH5fF6WG and let's organize our community to make things happen.

@skurth I have to confess my total confusion to the responses you got in those issues; I'm assuming that those were requests for MS to do the effort, but still. I'm also thinking that I've seen, somewhere, that someone talking about creating templates but I don't recall where (or know whether or not they ever did).

ocdtrekkie commented 11 months ago

That invite link is expired.

DualBrain commented 11 months ago

This one (https://discord.gg/Y8EH5fF6WG) should be good to go, please let me know if it isn't.

benyuz commented 6 months ago

B4x is an active inheritor of the VB language. I am using it.

B4X suite supports more platforms than any other tool ANDROID | IOS | WINDOWS | MAC | LINUX | ARDUINO | RASPBERRY PI | ESP8266/ESP32 | AND MORE…

### https://www.b4x.com/

benyuz commented 6 months ago

What I want to say is that I hope VB is just one language, provided by the community for compilation on various platforms.

SailAwayWine commented 1 month ago

Hello Everyone (including Microsoft),

I have been a professional programmer for decades. In addition to VB and other non-C languages, I have programmed in C, C++, C#, Typescript, & Javascript. I know my way around the C syntax.

But for the last 3 years, I have been building apps with VB.NET on VS 2022 targeting .NET 6/8 that run on AWS Lambda, Raspberry Pi, and, of course, Windows. Some of these apps are quite sophisticated, including involving Kestrel running both on Windows and Linux. I use Avalonia for UI on Raspberry Pi. For my SQL ORM I use Dapper exclusively on top of both SQL Express and MySQL. I chose VB.NET because I needed easy to read code that would be maintainable, stable, and rapidly developable.

I would be very happy to share code examples on how I did all this, just connect with me via LinkedIn. https://www.linkedin.com/in/russ-johnson-96104846 (I do not have a Discord account.)

As an example of how Microsoft is treating it’s so called “first-class citizen”, it has this statement in the System.Text.Json documentation: “Utf8JsonReader can't be used directly from Visual Basic code.”

This is a direct insult to me personally. The Microsoft decision makers are either incompetent, ignorant or both.

Perhaps Microsoft is too busy cleaning up the outage of the week to really support VB, but my experience tells me that the English-centric nature of VB is what is at the heart of the issue. Can someone explain to me why is “||” better than “Or” other than certain large economic markets don’t have English as their primary language?

As a spin on an old quip, “I didn’t leave Microsoft, Microsoft left me.”

Russ Johnson

P.S. I also use B4x for Android, but that isn’t .NET.

paul1956 commented 1 month ago

@SailAwayWine I believe the issue with JSON Reader at this point is the documentation which should be fixed. If not, it's not a VB issue its the .Net JSON library missing an API and a bug should be opened there. I use System.Text.Json extensively with VB and just use the available API's. VB is not considered a high-performance language so some optimizations available to C# are not available, do I like it no, does it affect no usage no.


Dim options As New JsonReaderOptions With {
    .AllowTrailingCommas = True,
    .CommentHandling = JsonCommentHandling.Skip
}
Dim reader As New Utf8JsonReader(jsonUtf8Bytes, options)

Do While reader.Read()
    Console.Write(reader.TokenType)

    Select Case reader.TokenType
        Case JsonTokenType.PropertyName, JsonTokenType.String
                Dim text As String = reader.GetString()
                Console.Write(" ")
                Console.Write(text)

        Case JsonTokenType.Number
                Dim intValue As Integer = reader.GetInt32()
                Console.Write(" ")
                Console.Write(intValue)

            ' Other token types elided for brevity
    End Select
    Console.WriteLine()
Loop
pricerc commented 1 month ago

@SailAwayWine Microsoft have clearly stated their intent to do the minimum necessary to keep VB functioning with newer versions of .NET. You will not get anything more than corporate weasel words out of them w.r.t. VB.

There is substantial work underway to improve VB, but it's not happening at Microsoft.

If you'd like to see VB developed, to contribute to the VB community, or to showcase your work to VB enthusiasts that would be interested in it, then the best place for it is probably the Discord channel mentioned above.

Discord wouldn't have been my first choice, but it works really well, and is a lot more interactive than this forum.

And a lot less "noisy" than LinkedIn. I don't know about other people, but LinkedIn is not somewhere I would go looking for programming language support - because I expect everyone there is out to make a buck.

SailAwayWine commented 1 month ago

@paul1956 Yes, in VB you can do: Dim reader As New Utf8JsonReader(jsonUtf8Bytes, options) but you cannot do: Dim reader as Utf8JsonReader

It won't compile due to an error: BC30668 'Utf8JsonReader' is obsolete: 'Types with embedded references are not supported in this version of your compiler.'

So the documentation is correct.

This error is caused because VB does not support Span(of T). The use of Span(of T) is growing in the .NET framework. MS, referred to Span(of T) as a ".NET Mainstay" all the way back in 2018, further claiming "System.Span is a new value type at the heart of .NET. " So this issue isn't going away and perhaps will just keep compounding in every subsequent .NET version.

To my knowledge, this is the only materially new value type in .NET that cannot be consumed by VB and that creates the only meaningful performance restriction . It would take one programmer at MS about 6 months to fully life-cycle the implementation Span(of T) in VB. I'm not sure if ModVB can or will address this when fully released, but if so, perhaps there is hope.

SailAwayWine commented 1 month ago

@pricerc Discord thinks I'm a bot (probably due to privacy extensions, etc.) and won't grant me an account. I have tried every type of verification (email, phone) and it flat-out won't let me access.

I agree LinkedIn is a hurdle, but I'm not sure how else to exchange contact info with someone genuinely interested in my code.

paul1956 commented 1 month ago

Thanks, I don't actually use that function in my code. You would have a lot more luck adding a wrapper to VB, Microsoft will only add the feature to the language if a major paying company using VB for a Line If Business app needs it to upgrade.

DualBrain commented 1 month ago

I just noticed that the existing discussions section on CommunityVB were kind of "hidden" (in the Main repo); I've corrected this. @SailAwayWine you could consider starting some conversations there. https://github.com/CommunityVB