From: "J.A. Magallón" <jamagallon@ono.com>
To: "Linux-Kernel, " <linux-kernel@vger.kernel.org>
Subject: Re: Kernel Development & Objective-C
Date: Tue, 4 Dec 2007 22:24:38 +0100 [thread overview]
Message-ID: <20071204222438.3325d6a3@werewolf> (raw)
In-Reply-To: <20071204175413.GD2310@csclub.uwaterloo.ca>
On Tue, 4 Dec 2007 12:54:13 -0500, lsorense@csclub.uwaterloo.ca (Lennart Sorensen) wrote:
> On Sat, Dec 01, 2007 at 12:19:50AM +0100, J.A. Magall??n wrote:
> > I think BeOS was C++ and OSX is C+ObjectiveC (and runs on an iPhone).
> > Original MacOS (fron 6 to 9) was Pascal (and a mac SE was very near
> > to embedded hardware :) ).
> >
> > I do not advocate to rewrite Linux in C++, but don't say a kernel written
> > in C++ can not be efficient.
>
> Well I am pretty sure the micro kernel of OS X is in C, and certainly
> the BSD layer is as well. So the only ObjC part would be the nextstep
> framework and other parts of the Mac GUI and other Mac APIs they
> provide, which all at some point probably end up calling down into the C
> stuff below.
>
Yup, thanks.
> > C++ (and for what I read on other answer, nor ObjectiveC) has no garbage
> > collection. It does not anything you did not it to do. It just allows
> > you to change this
> >
> > struct buffer *x;
> > x = kmalloc(...)
> > x->sz = 128
> > x->buff = kmalloc(...)
> > ...
> > kfree(x->buff)
> > kfree(x)
> >
> > to
> > struct buffer *x;
> > x = new buffer(128); (that does itself allocates x->buff,
> > because _you_ programmed it,
> > so you poor programmer don't forget)
> > ...
> > delete x; (that also was programmed to deallocate
> > x->buff itself, sou you have one less
> > memory leak to worry about)
>
> But kmalloc is implemented by the kernel. Who implements 'new'?
>
Help yourself... as kmalloc() is a replacement for userspace glibc's
malloc, you can write your replacements for functions/operators in
libstdc++ (operators are just cosmetic, as many other features in C++)
In fact, for someone who dared to write a kernel C++ framework, the
very first function he has to write could be something like:
void* operator new(size_t sz)
{
return kmalloc(sz,GPF_KERNEL);
}
And could write alternatives like
operator new(size_t sz,int flags) -> x = new(GPF_ATOMIC) X;
operator new(size_t sz,MemPool& pl) -> x = new(pool) X;
If you are curious, this page http://www.osdev.org/wiki/C_PlusPlus
has some clues about what should you implement to get rid of
libstdc++.
--
J.A. Magallon <jamagallon()ono!com> \ Software is like sex:
\ It's better when it's free
Mandriva Linux release 2008.1 (Cooker) for i586
Linux 2.6.23-jam03 (gcc 4.2.2 (4.2.2-1mdv2008.1)) SMP Sat Nov
next prev parent reply other threads:[~2007-12-04 21:24 UTC|newest]
Thread overview: 57+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-11-29 12:14 Kernel Development & Objective-C Ben Crowhurst
2007-11-30 10:02 ` Xavier Bestel
2007-11-30 10:09 ` KOSAKI Motohiro
2007-11-30 10:20 ` Xavier Bestel
2007-11-30 10:54 ` Jan Engelhardt
2007-11-30 14:21 ` David Newall
2007-11-30 23:31 ` Bill Davidsen
2007-11-30 23:40 ` Alan Cox
2007-12-01 0:05 ` Arnaldo Carvalho de Melo
2007-12-01 18:27 ` Bill Davidsen
2007-12-01 18:18 ` Alan Cox
2007-12-03 1:23 ` Bill Davidsen
2007-11-30 22:52 ` J.A. Magallón
2007-11-30 10:29 ` Loïc Grenié
2007-11-30 11:16 ` Ben Crowhurst
2007-11-30 11:36 ` Karol Swietlicki
2007-11-30 14:37 ` Lennart Sorensen
2007-12-08 8:54 ` Rogelio M. Serrano Jr.
2007-11-30 23:19 ` J.A. Magallón
2007-11-30 23:53 ` Nicholas Miell
2007-12-01 0:31 ` Al Viro
2007-12-01 0:34 ` Al Viro
2007-12-01 1:09 ` J.A. Magallón
2007-12-01 19:55 ` Avi Kivity
2007-12-04 17:54 ` Lennart Sorensen
2007-12-04 21:10 ` Avi Kivity
2007-12-04 21:24 ` J.A. Magallón [this message]
2007-11-30 11:37 ` Matti Aarnio
2007-11-30 14:34 ` Lennart Sorensen
2007-11-30 15:26 ` Kyle Moffett
2007-11-30 18:40 ` H. Peter Anvin
2007-11-30 19:35 ` Kyle Moffett
2007-12-01 20:03 ` Avi Kivity
2007-12-02 19:01 ` Andi Kleen
2007-12-03 5:12 ` Avi Kivity
2007-12-03 9:50 ` Andi Kleen
2007-12-03 11:46 ` Avi Kivity
2007-12-03 11:50 ` Andi Kleen
2007-12-03 21:13 ` Willy Tarreau
2007-12-03 21:39 ` J.A. Magallón
2007-12-03 21:57 ` Alan Cox
2007-12-04 21:47 ` J.A. Magallón
2007-12-04 22:20 ` Diego Calleja
2007-12-05 10:59 ` Giacomo A. Catenazzi
2007-12-04 21:07 ` Avi Kivity
2007-12-04 22:43 ` Willy Tarreau
2007-12-05 17:05 ` Micro vs macro optimizations (was: Re: Kernel Development & Objective-C) Avi Kivity
2007-12-03 12:35 ` Kernel Development & Objective-C Gilboa Davara
2007-12-03 12:44 ` Gilboa Davara
2007-12-03 16:28 ` Casey Schaufler
2007-12-04 17:50 ` Lennart Sorensen
2007-12-05 10:31 ` Gilboa Davara
2007-12-01 19:59 ` Avi Kivity
2007-12-02 19:44 ` Jörn Engel
2007-12-03 16:53 ` Lennart Sorensen
2007-11-30 15:00 ` Chris Snook
2007-12-01 9:50 ` David Newall
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20071204222438.3325d6a3@werewolf \
--to=jamagallon@ono.com \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox