Let’s stop copying C
eev.ee
eev.ee
Included: ACS, awk, COBOL, Erlang, Forth, Fortran, most older Lisps, Perl 5 (despite that required files must return true), PHP, Ruby, Unix shells.
Common Lisp's LOAD binds the value of {star}package{star} to the value it held before LOAD was invoked. This means that the LOAD takes place in the same package, but if the file being loaded changes to a different package, that effect is lost when the LOAD completes.
In other words, the designers thought about this issue (how loading interacts with the package system) and made a clear decision: same package is used over the load, but the loaded file is prevented from altering the caller's current package: they decided that the parent being able to establish a package and read table for the loaded child is useful flexibility, but the reverse situation being error-prone.
That decision is a reasonable one. I thought about the same issue in TXR Lisp and copied the decision made by ANSI CL, recognizing its wisdom.
Note that when LOAD loads a compiled file, then the symbols in that file are not affected by the current package. They are not being read from source code any more. (That is no longer textual inclusion).
Lisp supports textual inclusion in the sense that you can load a file that is raw source code, without being forced to compile it first. That is useful and good; why not support such a thing? Being able to set up a package or read table and then do a bunch of loads which then take place in the context of that package is also useful and good.
Lisp doesn't force you into textual inclusion. Even for macros, you don't have to use textual inclusion. A module containing macros can be compiled with COMPILE-FILE. Then that file can be loaded as a compiled file, by the compiler, when other files are being compiled (files which need those macros).
Please, don't compare Lisp with C #include!
I do like languages like Lisp that let you use dashes in identifiers to avoid the need to shift, but at the same time, I also like identifiers_like_this just fine (much more so than identifiersLikeThis).
This is the fault somewhere between the keyboard drivers in the OS's USB stack, or decoders of events in the UI.
The problem is that I typed the H before releasing the shift key. However, the shift key is in fact released before H is released. The timing diagram is something like this:
___
T __| |_______
____
H _____| |____
_____
Shift | |_______
The release of the Shift is a little late, so H gets it. The strict timing requirement to get this right completely non-conductive to fast typing.For instance, if I repeatedly drum my three fingers in a natural way on the Shift, Z,X (using my ring finger, middle, and index), and do it fast, here is what I get:
ZXZXZXZXZXZXZXZXZXZXZXZXZXZXZX
Key events should be tied to the release not to the attack, and the decision whether or not Shift applies should be made intelligently somehow based on the percent overlap.At the very least there should be some small (configurable?) holding period after the key down event before it is converted to an input character. Only after the holding period should it be decided whether the key is shifted, based on the current shift state at that time.
That said, using a keyboard that had any lag between hitting a key and having it produce an event would rapidly break my brain and fingers; I expect a key to show up near-instantly after hitting it, nothing to do with when I release it.