• philm
    link
    fedilink
    English
    arrow-up
    2
    ·
    1 year ago

    I firmly believe it’s the best tool for students to learn how a computer intuitively works.

    Yeah C is certainly a language students should learn (in contrast to C++ IMHO). It’s a dead simple language (well for what it is capable of at least, also to write a compiler for, which is a good academic task) that was very influential and is still here to stay for quite a while (not necessarily directly the language itself, but rather the ABI I think).

    how that’s too different from TS

    well it’s really baked into the language, no intermediate transpiler or compiler is necessary, and the ecosystem should be a little bit nicer to use (as less bundling is necessary, which I kind of detest after having gone into that rabit hole a little bit too often and “wasted” quite some time with (configuring) it).

    functional programming with TS out of curiosity?

    It’s not really issues, but I know that something like this:

    array.filter(e => <condition>).map(e => <some mapping function>)
    

    is concise and reading like how it should be done, but it’s just less efficient than just looping over the array and doing all the things in place (because every time filter or map or reduce or all the functional niceties is used, a new array is allocated and you want to absolutely avoid allocations if possible). Javascript is a little bit dumb when it comes to allocations (in design itself, something like V8 can’t really help here at least most of the time).

    In Rust the same is often even more efficient than manually looping over, doing it in place it (probably because of aliasing guarantees). I saw a few interesting posts way back on reddit, that found this out, the (performance) equivalent imperative version was ugly to read. So the default way one would approach the problem in Rust is often also the most efficient, which is obviously very nice to have.

    Or another thing I would like to use more often in Java/Typescript is factory functions, something like this:

    function createMyObject(param1, param2) {
      // do something with param1 and param2
      // a few functions that could be seen as methods
      function myMethod() {
         param1 += 1 + param2;
      }
      return Object.freeze({
        myMethod,
        param1
      })
    }
    

    But also here, everytime createMyObject is run, all of the stuff/methods inside is allocated again (instead of creating/compiling function references), maybe this can/will be optimized at some time (probably with a transpiler/compiler again, yay -.-).

    So in general: writing nice (to read) code in Typescript/Javascript often leads to a lot of allocations, and I detest that a language is designed in a way where you want to write nice looking code but you’re punished for it with inefficiency.

    • Psilves1
      link
      fedilink
      English
      arrow-up
      1
      ·
      1 year ago

      I’ve gotta say that was a really good argument and was incredibly well written.

      Also very much agree with the compiler comment. Learned a lot from doing that project (twice actually) in college