• 2 Posts
  • 348 Comments
Joined 1 year ago
cake
Cake day: June 15th, 2023

help-circle
  • Algorithmic patents amount to patenting maths which, by very longstanding precedence, is not a thing, for good reason. Same goes for business methods and other stuff.

    In the EU there’s only one way to patent software and that’s if you’re using it to achieve direct physical ends. E.g. you can patent washing machine firmware in so far as you patent a particular way to combine sensor data to achieve a particular washing result. Rule of thumb: If, 30 years ago, you’d have an electromechanical mechanism to do the task then you can patent the software that’s now replacing it.

    Oh: It’s also possible to patent silicon, that is, you can patent your hardware acceleration methods for video decoding. That doesn’t extend to decoders running on general-purpose hardware, though.

    If you want to monopolise your brand-new hash algorithm there’s a simple way: Don’t publish the source, use copyright to collect royalties… though that doesn’t mean that reverse engineering is outlawed, especially if necessary for interoperability. Practically speaking nope hash algorithms just can’t be protected which is fair and square because it’s academia who comes up with that kind of stuff and we paid for it with taxpayer money. Want to make money off it? Get tenure.





  • …on film that easily costs a buck per frame nowadays, Kodak actually raised prices last year because they can’t keep up with demand. And that’s not including developing it and making prints.

    Don’t get me wrong, analogue film is a great medium and the SRGB conversion you posted doesn’t even begin to do it justice. But “it’s cheaper” is in no way an argument for it.

    Movies on analogue film are also a nice idea, a nice print of a nice movie for a reel-to-reel projector which are easy to build (use a white LED, please, no need even for electronics but power electronics but make it a LED) can have great quality and definitely do cinema history justice, but… VHS? Utterly atrocious quality. VHS had shoddy quality when it was new (much lower than broadcast) and it didn’t get a single bit better.



  • I think you dont fully understand how c compilers ( gcc specifically ) work when using multi file projects

    They don’t. C compilers compile single files produced by the c preprocessor (resolving all #includes), they have no concept of multi-file projects. That’s a thing for the build system, such as make, and it needs dependency information from the preprocessor to do its job (cpp -M), and once it has that it has to act correctly on them which is often completely broken because people don’t understand make. Like using it recursively, bad idea. In the wild, a random C project at work you’ll come across needs a full rebuild to build cleanly. Things have gotten better with things like cmake getting more popular but the whole thing is still brittle. GNU autohell certainly makes nothing better, ever.

    Also, anything using IL will always have an abi,

    Everything will always have an ABI because ABI is just API in the target language, whatever that may be. If your program is compiled and can run it uses an ABI.

    Wasm is wasm, and you only need an exposed interface

    The core wasm abi is less capable than the C abi: You get scalar values and pointers, that’s it. No structs, no nothing, memory layout is completely unspecified. The component model allows compilers to say “so I’m laying out strings like this and structs like that” giving linkers a chance to say “yeah I can generate glue code between you two”.

    Again, i like the idea of rust, but it has a long way to go to be viable atm.

    C isn’t even close to being viable according to your standards people just have gotten used to the jank.

    And it has many pitfalls to avoid so it doesnt become the hot mess that is any framework based on node.js

    Rust doesn’t have portable dylibs precisely because it isn’t a hot mess. Because it’s actual work to do it properly. Unlike everyone else. Meanwhile It speaks the local C ABI fluently (they differ by architecture and operating system, btw), which isn’t a thing that can be said about many languages that aren’t C.


    Differently put: What, precisely, do you want to do? Have you any actual use-case for your doubts, or are they spooks?


  • It’s a lacking point yes but unless you want to use a closed-source library it’s also a non-issue, which is why it has never been given priority. It’s not like language semantics would prevent portable dylibs it’s that there’s more important fronts to improve Rust on. A proper solution would take quite some engineering effort, and do note that C doesn’t have a proper solution either it just lets you link stuff up willy-nilly and then crash. Rust is actually in a better position to implement a proper solution than C is.

    The “big project” thing is a red herring given that rust compiles incrementally. I know it is technically possible to not rebuild everything from scratch in C but the code has to specifically written to not break assumptions your build system makes while rust is happily re-using the compilation results for one function in a file while discarding those of another because actual dependencies are actually tracked. Out of the box.

    Speaking of large Rust projects and proper type-safe linking: The WebAssembly folks are hashing out their Component Model which isn’t really limited to compiling to wasm, in principle: Big picture it’s a way to programmatically specify ABIs and even derive ABI translation code. That might be a good option as a rust-specific solution would be, well, rust-specific and when you engineer something that can support multiple versions of a language you can just as well engineer a bit more and have something cross-language.



  • The Rustinomicon has a chapter on it. The basics are quite simple: Declare non-opaque types to use layout matching the C ABI, export/import functions, some wibbles around name mangling. Option<T> vs. null pointers. Where things get a bit more involved is unwinding, but then you’re at the end of it, nothing should be shocking to anyone having written C.

    As to how Rusty it is… not very. I mean Rust has first-class FFI support, but the way FFI stuff is written is necessarily unidiomatic because you’re basically writing C in Rust syntax and you won’t get out of declaring your own functions `unsafe’ before you read the rest of the Rustinomicon to understand what properties you need to ensure because the nice and shiny parts of Rust assume them.


  • So you can find things by “that spicy chicken recipe” instead of having to remember what it was actually called, or slog through a gazillion chicken recipes in your history when you realise that “spicy” was nowhere in the name. Basically stemming/thesaurus search on steroids.

    It’s quite likely to be opt-in as I imagine ingesting the sites you’re looking at is a significant computational load. The translators are also opt-in, there’s enough stuff inbuilt to detect languages but not to translate, you have to download those models first. And they’re quite good btw.

    Another thing I could see them offering is stuff like tl;dr bot. It’s probably not for everyone, but I definitely can see that it can be a useful feature for many people.





  • Data after dst+n is unchanged.

    Sure but that means the part before that is garbage because you have a null terminated string without terminator.

    Or at least that’s how I see it. If your intention isn’t to start and end with a null-terminated string you should be using memcpy. Let us not talk about situations where CHAR_BIT != 8 that’s not POSIX anyway.

    Even better, just avoid doing string manipulation in C.



  • barsoap@lemm.eetoProgrammer Humor@programming.devA Guessing Game
    link
    fedilink
    arrow-up
    6
    arrow-down
    3
    ·
    edit-2
    3 months ago

    How on earth should a newcomer know that the letter “n” in that word stands for number without having to google it?

    By looking at the difference between strcpy and strncpy. Preferably, though, you should simply learn C before writing C.

    The gist of is is that strcpy takes a null-terminated string and copies it somewhere, while strncpy takes a zero-terminated string and copies it somewhere but will not write more than n bytes. strncpy literally has exactly one more parameter than strcpy, that being n, hence the name. If n is smaller than the string length (as in: distance to first null byte) then you’re bound to have garbage in your destination, and to check for that you have to dereference the pointer strncpy returns and check if it’s actually null. Yay C error handling.

    In retrospect null-terminated strings were a mistake, but so were many other things, at some point you just have to accept that there’s hysterical raisins everywhere.




  • You can’t automate generation of shape keys. An artist needs to go over every single asset and make it work for every single extreme point on every slider, then make sure that the automatically derived in between points look good and fix those if required, in all slider combinations.

    And it’s probably still going to clip during some animations because going over absolutely everything is just prohibitively expensive.