I must concur with the opinion about erlang (or more generally, functional languages) and parallel programming.
IMO the most important feature which functional languages have and proceedural don't have which make them appropriate for parallel programming is single assignment. That is once 'X' is assigned a value it can never change. This means that sharing 'X' with other threads is a no-brainer, because nothing can go wrong.
You are forced by the languages to specially type (in Haskell) or access (dictionaries in Erlang) those variables which are going to hold shared state. Shared state is not the default like it is in C, java, etc... .
This means many fewer mistakes, especially with multiple developers reusing code, because you can easily see in the source code which variables are shared and need special access.
The down side of single-assignment is memory usage. If you are indeed looping (recursing) and doing it in such a way that the compiler cannot optimize away the old X, you rapidly use up heap space storing every new X. This uses O(N) space, rather than O(1) like the change-X-in-place C code would, and that puts pressure on the caches and the memory bus. Hopefully the memory bandwidth will continue to scale with the # of cores.
The other features needed for parallel programming are a green-threads (userspace-threads) and light weight message passing. But you achieve those just as well in C with a library or a bit of code.
Interesting that you bring up passwordsafe. The function that computes the test hash (used to check that the passphrase is correct) does not compute what it appears to compute. However I believe that it was an unintentional error and not deliberate obfuscation. I think the error wasn't caught becahse one random looking number is as good as another if all you're doing is checking for ==.
It wasn't until I independantly re-implemented the functionality that I discovered it. Because then I had to do what the code really did in order to be compatable.
Heh, that's the macrovision way of protecting yourself. Macrovision patented all the obvious ways of breaking their "security" in order to have a legal weapon against potential anti-macrovision devices.
Each chassis contains two main (backplane) boards, two power supplies and up to four switch modules (2 ethernet and 2 optional fibrechannel). Each blade has two 1G ethernet connections and two power connections, one to each backplane board. And, optionally, two more fibrechannel.
You are correct. The DLink switching module is a basic L2-L3. The Nortel module is a full layer 4-7 load balancer. Nortel's module uses the same technology as the old Alteon webswitches. (Nortel bought Alteon back in '00)
You need one of the two modules, and/or a firewire module for the i386 blades to have access to the outside world.
All it on it is compact but pricy, and very very noisy.
I must concur with the opinion about erlang (or more generally, functional languages) and parallel programming.
IMO the most important feature which functional languages have and proceedural don't have which make them appropriate for parallel programming is single assignment. That is once 'X' is assigned a value it can never change. This means that sharing 'X' with other threads is a no-brainer, because nothing can go wrong.
You are forced by the languages to specially type (in Haskell) or access (dictionaries in Erlang) those variables which are going to hold shared state. Shared state is not the default like it is in C, java, etc... .
This means many fewer mistakes, especially with multiple developers reusing code, because you can easily see in the source code which variables are shared and need special access.
The down side of single-assignment is memory usage. If you are indeed looping (recursing) and doing it in such a way that the compiler cannot optimize away the old X, you rapidly use up heap space storing every new X. This uses O(N) space, rather than O(1) like the change-X-in-place C code would, and that puts pressure on the caches and the memory bus. Hopefully the memory bandwidth will continue to scale with the # of cores.
The other features needed for parallel programming are a green-threads (userspace-threads) and light weight message passing. But you achieve those just as well in C with a library or a bit of code.
Interesting that you bring up passwordsafe. The function that computes the test hash (used to check that the passphrase is correct) does not compute what it appears to compute. However I believe that it was an unintentional error and not deliberate obfuscation. I think the error wasn't caught becahse one random looking number is as good as another if all you're doing is checking for ==.
It wasn't until I independantly re-implemented the functionality that I discovered it. Because then I had to do what the code really did in order to be compatable.
Heh, that's the macrovision way of protecting yourself. Macrovision patented all the obvious ways of breaking their "security" in order to have a legal weapon against potential anti-macrovision devices.
-nsd
Dual main boards.
Each chassis contains two main (backplane) boards, two power supplies and up to four switch modules (2 ethernet and 2 optional fibrechannel). Each blade has two 1G ethernet connections and two power connections, one to each backplane board. And, optionally, two more fibrechannel.
You are correct. The DLink switching module is a basic L2-L3. The Nortel module is a full layer 4-7 load balancer. Nortel's module uses the same technology as the old Alteon webswitches. (Nortel bought Alteon back in '00)
You need one of the two modules, and/or a firewire module for the i386 blades to have access to the outside world.
All it on it is compact but pricy, and very very noisy.