this post was submitted on 06 Jul 2023
72 points (97.4% liked)

Programming

17402 readers
135 users here now

Welcome to the main community in programming.dev! Feel free to post anything relating to programming here!

Cross posting is strongly encouraged in the instance. If you feel your post or another person's post makes sense in another community cross post into it.

Hope you enjoy the instance!

Rules

Rules

  • Follow the programming.dev instance rules
  • Keep content related to programming in some way
  • If you're posting long videos try to add in some form of tldr for those who don't want to watch videos

Wormhole

Follow the wormhole through a path of communities !webdev@programming.dev



founded 1 year ago
MODERATORS
you are viewing a single comment's thread
view the rest of the comments
[–] Psilves1@programming.dev 16 points 1 year ago (2 children)

I very much disagree. In Python almost everything is abstracted away from you and it's dynamically and weakly typed. It's also interpreted.

Compare that to C which is literally one step above assembly, strongly and statically typed, as well as compiled.

They've got completely different use cases and have almost no overlap imo.

[–] philm@programming.dev 4 points 1 year ago (1 children)

And yet I wouldn't touch C nowadays if I can avoid it anyhow. Zig (simple low level) and Rust (where e.g. C++ would be used, and for large higher level projects, as it really composes nicely) are IMHO the way modern systems programming is done

[–] Psilves1@programming.dev 2 points 1 year ago (1 children)

That's fine, but there are still plenty of use cases where you'd have to use C instead of anything else. I agree though, Rust is a better language than the monstrosity that is C++.

Starting a new personal project is different from what the industry requires. If you're working on integrated systems, guess which language you'll likely have to work with?

It's kind of like Typescript vs Javascript. There's zero reason to start a new project with Javascript, but there's still plenty of projects out there that use it.

[–] philm@programming.dev 3 points 1 year ago (1 children)

Well depending on the "depth" of the stack Rust is probably the first choice by now for new projects in "the" industry (speaking of experience, a lot of companies are evaluating this choice now).

Have you tried Zig instead for low level stuff? It's a little bit simpler AFAIK and probably a good choice when the project doesn't get too big (in which case I would prefer Rust because of its safety guarantees). FFI is always an option...

With JSdoc and IDE support I can still understand why one would choose Javascript instead of Typecsript (having worked with both more extensively) and with e.g. https://github.com/tc39/proposal-type-annotations the boundaries will slowly fade. (mainly to avoid a massive stack of bundling and tooling software)

But I would absolutely avoid either honestly if possible Javascript (or the "static" typing Typescript is adding on top) is still not really comparable to a real strict statically typed language (apart from all the weirdness that consists in either). The way I want to program in it (functional, composable, avoiding this) is unfortunately relatively inefficient... I still don't get why it was "chosen" as the web language...

[–] Psilves1@programming.dev 1 points 1 year ago* (last edited 1 year ago) (1 children)

I don't use low level languages much anymore, but I'm glad to hear Rust is taking over for new projects (as it should imo) . C++ is a monstrosity of a language that's overly complicated.

Maybe it's because it's the language I learned computer science in, but I feel (maybe hope is a better) that C will stick around. I firmly believe it's the best tool for students to learn how a computer intuitively works.

As for JS/TS, I only skimmed the github link you sent, but I don't understand how that's too different from TS. Seems to be a slightly different way of accomplishing static typing.

Also I mostly do front-end with TS, but what issues do you run into doing functional programming with TS out of curiosity? Never tried to do that

[–] philm@programming.dev 2 points 1 year ago (1 children)

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@programming.dev 1 points 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

[–] theherk@lemmy.world 4 points 1 year ago (1 children)

Agree except Python is strongly typed.

[–] TerrorBite@meow.social 0 points 1 year ago (2 children)

In what way? Python has type hinting, but it's purely for linting and is not enforced at runtime. Python has always had dynamic duck typing.

@theherk @programming

[–] theherk@lemmy.world 5 points 1 year ago* (last edited 1 year ago) (1 children)
[–] TerrorBite@meow.social 1 points 1 year ago (1 children)

Hi there! Looks like you linked to a Lemmy community using an URL instead of its name, which doesn't work well for people on different instances. Try fixing it like this: !programming@programming.dev

Hi there! Looks like you linked to a Lemmy community using an URL instead of its name, which doesn't work well for people on different instances. Try fixing it like this: !programming@lemmy.world/u/theherk) [@programming](https://programming.dev