I seem to remember that in the early days there was a version of the gcc compiler that has secret code built into is
It wasn't gcc, it was the Unix C compiler (pcc I believe). It hit not only the C compiler but the login program. For more info on this, see Ken Thompson (one of the original authors of Unix)'s paper "Reflections on Trusting Trust"
He later fessed up to actually implementing this, though I can't turn up that reference off the top of my head.
Quite agreed about weak lambda forms; but the garbage collection scheme is rather an embarassment. Reference counting doesn't work, for cyclic data structures, and these can arise in Python programs.
Python 2.0 supports full-blown garbage collection. Cyclic data structures aren't a problem.
COE=Context of execution. In Linux and Plan 9, threads and processes are just two of many ways of setting up a COE; processes share nothing, while threads share everything but the stack (more or less). You could also have two COEs that only share file descriptors, or just memory, or many different combinations.
Allright then. You are with a company that has a web page that gets hit two million times a day. Each hit requires a rather small program to be run.
What will you do, write the program in a relatively inefficient language, or one that will let you keep your job?:)
For a small site like that, almost anything will do. The servlets I've worked with can handle maybe 150 reqs/sec as opposed to a C implementation of the same problem, which handled about 3000 reqs/sec on the same hardware. 150/sec should be able to handle a typical site in the 5 million hits/day range even at peak hours.
"Yeah, can we spend another 200k to double our server capacity so that I can use the programming language I'm most comfortable with, and so that I don't need to get my hands dirty?"
On the other hand, if you can spend 100k on hardware (which would get you 4 or 5 racked dual servers at a co-lo around here pretty handily) and save 3 programmer years by using a high-level language, it's probably worth it. I'm not a big Java fan in general, but I try not to be stuck with just a hammer.
Yes, absolutely it does. 4.7 is not multithreaded.
"Threads are for people who can't write state machines." --Alan Cox
Seriously, although I really like Mozilla (I use it almost exclusively these days) I tend to agree with Jamie Zawinski's analysis of threads in Netscape: if you write a single-COE state machine, you can make it look just like a multithreaded program but you'll save resources and programmer time (threads are hard to get right), and you'll really save on debugging and stability (bug hunting in multithreaded programs is _tough_). For some things, threads are the right answer; Mozilla doesn't really need them, though, and I think moving to threads is one of the few areas where Mozilla's design is worse than that of the old Netscape.
FYI:
On my machine, the Nov 30 nightly is about 24M resident, 11MB of which is shared. So if I have 4 or 5 windows open, I'm using about 13MB for each one (on top of the 11MB shared, some of which is shared with non-Mozilla progs as well).
Netscape 4.7 is about 22MB, 9 shared. That's comparable memory usage if I only have one window, but memory use only grows by a meg or two when I create new windows.
Like I said, though, Mozilla has enough compelling features (IFRAMEs, the wheel works properly, faster at rendering, better standards support, open-source) that I use it anyway.
I suspect it has something to do with silly linuxthreads which, of course, Linus will never change because he wrote them
Xavier Leroy wrote Linuxthreads, the pthread wrapper around clone(). Linus wrote clone(), based heavily on Plan 9's rfork() (and pretty similar to Irix's sproc()).
I don't know any programmers who have looked at clone()/rfork() for more than 5 seconds and not immediately realized that it's vastly superior to other threading implementations.
Sumner
open source competitors MySQL 3.22 and Interbase 6.0, demonstrated some speed with a low number of users but a distinct lack of scalability...Neither Interbase nor MySQL could be tested for TPC-C benchmarks...Interbase 6.0, recently released as open source, does not have a stable ODBC driver yet; while Xperts was able to adapt the version 5 ODBC driver for the AS3AP tests, the TPC-C test would not run. 'With MySQL it's an inherent design issue. Interbase 6 should run the TPC-C test, and perhaps would with tweaking of the test's code.
Will there ever be a mta other than sendmail? I'd like qmail included. qmail isn't open-source, so I'd doubt that it will show up in redhat core. postfix or exim probably have a better chance of making it, but I don't work with Red Hat. Sumner
What keeps a script kiddie from sending spoofed itrace packets implicating every machine on the planet from a comprimised machine?
If you read the article, it addresses this concern:
"ISPs face the cost of upgrading their routers to support itrace, and also the cost of developing the public-key infrastructure required for traceback message authentication. Without fail-proof authentication, hackers can create bogus traceback messages to accompany their denial-of-service attacks."
If NT has an advantage, it's in the IO completion ports
Linux 2.2 and later have IO completion ports; they're called "queued realtime signals" on Linux. From the fcntl(2) man page:
F_SETSIG
Sets the signal sent when input or output becomes possible. A value of zero means to send the default SIGIO signal. Any other value (including SIGIO) is the signal to send instead, and in this case additional info is available to the signal handler if installed with SA_SIGINFO.
By using F_SETSIG with a non-zero value, and setting SA_SIGINFO for the signal handler (see sigaction(2)), extra information about I/O events is passed to the handler in a siginfo_t structure. If the si_code field indicates the source is SI_SIGIO, the si_fd field gives the file descriptor associated with the event. Otherwise, there is no indication which file descriptors are pending, and you should use the usual mechanisms (select(2), poll(2), read(2) with O_NONBLOCK set etc.) to determine which file descriptors are available for I/O.
By selecting a POSIX.1b real time signal (value >= SIGRTMIN), multiple I/O events may be queued using the same signal numbers. (Queuing is dependent on available memory). Extra information is available if SA_SIGINFO is set for the signal handler, as above.
Using these mechanisms, a program can implement fully asynchronous I/O without using select(2) or poll(2) most of the time.
This is called sendfile() (or HRESULT FAR* _std zpqvBrgvzplz0SendFile32Ex4 on windows). Most OS's have it now, and it's readily admitted on the kernel-dev list that Linux's implementation is BROKEN
It's called TransmitFile() on Windows
The kernel-dev list says no such thing. Other systems send a header with the call, which both avoids an extra syscall and means you don't get nagled. On Linux, the extra syscall isn't heavy and TCP_CORK avoids getting Nagled. Some idiots who posted to linux-kernel said the linux version was broken, but Alan Cox, Linus, and Dave Miller all pointed them at cork.
The generic solution is splice, which Stephen Tweedie is rumored to be implementing for 2.3. That will rock.
This is too good to be true.
on
Java for EGCS
·
· Score: 1
Unfortunately, there is no AWT support for GJC. Without AWT support, there surely won't be any GTK AWT plaf (pluggable look and feel).
No AWT L&F, but gtk bindings are certainly possible. Personally, I think the Java language is very cool. Parts of the Java class library are also cool, but AWT/Swing/JFC are not worthwile (nor is any other GUI toolkit that isn't easily accessable from multiple programming languages efficiently).
Of course, your statement is perfectly correct from the point of view of writing client-side code. gcj Compiled Java isn't very useful for client-side code in the first place, since it is platform dependent. gcj does hold out the hope of a better application development language than C that's fairly portable and fairly efficient for many tasks, though. There are plans to support a JVM as well in the future, which would also boost performance for many client-side applets (esp. by compiling the Java class libraries, which requires that those get finished...) But IMO the cross-platform, JVM hoopla has overshadowed a language that is a perfectly good alternative to C in some situations. Better than C++ for sure. Still not appropriate for all tasks, of course, but nothing is.
Now dust off your Bill of Rights. Find the first amendment. (It's toward the beginning.) Notice the first five words? CONGRESS SHALL MAKE NO LAW. Now that's as plain as plain can be, and because the Founding Fathers didn't reserve regulation of the press to the Feds, anyone else should be free to to do so. The anti-Federalists were finally able to pervert the 14th to their cause, but that's a story for another day.
Of course, it's not that simple. The actual impact of the first ammendment extends beyond restricting Congress; various court cases dating back to the 19th century have held that the Bill of Rights applies not only to the U.S. congress but also to various state and local governments and to other bodies that receive funding from the government (e.g. universities, schools, and libraries). And, of course, if you are interested in keeping your common carrier status (as most telephone companies are, for instance) then you can't excercise any editorial control other than removing illegal material that you know exists on your system.
Large ISPs ought to be granted common carrier status; that would prevent a lot of these legal squabbles. Small ones might have problems putting together the resources needed to be a true common carrier (e.g. carrying a full Usenet feed, ugh).
Sumner
It wasn't gcc, it was the Unix C compiler (pcc I believe). It hit not only the C compiler but the login program. For more info on this, see Ken Thompson (one of the original authors of Unix)'s paper "Reflections on Trusting Trust"
He later fessed up to actually implementing this, though I can't turn up that reference off the top of my head.
Sumner
Python 2.0 supports full-blown garbage collection. Cyclic data structures aren't a problem.
Sumner
there's C-Python, there's Jython (in Java), there is Stackless Python and there will be a Python.NET
Also, there's an Objective CAML implementation and there's pippy (for palm pilot).
Sumner
Hans Boehm's garbage collecting malloc() can be built in a leak-detection mode. It works really well once you figure it out.
http://reality.sgi.com/boehm_mti/gc.html
ElectricFence is good at finding over/underflow problems.
COE=Context of execution. In Linux and Plan 9, threads and processes are just two of many ways of setting up a COE; processes share nothing, while threads share everything but the stack (more or less). You could also have two COEs that only share file descriptors, or just memory, or many different combinations.
y /P lan9/9.html
See the parallell programming section at:
http://www.informatik.hu-berlin.de/~mint/Librar
or grep the web for clone/rfork/sproc.
Sumner
Allright then. You are with a company that has a web page that gets hit two million times a day. Each hit requires a rather small program to be run.
What will you do, write the program in a relatively inefficient language, or one that will let you keep your job? :)
For a small site like that, almost anything will do. The servlets I've worked with can handle maybe 150 reqs/sec as opposed to a C implementation of the same problem, which handled about 3000 reqs/sec on the same hardware. 150/sec should be able to handle a typical site in the 5 million hits/day range even at peak hours.
"Yeah, can we spend another 200k to double our server capacity so that I can use the programming language I'm most comfortable with, and so that I don't need to get my hands dirty?"
On the other hand, if you can spend 100k on hardware (which would get you 4 or 5 racked dual servers at a co-lo around here pretty handily) and save 3 programmer years by using a high-level language, it's probably worth it. I'm not a big Java fan in general, but I try not to be stuck with just a hammer.
Sumner
Yes, absolutely it does. 4.7 is not multithreaded. "Threads are for people who can't write state machines." --Alan Cox Seriously, although I really like Mozilla (I use it almost exclusively these days) I tend to agree with Jamie Zawinski's analysis of threads in Netscape: if you write a single-COE state machine, you can make it look just like a multithreaded program but you'll save resources and programmer time (threads are hard to get right), and you'll really save on debugging and stability (bug hunting in multithreaded programs is _tough_). For some things, threads are the right answer; Mozilla doesn't really need them, though, and I think moving to threads is one of the few areas where Mozilla's design is worse than that of the old Netscape. FYI: On my machine, the Nov 30 nightly is about 24M resident, 11MB of which is shared. So if I have 4 or 5 windows open, I'm using about 13MB for each one (on top of the 11MB shared, some of which is shared with non-Mozilla progs as well). Netscape 4.7 is about 22MB, 9 shared. That's comparable memory usage if I only have one window, but memory use only grows by a meg or two when I create new windows. Like I said, though, Mozilla has enough compelling features (IFRAMEs, the wheel works properly, faster at rendering, better standards support, open-source) that I use it anyway. I suspect it has something to do with silly linuxthreads which, of course, Linus will never change because he wrote them Xavier Leroy wrote Linuxthreads, the pthread wrapper around clone(). Linus wrote clone(), based heavily on Plan 9's rfork() (and pretty similar to Irix's sproc()). I don't know any programmers who have looked at clone()/rfork() for more than 5 seconds and not immediately realized that it's vastly superior to other threading implementations. Sumner
Interbase was one of the databases they tested:
open source competitors MySQL 3.22 and Interbase 6.0, demonstrated some speed with a low number of users but a distinct lack of scalability...Neither Interbase nor MySQL could be tested for TPC-C benchmarks...Interbase 6.0, recently released as open source, does not have a stable ODBC driver yet; while Xperts was able to adapt the version 5 ODBC driver for the AS3AP tests, the TPC-C test would not run. 'With MySQL it's an inherent design issue. Interbase 6 should run the TPC-C test, and perhaps would with tweaking of the test's code.
Will there ever be a mta other than sendmail? I'd like qmail included. qmail isn't open-source, so I'd doubt that it will show up in redhat core. postfix or exim probably have a better chance of making it, but I don't work with Red Hat. Sumner
What keeps a script kiddie from sending spoofed itrace packets implicating every machine on the planet from a comprimised machine?
If you read the article, it addresses this concern:
"ISPs face the cost of upgrading their routers to support itrace, and also the cost of developing the public-key infrastructure required for traceback message authentication. Without fail-proof authentication, hackers can create bogus traceback messages to accompany their denial-of-service attacks."
If NT has an advantage, it's in the IO completion ports
Linux 2.2 and later have IO completion ports; they're called "queued realtime signals" on Linux. From the fcntl(2) man page:
F_SETSIG
Sets the signal sent when input or output becomes possible. A value of zero means to send the default SIGIO signal. Any other value (including SIGIO) is the signal to send instead, and in this case additional info is available to the signal handler if installed with SA_SIGINFO.
By using F_SETSIG with a non-zero value, and setting SA_SIGINFO for the signal handler (see sigaction(2)), extra information about I/O events is passed to the handler in a siginfo_t structure. If the si_code field indicates the source is SI_SIGIO, the si_fd field gives the file descriptor associated with the event. Otherwise, there is no indication which file descriptors are pending, and you should use the usual mechanisms (select(2), poll(2), read(2) with O_NONBLOCK set etc.) to determine which file descriptors are available for I/O.
By selecting a POSIX.1b real time signal (value >= SIGRTMIN), multiple I/O events may be queued using the same signal numbers. (Queuing is dependent on available memory). Extra information is available if SA_SIGINFO is set for the signal handler, as above.
Using these mechanisms, a program can implement fully asynchronous I/O without using select(2) or poll(2) most of the time.
No AWT L&F, but gtk bindings are certainly possible. Personally, I think the Java language is very cool. Parts of the Java class library are also cool, but AWT/Swing/JFC are not worthwile (nor is any other GUI toolkit that isn't easily accessable from multiple programming languages efficiently).
Of course, your statement is perfectly correct from the point of view of writing client-side code. gcj Compiled Java isn't very useful for client-side code in the first place, since it is platform dependent. gcj does hold out the hope of a better application development language than C that's fairly portable and fairly efficient for many tasks, though. There are plans to support a JVM as well in the future, which would also boost performance for many client-side applets (esp. by compiling the Java class libraries, which requires that those get finished...) But IMO the cross-platform, JVM hoopla has overshadowed a language that is a perfectly good alternative to C in some situations. Better than C++ for sure. Still not appropriate for all tasks, of course, but nothing is.
Sumner
Of course, it's not that simple. The actual impact of the first ammendment extends beyond restricting Congress; various court cases dating back to the 19th century have held that the Bill of Rights applies not only to the U.S. congress but also to various state and local governments and to other bodies that receive funding from the government (e.g. universities, schools, and libraries). And, of course, if you are interested in keeping your common carrier status (as most telephone companies are, for instance) then you can't excercise any editorial control other than removing illegal material that you know exists on your system.
Large ISPs ought to be granted common carrier status; that would prevent a lot of these legal squabbles. Small ones might have problems putting together the resources needed to be a true common carrier (e.g. carrying a full Usenet feed, ugh).
--Sumner