Here's my MNT Reform. It's a laptop with a mechanical keyboard, and while it is physically robust, it's not a high performance monster. So while the performance is adequate, it cannot handle all the bloat of modern software.
I hope to turn this little laptop into a distraction free environment to do a lot of my development of GameStrut. It's still in the very early stages, but I know at the very least it will involve C# to support Unity3d. So I've been experimenting on how to build and debug C# on Linux ARM.
The two ways of running compiled code that I've looked into is dotnet and mono.
.NET Core aka dotnet is a successor to the original .NET Framework. It adds cross platform support, that the original was lacking, but also removes some things that were available in the previous incarnation. The things it cuts out are not a big deal for me as I'll be writing everything from scratch anyway, so I have no legacy dependencies or requirements, and my code is usually pretty vanilla so it will run anywhere.
I had some trouble installing dotnet
on via the Microsoft apt
package server on my Reform as it is using Debian 12, and perhaps also because it was ARM. I was able to install easily using the dotnet-install.sh
script and manually adding the ~/.dotnet
directory to the PATH.
The other option is Mono. It has been around for a long time, initially developed as a open source Linux runtime for the .NET Framework. I'll probably lean towards Mono as I have used it previously for Puzzle Quest 3 and had no problems there. Also it is most similar to what Unity3d uses internally, so it would be good to stay somewhat in sync there as well.
While mono
is available in the Debian apt
repository, it's a bit old. So it's best to follow the install instructions on mono-project.com to get the latest version.
C# code is usually built based on a project file generated by Visual Studio. It's just a simple XML file and there's enough info on the net if I need to modify or build it from scratch.
The msbuild
command works the same was its Windows counterpart, building a project and outputting the results with little fuss. It has lots of options and is reliable, but it is a little slower than I'd like.
csc
is the offical Microsoft C# compiler (and probably what msbuild
uses internally). It does not know anything about projects, so you must supply all the files to be compiled as command line arguments, similar to something like gcc
.
mcs
is the Mono version of the C# compiler. As far as I can tell it's basically the same as the official counterpart, but a little faster.
Ive ran a very unscientific speed test on the ways of building a project:
time msbuild
real 0m12.497s
time csc -recurse:*.cs -out:out.exe
real 0m5.476s
time mcs -recurse:*.cs -out:out.exe
real 0m2.575s
This was a smallish project, but it did have about 70 tiny source files. Mono mcs
is the clear winner here, but it remains to be seen if these differences will matter too much in a large project.
While I can use a text editor and build and run with the command line. It would be nice to have a development environment to help.
There's a couple of features I'm specifically looking for:
Fully featured, but on the slow side. I think it will unfortunately end up being just too slow to keep using for the long run, especially as the project and VSC itself get bigger over the years and start demanding more resources.
✓ Omnibox
✓ InteliSense
✓ Debugging - Was having trouble with exceptions not being able to retrieve their info, but that's probably a weird config issue that could be fixed if i was committed to using VSC long term.
A faster GUI than VS Code, but a teeny bit on the slow side. Thinks like opening a project or starting a build can stall for a little bit. I would probably use this for some deep debugging alongside a different editor.
x Omnibox
✓ InteliSense
✓ Debugging
A fast enough GUI, it could be better with things like startup time, but I can live with it. I'm using it right now to write this blog post!
The problem is I was unable to get the C# plugin to actually work :(.
✓ Omnibox
x InteliSense - The Sublime Text 3 plugin for C# is abandoned and no longer working.
x Debugging - Even with the plugin I don't think this was supported.
x Jump to error
A very speedy editor that unfortunately does not have a lot of C# support.
✓ Omnibox - While it does not have an actual omnibox, Geany does have several plugins to jump to files by name. I choose Quick Open.
x InteliSense - Not available but it does have some typing completion from class names in the project.
x No debug
I have used vim with omnisharp in the past, but it felt a bit too clunky to me once several disparate packages were added together to create the functionality.
And it felt like a long process of tweaking and learning to vim better was ahead of me...
✓ Omnibox - Jump to file can be added by the "ctrl+p" plugin.
✓ Intelisense - There is plugin support for all the expected OmniSharp functionality
x Debugging - I have not had this setup, I assume it could, but may be a lot of work
At this point I'm not sure which IDE or combinations of IDEs I'll start out with. Definitely towards the faster end. The last worst/best option is for me to write my own IDE with the minimal feature set I want. But that's a very dumb idea. Stay tuned for my next post!
Previous: Dynamic Asset Downloading in Real Racing 2