Artificial Intelligence, Software, and Hardware
- CLIPS An
expert system shell. Its development is at least partially funded
by U.S. NASA. The primary metaphor is forward-propagation.
ML A functional programming language, inspired by
- Oz A multi-paradigm
- Python I'm not sure what
paradigm this language is -- strengths are text processing and
Internet. It does function currying, like ML.
Web programming online documentation:
First, some specific ones:
REAL -- "history"
REAL -- "current"
Netsim ethernet simulator
Java 1.1x implementation of a NEO simulator
And some general indexes:
Notes about network simulators
Network simulators and related links
Psuedo-random number generators
Some algorithm archives:
Mersenne Twister, (BSD license)
Diehard uniform distribution test.
UNURAN library (GPL license)
Agner Fog's index of pseudo-random number generators
Richard Simard's index of Pierre L'Ecuyer's empirical testing software, in French and
And some general indexes
RNG index at PLab
RNG index at NIST
Index of research papers by Luc Devroye
A bug in the Microsoft Visual C++ 4.0 compiler??
I was having some problems with Franci:
she crashed in the malloc routine. [I.e., it entered and did not
reemerge]. This is often caused by the abuse of free and/or realloc
on pointers that were not directly created by malloc. However, the
Microsoft C memory management library does not provide real-time
detection of these problems.
My response was to write a replacement library that implemented
the following functions
- Standard: malloc, calloc, free, realloc.
- Microsoft: _expand, _msize
- Additional functionality:
- Can determine whether free, realloc, _expand have been handed
pointers safe for them to manipulate at the time of the function
- Limited real-time checking for memory corruption.
The replacement library immediately diagnosed my problem as an
inappropriate realloc. However, some features of the startup code
before the program started had to be dealt with.
- Start: September 16, 1999
- Alpha version 0.01 ready: September 21, 1999. Vast testing and
cleanup required before it is fit for general use.
- For reference, the project is a Win__ program, that does not
use the Microsoft Foundation Classes and statically links in its
- It turned out that the startup code needs malloc, free, and
realloc before it enables the OS function VirtualAlloc. [Ouch.]
Working around this was fairly routine.
- In fact, the startup code made several calls to realloc with a
size parameter of 16 -- on a memory block which already had a size
of 16. A formally correct implementation of realloc caused the
memory-corruption trapping to go off -- killing the program before
it ever started executing. The pattern of errors during
experimentation suggested that the intended realloc size was
greater than 24: if allowed to, it would overwrite the size
information (and presumably the rest of) other memory blocks than
the one it was accessing.
- I worked around this by assuming that the 16 was some kind of
factor or offset intended to affect the size of the block. Treating
the 16 as "multiply by 16" worked.
October 1, 1999: Figured out (this is not mentioned explicitly
where it should be in the MS C++ 4.0 documentation) that when using
the Win__ OS function VirtualAlloc, the memory-access flags are
also required for reserving virtual memory, as well as actually
committing it. After some code fixing, the memory manager is now at
alpha version 0.02.
March 23, 2000: Somewhere along the line, I altered the memory
manager enough to get it to version 0.03. I started porting Franci
to Borland C++; this port is apparently completed. Borland's V5.5
startup libraries do not require the bypass.
Hardware standards for Intel-based systems:
barnesandnoble.comsm is a service mark of barnesandnoble.com llc.
Opinions, comments, criticism, etc.? Let me know about it.
Return to the main page.