Digests » 188
Writing assembly language is something best left for the experts. To write code that runs directly on your microprocessor you need to know how memory segmentation works, what the intended use of each register is, how codes executes in real and protected modes and much, much more. And, of course, modern compilers will usually produce faster, more optimized code than you ever could, without making any mistakes.
There are many tutorials on the web that explain how to build a simple hello world in C without the libc on AMD64, but most of them stop there. I will provide a more complete explanation that will allow you to build yourself a little framework to write more complex programs. The code will support both AMD64 and i386.
Let me take you on an adventure through time and space. Hopefully, there will be some learning involved along the way. So hop on the magic school bus and we’re off!
In a Tale of Three Safeties, we discussed three kinds of safety: type, memory, and concurrency. In this follow-on article, we will dive deeper into the last, and perhaps the most novel yet difficult, one. Concurrency-safety led me to the Midori project in the first place, having spent years on .NET and C++ concurrency models leading up to joining. We built some great things that I’m very proud of during this time. Perhaps more broadly interesting, however, are the reflections on this experience after a few years away from the project.
An algorithm for finding a Hamiltonian cycle in undirected planar graph, presented in this article, is based on an assumption, that the following condition works for every connected planar graph: graph G is Hamiltonian if and only if there is a subset of faces of G, whose merging forms a Hamiltonian cycle. Merging of faces is an operation of symmetric difference of sets of edges, where each particular set of edges contains all edges of a face. For example, merging of all inner faces of some plane graph forms an external face.