← Back to context

Comment by masklinn

3 days ago

Also JavaScript.

Java too. Rust has only 99 string types, some of those are immutable also.

  • It does not really matter in rust anyway: literals are &’static str so naturally immutable and essentially free, and mutable strings require jumping hoops to share, so it’s hard to unwittingly have one mutate from under you.

  • Rust the language has one string type: &str

    The standard library also has String, CString, CStr, OsString, and OsStr.

    The latter four are for niche situations. 99.9% of the time, it's similar to Java: &str is Java's String, String is Java's StringBuffer/StringBuilder.

  • Rust has one core String type.

      String
    
      &str
    
      &mut str
    
      &'static str 
    
      etc. 
    

    These are just the language semantics.

    The other string types are non-Rust strings. Filesystem, C strings, etc. You only deal with them in dealing with specific OS and binding interfaces.

    95% of the time you'll just be using String.

  • All of those languages except JavaScript have mutable strings; they just have different names and API shapes. Python has io.StringIO, Java has StringBuilder, Rust has String. (JavaScript has less need for this because JavaScript strings are ropes in most widely used implementations, reducing the overhead of concatenation, though the language spec doesn't require this.)

    • By your incredible criteria of things being mutable strings if they behave nothing like strings but can produce one, JavaScript absolutely does have a mutable string, it’s called Array. It’s also a mutable integer.

      1 reply →