Couple that with other challenges of running a niche stack in production and it can be quite a burden. Experienced, pragmatic developers will have techniques for managing this even in a functional language, but again, pragmatic may require compromise that doesn’t sit well with the purist.
But with FP, it seems like it is always the answer. And it's even better if your Operating System can be immutable too. And your build scripts. And, even if it take 10 times as long to write, at least we will be confident that it's type safe at the end.
It's almost always better to 'play' in a language that abstracts everything away except for the problem domain. Not like Rust, which introduces multiple complex language domains to learn before you can play wih your target domain.
What is your favorite programming language/library/technology?
What do you hate about it?
Anyone that jumps to answer the first but struggles to answer the second is likely not someone you want to hire.
Lack of libraries.
Lack of good tools.
I only hate that Microsoft stopped shipping modern .NET runtime with Windows. A few annoying things though, like the recent push towards AOT compilation (IMO strictly worse that JIT), and the lack of a good first-party cross platform GUI frameworks (for example Microsoft could compile d2d1.dll with DXVK, reimplement dwrite.dll API on top of FreeType / HarfBuzz, and copy-paste UWP).
Let's assume I want to use a C# script .csx file. The CSX filetype seems to be Microsoft's flavor of attempting to "make it simple". I write a hello world. Now what do I do with the .csx?
I have no idea how to compile that with modern dot net.
It appears csi.exe would have been the answer, but now Roslyn seems to be the current best practice. No idea what to do though
- sudo apt install dotnet-sdk-8.0 / brew install dotnet-sdk
- dotnet new console -o {folder} --aot
- dotnet run -c Release
- optionally dotnet publish -o .
If you want to use it as a scripting language, you do `dotnet tool install -g dotnet-script` and use it normally[0]. Keep in mind that C# is not designed for this, but it will work (at the cost of first uncached script launch costing extra - it is a compiled language after all, but that's a niche scenario anyway).[0]: https://github.com/dotnet-script/dotnet-script?tab=readme-ov...
Do I need to accept the below licenses to develop a C# app? I'm not asking you specifically, just that I don't care to try and understand if I can even use the language without accepting any of the below, (anything not MIT or Apache)
License information for .NET on Windows
The Windows distribution of .NET contains files that are provided under multiple licenses. This information is provided to help you understand the license terms that apply to your use. By using any or all of these files you agree to their associated license terms.
The following binaries are licensed with the Windows SDK License:
api-ms-. (used by .NET runtime, .NET 6 and earlier) ucrtbase.dll (used by .NET runtime, .NET 6 and earlier) D3DCompiler_47_cor3.dll (used by WPF)
The following binaries are licensed with the .NET Library License
Microsoft.DiaSymReader.Native.{x86|amd64|arm|arm64}.dll (used by .NET runtime and SDK) PresentationNative_cor3.dll (used by WPF) wpfgfx_cor3.dll (used by WPF) The following binaries are licensed with the Microsoft Visual C++ Runtime Software License:
vcruntime140_cor3.dll (used by WPF)
All other binaries and files are licensed with the MIT license
This document is provided for informative purposes only, and is not itself a license.
In any case: https://github.com/dotnet/dotnet/blob/main/LICENSE.TXT
I got a message "You must install .NET to run this application."
So I followed the link[0] given as part of the CLI output which led to the .Net Runtime installer. Inside the installer it stated "By clicking install, you must agree to the following terms" and a link[1] was part of the terms I must agree to.
[0]https://aka.ms/dotnet-core-applaunch?missing_runtime=true&ar...
[1]https://github.com/dotnet/core/blob/main/license-information...
I would prefer not to accept non-MIT terms...
To those who are reading the thread, you are welcome to verify other claims made by the account I am responding to, which were proven by other participants false. This is a cheap trolling attempt and I think my response is the more polite way to share disappointment over this fact.
I need to reorganize the generated project template because it's not actually up to common standards of what a project directory should look like. As a newbie I would never know that I need to find David Fowler's gist[0] to have a project that makes sense.
Good luck trying to change the default .bin folder without aid from a third party's script or Visual Studio.
It's not obvious how to create a project settings JSON file. There are entire paid video workshops for this task alone. This kind of code should be pre-generated in the template.
This is all stuff that should be handled before a user even touches the environment.
I have never seen a programmer struggle this much, failing to follow basic list of steps and ending up at the strange links from google, so my point in the previous reply continues to be relevant. Hell, an acquaintance of mine managed to get NativeAOT compilation working on the second try despite exotic NixOS setup and having zero experience with .NET beforehand.
And mind you, my first job was first level of customer support, so there were a fair share of users that misread the messages, and this case is like one of those bad ones. And, you know, the users who have a problem usually at least make an attempt to understand, as they are invested in solving it. But because you are invested in the opposite, no amount of explanation will help.
Note to readers: do not follow the structure at the link, it's outdated and refers to personal template preferred by David Fowler, you don't need all of that and it was also created during the days of .NET Core 1.
There are two main "project manifest"-like files that .NET uses: .csproj (or .fsproj and similar) to declare projects, and .sln to group multiple projects together. Those are managed with `dotnet new {templateName}` and `dotnet new sln` then `dotnet sln add/remove {path/to/project}`. Everything else is optional.