• 10 Posts
  • 108 Comments
Joined 1 year ago
cake
Cake day: July 17th, 2023

help-circle



  • Far as Swift’s syntax goes, I really like argument labels too, but it’s just that there’s SO. MUCH. SYNTAX. Lots of sugar, yes, but sometimes that’s part of the problem in my opinion, because it often adds to the syntactic and semantic “noise.” Also, there’s 98 keywords (more if you count eg. try, try! and try? as different keywords, and this count is missing eg. sending and other new keywords) – compare this to say Rust’s or or Python’s 35. Java’s got 68, while C++ also has 98 and it’s notorious for having way too many of them. And then there’s all the symbols – some of which have different meanings in different contexts.

    It’s true that ARC only applies to reference types, but even with value types you can often get some fairly surprising performance problems due to implicit copies, for example in getters and setters – and the _read and _modify accessors that can sometimes help with that due to returning (well, yielding) a borrowed value instead of a copy aren’t meant for “public” use (which doesn’t mean many libraries etc. don’t use them, much to the consternation of core devs).



  • Swift is… not a great language. It’s got some promise but goddamn does it have a “designed by committee” feel to it; they just keep throwing on features like they’re going out of fashion and it’s getting ridiculously complex. Just the syntax alone is a bit of a nightmare – soooo many keywords and symbols. It’s also extremely hard to predict how well Swift code will perform, in large part due to ARC (automatic reference counting) memory management, which is a huge downside for game development. And don’t even get me started on the new concurrency stuff…

    Just as a side note, it’s not purely an Apple project nowadays. They’re still the “project lead” but it’s not exclusively theirs anymore. Still, regardless of that, at least personally I really couldn’t recommend it especially to someone looking to get into game development.







  • I dint know many OO languages that don’t have a useless toString on string types.

    Well, that’s just going to be one of those “it is what it is” things in an OO language if your base class has a toString()-equivalent. Sure, it’s probably useless for a string, but if everything’s an object and inherits from some top-level Object class with a toString() method, then you’re going to get a toString() method in strings too. You’re going to get a toString() in everything; in JS even functions have a toString() (the output of which depends on the implementation):

    In a dynamically typed language, if you know that everything can be turned into a string with toString() (or the like), then you can just call that method on any value you have and not have to worry about whether it’ll hurl at runtime because eg. Strings don’t have a toString because it’d technically be useless.


  • Everything that’s an Object is going to either inherit Object.prototype.toString() (mdn) or provide its own implementation. Like I said in another comment, even functions have a toString() because they’re also objects.

    A String is an Object, so it’s going to have a toString() method. It doesn’t inherit Object’s implementation, but provides one that’s sort of a no-op / identity function but not quite.

    So, the thing is that when you say const someString = "test string", you’re not actually creating a new String object instance and assigning it to someString, you’re creating a string (lowercase s!) primitive and assigning it to someString:

    Compare this with creating a new String("bla"):

    In Javascript, primitives don’t actually have any properties or methods, so when you call someString.toString() (or call any other method or access any property on someString), what happens is that someString is coerced into a String instance, and then toString() is called on that. Essentially it’s like going new String(someString).toString().

    Now, what String.prototype.toString() (mdn) does is it returns the underlying string primitive and not the String instance itself:

    Why? Fuckin beats me, I honestly can’t remember what the point of returning the primitive instead of the String instance is because I haven’t been elbow-deep in Javascript in years, but regardless this is what String’s toString() does. Probably has something to do with coercion logic.










  • Honestly, just properly funding anything that is designed to do benevolent things for the community as a whole is a tough sell with way too many US community politicians

    This seems to be a problem with at least conservative politicians everywhere. In Finland where I live we do still have the vestiges of a welfare state (and it really is vestigial at this point), but right wing politicians keep dismantling it and cutting taxes on the rich, and later on leftist politicians find it impossible to roll back any changes due to resistance from the right.