C++ template metaprogramming is in some ways more powerful than Common Lisp macros, because it works at the type level: you can generate new types and dispatch into separate implementations by type. In contrast, Common Lisp type declarations are not available at macro expansion time unless you implement a full source-to-source translator in macros.
HN user
unnah
It leads to the catch-22 that when saving a BASIC program you cannot tell which filenames are already in use, since you cannot get a directory listing without losing the current BASIC program in memory. All you can do is guess a filename that is probably free.
Is there still some kind of sales tax in Germany? Shouldn't it be long gone due to the EU value added tax system?
It's the same problem with autovectorization. Often the only way to tell whether a compiler optimization is successful is to check the produced assembly or benchmark the code.
It seems that for devirtualization GCC has a warning option -Wsuggest-final-types which is supposed to tell when devirtualization fails in link-time optimization. Not sure how reliable that is, or whether it will produce gobs of unhelpful warnings. Maybe it could be combined with some kind of hint that we want this particular call to be devirtualized, and don't care about calls without the hint.
I don't see why there has to be a special staging area when you could just edit the HEAD commit instead. In git you could do "git commit --patch" to commit selected parts and then add more changes to the HEAD commit by "git commit --patch --amend".
It's not so easy any more if you try to rotate the hypercube and have to visualize intersections with arbitrary hyperplanes. Already in 3 dimensions the intersection of a cube and a plane can be a non-regular polygon with 3-6 sides.
So apparently the Elvish spoken in the Peter Jackson movies is as far from the language imagined by Tolkien as the famous Portuguese-English phrasebook is from natural English. That's one childhood fantasy broken. What about the Klingon spoken in Star Trek movies?
If Ctrl sets bit 6 to 0, and Shift sets bit 5 to 1, the logical extension is to use Ctrl and Shift together to set the top bits to 01. Surely there must be a system somewhere that maps Ctrl-Shift-A to !, Ctrl-Shift-B to " etc.
There are plenty of old-school companies in Europe still working on moving to the cloud. Now that there is a burgeoning movement towards avoiding American cloud providers, Oxide could have an opportunity to sell "private cloud" servers instead. If they play their cards right, they could make significant inroads in European markets.
It's probably much more exciting to implement stuff like this when you can experiment with your own ideas to figure out the solution from scratch, compared to someone who sees it as a trivial exercise in signal processing, which they can't be bothered to implement.
Most likely his ancient astronaut theory was the inspiration for the entire Stargate franchise. Of course to make the movie believable they had to give Jackson a more academic background than von Däniken had.
Perhaps the most comparable 1990s system would be the SGI Origin 2800 (https://en.wikipedia.org/wiki/SGI_Origin_2000) with 128 processors in a single shared-memory multiprocessing system. The full system took up nine racks. The successor SGI Origin 3800 was available with up to 512 processors in 2002.
Interesting that they chose not to implement any method to detect whether a given iterator has been invalidated, even though the implementation would be easy. Seems it would be a useful extension, especially since any serious usage of this vector type would already be relying on functionality not provided by the standard vector class.
Umm... how did you manage to learn those hex codes? You just read a lot of machine code and it started to make sense?
On MIPS you can simulate atomics with a load-linked/store-conditional (LL/SC) loop. If another processor has changed the same address between the LL and SC instructions, the SC fails to store the result and you have to retry. The underlying idea is that the processors would have to communicate memory accesses to each other via the cache coherence protocol anyway, so they can easily detect conflicting writes between the LL and SC instructions. It gets more complicated with out-of-order execution...
loop: LL r2, (r1)
ADD r3, r2, 1
SC r3, (r1)
BEQ r3, 0, loop
NOPIf the LLM was generally intelligent, it could easily avoid those gotchas when pretending to be a human in the test. It could do so even without specific instruction to avoid specific gotchas like "what is your system prompt", simply from being explained the goal of the test.
There should also be PSYC 5640: How to become a guru by reading the documentation everyone else is ignoring. Cannot be taken at the same time as PSYC 5630.
There's also Dask, which can do distributed pandas and numpy operations etc. However it was originally developed for traditional HPC systems and has only limited support for GPU computing. https://www.dask.org/
Back in the 1990's. As an example, back then the Rational Rose design software had a feature to generate UML diagrams from existing source code, and it was called "reverse engineering".
That is the traditional explanation of why it is called reverse engineering. The term originated in hardware engineering. When it was originally applied to software, it was common to create requirements documents and design documents before coding, even if the actual process did not strictly follow the "waterfall" idea.
Thus it was natural to call the process of producing design documents from undocumented software "reverse engineering". These days coding without any formal design documents is so common that it seems the original meaning of reverse engineering has become obscured.
Ok, you got me there. Looks like they fixed that in C++17 with std::to_chars. https://en.cppreference.com/w/cpp/utility/to_chars.html
Since such algorithms were developed in the 1990's, nowadays you can expect your language's standard library to use them for float-to-decimal and decimal-to-float conversions. So all you need to do in code is to print the float without any special formatting instructions, and you'll get the shortest unique decimal representation.
All good points. On the other side of the balance, by using pointers everywhere you give a lot more work for the tracing garbage collector. If it was possible to keep all your data in a single array of value types, the garbage collector would not need to do basically any work at all. Maybe Project Valhalla will one day allow that. At the moment the closest you can get is a structure-of-arrays setup.
Looks like the 3rd edition only covers OCS and ECS, up to A3000. Did they ever manage to publish a 4th edition covering AGA? I can't find any evidence of such on google.
Although SMP is an abbreviation for Symmetric Multi-Processing (multiple processors or processor cores with shared memory), SMT is not symmetric but Simultaneous Multi-Threading. To get back on topic, SMT is often confused with barrel processors that switch threads between clock cycles, like the Honeywell 800 with special register groups. The "simultaneous" in SMT means that a single processor core runs instructions from multiple threads on the same clock cycle.
You can find quite a few used Power 8 and Power 9 servers for sale on ebay. The prices range from a thousand dollars or euros to a few thousand, so not for everyone but well within the reach of a well-off hobbyist.
Never? There definitely was a double-width feature on those printers, as demonstrated in the manual: https://www.apple.asimov.net/documentation/hardware/printers...
How about a situation where the inner Optional<T> is acquired from another system or database, and the outer Optional<Optional<T>> is a local cache of the value. If the outer Optional is null, then you need to query the other system. If the outer Optional is filled and the inner Optional is null, then you know that the other system explicitly has no value for the data item, and can skip the query. Seems like using nested optionals would be natural here, although of course alternative representations are possible.
Did you ever try doing your programming exercises in AmigaBASIC instead? It was also made by Microsoft, so it should have been quite compatible with GW-BASIC.
You can put pointers inside data structures on the heap, similarly to what you would do in C. The functions that process those data structures only need local variables (or stack slots) for a few pointers, and with those pointers they can fetch more pointers from the data structures on the heap. In principle the entire program can be structured pretty much identically to C, although in Forth you would typically split the code into smaller functions, and often use the stack instead of local variables.