Made with KolourPaint and screenshots from Kate (with the GitHub theme).

top 50 comments

sorted by: hot top controversial new old
[–] 77 points 1 year ago (18 children)

Good, now invent a keyword for variables you don't want to declare the type. And now that you have a mix of keywords and identifiers on the same place, you can never update your language again.

Also, make the function declarations not use a keyword too, so you get the full C-style madness of code that changes meaning depending on what libraries you import.

  • source
  • hideshow 18 child comments
  • [–] 18 points 1 year ago (4 children)

    I don't understand how not using a keyword to define a function causes the meaning to change depending on imports. I've never run into an issue like that before. Can you give an example?

  • source
  • parent
  • hideshow 4 child comments
  • [–] 8 points 1 year ago* (9 children)

    In C#, you can use 'var' to have an impilict type variable.

    String name = ""

    var name = ""

  • source
  • parent
  • hideshow 9 child comments
  • [–] 24 points 1 year ago (8 children)
  • [–] 20 points 1 year ago* (last edited 1 year ago) (7 children)

    So I think it's still probably unclear to people why "mix of keywords and identifiers" is bad: it means any new keyword could break backwards compatibility because someone could have already named a type the same thing as that new keyword.

    This syntax puts type identifiers in the very prominent position of "generic fresh statement after semicolon or newline"

    ..though I've spent like 10 minutes thinking about this and now it's again not making sense to me. Isn't the very common plain "already_existing_variable = 5" also causing the same problem? We'd have to go back to cobol style "SET foo = 5" for everything to actually make it not an issue

  • source
  • parent
  • hideshow 7 child comments
  • load more comments (7 replies)
  • load more comments (2 replies)
    [–] 47 points 1 year ago (26 children)

    You're encoding more information in the typescript one. You're saying it's a string that will get updated.

  • source
  • hideshow 26 child comments
  • [–] 34 points 1 year ago (3 children)

    Yeah, it's explicitly distinct from const a: String which says it won't change, and var a: String, which means this is legacy code that needs fixing.

  • source
  • parent
  • hideshow 3 child comments
  • [–] 11 points 1 year ago (17 children)
  • [–] 14 points 1 year ago (8 children)

    It's also valid rust syntax.

    But if it were rust, this meme would not make sense, since you would just type let a and type inference would do its thing. Which is much more ergonomic.

  • source
  • parent
  • hideshow 8 child comments
  • load more comments (3 replies)
  • load more comments (2 replies)
    [–] 45 points 1 year ago (11 children)
  • [–] 22 points 1 year ago (8 children)

    And then assign an int to a string just to mess with the interpreter.

  • source
  • parent
  • hideshow 8 child comments
  • load more comments (2 replies)
    [–] 27 points 1 year ago* (last edited 1 year ago) (5 children)

    The actual reason why let ... in syntax tends to not use C-style "type var" like syntax is because it's derived from the syntax type theory uses, and type theorists know about parameterised types. Generics, in C++ parlance, excuse my Haskell:

    let foo :: Map Int String = mempty

    We have an empty map, and it maps integers to Strings. We call it foo. Compare:

    Map Int String foo = mempty

    If nothing else, that's just awkward to read and while it may be grammatically unambiguous (a token is a name if it sits directly in front of =) parser error messages are going to suck. Map<Int,String> is also awkward but alas that's what we're stuck with in Rust because they reasoned that it would be cruel to put folks coming from C++ on angle bracket withdrawal. Also Rust has ML ancestry don't get me started on their type syntax.

  • source
  • hideshow 5 child comments
  • load more comments (4 replies)
    [–] 25 points 1 year ago* (6 children)

    Because sometimes that let can be replaced by other things like const. Which can be managed statically by the machine and not by my (imperfect) ability to know if it's mutated or not

  • source
  • hideshow 6 child comments
  • load more comments (4 replies)
    [–] 21 points 1 year ago
    IT'S SHOWTIME
      I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE a
      GET TO THE CHOPPER a
        HERE IS MY INVITATION "ArnoldC is the best."
      ENOUGH TALK
      TALK TO THE HAND a
    YOU HAVE BEEN TERMINATED
    
  • source
  • [–] 17 points 1 year ago (10 children)
  • [–] 18 points 1 year ago* (9 children)

    Rust is verbose, but C++ might still take the cake with its standard library templates. Especially when using fully-qualified type names...

    auto a = ::std::make_shared<::std::basic_string<char, ::std::char_traits<char>, MyAllocator<char>>>();

    A reference-counted shared pointer to a string of unspecified character encoding and using a non-default memory allocator.

  • source
  • parent
  • hideshow 9 child comments
  • [–] 5 points 1 year ago

    fully qualified type names make any language awful.

    Here's the same example in rust:

    let a = std::rc::Rc::new(std::vec::Vec<u8, MyAllocator>::new());

    I believe u8 also comes from a module, so it would be something like std::u8::u8, but I'm not sure.

  • source
  • parent
  • load more comments (8 replies)
  • [–] 15 points 1 year ago (12 children)

    I've always wondered where all this 'let' business started

  • source
  • hideshow 12 child comments
  • [–] [S] 30 points 1 year ago* (9 children)

    It's commonly used in math to declare variables so I assume programming languages borrowed it from there.

  • source
  • parent
  • hideshow 9 child comments
  • [–] 7 points 1 year ago (1 child)

    More specifically, they're borrowing the more mathematical meaning of variables, where if you say x equals 5, you can't later say x is 6, and where a statement like "x = x + 1" is nonsense. Using "let" means you're setting the value once and that's what it's going to remain as long as it exists, while "var" variables can be changed later. Functional languages, which are usually made by very math-y people, will often protest the way programmers use operators by saying that = is strictly for equality and variable assignment is := instead of == and = in most C-style languages.

  • source
  • parent
  • hideshow 1 child comment
  • load more comments (1 reply)
  • [–] 6 points 1 year ago (6 children)

    BASIC uses (used?) it to declare variables. (I don't know if earlier languages did.)

    Not that that's a reason for other languages to copy it.

  • source
  • parent
  • hideshow 6 child comments
  • [–] [S] 8 points 1 year ago* (5 children)

    Doesn't Basic use Dim a As String?

  • source
  • parent
  • hideshow 5 child comments
  • [–] 10 points 1 year ago* (4 children)

    Older variants used DIM for arrays and LET for other variables. DIM was originally called that because it was setting the dimensions of the array.

    In modern BASIC variants, DIM has become a backronym: "declare in memory".

  • source
  • parent
  • hideshow 4 child comments
  • load more comments (3 replies)
  • [–] 14 points 1 year ago (5 children)
  • [–] 12 points 1 year ago* (4 children)

    Not to short-circuit the joke, but in this case, it's because the valid JavaScript version is...

    let a
    

    ...and one of TypeScript's main design goals is to be a superset of JavaScript, that only adds syntax, and doesn't re-write it.

    Beyond that, it's probably a case of some new language just using what the designer is familiar with.

  • source
  • hideshow 4 child comments
  • load more comments (4 replies)
    [–] 7 points 1 year ago (12 children)

    Can we talk about PHP functions with typehints too?

    public static function foo(): string {
    

    Practically every other language with similar syntax does this instead:

    public static string foo() {
    
  • source
  • hideshow 12 child comments
  • load more comments (2 replies)
    [–] 6 points 1 year ago

    STRING A WHAT, MOTHERFUCKER

  • source
  • load more comments
    view more: next ›