647 karma · joined July 29, 2013
Note: I’m interested in V but not involved in V development.
If you are interested in this sort of thing, check out comp.arch!
https://www.theguardian.com/global-development/2023/mar/14/u...
rxv64 is a pedagogical operating system written in Rust that targets multiprocessor x86_64 machines. It is a reimplementation of the xv6 operating system from MIT.
Look at it from different angles to understand the problem better. Understand its properties better.
Look for its underlying causes. That is, may be you need to solve different problems!
Nibble at it. That is, solve sub problems so that you are left with a smaller (but possibly harder) problem.
Work on them subconsciously. That is, when you learn something new, let it sink in by walking away and doing something else.
Conversely, focus on the problem 100% when you are working it. If necessary, block out all distractions, including mental ones.
Look at it from a potential solution point of view. That is, if there is a solution, think of what properties it must have.
Never give up! Assuming the problem is worth solving.
Conversely, try to prove it is unsolvable so that you give up on it ASAP!
Keep notes and review them often. You may find clues in something you have already noted.
Try to explain the problem, what you have learned and your attempts to an interested person who can act as your sounding board. The process of explaining will force you to organize your thoughts and the other person can ask questions that will force you to think about cases you may not have considered. Without a sounding board and without writing down your observations you may end up going in circles.
For an example see https://en.wikipedia.org/wiki/Vienna_Development_Method#Bank...
The idea is to model the key aspects as mathematically rigorously as possible while ignoring lower level details. But even if you are not as rigorous, the process of creating such a model can help clarify things. As an example, if you are developing a file system you can abstractly define operations on it (read, write, create file, dir, etc.) and one can come up with a huge number of implementations satisfying this but as you add other requirements or constraints, quite a few choices are no longer meaningful. For example you want to implement a FS that takes advantage of NVMe SSDs, they put certain constraints. So then you need a model for an SSD (erase blocks are multiples of data blocks, write must be preceded by erase, etc. etc.). The idea is to model all this using a few abstract data types and state. You need not strive to programmatically derive an implementation from such a spec for it to be useful.
Often the UI addresses only a subset of this space -- it is only the visible part of the iceberg as it were! There is a lot going on under the UI surface. Not to mention you may want more than one (kind of) UI.
This is like saying the US should stop spending money on lots of things until the gun violence problem is solved.
I should also point out "curry leaves" -- not sure if there is a connection with curry. They are not spicy but are put in many Indian dishes to give them a certain flavor.
It occurs to me that operators can be considered connectors!
Simula67. It was an almost superset of Algol60 & had nothing to do with Algol68. Smalltalk was also influenced by Simula67.
See Feeley's response for the proper context.