• 9 Posts
  • 248 Comments
Joined 4 years ago
cake
Cake day: May 31st, 2020

help-circle

  • Hmm, maybe my opinion is just shit in that regard. I don’t code terribly much low-level, so I’m probably overestimating the complexity and underestimating the options for cleaning things up.
    That was kind of just a random example, I felt like there were many more cases where low-level code is complex, but I’m probably basing this off of shitty low-level code and forgetting that shitty high-level code isn’t exactly a rarity either.


  • In regards to there being an abundance of songs, I’ve also found that this kills off my motivation to make music.

    For one, because well, obviously there’s musicians out there that produce music at a much higher skill level and production value, so it’s easy to just never even try ‘competing’ with them, even though with a bit of effort, I definitely can create something that a certain niche will enjoy.

    But similarly, it also feels like every niche is covered. Any song I’d want to make, I would just need to search long enough and I’d find something similar on the internet.

    I myself don’t have a real demand for the songs I create. I don’t expect to create something that I would find so much better than what everyone else does.
    I do get the bonus of writing exactly the songs that ding the neurons in my brain, but those other musicians get the bonus of having more skill and production value and being the proverbial infinite monkeys with typewriters.

    At this point, I tend to go back and forth between listening to all the excellent music out there, to try to keep my own creativity up to speed, and then for a few weeks, I’ll only listen to relatively mellow songs, so that the songs I’m writing actually sound decent in comparison and I get the motivation to continue working on them.


  • In my opinion, it strongly depends on what you’re coding.

    Low-level code where you need to initialize array indices to represent certain flags? Absolutely comment the living shit out of that. → See response.
    High-level code where you’re just plumbing different libraries? Hell no, the code is just as easily readable as a comment.

    I do also think that, no matter where you lie in this spectrum, there is always merit to improving code to reduce the need for documentation:

    • Rather than typing out the specification, write a unit/integration test.
    • Rather than describing that a function should only be called in a certain way, make it impossible to do it wrongly by modelling this in your type system.
    • Rather than adding a comment to describe what a block of code does, pull it out into a separate function.
    • Rather than explaining how a snippet of code works, try to simplify it, so this becomes obvious.

    The thing with documentation is that it merely makes it easier to learn about complexity, whereas a code improvement may eliminate this complexity or the need to know about it, because the compiler/test will remember.

    This does not mean you should avoid comments like they’re actively bad. As many others said, particularly the “why” is not expressable in code. Sometimes, it is also genuinely not possible to clean up a snippet of code enough that it becomes digestable.
    But it is still a good idea, when you feel the need to leave a comment that explains something else than the “why”, to consider for a moment, if there’s not some code improvement you should be doing instead.










  • Yeah, that is my understanding, too. Otherwise you’d only want to generate them on the database host, as even with NTP there will be small differences. This would kind of defeat the purpose of UUIDs.

    If you’re saying that even without NTP, just by manually setting the time, things will be fine. I mean, maybe. But I’ve seen it far too many times already that some host shows up with 1970-01-01…


  • For others wondering what’s wrong with UUIDv4:

    UUID versions that are not time ordered, such as UUIDv4, have poor database-index locality. This means that new values created in succession are not close to each other in the index; thus, they require inserts to be performed at random locations. The resulting negative performance effects on the common structures used for this (B-tree and its variants) can be dramatic.

    I guess, this means with these new UUIDs, ideally you only create UUIDs on systems that are hooked up to NTP, though I guess, it won’t really be worse than UUIDv4 either way.


  • We’ve been using Leptos at work, which is a similar framework (and probably shares half the stack with Dioxus).

    And yeah, it’s really good. My favorite thing about using Rust for the UI is algebraic data types.
    So, in Rust when you call a function which can fail, there isn’t an exception being thrown, but rather you get a Result-type as return value.
    This Result can either contain an Ok with the actual return value inside. Or it can contain an Err with an error message inside.
    So, in your UI code, you just hand this Result all the way to your display code and there you either display the value or you display the error.

    No more uninitialized variables, no more separate booleans to indicate that the variable is uninitialized, no more unreadable multi-line ternaries.
    It just becomes so much simpler to load something from the backend and display it, which is kind of important in frontend code.



  • But that is what I mean with it needing an extension of the language.

    So, I’m not saying you could just build a library that calls existing PHP functions to make it all work. Rather I’m saying there’s certain machine code instructions, which just cannot be expressed in PHP. And we need those machine code instructions for actually managing memory. So, I am talking about reading/writing to memory not being possible, unless we resort to horrible hacks.

    Since we are building our own compiler anyways, we could add our own function-stubs and tell our compiler to translate them to those missing machine code instructions. But then that is a superset of PHP. It wouldn’t be possible in PHP itself.

    Again, I’m not entirely sure about the above, but my web search skills couldn’t uncover any way to actually just read from a memory address in PHP.


  • I mean, I’m a bit out of my water there, both in terms of the featureset of PHP and what’s actually needed for a kernel, but I’m still gonna go with no.

    For one, PHP uses reference counting + garbage collection for memory management. That’s normally done by the language runtime, which you won’t have when running baremetal.

    Maybe you could implement a kernel, which does as few allocations as possible (generally a good idea for a kernel, but no idea, if it’s possible with PHP), and then basically just let it memory leak until everything crashes.
    Then again, the kernel is responsible for making processes crash when they have a memory leak. Presumably, our PHP kernel would just start overwriting data from running processes and eventually overwrite itself in memory(?). Either way, it would be horrendous.

    Maybe you could also try to implement some basic reference counting into your own PHP code, so that your own code keeps track of how often you’ve used an object in your own code. Certainly doesn’t sound like fun, though.

    Well, and secondly, I imagine, you’d also still need an extension of the language, to be able to address actual memory locations and do various operations with them.

    I know from Rust, that they’ve got specific functions in the stdlib for that, see for example: https://doc.rust-lang.org/stable/std/ptr/index.html#functions
    Presumably, PHP does not have such functions, because its users aren’t normally concerned with that.