J'envisage d'écrire un nouveau produit logiciel. Les performances seront critiques, je me méfie donc de l’utilisation d’un langage interprété ou utilisant un calque d’émulation (read java).
Ce qui m'amène à penser à utiliser C (ou C ++), mais ils sont assez longs dans la dent. Je n'ai pas utilisé non plus depuis longtemps. J'ai pensé qu'au cours des 20 dernières années, quelqu'un a probablement créé quelque chose qui est raisonnablement populaire, agréable à coder et compilé.
Quelles alternatives plus modernes existe-t-il à C pour écrire du code compilé hautes performances?
Si C ++ est une bête différente de ce qu’elle était il ya 15 ans, j’envisagerais cela, j’imaginais que j’avais supposé qu’il posait des problèmes inhérents.
La parallélisation serait importante, mais probablement pas sur plusieurs machines.
la source
Réponses:
Un langage en développement appelé The Rust Programming Language poursuit des objectifs similaires à ceux du C ++, notamment des abstractions gratuites et un contrôle précis de la gestion de la mémoire. Cela dit, il s’agit peut-être du candidat le plus remarquable à venir, bien qu’il soit encore très jeune.
En dehors de Rust, il n’existe pas vraiment d’autre alternative populaire qui compile en code natif. Il y a Delphi et D aussi, bien sûr, mais ils ne sont pas aussi rapides, populaires ou utilisés. La langue Go de Google pourrait être candidate, mais elle est encore très jeune et vise un domaine légèrement différent.
Cependant, notez que C # (en supposant la plate-forme Microsoft) et Java peuvent ne pas être aussi lents même s’ils s’exécutent sur une machine virtuelle; la compilation de code juste à temps peut permettre certaines optimisations que les compilateurs traditionnels ne sont pas en mesure d'appliquer, en raison du manque d'informations sur l'état et l'environnement du programme.
Franchement, personnellement, je ne considérerais pas le C comme candidat si le C ++ était une option, principalement parce que le C ++ moderne est plus sûr, fonctionne à un niveau d'abstraction plus élevé, est plus expressif et n'a pratiquement aucune perte de performance par rapport au C (dans certains cas C ++ est notamment plus rapide). En termes simples, C ++ fournit tout ce que C fournit et plus encore. La plupart des fonctionnalités C sont considérées comme "obsolètes" et la bibliothèque standard C ++ fournit des alternatives plus sûres, plus rapides et plus intuitives.
la source
Il existe également Ada , qui compile en code natif et est portable sur diverses plates-formes dans les limites de sa bibliothèque standard. La langue est vivante et se poursuit, avec la mise à jour la plus récente des normes linguistiques (connue sous le nom de Ada 2012).
Résumé rapide pour ceux qui ne connaissent pas Ada:
la source
Il y a 15 ans, il n'y avait pas de standard C ++. Le second a été publié l'année dernière. Les meilleures pratiques C ++ ont beaucoup changé au cours des 5 années qui ont suivi la publication de la norme 98 et elles le sont encore avec la publication de la norme 11.
la source
Pourquoi les gens insistent toujours pour chercher de nouvelles langues?
C ++:
Le seul inconvénient de C ++ est que vous devez apprendre un peu. C'est ça.
Comparez cela à d'autres langues qui sont une ou plusieurs de:
IMHO, moins nous utiliserons et prendrons en charge les langues, meilleure sera la situation.
Cela entraîne des améliorations automatiques dans les cadres pour la langue, le support, la documentation, le travail des comités de normalisation, de meilleurs livres, plus de connaissances, des logiciels plus faciles à prendre en charge, de meilleurs modèles, des cycles de support de langue plus longs et un code plus habile écrit dans la langue.
Je sais que les gens vont baisser la voix, mais réfléchissez-y, vraiment.
la source
const
problèmes de correction , etc. Quiconque a lu Effective C ++ (comme Coder le prétend) et affirme que C ++ est facile a une déconnexion mentale.C / C ++ est plutôt long dans la dent .... c'est une bonne chose . Cela implique qu'ils ont été suffisamment bien conçus (ahem) pour qu'ils soient encore très utilisables, que beaucoup de gens les utilisent pour les tâches quotidiennes et que vous trouverez un grand nombre de développeurs qui en sont des experts. La maturité est quelque chose à préserver.
Si vous passez tout votre temps à chercher quelque chose de nouveau, simplement parce que son nouveau produit doit être meilleur, vous êtes déçus. Ceci s’applique aux langages logiciels, aux systèmes d’interface graphique (prenez note, Microsoft et Gnome) et aux amoureux (prenez note, jeunes filles :))
Maintenant, certes, si votre expérience du C ++ a 20 ans, lorsque le code C ++ était généralement codé comme le C, il était peut-être temps de réévaluer le langage, toutes les beaucoup plus aujourd’hui, et quelques efforts de normalisation ont légèrement élargi le langage pour le rendre très différent de ces vieux développements de type C. Non pas que C soit mauvais aussi - c’est un langage parfait pour de nombreux types de tâches de codage!
la source
Le standard actuel de C ++ est le C ++ 11 , qui a été publié en 2011. Il ne s'agit donc pas d'un standard vieux de 20 ans. Et il y a eu de nombreuses normes entre les deux. Chacun d'entre eux introduisant de nombreuses améliorations de performances.
Les compilateurs ont également été en constante amélioration. Ils sont bien meilleurs en optimisation qu’avant.
Les formats exécutables se sont également améliorés. Il y a 20 ans, vous aviez eu.out , maintenant vous avez ELF .
Globalement, la suggestion que C ++ n’a pas changé en 20 ans ne peut être plus éloignée de la vérité.
De plus, gardez à l'esprit que C et C ++ sont des langages très différents.
la source
Je ne suis pas un grand expert de cette langue, mais je pense que OCaml pourrait être une option intéressante à examiner.
OCaml est un langage compilé, fonctionnel / orienté objet. Pour une comparaison des performances avec C ++, reportez-vous à la section Comparaison de traceurs C ++ vs OCaml: Ray . Bien entendu, il s'agit d'un exemple très spécifique et il convient d'effectuer des tests plus approfondis pour avoir une meilleure idée de la performance d'OCaml.
la source
Cela dépend de ce que votre produit va faire. Si les performances sont vraiment essentielles, le langage de prédilection reste le fortran . Je n'écarterais pas non plus Java - il est utilisé dans de nombreuses applications de trading financier à volume élevé. Erlang vaut le coup d'oeil si votre domaine problématique nécessite une grande simultanéité. Objective-C est bien, mais j'ignore à quel point il est pris en charge en dehors de l'écosystème Apple (au-delà des compilateurs et du runtime de base). J'ai également entendu de bonnes choses sur les performances de Haskell, mais je ne suis pas sûr qu'il s'agisse de performances absolues ou simplement de performances par rapport à d'autres langages fonctionnels.
la source
Quand vous dites que votre projet est sensible à la performance, vous voulez dire chaque ligne de code? Ou bien, comme d'habitude, y a-t-il un pourcentage plus faible de performances critiques tandis que le reste correspond au code de votre entreprise courante?
Après avoir répondu à cette question, quel est le plus grand risque pour votre projet: que le résultat final soit trop lent ou que vous ne le finissez jamais?
En supposant que vous répondiez à la seconde pour les deux, vous devriez développer dans un langage de niveau supérieur prenant en charge l’interopérabilité native (Python, Ruby, la famille .Net l’ont tous). Tout d'abord, terminez le projet. Puis profilez, optimisez, rincez, répétez. Ensuite, envisagez de réécrire le segment de choix de votre application en code natif et d’intégrer ce code natif à votre produit fini.
la source
Vala est similaire à Java et C #, compile en code natif (ou en code source C si vous préférez) et est très rapide . Il nécessite GLib pour ses bits orientés objet, et il est écrit par des pirates Linux pour des pirates Linux, donc si votre domaine est Windows, il se peut que ce ne soit pas très bon.
la source
Objective-C est une alternative moderne et compilée au C et C ++ droits. Il dispose d’une gestion de la mémoire à la fois ordonnée et déterministe, et le moteur d’exécution OO de passage de messages a été optimisé pour la performance.
Il est disponible via GCC et CLang et il existe des bibliothèques d'applications telles que GNUStep et Cocotron qui fonctionnent sur diverses plates-formes.
Si vous effectuez un travail de haute performance, je vais supposer que c'est un peu un travail de calcul ou un autre travail de division et de conquête au lieu de l'interface utilisateur, ce qui signifie que vous pouvez utiliser l'interface utilisateur dans la langue la plus facile pour vous, par exemple HTML via un mini serveur http.
la source
Je ne l'ai jamais utilisé, mais l'un de mes amis juré par Cython, qui vous permet d'utiliser des primitives de style C dans des parties critiques de votre code tout en conservant la syntaxe python générale et en exploitant pleinement les constructions de plus haut niveau pour réduire le développement. temps partout ailleurs.
la source