When it comes to C# REPLs I absolutely adore LinqPad, although recently it's felt like I've had to buy licenses for it increasingly often which I've found annoying.
If any other REPL can get to a point where it can rival LinqPad in functionality then it'll be an absolute winner.
The key features linqpad has that I'd need from any replacement:
* Securely store secrets
Util.GetPassword prompts the user for the password if it's not in it's store. Leverages the windows user credential store.
* Keeps the process running
This is absolutely key, it keeps alive the process even after the script has finished, so you can easily attach a debugger / profiler to it when the script isn't running, then start the script again. It also means you can use AppDomain.CurrentDomain.SetData to cache expensive setup if you're trying to profile something.
* Quickly switch between expression / statements / program mode
It'll intelligently work out if you've written a single expression vs multi-line statements, and you can switch to "program" and it'll wrap what you've done so far in a Main stub.
After finally getting a fiddly setup working, there's a "Use as default for new queries" button which is very convenient. Also the "clone query" functionality is similarly useful for copying not just the C# text but all the background namespace declarations, references, config, etc.
And that's about it. I barely use the database connection and exploration side, but I do use it daily for hooking into DLLs to quickly test changes to our internal projects.
Great to see LINQPad getting some love. Wish it had a fully functional trial so outsiders can see the real thing before paying. Otherwise, the free version is crippled and boring.
Made this video to show LINQPad and getting OAuth tokens from the Spotify api.
RoslynPad support user input with `Console.ReadLine()`, but that's about it. For me personally it does everything I need for scripting C#. For anything more serous I usually create full program and a bat/sh file to execute it in a conveniently.
I used Basic, Pascal, C++, C, Javascript, Python, Java and C#.
C# is my favorite language because is relatively easy to write something without having to write a lot and there's relatively little boiler plate and ceremony.
On top of its imperative foundations there were added some functional capabilities that are integrated very well.
What is als likeable is there are a ton of learning materials for those who are interested, a ton of libraries and frameworks and the community being helpful.
Also, C# can be used in about every domain, web backend, web fronted, desktop, small utilities, games, mobile and even microcontrollers.
What I dislike about C# is that every file is also an object and I rather like a less OOP approach.
Also, there are features the community asked for years, like algebraic types and even though people working on the language implementation recognized their importance, they still didn't find their way in the language.
My favorite update to C# would be if it doesn't force so much object oriented workflow. Even C++ lets you work in a procedural way.
Another.NET language I like is F# but I didn't invest much time in it because I don't have where to use it for work.
monogame is pretty much the continuation of XNA although they have added more stuff.
There is another framework called FNA that I've not used personally but I've heard it tries to match XNA exactly while monogame is a bit more forward looking. So FNA is good for porting forward your older XNA games.
C# is really an awesome language, it’s come such a long way. I know it used to be a pain and not very cross-platform friendly, but nowadays it’s a dream. Shoutout to Rider as the best IDE for it lol
I've done C# for a while and I really love what can be done with DI & reflection for cool cross cutting abilities.
I want to branch out to native stuff like C++ & Rust for memory management stuff, but they don't seem to come close in terms of the reflection abilities or probably the function is there, but just a nightmare to work with.
Is very verbose. There are probably worse offenders. C# devs also love to add access modifiers even when its not needed. For example, private for anything that is meant to be private or the suffix `Async` even though you don't have a sync version of a method.
The private keyword is needed because the default access is public to the same assembly. Usually that's very different from private.
As for the implicit cast, two extra tokens in an uncommon case doesn't seem so bad when you consider all the nice common things like var, the lambda syntax, initializers, pattern matching, LINQ, delegates, etc. etc.
Default visibility for type members is private, default visibility for not-nested types is internal.
Defining implicit cast operators frequently (especially ClassA -> ClassB) might be a sign that a better implementation is required. In practice, it's not done often.
Agree on unncessary Async suffix. It is a common mistake (it is one) to add it for methods that cannot or will not offer non-async variants.
In a sense, internal is just another way of viewing it as “private to the assembly”. If i don’t need something to be reached by another assembly, then typing `internal` when not necessary is just too much.
Yeah, I don't know, the argument here I think is just dated if I'm interpreting it correctly. There's nothing there in Java that forces you to make classes that are actions or verbs. You could do the same in any language that has classes. Java has long since supported lambdas and functions that can be passed around.
My concerns are mostly in the space between files and whole projects so I can't be super precise but one micro-scale thing that really worrys me is the lack of any discriminated unions in the language.
There a time when class hierarchies are ugly but fine, completely fine, and genuinely a bit dangerous: C# doesn't seem to have an option for the latter
Even though it's not as feature-rich as linqpad's Dump() method, personally I find the ability to pretty print any object ("detailed view"[1]) by pressing ctrl+enter really convenient. E.g. try typing in
It doesn't change the output encoding by default, but if you manually set it to UTF8 it works. (IE: Console.OutputEncoding = System.Text.Encoding.UTF8;)
That might be all you need to fix the F# REPL too.
https://github.com/roslynpad/roslynpad