.NET Programming Weekly Issue 6 - April 12, 2020
A lot has happened recently, so I haven’t updated my blog in a long time. Hope the world will return to normal soon.
0x00 C# PROGRESS REPORT: IOS AND SIGNALS AS EVENTS
- Godot Engine, an open-source game engine, will be getting C# support for iOS. Initially and for quite some time C# was only supported in Godot on desktop platforms. In the last year they made good progress extending support to Android and WebAssembly, and now it’s time to add iOS to that list as well.
Signals
are the Godot version of the observer pattern. Engine classes use signals to notify listeners when an event occurs. User scripts can also create their own signals. In .NET, the common way to implement the observer pattern is usingevents
. The goal this time is to expose signals as events. it’s not finished, but the initial results are looking great.
0x01 Analysing .NET start-up time with Flamegraphs
- Where does the .NET Runtime spend time during start-up? This post demonstrates how you can use PerfView to analyse where the .NET Runtime is spending it’s time during start-up.
0x02 From ‘dotnet run’ to ‘hello world’
- Have you ever stopped to think about all the things that have to take place when you execute a .NET program? As the quote from Neal Ford says “Understand one level below your usual abstraction”, this talk will look at why this is important and how can it help you if we apply it to the .NET framework.
- We will delve into the internals of the recently open-sourced .NET Core Runtime, looking at what happens, when it happens and why.
- Using freely available diagnostic tools such as PerfView, libraries including ClrMD and even the source code itself! Along the way we’ll examine the Execution Engine, Type Loader, Just-in-Time (JIT) Compiler and the CLR Hosting API, to see how all these components play a part in making a ‘Hello World’ app possible.
0x03 ref returns are not pointers.
ref
parameters were in the language since the v1.0. Somehow the ref parameters are not causing questions above. Perhaps it is easier to imagine that ref infoo(ref int x)
just specifies how int x is a passed. However when we seeref int
describing a return of a methodref int foo()
, it is possible to see it as a method returning something typed ref int. It does not. From the language prospective, the return type is still an int.- Why ref void Foo() is not allowed? Because Foo() does not return anything. It can’t do that by reference.
- Can ref return be null? (not the referent, but the ref itself). How do I test for nulls? Same as “can a variable be null? Not what is stored in the variable, but variable itself.” - Not possible. Not, unless something is fundamentally broken.
- Why no operations to increment refs - like to point to the next array element? Can we have indexing operations on refs? Operations are specific to the type of variables. And ref is not a part of the type.
- Is it possible to have a ref of a ref? Since ref int is not something meaningful on its own, ref ref int is not either.
0x04 Unity 2020 roadmap: Recapping the tech and solutions coming this year
- To start, we’re now shipping two TECH stream
releases per year instead of three
, extending the alpha and beta phases to ensure more robust and stable core releases. - To help you, we’ve introduced a wide range of new tooling for artists and designers over the past few years, such as Shader Graph, 2D Tools and Visual Effect Graph as well as new features for programmers, including additions to profiling and improvements like Configurable Enter Play Mode. Our focus for 2020 is on
updating existing features
. - We’re also working on
Project Tiny
, a runtime that enables you to build instant games and experiences across mobile and web, with the most optimal file size and load times. - In our Unity Roadmap 2020: Live Games session, we highlighted three products that help solve the challenge of engaging and retaining players.
deltaDNA, GameTune, and Cloud Content Delivery
, all designed to work with Unity or any game engine.