16 ms·
.NET Core 3.0
- privateSFacct 7y agoWhat's crazy is that this is what C# should have always been. I was into Mono way back because I thought niavely it was going to be more successful, but I think if C# had gone this route earlier -> the whole python / go etc popularity boom might have been softer and MS would have had a first class player that would have increase # of folks easily able to build in windows. That and I never got to develop successfully beyond Forms - which I wish was not in preview from designer standpoint. I know old tech, but frankly for older programmers I find it easier and quicker to get stuff up with.
- atonse 7y agoI’ve thought about this but I doubt it. The big change has been the perception shift. .NET was always really solid tech. Microsoft has always had stellar developer technology. But the love affair with open source and the super villain role that Microsoft played, is what kept people away, not the tech itself. I remember wanting to give a talk about how amazing C# was to a ruby group. I never did it, but it was definitely a quaint idea in 2011. But rubyists would’ve loved C#.
- benbristow 7y agoAs someone with a Ruby background in a new job doing C# stuff, I really love C#! Now the Windows exclusivity of .NET is no longer a thing it's much, much more appealing (who wants to run Windows Server over a Linux server if they can avoid it?).
- dragonwriter 7y ago> But rubyists would’ve loved C#. As a Rubyist, I'll admit that C# is the least bad of the C++/Java style of static OOP languages, but it was that it was always too tied to the .NET ecosystem and heavyweight enterprise tooling more than Microsoft's “supervillian role” with regard to FOSS that made it unattractive for lots of places where I would want to use Ruby. That's improved with Core, somewhat.
- michannne 7y agoYeah, .NET Framework was an absolute pain to work with also, there was a lot of boilerplate, especially when it came to ASP, and like you said it was tied to Windows and Windows API. Now with Core it's multiplatform and they're opening up all of the traditionally Windows-based SDKs to Core architecture and making them multi-platform while having them open source. .NET Core is an absolute pleasure to work with, and while I'm not into Razor views, the web startup modularity and extensability of the pipeline make swapping out solutions a breeze. I can run a full React app in some a wwwroot folder that has almost 0 dependencies on the outer C# code, such that I can plug out the folder and copy it into a new directory and run it like any other React application - that was mind-numbing with ASP non-Core. I love it
- atonse 7y agoASP.NET MVC was much easier to work with, and WebAPI was even easier (especially with annotation support). Each time, you had even less boilerplate code.
- mirekrusin 7y agoIt improved with mono and it's great to see continuation with core by ms. I don't use it atm but I remember learning c# from their beta book before v1, it was better than java even at that time. I've used c# from objective-c macos app maybe 6 years ago, it was pleasure to write c#/objc interop with mono and see same codebase used on windows app working fine (even faster) on macos via mono. The state must look much nicer now whan 6y ago, if I see opportunity to write some c# code now, I won't have any personal reservations, I'll do it with pleasure. ps. my personal favourite programming languae at the moment is by far Julia and I encourage anybody to have a peek at it - I've missed it somehow[1] [2]; followed by crystal [1] https://youtu.be/DRKKAFYM9yo https://youtu.be/DRKKAFYM9yo [2] https://youtu.be/HAEgGFqbVkA https://youtu.be/HAEgGFqbVkA
- WorldMaker 7y agoThere was a brief window where mono was in the default Ubuntu distribution along with several mono-powered open source Linux productivity and media applications such as Banshee (media player), F-Spot (photo manager), at least one note taking app, and probably at least one more application I'm forgetting. There's a parallel world out there where the Gnome project and Linux distributions rallied around C# as a strong way to write applications, instead of the weird backlash/demonization they all soon received that ended such a brief "golden age".
- oaiey 7y agoTotally agree. The tech was so awesome that it lured Miguel de Icaza away from Gnome.
- steverb 7y agoI actually went from C# (WebForms) to Ruby (Rails) and then back to C# (MVC).
- benbristow 7y agoRails is still pretty good. I'd probably use it if I were starting a new project still. Can even do Type-checking now thanks to Stripe! https://sorbet.org/ https://sorbet.org/
- untog 7y agoThe ecosystem is what drove me away from C# (as well as not wanting to do enterprise work). I started dabbling with Ruby and Node and the sheer number of free third party libraries blew my mind. C# simply didn't compare.
- thrower123 7y agoOne of the nice things about .net is you don't need to download half the internet to do most of the things you want to do.
- EnderMB 7y agoThis is a very weird criticism. I'm a Ruby dev, but I spent eight years working with C#, and I can't remember any times where a Ruby gem was more readily available than a NuGet package. If anything, I'd say there's less choice in the Ruby world, especially in the data science and ML fields.
- james_s_tayler 7y agoDepends. I think it's valid. There are a tonne of libraries available in both ecosystems but I find they tend to optimize for different things. I came from the Java ecosystem to .NET and even they are different. The .NET ecosystem was held back a little by the lack of embracing open source at the beginning and being super commercially focused. So things like finding a good library for easily working with PDF will set you back $400 rather than just using the defacto library that everyone has used forever and is free. I've encountered that with PDF libraries, rules engines, workflow engines, job scheduling libraries. It's still a decent ecosystem, it just is different because of its roots.
- jen20 7y agoWe have been selling a relatively complex product built using C# for many years now. It is perhaps unusual in that it was built on Linux for Mono primarily, and then ported to .NET on Windows subsequently. What we have seen over the years is: 1. Deploying on Windows became less popular, partly because it was much harder to manage at scale than Linux, and partly because of the price of licensing. 2. Mono was seen as a toy, and is often considered a critical risk by purchasers. This was even true after Microsoft bought Xamarin, and thus de-facto control of the project, and despite the fact that it was far easier to patch bugs in the open source runtime than in the closed-source .NET Framework (and we ran into several in each). C# (and even more so F#) is a great language, but was hamstrung early on by Microsoft's approach to competition - I think had this been different early on, the world would look very different with respect to popularity for critical infrastructure vs the JVM. Whether it's late enough to salvage something for a large number of non-traditional-MS is debatable - it will be interesting to see how it plays out over the next few years.
- krat0sprakhar 7y ago> Nullable enables you to directly target the flaws in code that lead to NullReferenceException. The lowest layer of the framework libraries has been annotated, so that you know when to expect null. I hope Java gets this one day.. would be a cool feature
- jrimbault 7y agoOptional ? But redoing the standard lib would be no go in javaland ? It's the non nullable reference I find interesting.
- ComputerGuru 7y agoThe API hasn’t changed, and remains backwards compatible. However it has been annotated, so that when targeting it with a compiler configured to validate/verify nullability you get a better (read: safer) experience. It can configured as an error or a warning. MS does this sort of thing a good amount, preserving backwards compatibility but enhancing the experience.
- royjacobs 7y agoIn the JVM land you can check out Kotlin, which does this.
- mrighele 7y agoYou can try checkerframework [1], which uses annotations to perform extra typechecking at compile time, including nullable/not-nullable checks. Works properly altough it has a few issues: the biggest is that support is still stuck at java 8, and the framework is sometimes not smart enough to see that you already checked if a nullable field is null or not and you can safely use it. [1] https://checkerframework.org/ https://checkerframework.org/
- ygra 7y agoAnnotations don't work for local variables, though. So you only get nullability checking around calling methods and accessing fields, right?
- _hardwaregeek 7y agoNon nullable reference types are so awesome! I'd love for the C# team to publish some posts on the creation of this feature. Most of the non nullable type systems exist in functional, or pseudo functional languages (Rust has rather functional semantics). It's very neat to see a honest to god mutable object oriented language implement non nullability. They probably had some interesting implementation challenges. Also, is Java working on this too? I heard that they have Maybe, but that's pointless without non nullability.
- disease 7y agoDon't know about Java, but last I checked there were plans to add non-nullable reference types to Dart.
- wvenable 7y agoPHP has non-nullable reference types! There are some really good write-ups by the C# team on the creation of non-nullable types and how it's implemented but my google-fu is failing me on it. It's obviously a bit a of hack involving annotations/attributes but for the end user the result is pretty seamless.
- MrBuddyCasino 7y agoKotlin has them too.
- jdmichal 7y agoJava does indeed have `java.util.Optional`. As a non-primitive type, it can itself be `null`, or be non-`null` but not contain a value. In other words: I used to have `null` problems. Then I used `Optional`, and now I have two `null` problems!
- ifthenelseend 7y agoNow you can easily write the following state machine in C#: static State ChangeState(State current, Transition transition, bool hasKey) => (current, transition) switch { (Opened, Close) => Closed, (Closed, Open) => Opened, (Closed, Lock) when hasKey => Locked, (Locked, Unlock) when hasKey => Closed, _ => throw new InvalidOperationException($"Invalid transition") };
- ComputerGuru 7y agoTo be clear, this has nothing to do with .NET Core 3.0 but rather is a feature of C# 8.0, which depends on compiler support that can be targeted to any previous version of .NET Core or Framework, all the way back to Framework 2.0 (tested myself, although MS says not to target 2.0 or 3.5).
- legulere 7y agoC# 8 needs .net core 3.0 for some features to work at all like default interface method implementations, and for some to work meaningfully like nullable reference types.
- platz 7y agoStill no exhaustiveness checking like a true match expression unfortunately, which is what would give it parity against the traditional subclass/polymorphic approach.
- alkonaut 7y agoHeard it’s being championed for C# 9.
- smush 7y agoIt's so amazing to me how many features from F# or other functional programming languages make their way to C#, and the devs who were otherwise never gonna try those features use them because they are 'normalized'. I do wish people would give the language that has (relative to this ^ trend) 'already arrived' a chance.
- jsingleton 7y agoThere are a few related announcements, here are some links: - https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0/ https://devblogs.microsoft.com/dotnet/announcing-net-core-3-... - https://devblogs.microsoft.com/aspnet/asp-net-core-and-blazor-updates-in-net-core-3-0/ https://devblogs.microsoft.com/aspnet/asp-net-core-and-blazo... - https://devblogs.microsoft.com/dotnet/announcing-f-4-7/ https://devblogs.microsoft.com/dotnet/announcing-f-4-7/ - https://devblogs.microsoft.com/dotnet/announcing-ef-core-3-0-and-ef-6-3-general-availability/ https://devblogs.microsoft.com/dotnet/announcing-ef-core-3-0... - https://dotnet.microsoft.com/download/dotnet-core https://dotnet.microsoft.com/download/dotnet-core (if you're on 2.2 you have until the end of the year to update to 3.1, which will be LTS) - https://www.dotnetconf.net/ https://www.dotnetconf.net/ live now Shame about the bad timing with the UN summit: http://webtv.un.org/ http://webtv.un.org/
- hmexx 7y agoList of performance improvements is mind-boggling: https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-core-3-0/ https://devblogs.microsoft.com/dotnet/performance-improvemen... How could a mature standard library / frameworks have so much performance gains to be had?
- oaiey 7y agoWell, in the traditional desktop space performance was not that critical as it is with cloud deployments. Also hardware intrinsics are a new toy they have available.
- Gibbon1 7y agoSeems to me it was fast enough on the desktop and uniformly responsive to events. If you wanted a Windows CRUD desktop application, really nothing better. I suspect that the CLI and the JVM are about as fast, about 2 to 10 times slower than C++. But that .nets libraries are more performant.
- gameswithgo 7y ago.NET started to barely surpass JVM with .NET Core 2, of course this is just a general tendency, actual performance depends greatly on the problem domain, how cleverly program, what counts as "java" and "c#" and so on.
- oaiey 7y agoTo the point. Doing it right has a much higher influence than the platform. The later might be a barrier but at that stage, that often does not matter anymore. Even PHP utilized the right way (looking at swoole) can performance wise beat other stacks. Disclaimer: I do not generally encourage the usage of PHP :)
- Analemma_ 7y agoI think it's a combination of monopoly effects plus the benefits of open source: back when .NET was closed-source and only available on Windows, the only way to ship a performance improvement was if an individual developer at Microsoft could convince his boss it was worth it. And it was rarely worth it, because .NET only ran on Windows, its only customers were .NET-only enterprise shops who weren't about to move to an entirely new framework because of perf problems, and there was always a long list of feature requests that PMs would give priority to. But now that .NET runs everywhere, it has to compete with projects that have been shipping performance improvements all along. Happily, since it's now open-source too, it can accept those changes from anyone.
- xvilka 7y agoToo bad FreeBSD support didn't make it into this version.
- deleted 7y ago[deleted]
- GordonS 7y agoOr indeed Linux x86 support :(
- avgDev 7y agoI have been developing in .Net MVC 5 and now the last 6 months in .Net Core 2.1. Core is pretty awesome, I would say the learning curve is pretty high, but I'm very satisfied. Previously, I used Java in school. The .Net stack offers a lot of jobs in enterprise companies, if you are someone that dislikes SV mindset. Also, Visual Studio is an insane IDE. Although, I recently did have some nasty bugs but updates are coming out pretty quickly. Edit: Microsoft has also added many new videos to help beginners, these cover various topics https://dotnet.microsoft.com/learn/videos https://dotnet.microsoft.com/learn/videos.
- gtsteve 7y agoVS is very good but I've been using Rider since the start of this year for most work, I found it to be a very strong competitor.
- LandR 7y agoVisual studio crashes and hangs on me multiple times a day. Rider is just solid.
- metamet 7y agoVisual Studio does this for me a lot as well, especially when projects become larger. The number of times the typeahead caused the app to hang is too numerous to count. Part of me misses .NET, but I've been mostly working with Golang and Node lately. Visual Studio Code is pretty stellar. Maybe someday VS will catch up to VSC. :)
- jsingleton 7y agoI also have problems with VS resource usage. It appears to depend on what file type the focussed tab has open. It's still 32-bit, which can't help. Never had perf issues with VSC, which is surprising considering it's web tech. It's a different class of app to VS but much nicer to use, and of course it's cross platform.
- 7y ago
- mcdermott 7y agoC# (the default .Net lang) has so much ceremony, boilerplate/scaffolding and IDE dependence (IDE programmers) and OOP overhead that it requires 5x more lines of code than the same app in Python or Go. Every time my interest peaks, I take a look leave with the same feeling that it's a dated/bloated OOP relic and would take all the joy out of programming. I've also noticed that most C# programmers don't usually know another language (other than a little JS) and seem totally dependent on Visual Studio; if all they had was a text editor they'd be lost. That's not a good place to be.
- Spooks 7y agoC# developer here. I picked up Java very quickly... most other OOP languages comes pretty easily as well, after learning the syntax that is. But I definitely lean on the intellisense of the IDE fairly regularly, I don't think I would completely lost, but it would take me longer.
- mattferderer 7y agoI think you might want to take a slightly different look at it as I have found the opposite. You also might need to find better C# programmers as I honestly don't know any C# programmers who only know one language or one editor. An awesome IDE is big perk to development. I don't think that should be considered a con. .NET also has tons of "magic features" like Data Annotations & Attribute Tags for those who want some magic that reduces code & helps get stuff done faster. JS & other languages reference it when looking to introduce new features. C# is anything but dated. One could call it bloated as it is one of the most flexible languages with about 10 ways to do anything. That is a strength & a weakness of any language that positions itself as a Swiss army knife type tool that wants to be able to be used everywhere. With C# you can write a lot of nice fairly functional programming style code & OOP code which is a nice perk.
- com2kid 7y agoC# has very minimal boilerplate for a lot of uses. I can throw together a simple CRUD UI app in WinForms in well under a day. Visual Studio handles writing all the data binding code for me, code that I'd have to write myself in any other language. Using one of the enterprise frameworks, sure, those all have boilerplate, in any language, especially the older frameworks. And for some tasks, the amount of boilerplate is tiny. I can write out a struct/class with property names matching my JSON, and watch as C# automatically data binds the JSON to a UI. The amount of boilerplate I need to do that in the browser is pretty much identical, or I can learn / figure out some fancy auto-binding toolkit that has its own boiler plate and learning curve. You can be seriously functional in C#. Passing around lambdas and using functional techniques to manipulate data has been idiomatic C# for over a decade. > I've also noticed that most C# programmers don't usually know another language Stereotyping is not good. I <3 C#, but I've written embedded C, C++, JavaScript, Typescript, and Python. If you go to most corporate dev places, you will find a significant population of single language devs. Same things happen with any popular corporate language. While I agree that learning multiple programming languages makes for better developers, blaming a language for being popular is hardly fair. Heck the number of developers who have historically only worked in C/C++ was really high for multiple decades.
- gameswithgo 7y agoI recently did a live coding tutorial on using SIMD intrinsics which is one of the big new features in .NET Core 3.0. It covers the basics of what is SIMD, what are intrinsics, and I do some live coding/benchmark examples in C# where I cover how to lay out data and use SIMD effectively: https://www.twitch.tv/videos/482930779?t=00h09m01s https://www.twitch.tv/videos/482930779?t=00h09m01s
- DenisM 7y agoThe only way to get C# 8 is to move to .NET Core, I can't really avoid this anymore. And for me it means moving to ASP.NET Core... Anyone recently migrated projects from ASP.NET MVC to ASP.NET Core? I hope there is a gradual way, like this: https://www.hackernoon.com/how-to-migrate-project-from-aspnet-mvc-to-aspnet-core-qt1ks31zn https://www.hackernoon.com/how-to-migrate-project-from-aspne...
- thrower123 7y agoI'm not convinced ASPNETCore 3.0 is ready to be used in anger yet. Perhaps this thread from a couple weeks ago is not representative, but I've seen other similar feedback https://twitter.com/RickStrahl/status/1171285693244436481 https://twitter.com/RickStrahl/status/1171285693244436481
- topbanana 7y ago> The only way to get C# 8 is to move to .NET Core That isn't true. You can target .Net framework 4.0 onwards.
- pathartl 7y agoNot migrated, but we do a lot of CRUD based applications for clients and have a small dev team so it feels like we're kinda porting it over. The largest change is dependency injection and Entity Framework. DI is insanely better and just more intuitive. EF is really a move from EF to EF Core which has quite a few differences that can introduce some road bumps. In my opinion, I've gained the most from moving from HTML helpers in Razor to Tag Helpers. It's basically just components for Razor, but it allows us to make a really nice UI library and cuts down on so much of our markup without having to write a bunch of overloads for the same helper. As far as MVC vs. Razor Pages, I'm still not in love with Pages. It feels a bit too much like ASP.NET Web Forms did. I still use MVC practices and it's almost the same exact experience. AJAX forms are a bit better this time around, but I'm really waiting until Blazor becomes more viable before I make a jump like that.
- WorldMaker 7y agoDoing a quick skim, it feels like that migration guide should still cover the basics. (I don't think there is a big developer-facing change between ASP.NET Core 2.1 and 3.0; small subtle things like the Generic Host Builder. But you should be fine using the guide here to migrate to 2.1 and you can find simple posts on the 2.1 to 3.0 changes.)
- daliz 7y agoIt would have been great if it allowed to make .NET Desktop apps for macOS and Linux, in addition to Windows.
- grokys 7y agoWe're trying to do that over at https://github.com/AvaloniaUI/Avalonia https://github.com/AvaloniaUI/Avalonia if you're interested. Doesn't have MS (or any other company's) backing, and is still in beta, but quite usable for creating x-plat apps. You can see some projects built on it here https://github.com/AvaloniaUI/Avalonia/wiki/Projects-that-are-using-Avalonia https://github.com/AvaloniaUI/Avalonia/wiki/Projects-that-ar...
- ygra 7y agoI was surprised when the PowerShell team announced that Out-GridView made a reappearance in PowerShell Core, built with Avalonia. So at least someone at Microsoft took notice. I'm really rooting for the project to gain some support. Right now I'd love to try porting our custom UI component at work to Avalonia, just to try it out. But that's time not well invested in something with little backing and potentially few customers for us.
- Sammi 7y agoAnnouncement here: https://devblogs.microsoft.com/powershell/out-gridview-returns/ https://devblogs.microsoft.com/powershell/out-gridview-retur...
- oaiey 7y agoScott Hunter today presented a Blazor based Electron App in the .NET 5 timespan. I am not the biggest fan of HTML, but considering the maturity of that ecosystem, design tools and knowledge among designers, that could be a very valid move.
- factorialboy 7y agoSorry for a basic question, can this be used to make desktop apps across platforms?
- strangecasts 7y agoYes - while WPF and Windows Forms are still Windows-exclusive, there are several cross-platform UI libraries for .NET Core, like Eto.Forms (https://github.com/picoe/Eto https://github.com/picoe/Eto) and Avalonia (https://avaloniaui.net/ https://avaloniaui.net/). It's also possible to build an Electron wrapper around an ASP.NET Core web app: https://github.com/ElectronNET/Electron.NET https://github.com/ElectronNET/Electron.NET
- rajeev-k 7y agoDocker is a better way to distribute apps than Electron, in my opinion. From a developer point of view you just build a regular web app, so better than Electron. From the user's point of view, Docker is better because of isolation, and because there is nothing to install. You run just one command to download and run the image. If you want the app to have its own window then use Chrome's "Create shortcut" command. This is indistinguishable from an Electron app, but better. See an app written in this fashion here: https://hub.docker.com/r/eurekasearch/eurekasearch https://hub.docker.com/r/eurekasearch/eurekasearch
- strangecasts 7y agoFor the end user there is something to install - specifically, Docker, which is quite... hefty on Windows
- charrondev 7y agoIf I remember correctly it also requires windows pro or enterprise. These 2 requirements make this fundamentally unusable for most. - Windows 10 64-bit: Pro, Enterprise, or Education (Build 15063 or later). - Hyper-V and Containers Windows features must be enabled.
- pcunite 7y ago.NET Core 3.0 will be available with RHEL 8 in the Red Hat Application Streams, after several years of collaboration with Red Hat. That's a big deal! Nice.
- Nelkins 7y agoIs anybody using Blazor for anything that isn't a toy? I'm interested in using it at work but because it appears that the payload is relatively large I wouldn't want to use it for anything that wasn't internal facing.
- landr0id 7y ago>it appears that the payload is relatively large Not knowing much about Blazor, what are you referring to here? The size of the WASM blob for your own code, or does Blazor have an associated runtime that's large? And what is considered "large"?
- Nelkins 7y agoI guess I was hoping the WASM/IL trimming would be more aggressive. My comparison isn't very scientific, I'm mostly comparing things like https://fsbolero.io/TodoMVC/ https://fsbolero.io/TodoMVC/ which is done with Blazor vs https://yew-todomvc.netlify.com/ https://yew-todomvc.netlify.com/ which is done with Yew. The former is nearly 6MB in total, the latter is 135KB.
- manigandham 7y agoBlazor client-side works by using the Mono runtime which is compiled and run as WASM. Your application is still delivered as standard DLLs and interpreted by that runtime. They're working on making the runtime smaller and faster to start still a lag since your code has to be parsed and interpreted everytime, although the DLLs are pretty small already and easily compressed.
- manigandham 7y agoClient-side Blazor is not production-ready with Asp.NET Core 3.0. It's coming in a later release and only server-side Blazor is launched today. We've been using the server-side components for lots of internal apps. It's very fast and productive to work with, and a great option for internal/enterprise/LOB apps that don't have a lot of users and can handle an occasional reconnection/interruption.
- ragechip 7y agoThis is a good leap release from msft.
- rafaelvasco 7y agoWhen I was in University people loathed .NET and idolized Java. Back then I choose C# instead of Java for my main language/toolset; People thought I was crazy. That was 10 years ago. So happy to see how much C# ecosystem has improved and keeps improving; Only thing missing for me is an official full featured C# to C++ transpiler; Only way, right now, of reaching game console platforms is by converting from C# to C++ unfortunately;
- darzu 7y agoOr use Unity?
- rafaelvasco 7y agoYeah. That or using Monogame's Brute compiler. But a standard way would be good to have;
- tofflos 7y agoIt's nice to see Alpine on the list of supported operating systems. The image mcr.microsoft.com/dotnet/core/runtime:3.0.0-alpine3.9 is 86.7MB.
- juliocasal 7y agoFor anybody interested, here for a short video on how to containerize an ASP.NET Core 3.0 Web API: https://youtu.be/Po9jQS7WBDQ https://youtu.be/Po9jQS7WBDQ
- truth_seeker 7y agoIf you dont know already: Azure has started investing heavily in offloading the task from CPU to GPU and FPGA. There are really good framework on .NET to achieve the same. NVIDIA CUDA GPU - https://devblogs.nvidia.com/hybridizer-csharp/ https://devblogs.nvidia.com/hybridizer-csharp/ GPU scripting and CUDA - http://www.aleagpu.com/release/3_0_4/doc/ http://www.aleagpu.com/release/3_0_4/doc/ FPGA - https://hastlayer.com/project https://hastlayer.com/project, https://netfpga.org/site/#/ https://netfpga.org/site/#/