Putain les gars... Au lieu de critiquer le JS étudiez-le un peu en profondeur et renseignez-vous sur le fonctionnement de la chaîne de prototype notamment.
Ce n'est pas un langage orienté objet mais orienté prototype, la gestion des objets est donc considérablement différente du C++ et c'est tout à fait normal.
Faire un copie d'un objet consiste à copier l'ensemble de ses propriétés ET de son prototype (qui lui-même contient les méthodes).
Suite aux spécifications d'ES2015, il est possible de le faire de manière explicite et condensée via (en reprenant ton exemple) :
let obj_dump = Object.assign(Object.create(C.prototype), obj);
Néanmoins, ça ne crée pas une copie profonde stricte, les objets internes sont passés en référence, il faut donc également les copier en itérant manuellement sur les propriétés.
Pour le multithreading y'a les Web Workers qui font le taf.
Pour faire de l'asynchrone rien de mieux que les Promises.
Le JavaScript est un langage merveilleux une fois bien maîtrisé mais il ne faut pas l'utiliser pour tout et n'importe quoi.
Ceci dit, je rejoins les collègues et te conseille :
- soit de le faire en full asynchrone en utilisant l'event loop
- soit de le faire dans un autre langage tel que le Rust qui serait parfaitement adapté à ton besoin