L4 microkernels show that context switches can be made quite fast. L4Linux is almost on par with "normal" Linux. One of the problems is that current CPUs are not designed for ultra-fast context-switches, some do even require a full cache flush. We will see what the future brings...
You might want to check out DROPS, the Dresden Real-Time Operating System at http://os.inf.tu-dresden.de/ . With some coding you can use Linux device drivers, but they are separated into their own L4/Fiasco task (L4 is a second generation microkernel family). Thus a device driver may crash, but only parts of the system using it are affected. And as every task may have its own address space it is quite resilient against various security problems.
Another very promising project is L4/Hurd (http://www.gnu.org/software/hurd/hurd-l4.html), which will eventually produce a modern UNIX-like operating system for which it will be a joy to write drivers, filesystems, you name it.:)
You will not experience the power of macros in either Haskell (has none?) or Scheme (most dialects have "hygienic macros" which are quite a pain in the ass). And btw, Common Lisp is not as old as you think. The standard dates from 1994 and it has its roots in the early 1980s.
I really do not know what kind of pitfalls Common Lisp shares with C or Fortran. I never had any Common Lisp application core dumping...
Yes, you can build an interpreter in Ruby to achieve this. But you will not be using Ruby then anymore, you will use your interpreted language. With Common Lisp macros you can build COMPILERs for any language you want, as your macro turns the "description" you pass to it into CL code which is transformed to machine code by the CL compiler. Ruby CANNOT do this, even if someone writes a native compiler for it.
What is 'condition' in your code snippet? In my original macro this is also a completely arbitrary piece of CL code. And in your example 'body' is just a string. You can hardly manipulate what's in there. It's straighforward to extend CL to support, say, pattern matching like haskel does:
(defh foo
0 ?y -> ?y
?x ?y -> (foo (1- x) y))
I have written this macro that forms the above in the appropriate code to identify each situation.
You can also can use predicates to test whether a variable in a pattern meets some criteria:
(defh bar
(?_ ?(x evenp)) -> (/ x 2)
(?_ ?x) -> (1+ x))
So if you call bar with the list (1 4) you would get 2 back. If you call it with say (1 3) you get 4 back. Just a stupid example, but proves a point...
Not really. if you wrap you code snippet into a function, how do you call it from outside? Will it look and behave like Ruby's builtin looping constructs?
But it is awkward to manipulate Ruby syntax. Any language that has a one-to-one mapping from text to a simple data format, that is easy to manipulate can be considered to be a Lisp anyway...
(defmacro while (condition &body body)
"Executes body while condition holds"
`(tagbody
loop-begin
(when,condition,@body
(go loop-begin))))
Ruby seems to be very Common Lisp-oriented but without parentheses and thus macros. This removes very much from it. Can you implement a new Object System with multiple inheritance in Ruby?
I surf this site with Firefox on FreeBSD. I have no problem with plugins (Java, mplayer, flash (via linuxpluginwrapper). I did nothing special. FreeBSD has improved a great deal in this area the last year.
Opera is quite popular as browser. I have some friends who use it quite exclusively. I myself have used it on FreeBSD as well. The startup time of Opera is a big plus compared to Mozilla or Firefox.
You did not point out why C++ is "plain better" than C, at all. I.e. much of multiple platform support is low-level stuff, that will probably not fit into your nice templates.
Btw, you would have to freeze the C++ ABI or use one version of GCC forever. I cannot count how often the GCC folks broke binary compatibility.
If you want US military forces to be stationed in Iraq for the next 50 years, like here in Germany, then by all means... Comparing some struggle for oil to World War II is ridiculous, by the way.
What about an US president that based his actions on reality, not on some quite strange (from a German point of view) religious and/or imperialistic imaginations of how the world is supposed to be.
80747 - would be nice to have processor as reliable as the other thing this name implies. *g*
But to be serious: Giving processors numbers instead of names, let's the consumer focus on specs and not on pointless debates about the name per se.
I am really pleased to see a major software development
community leaving the C-like realm of programming
languages. While C is still nice as assembler substitute, I
never could convince me that it is useful for general
application development. Same goes more or less for C++/Java,
though I do not have much exposure to them myself and will try
to keep it that way.
There are really neat languages to successfully code nice programs
and all the C-like ones are clearly not belonging into that
group. Being a Common Lisp
zealot I strongly prefer its multi-paradigm style to
anything else for most tasks, but I also see the benefit in
using OCaml, Eiffel and other languages with way more
abstraction than any C-like language so far manages to convey to
the ordinary programmer. Having proper closures, and first-class
functions, and a not-limiting OO implementation increases
productivity by a order of magnitude.
Ok, but one must face reality: As software developer eventually
you will have to code something in say Java, but Lispers have
now a real advantage: LINJ
For now I can use most of the expressivness of Common Lisp and
still can pretend to hack Java.:-)
My quite new SonyErricson T610 lasts about 5 days (medium use). My old Philips Xenium did 2 weeks and I buyed it 2nd hand...
These are my experiences with the trend of battery life...
It is more like 5% speed loss, if you call this "loss".
L4 microkernels show that context switches can be made quite fast. L4Linux is almost on par with "normal" Linux. One of the problems is that current CPUs are not designed for ultra-fast context-switches, some do even require a full cache flush. We will see what the future brings...
You might want to check out DROPS, the Dresden Real-Time Operating System at http://os.inf.tu-dresden.de/ . With some coding you can use Linux device drivers, but they are separated into their own L4/Fiasco task (L4 is a second generation microkernel family). Thus a device driver may crash, but only parts of the system using it are affected. And as every task may have its own address space it is quite resilient against various security problems.
:)
Another very promising project is L4/Hurd (http://www.gnu.org/software/hurd/hurd-l4.html), which will eventually produce a modern UNIX-like operating system for which it will be a joy to write drivers, filesystems, you name it.
You will not experience the power of macros in either Haskell (has none?) or Scheme (most dialects have "hygienic macros" which are quite a pain in the ass). And btw, Common Lisp is not as old as you think. The standard dates from 1994 and it has its roots in the early 1980s.
I really do not know what kind of pitfalls Common Lisp shares with C or Fortran. I never had any Common Lisp application core dumping...
That's true. There is nothing particular painful or mysterious about this. Just download the sources from Sun and type portinstall java/jdk14.
Yes, you can build an interpreter in Ruby to achieve this. But you will not be using Ruby then anymore, you will use your interpreted language. With Common Lisp macros you can build COMPILERs for any language you want, as your macro turns the "description" you pass to it into CL code which is transformed to machine code by the CL compiler. Ruby CANNOT do this, even if someone writes a native compiler for it.
What is 'condition' in your code snippet? In my original macro this is also a completely arbitrary piece of CL code. And in your example 'body' is just a string. You can hardly manipulate what's in there. It's straighforward to extend CL to support, say, pattern matching like haskel does:
(defh foo
0 ?y -> ?y
?x ?y -> (foo (1- x) y))
I have written this macro that forms the above in the appropriate code to identify each situation.
You can also can use predicates to test whether a variable in a pattern meets some criteria:
(defh bar
(?_ ?(x evenp)) -> (/ x 2)
(?_ ?x) -> (1+ x))
So if you call bar with the list (1 4) you would get 2 back. If you call it with say (1 3) you get 4 back. Just a stupid example, but proves a point...
Not really. if you wrap you code snippet into a function, how do you call it from outside? Will it look and behave like Ruby's builtin looping constructs?
But it is awkward to manipulate Ruby syntax. Any language that has a one-to-one mapping from text to a simple data format, that is easy to manipulate can be considered to be a Lisp anyway...
,condition ,@body
(defmacro while (condition &body body)
"Executes body while condition holds"
`(tagbody
loop-begin
(when
(go loop-begin))))
How long would the corresponding Ruby example be?
But it will not be the same, as you are stuck with Ruby's syntax. CL's syntax is extendable as you like.
I recommend to you "On Lisp". If you read it and still do not see the power of macros, then I do not know... ;)
http://www.paulgraham.com/onlisp.html
Ruby seems to be very Common Lisp-oriented but without parentheses and thus macros. This removes very much from it. Can you implement a new Object System with multiple inheritance in Ruby?
Why do closures in Lisp need macros?
(lambda (a b c) (+ a (foo b c)))
is not actually very long to create a simple closure. And does Ruby even have macros as powerful as Common Lisp's?
I surf this site with Firefox on FreeBSD. I have no problem with plugins (Java, mplayer, flash (via linuxpluginwrapper). I did nothing special. FreeBSD has improved a great deal in this area the last year.
Take a look at Common Lisp (see: http://www.common-lisp.net/ or http://www.cliki.net/ or http://sbcl.sf.net/ ).
It is a language supporting every paradigm you'll ever need. And if not you can (portably!) code it. The hacker's language of choice.
Opera is quite popular as browser. I have some friends who use it quite exclusively. I myself have used it on FreeBSD as well. The startup time of Opera is a big plus compared to Mozilla or Firefox.
But HP also keeps selling High-End Alpha-based servers. But their web page really tries to persuade you to use Itanium, though.
You did not point out why C++ is "plain better" than C, at all. I.e. much of multiple platform support is low-level stuff, that will probably not fit into your nice templates.
Btw, you would have to freeze the C++ ABI or use one version of GCC forever. I cannot count how often the GCC folks broke binary compatibility.
If you want US military forces to be stationed in Iraq for the next 50 years, like here in Germany, then by all means... Comparing some struggle for oil to World War II is ridiculous, by the way.
I wonder if the war in Iraq was more benefitial to the USA or the Iraq itself...
No, it is not. But it makes little difference to me if a country is dominated by a dictator or US military forces and a fake government.
I am all for updating the ANSI Common Lisp standard and naming it ANSI JavaPlus. Finally a Lisp going popular. :)
What about an US president that based his actions on reality, not on some quite strange (from a German point of view) religious and/or imperialistic imaginations of how the world is supposed to be.
80747 - would be nice to have processor as reliable as the other thing this name implies. *g* But to be serious: Giving processors numbers instead of names, let's the consumer focus on specs and not on pointless debates about the name per se.
I am really pleased to see a major software development community leaving the C-like realm of programming languages. While C is still nice as assembler substitute, I never could convince me that it is useful for general application development. Same goes more or less for C++/Java, though I do not have much exposure to them myself and will try to keep it that way.
There are really neat languages to successfully code nice programs and all the C-like ones are clearly not belonging into that group. Being a Common Lisp zealot I strongly prefer its multi-paradigm style to anything else for most tasks, but I also see the benefit in using OCaml, Eiffel and other languages with way more abstraction than any C-like language so far manages to convey to the ordinary programmer. Having proper closures, and first-class functions, and a not-limiting OO implementation increases productivity by a order of magnitude.
Ok, but one must face reality: As software developer eventually you will have to code something in say Java, but Lispers have now a real advantage: LINJ :-)
For now I can use most of the expressivness of Common Lisp and still can pretend to hack Java.
My quite new SonyErricson T610 lasts about 5 days (medium use). My old Philips Xenium did 2 weeks and I buyed it 2nd hand...
These are my experiences with the trend of battery life...