Windows XP is dead. Outside of governments who are still stuck using old machines, Microsoft doesn't even support it any more. I'd say that the minimum Windows OS you should target is Windows 7. Even though it's near or at EOL, lots of people who didn't like what 8/10 became still use it.
Never heard of Emscripten until now. Looks pretty cool, but it's outside my wheelhouse.
Regarding using the right tool for the job, well, first you need to define the job. Every language will allow you to implement algorithms and data structures, and manipulate strings to a certain extent, and with a certain amount of ease. The question, really, is what do you need? Like, PHP doesn't have pointers, and the way it handles references is kinda half-assed. So, you wouldn't be able to implement your own dynamically linked list (as an example) in it. That said, there are built-in structures/functions that may do what you want. C# is more liberal with direct memory access, but requires such code be marked as unsafe (which does somethings with the intermediary language it gets compiled down into).
And, yeah, part of it is knowing what the strengths and weaknesses of any particular language are. For whatever reason, programming languages are a lot like video game consoles - everyone has their favorite, and there's lots of vocal fans/critics out there saying that this one is great and the other one is terrible, so it's hard to get a clear idea of what each language is like. Branching out and trying different languages for yourself is one of the best ways to learn those things.
Never heard of Emscripten until now. Looks pretty cool, but it's outside my wheelhouse.
Regarding using the right tool for the job, well, first you need to define the job. Every language will allow you to implement algorithms and data structures, and manipulate strings to a certain extent, and with a certain amount of ease. The question, really, is what do you need? Like, PHP doesn't have pointers, and the way it handles references is kinda half-assed. So, you wouldn't be able to implement your own dynamically linked list (as an example) in it. That said, there are built-in structures/functions that may do what you want. C# is more liberal with direct memory access, but requires such code be marked as unsafe (which does somethings with the intermediary language it gets compiled down into).
And, yeah, part of it is knowing what the strengths and weaknesses of any particular language are. For whatever reason, programming languages are a lot like video game consoles - everyone has their favorite, and there's lots of vocal fans/critics out there saying that this one is great and the other one is terrible, so it's hard to get a clear idea of what each language is like. Branching out and trying different languages for yourself is one of the best ways to learn those things.