5 ms·
Objective-C isn't used in XNU the kernel that Mac OS X uses, Mach is a mixture of C and C++ (A subset of it actually, known as IOKit).
by calloc 14y ago
Objective-C isn't used in XNU the kernel that Mac OS X uses, Mach is a mixture of C and C++ (A subset of it actually, known as IOKit).
- pjmlp 14y agoSystem programming is more than just the kernel. I imagine that the kernel can easily compiled with the Objective-C or Objective-C++ compiler, if Apple so wishes.
- kelnos 14y agoYou "imagine" incorrectly. A functioning Obj-C requirement requires a runtime. Currently that runtime (libobjc) is written in C, and it requires a C library to function. Yes, you can rewrite those portions to use only functions available in kernel-land, but it is by no means "easy" as you suggest.
- pjmlp 14y agoThis just goes to show you don't understand compilers. All languages require runtimes, even C. The thing is that C as high level assembler it is, uses the operating system as its runtime. The C language is also part of Objective-C, in a similar vein as C++ also supports most of the C89 features with small exceptions. So it is possible to have the Objective-C runtime compiled using the C subset of Objective-C. This is known as compiler bootstrapping.
- Arelius 14y agoC hardly requires it's runtime. Objective-C without the runtime is just C, if you write the runtime, GC, and other low-level system components in the C subset of Objective-C you are just writing the kernel in C.
- pjmlp 14y agoTechnically you will be using the Objective-C compiler, so it is still Objective-C even if the syntax looks like C. The same applies if you would be using the C subset of a C++ compiler.
- Arelius 14y agoThis is in the original context of how all systems will be written in "GC enabled system programming languages". If the language is not GC enabled due to missing a runtime or w/e then the technicality isn't relevant.
- pjmlp 14y agoWhat is relevant, is that universities and some companies seem to have another opinion. I am old enough to remember the days when UNIX and C were funny research projects. Look at them now. So I leave you with a list of research projects for the boring days, when you don't have anything to read. http://www-spin.cs.washington.edu/ http://www-spin.cs.washington.edu/ http://www.oberon.ethz.ch/archives/systemsarchive/native_new http://www.oberon.ethz.ch/archives/systemsarchive/native_new http://www.ocp.inf.ethz.ch/wiki/Documentation/Front http://www.ocp.inf.ethz.ch/wiki/Documentation/Front http://www.jnode.org/ http://www.jnode.org/ http://www.jnode.org/node/175 http://www.jnode.org/node/175 http://programatica.cs.pdx.edu/House/ http://programatica.cs.pdx.edu/House/ http://hasp.cs.pdx.edu/ http://hasp.cs.pdx.edu/ http://research.microsoft.com/en-us/projects/singularity/ http://research.microsoft.com/en-us/projects/singularity/ http://cosmos.codeplex.com/ http://cosmos.codeplex.com/ http://www4.cs.fau.de/Projects/JX/ http://www4.cs.fau.de/Projects/JX/ http://wiki.xomb.org/index.php?title=Main_Page http://wiki.xomb.org/index.php?title=Main_Page
- Arelius 14y agoThe problem, is that at the end of the day, some code somewhere is going to have to deal with resource allocation. Generally speaking with all the other fluff aside, an operating system, fundamentally manages and multiplexes resources. It's naive to think that resource management would be best done in a language with automatic GC. Somebody I don't doubt that C is not the systems programming language of the future. But it's not going to be done in a system that's based around automatic GC either.
- kelnos 14y agoThis just goes to show you don't understand compilers. No, admittedly, I don't, at any more than a basic level. But you're still wrong. Try compiling, linking, and running an ObjC program without the ObjC runtime. See how that fails. See how long it takes you to write a minimal runtime that can run your program in user-space, and then kernel-space. It won't be quick. Try compiling, linking, and running a plain-vanilla C program without the "C runtime" (I guess you mean a combination of libc, libgcc, and crt.o, basically what you get when you pass -nostdlib -nostartfiles to gcc). Yep, that'll fail too. Then get it to compile and run anyway. Not that hard. That's* the difference I'm talking about. At the very least, kernels like Linux and Mach/Darwin already have kernel-friendly replacements for the libc functionality they commonly use. Doing something similar for ObjC would be time consuming. Certainly it isn't impossible, but note that I never said that: I merely pointed out it wasn't easy.