Date: Fri, 5 Mar 2004 16:11:31 +0000 From: Daniela <dgw@liwest.at> To: "Willie Viljoen" <will@unfoldings.net>, "Johnson David" <DavidJohnson@Siemens.com>, <freebsd-advocacy@freebsd.org> Subject: Re: FreeBSD Most wanted Message-ID: <200403051611.31477.dgw@liwest.at> In-Reply-To: <024301c4027d$283b9ee0$0a00a8c0@arista> References: <Pine.LNX.4.43.0403011839470.3269-100000@pilchuck.reedmedia.net> <200403050615.55106.dgw@liwest.at> <024301c4027d$283b9ee0$0a00a8c0@arista>
next in thread | previous in thread | raw e-mail | index | archive | help
On Friday 05 March 2004 06:43, Willie Viljoen wrote: > ----- Original Message ----- > From: "Daniela" <dgw@liwest.at> > To: "Johnson David" <DavidJohnson@Siemens.com>; > <freebsd-advocacy@freebsd.org> > Sent: Friday, March 05, 2004 8:15 AM > Subject: Re: FreeBSD Most wanted > > > On Thursday 04 March 2004 23:12, Johnson David wrote: > > > On Thursday 04 March 2004 02:40 pm, Daniela wrote: > > > > Cross platform applications are slower than apps that are optimized > > > > for one particular platform. I know what I'm speaking of. What are > > > > the extended features of a platform good for, when you can't use them > > > > because another platform doesn't have them? > > > > > > Not necessarily true. You won't be able to perform any platform > > > specific optimizations, but in general cross platform code is not any > > > slower than platform specific code. Three examples: NetBSD, Linux > > > kernel, Qt. Neither NetBSD nor Linux are considered "slow" by any > > > stretch of the imagination. Qt is impresively fast, and is only called > > > "sluggish" by biased trolls. > > > > I'm not speaking of your average code, I'm speaking of high-speed > > assembly language programs. > > True, assembly language, you will generally find, differs for each seperate > platform. This presents a unique hurdle to cross platform development, but > it is not one that cannot be overcome. Again, my favourite new jargon term, > the abstraction layer, can come in to help us get around this problem. > > The first step in getting to an environment where every application works > with almost every computer is to begin designing the ultimate abstraction > layer for your program. Yes, you will have to move away from assembly, to > something slightly less low level, but C would be more than sufficient. > Better yet, if you take the time to make your code ANSI C compliant, you've > already crossed one hurdle, any recent C compiler on any platform should > now be able to compile your code. > > Next, you want to look at all the different optimizations available for > each platform. The trick here is to identify similarities between > extensions on each platform. Now, writing your abstraction layer, in each > of your drivers, you want to make full use of the extensions in each > platform, also, you want to write compatibility "kludges" for every single > feature you use. In this way, you can write the program to talk to the > abstraction layer only. Then, your abstraction layer can be written to take > full advantage of an extension if it is present, or kludge around it if it > isn't. > > Furthermore, your application can be seperately compiled on each platform. > The possibility has long existed to compile code selectively, even > conditionally compiling only certain parts of individual files. Compiling > on each platform in this way will only use extensions native to that > platform. The program will only talk to its abstraction layer and won't > notice the difference. The abstraction layer will be compiled with > optimizations for each platform. As all C compilers do not actually compile > into machine language, but generate an assembly dump which is then > optimized and compiled to machine code, this will get you as close as you > can be to rewriting the program in assembly for each platform. > > What you will end up with is a program that can move almost effortlessly > between platforms, without sacrificing on performance or the use of > features. If you want a good case in point here, you need only look at > NetBSD, which runs on more platforms than any other operating system, and > can not be accused of being slow or unoptimized. A good demonstration of > writing code in this way can also be found in the Linux kernel. When > compiling Linux, the target platform is one of the first choices you face. > When an appropriate platform is selected, conditional compiling builds the > kernel in such a way that all available extensions for that platform are > made use of. > > Writing applications to do the same is not that hard, and the payoff is > better integration and compatibility for everyone. That's exactly what I like to do, except that I do the low-level thing, and let other people write the high-level stuff that talks to my abstraction layer. Sometimes I even write a user interface myself, but only when I have time. I hate the idea of being locked into using one particular interface, so I also want my users to have the choice.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200403051611.31477.dgw>