I'd quibble with whether folks understand the performance implications. I think most people know division is expensive. It's just non trivial to remove it. If it was that easy to replace, it would be done in hardware and division wouldn't be expensive anymore.
HN user
hctaw
I think the problem is equating "coding" to "algorithmic thinking."
Most coding problems are wiring stuff up. If you can change a tire or put together a LEGO set, you can probably write code.
The problem with the golden geese that you're pointing out is mostly one of tooling, in my opinion. Undergrads at top CS programs are as clueless as your grandmother about developing software because the tools are either toys for children or extremely sharp knives with a blade on the handle. This is a problem that replit is trying to solve.
It's a task more commonly found in computational geometry (3D range query == find all the points in a data set enclosed by a cube).
There are numerous data structures that are well suited for various geometric queries like ranges/lookups (interval trees, quadtrees) as well as more text-oriented operations like cut/copy/paste/insert/merge/etc (like ropes).
I'm not familiar with the operations required to put a cursor at the right place in a document, but knowing how much research has gone into storing similar data and looking up what you need efficiently the idea of "going through all the text every time" is a big code smell.
Efficient 3 dimensional position or range queries (line/column/page) is a pretty well studied problem. You don't need to query every point of the space to answer anything.
Google docs is their document editor. Sheets is a part of GSuite.
I've also never had trouble pasting a spreedsheet selection into a word document. Email is a nightmare in general though.
I'm not sold on collaboration personally. I've had to do it a bunch since the pandemic began and I've found it to be an anti pattern. One of the big inconsistencies is that cells in sheets don't update while being edited while collaborating, which is not great if you have a spreadsheet heavy workflow. Docs is impossible to replace that though, because it's auto formatting is draconian and always seems to reset its preferences. When editing docs we spend more time formatting them then creating the content.
I feel the need to argue that the browser is not the browser engine. An app sitting in a chrome tab is significantly different than an app built on electron, they just share some rendering code paths.
Electron apps have shown that you can use a browser's rendering engine to make high quality apps distributed on multiple platforms. They also have the benefit of persistence, filesystem access, hooks into native code should you need them (not WASM - mind you), you can implement true multithreading and explicit SIMD optimizations. You don't have memory limitations, and you don't have to worry about browser sandboxing, malicious or well intentioned extensions that break the experience, etc.
The browser is not the same platform as electron. I would guess that Google Docs would function much better in electron than on the web.
Microsoft Word, Pages and Open Office don't seem to be bottlenecked by rendering performance like Google Docs. Perhaps the browser is the wrong platform for document editing.
it is not unless your security model is one where codesigning exists to prevent the addition of new native code
It is if your security model includes things like parental controls and payment processing.
Doesn't the referenced data have to be guaranteed to outlive the callee, which would only be true if the callee is guaranteed to return to the calling scope?
You can get around the immutability of the reference if your compiler implements the ABI with copy on write semantics, which I think is a reasonable compromise. But I'm still not certain how you would handle arbitrary control flow that the compiler may not be able to reason about.
If for example your arguments may be behind const references, how would you implement getcontext/swapcontext for your ABI? If everything is an integral value in registers or on the stack then it's really easy, but i would think it would have to be a compiler intrinsic if it depends on the function signature of the calling context, in order to perform the required copies.
I'm reminded of Chesteron's Fence in this.
Every major ABI is listed here as containing the same mistakes. I'm inclined to think the people who designed these ABIs were smart enough to understand the consequences of their design decisions.
I don't know whether this author is correct or not, but my gut is there is something missing here with respect to non local control flow (like exception handling, setjmp/longjmp, and fibers).
What chips can be targeted by C compilers today that don't use 2's complement?
Having a mostly statically linked executable handle this rather than some bastard child of virtual environments and docker images is a dream come true.
Time Machine can't run on my Mac because there's not enough space on disk for it to run. Third party backup services that can function with the comically small default SSDs are preferable.
You have to backup more regularly than every two months...
And Apple replaces the entire motherboard if a component on it fails. The agreement that you may lose data has been around awhile and it's just boilerplate. When mucking around on a board they aren't going to guarantee anything - and I don't know if third party repair shops would do that either. There is always the chance someone screws up and breaks something.
My point of the analogy is that film was an entirely new medium for creators a century ago and while the projector and camera manufacturers came up with the idea of a cinema, it was the artists that made something worth showing.
AR and VR are both solutions looking for problems today. The technology is already there for a killer app but no one has figured out what it is yet.
I think AR/VR is that it's being used like film was in the early 20th century. There are obvious technical challenges to overcome, but what it lacks is an industry of creators and auteurs to define new forms of art. The mistake is that the revolution will be driven by artists working out of garages and warehouses, not VC funded startups that only focus on technical challenges trying to corner the markets.
Not GP but I feel your analysis here doesn't follow.
rather than being completely unaffected by S[n]? Is n here a discretization of time or a "meta-time" that captures state progression?
It would be remarkable if the "next state" of the universe did not depend or was so correlated to the "current state" that symbolically we represent it as a dependency. A ball only rolls downhill because it was once uphill, after all - one of the few things that unites various models of the universe was the existence of causality.
If the former, then you are treating time as a primitive, whereas the representation or even existence of time can be part of state and vary over state changes, so this does not work.
This is interesting but I feel reductive. the "nth" state is not the state at time n, but the state that follows n-1 - it is dimensionless, but one might express it in spacetime if that is convenient. Nothing suggests it is uniformly sampled or even computable.
completely independent from each other is indistinguishable from a multiverse with inaccessible sub-universes and should be called as such
No idea what this implies, but in a non-deterministic state machine there are multiple S(n + 1) for any given S(n).
you are also assuming linearity and discreteness of state changes, whereas it could be a DAG or more complex structure.
GP does not suggest evolve(S) is linear or discrete (they suggest either continuous or discrete, actually). Neither of these imply anything about topology so I'm not sure what that has to do with a DAG. State transitions can encapsulate arbitrary topologies (and vice versa). They are duals.
rather than a more chaotic or unstructured universe that behaves more like a disjoint set than an orderly structure
I feel GP covers this base by mentioning that state transitions may not be deterministic. Just because a system is chaotic or unpredictable does not imply we cannot formulate the nature of its chaos or unpredictability symbolically.
Environmental pollution also "works better" for companies and yet we regulate it. I don't think this is a false dichotomy, the role of government in business regulation is to modify business practices that are contrary to the best outcomes for society. Not what is more efficient for businesses.
You need to compile a static executable (not with static libraries, there's a subtle difference). The flags depend on your compiler.
If you're on Linux, musl libc and musl-tools are useful for dealing with this reliably.
How is the REPL experience if there is one?
About on par with C/C++ and Go. In that you don't have one and don't want for one. REPL driven development is difficult with languages like Rust, both to implement and use.
I think there are some projects floating around out there, but I personally don't see a purpose for one. It's not python or matlab.
It makes a big difference if you have a good amp that doesn't have a dull preamp stage. Some of the newer tube designs are extremely responsive to a change in how they're loaded (same goes for all the shitty unbuffered drive pedals that inexplicably sound good).
In my rig I have an SSH guitar with a higher output neck and bridge with a coil tap and run it straight into a blackstar HT40. The pickup selection and volume knob give me all my clean/dirty/overdriven tones without pedals, so there's less noise and less that can fail. It would be really hard to achieve that without the time I spent to find a set of pickups that works.
It's a laborious process that has a significant impact on tone. You usually have to restring the guitar when you change them out.
The biggest change would be between dual coils ("humbuckers") and true single coils. Most modern humbuckers have four leads (you only need two to make a sound, you get two leads per coil) which allow you to wire a switch on the guitar called a "coil tap" which allows you to disengage the secondary coil. This allows you to have a dual coil that functions sonically as either, and it is very desirable for musicians that need a diverse range of tones for their set list (good example is if you ever play a wedding and take requests).
You're also never happy with it. I've changed all the pups on my three guitars multiple times.
When I've done it in the past the reason was that the "downloader" was more like a bootstrapper to get the app on the machine with different logic if the app was already installed/not installed, and to migrate between versions if necessary - without corrupting the existing installation, if it exists.
Download & Install is filled with points of failure and have few ways of performing the modifications atomically. Its better to have this correct than have nice information displays. But this depends heavily on what the app structure looks like.
Especially when the custom downloader doesn't suppoert resuming interrupted downloads, display remaining time, current download speed or how much data is being downloaded
These things are not always easy, are usually lies, and add very little value to the application. Be happy they haven't hyper optimized first time installation or new user onboarding, since you usually only do it once.
Don't manage your own metal if you can't have access to it for whatever reason. Run your application on a cloud platform.
That's more an indictment of the sorry state of C/C++ dependencies and linkage paradigms (shared libs are an antipattern like 90% of the time, imho). If C/C++ had a standard package manager then it would be much more trivial to mix and match with other languages.
Modern package management in a nutshell is "don't do what we do in C because we learned from those mistakes."
I don't think it's terrible. Modern package management just works on a different assumption - the dependencies and their artifacts are required at build time, and for libraries they cannot assume the version required by the software exists outside the build environment or in deployment.
If all of software respected those assumptions then we wouldn't need containerization nearly to the degree we have it today.
I don't think I follow. These designs do come from first principles. In fact the reason we've had so much academic thought put into it is because 100 years ago we designed systems empirically and a few smart people went back to first principles to find the fundamental constraints on filter networks.
It's becoming less sane to use any systems package management to handle tool chains and libraries with each passing day.
The recommended way to manage your rust installation is rustup. It makes it trivial to set up and manage tool chains, globally or otherwise.
what other compiler is only usable if you install from some website instead of your repos?
What compilers' recommended installation is some 3rd party package manager that lags behind the latest stable release by months?
Rustup is a useful tool, it's dumb to ignore it.
Backwards as it may be it's far easier to change a regulatory interpretation or judicial test than to make a fundamental change to government services, like healthcare.
Many gig workers explicitly do not want to become employees, as there are many disadvantages to doing so
Then companies that want to attract gig workers can give them the freedoms that are set by statute, regulatory bodies, and precedent. Like setting their own rates and picking which contracts to fulfill.
Good book on that is Introduction to the Theory of Computation by Michael Sipser.
One could argue it's from the very bottom up, not much practicum lies in that text.