GN tool that is used in Chromium to generate ninja files has much more restrictive language than CMake or make. And even its more complex features are mostly workarounds or escape hatches to deal with legacy setups.
HN user
fpoling
The article over-downplays the need for sentinel values. Surely Rust has Option that also spreads into C++ these days as std::optional. But for plain C using -1 or negative values to denote sentinels or error code is rather nice idiom.
The argument will be more valid if array indexes will be 1-based like in Fortran/Matlab/Julia as then 0 becomes extremely nice sentinel values. But C is C and needs -1.
Yet Elm due to its simplicity does not need a lot of examples. Language itself is small and blessed way to architecture things consist of few patterns. Then things are composable. This is ideal for LLMs.
The price for that is verbosity. What in other languages are hidden behind async and complicated libraries in Elm has to be done explicitly resulting in boilerplate. But that is never a problem for LLMs.
Then Elm compiler has one of the best error messages. This helps agents a lot.
Then Time Machine debugger is another big help for agents as they have access to the full execution trace of the program. The trace is much smaller than would be necessary for other languages and typically fits into content window.
Java allowed to handle out-of-memory rather well if one wanted to even 25 years ago. Basically one allocated a buffer on a startup taking 5% of memory that the application was supposed to use and made all threads to catch the oom exception. When handling that the buffer would be released, GC would be forced and a special flag would be set asking app to cancel any memory-intensive tasks until enough memory would be released and the buffer can be allocated again. It worked extremely well.
Microsoft just followed VAX/VMS that does not overcommit. And there is a noise on Linux mail lists to implement process builder pattern which VAX had like 50 years ago…
You can also use cgroup to set allocation policy for a particular program.
And in Spain most immigrants are from Latin America with close enough culture and language to avoid most integration problems.
Interesting idea. On the other hand on the latest SSD with hardware encryption the raw disk speed under Linux can be over 5 GB/s so on my laptop with 64 GB of RAM the full restoration from disk takes like 45 seconds. With LUKS it is like 2 times slower. Which is not a problem at all. So I do not see much value in memory encryption in suspend.
On my laptop with Fedora I just configured Linux to hibernate to disk after 15 minutes of suspend. Powering memory off ensures that bugs like this Debian-specific would not matter.
Plus what Debian extension to Linux tooling does although nice in theory, but in practice if one really worries about cold-boot attacks, then all keys and important documents has to be wiped out from memory, not only LUKS keys.
So hibernating is really the only proper way to protect against cold boot.
I worked for a big company that switched from 1password to Keeper. The transition was smooth and I do not see why it shouldn’t be as long as IT knows what they are doing.
And they are so much nicer. Way less noise and pollution and much better maneuverability on narrow streets or on slippery roads in winter.
Many such IDs are designed for local physical verification, like proof that the mobile phone owner is above certain age or has a valid driving license, they are not designed for remote verification.
With LLMs the cost of duplication is much lower both to write and maintain. So abstractions needs much higher justification.
With LLMs the cost of duplication is much lower and LLMs
I wonder are there any compilers that recognizes switch-in-loop pattern of interprets and optimizes it to be branch-predictor friendly using multiple indirect jumps?
A few years ago I counted 42 tunnels on 100 km between Voss and Bergen center.
For executables on Linux there are things like bubblewrap or firejail. One can also use a restrictive container. But those are strictly weaker than browser sandboxes.
The most secure way presently is to use qubes-os that allows to use a very hardened VM to run individual applications.
Browsers run it in a sandbox process together with allocator hardening. Most of the bugs then are just crashed of the sandbox
Another option is WASM or WASM-style sandboxes if using another process is undesirable.
Modern solar work nicely in UK in May-August when wind is weakest due to long hours and cooler weather. However one needs more expensive panels that also work on a cloudy days.
Then in UK somebody calculated that a house needs 1MWh battery to last over winter using only solar panels that a typical suburb house can install. In 5-10 years that would cost 40K USD making it rather realistic to have. This ignore availability of industrial-scale wind which is the strongest in winter.
The full access to the docker socket from a user account is typically used on a development machine where malware has many other opportunities to become a root.
User namespaces significantly rise the risk of exploits and many setups disable them. One may argue that Docker should have used them when they were available, but that would break too many useful setups involving privileged containers.
In 1920 in Berlin there were more electrical taxes than gasoline one. But cheap gasoline killed electrical car industry.
Without that electrical cars would proceed to develop and batteries with high capacity would happen much sooner.
As for pollution it would not be that bad. Fuel would be expensive and cars with combustion engines would not happen on massive scale. There would be much more freight by trains and nuclear energy would be developed on much bigger scale.
If oil and gas would not exist, then liquid fuel would be produced from coal. With the latest processes the cost of production is like 80 dollars per barrel, but with processes that Germans developed during WWII it was probably like twice of that in modern money.
In alternative universe that would be cheaper due to massive scale, but the era of very cheap liquid fuel would never happen. So electrical cars on big scale will happen much earlier. And given that coal is much more evenly distributed on Earth, one can speculate that there would be much less reasons for conflicts.
ThinkPad X1 from 2 years ago was very solid and under Fedora everything but camera worked out of the box. And for camera issue I had to blame myself for not checking details of a specific model as Lenovo was offering at that time fully-Linux compatible model. It took about one and halve year before Linux fully supported it. And I already upgraded SSD on it which took less than 10 minutes.
The only complain is bad battery life. With several VMs running mostly idle it doesn’t lasts even two hours. But then I used beefy MacBook M2 at my previous work and with VMs it lasted only 4 hours.
With Go basic stuff like url parsing or HTTPS support is written in Go and comes with the standard library. With Rust too many necessary things are just wrappers around C and C++ making cross-compilation and reproducible builds much harder to archive.
As for availability if CGO is ok, then calling C or C++ code from Go is not that hard. Also, there is always an option to just start C++ process if extra data copies are OK.
With backend serving many clients with widely varying performance profile of individual requests when latency spikes happen there is no particular hot loop. Just many go routines each doing reasonable thing but with a particular request pattern hitting pathological case of GC.
Java with its copying GC deals fine with fragmentation albeit at the cost of more upfront memory. And even in Rust one can change the allocator to try to deal with fragmentation. But with Go there is simply no good options besides the rewrite.
In his last book “The Dawn of Everything” David Graeber very convincingly argued that the idea of modern democracy came from Indian tribes in Northern America.
And it is also interesting how easily European countries went back to authoritarian or even totalitarian states given the opportunity. Yet US is more resilient and one explanation is subtle influence of Indian culture that still affects US.
As for technological advantage of Europe then 3000 years ago Ancient Egypt was way more advanced than Europe. 1000 years ago Arabic countries were more advance and 500 years ago China was more advanced. And Europe was lucky that China was focused on internal problems and not territorial expansion.
For me the main advantage of Go over Rust is compilation speed. Then compared with Go Rust still rely on many C and C++ libraries making it problematic to cross-compile or generate reproducible builds or static binaries.
The minus side of Go is too simplistic GC. When latency spikes hit, there are little options to address them besides painful rewrite.
The only real advantage of European settlers was smallpox immunity. If not for that the history could move in a very different direction.