Most people would not understand why anyone would even have a preference on how many spaces a text file should be indented, but for people who interact with text files all day this can be a big deal. Seriously. People like to feel comfortable in their work places, and for software developers, or coders, their work place is their source files. Consider this analogy. It should not matter which side of my desk the phone is on, yet I prefer to have my phone on the left. The reason for my preference is that I often need to use my mouse while I am on the phone, so it is more convinient for me to reach over with my left hand and pick up the phone while leaving my right had free. I would expect a leftie to have the exact opposite preference.
So, Apple has just released a new programming language called Swift, and naturally I wanted to check it out. I started by writing example programs in the playground as I read through the Swift iBook. That was fun and all, but I wanted to compile something and create an actual program. Apple said that Swift was fast, so I also wanted to benchmark it against C, which is my de facto point of reference for fast. I recently wrote a post where I compared minimum functions in C, so I though it should be trivial to port that code to Swift and test it out. The porting was easy, and the functions ran about 20 times slower than the C equivalents (which is actually not bad, in almost all cases it’s a good trade-off to decrease development time), but I found something else that surprised me. The built-in min function was insanely slower than the ones I hand coded. Whereas the test function using my hand-coded min3a() function took, on average, 3446 microsecond in C and 68,085 microseconds in Swift, the test function using the built-in
min() function took 16.87 seconds to run.
Anyone who has written C code has probably at one point or another had to write a small function to find the minimum value in a set of integers. When the set contains only two numbers, a macro like
#define min(a,b) ((a) < (b) ? (a) : (b)) is frequently used. When the set is expanded to three it is possible to add to that macro, but I generally prefer to err on the side of code readability whenever possible, so I just write a little function to do it. Recently, as I was performing research for my master’s thesis, I saw some C++ code which implemented the minimum_of_three function slightly differently than my standard naïve approach. The comment said something to the effect of, “spend a register to reduce the number of branches and increase performance.” I’m always looking for ways to improve my code, so I thought that I would try out this better way. However, I am not one to just blindly believe stuff I read in code comments, so I had to test it out for myself. Below are the results of my analysis.
This details the hardware design for a simple 12-bit microporcessor. I created it for an undergraduate class which I took a few years ago. It is not really usefull for anything besides learning how computer hardware works, but I still think that it is pretty cool. I found the documentation for it on my hard drive and remebered how proud I was to have actually completed it; I am a computer scientist, not a computer engineer. Simple logic gates are used as the basis for the creation of more complex digital electronic circuits; those circuits, including a control unit, are in turn connected via a datapath to form a completed processor. The processor datapath is designed to implement the Simple-12 instruction set.
I have heard that it is more efficient, in C based languages, to pre-increment (
++counter) than it is to post-increment (
counter++). However all the online discusions of the topic that I have seen did not provide actual evidence as to why that might be. One of the things I have learned about technology is that there are very few rules of thumb that last, especially when it comes to limitations. So, I decided to run a couple small tests using my current language of choice, Objective-C.
Let’s start with the most basic example. We will define an integer, post-increment it, pre-increment it, and then look at the generated asembly code. I entered the following Objective-C code into Xcode. (By the way, using
int instead of
NSInteger will produce the same results, but Apple recomends using
NSInteger since it is a 32-bit int on 32-bit platforms and a 64-bit int on 64-bit platforms)
NSInteger i = 0; i++; ++i;
The Mayor of Barberton, William Judge, is always looking for ways to engage the community, and I have been working with him to accomplish that on the technology front. In 2013 I did a complete overhaul of the City’s website; the goal was to structure the website in a way which would make it easier for citizens to interact with local government while also promoting the City’s strengths to visitors and potential residents. The website was designed with mobile use in mind, but people are coming to expect the experience provided by a dedicated mobile apps, so in 2014 Barberton will begin introducing dedicated mobile apps.