Microsoft donne un sérieux coup d'accélérateur à sa technologie .NET

Microsoft donne un sérieux coup d’accélérateur à sa technologie .NET

De l'open source ? Du code natif ?

Avatar de l'auteur
Vincent Hermann

Publié dans

Logiciel

04/04/2014 5 minutes
136

Microsoft donne un sérieux coup d'accélérateur à sa technologie .NET

Même si les annonces concrètes de produits sont une part importante de la conférence BUILD qui se tient actuellement à San Francisco, Microsoft fournit des informations plus discrètes, car techniques, mais dont l’impact est potentiellement plus important. C’est le cas de tout ce qui touche à la plateforme de développement .NET, avec notamment la création d’une fondation open source et la présentation d’un nouveau compilateur qui jouera certainement un grand rôle dans l’avenir.

.net fondation

Une fondation .NET centrée sur le code open source 

La création d’une fondation .NET n’était pas un évènement particulièrement attendu. Elle représente pourtant une étape significative dans le cycle de vie de la plateforme car une grande partie des éléments qui la composent passe en modèle open source. La fondation comprend déjà des représentants de Microsoft, GitHub et Xamarin et, comme dans le cas de Mozilla, servira à assurer la gouvernance globale de la plateforme.

 

En l’état, la fondation .NET débute son existence avec un total de 24 projets. Parmi eux, 18 proviennent de Microsoft, et on retrouve parmi les plus importants tout ce qui touche à ASP.NET ou presque, WinJS ou encore le nouveau compilateur Roslyn, qui porte désormais l’appellation officielle « .NET Compiler Platform ». Notez que Roslyn en particulier sera disponible sous licence Apache 2.0. Six autres projets proviennent de Xamarin, notamment MimeKit et MailKit. Pour rappel, Xamarin est une entreprise produisant des outils qui permettent aux développeurs de créer des applications iOS et Android depuis Visual Studio avec la plateforme .NET. Son directeur technique, Miguel di Icaza, est d’ailleurs l’un des membres fondateurs de la fondation .NET.

 

Certains seront sans doute étonnés de voir Microsoft basculer des pans entiers de sa technologie vers des licences open source, mais la firme change de fusil d’épaule. Il s’agit pour simplifier d’un choix pouvant avoir un impact concret sur le taux d’adoption de ses technologies. Comme nous l’indiquions précédemment dans l’actualité sur Office tactile pour Windows, le monde applicatif devient plus important pour Microsoft que le système d’exploitation lui-même. La diffusion des technologies menant aux applications est donc une étape cruciale, autant que le modèle de développement, devenu par ailleurs « universel ».

Un compilateur .NET pour produire du code natif 

Si la fondation sera certainement importante, des annonces plus techniques ont également été réalisées. C’est le cas de la préversion d’un nouveau compilateur baptisé « .NET Native » qui, comme son nom l’indique, est capable de compiler un code natif depuis un projet .NET. Cette préversion peut être installée sur un Visual Studio 2013 équipé de la Release Candidate de l’Update 2. Le statut non finalisé du projet limitera d’ailleurs les plateformes supportées au x64 et à ARM, le support du x86 devant arriver plus tard, ainsi qu’au langage C#.

 

.net native

 

Contrairement à une compilation .NET classique, le résultat est une véritable application native, avec tout ce que cela implique. Microsoft annonce des temps de démarrage jusqu’à 60 % plus rapide, une conséquence logique puisque le framework .NET n’a pas besoin d’être chargé, et aucune machine virtuelle n’est créée. Autre conséquence, l’empreinte mémoire est d’autant réduite. L’objectif global est donc de garder la productivité du C# tout en permettant les performances du C++.

 

Le développement du projet reste sous la houlette de .NET avec les avantages qui sont liés à ce type de plateforme. Il s’agit donc bien d’un code MSIL qui est envoyé au compilateur. Mais le travail de ce dernier change complètement. Le code concerné du framework est compilé en même temps et l’application ainsi produite est autonome. Elle ne dépend donc plus d’une version particulière du framework.

Une étape importante dans la nouvelle stratégie 

Le travail réalisé aura à terme un impact très important sur les boutiques d’applications. Le développeur enverra en effet un code unique à Microsoft pour une publication sur le Store. De là, il sera compilé pour correspondre à l’architecture de l’appareil qui demande à télécharger l’application. Pour l’instant, la préversion ne permet de créer que des applications Windows de type Modern UI mais les évolutions permettront plus tard de réaliser la compilation de tout type de projet. Ce sera notamment le cas des applications de bureau, Microsoft indiquant dans sa FAQ que ces dernières « sont une part importante » de sa stratégie. Pour l’instant, cette « compilation dans le cloud » reprend le modèle de Windows Phone 8 et de sa boutique.

 

.net native

 

Lorsque le compilateur .NET Native sera disponible en version finale, il pourra être utilisé avec l’intégralité des projets .NET. Cependant, bien qu’un tel projet puisse largement faire progresser l’utilisation de la plateforme, il n’a pas vocation à remplacer la compilation habituelle. Il s’agira d’un produit complémentaire car le code natif ne répond pas à toutes les situations, et certains éditeurs préfèreront garder le fonctionnement par machine virtuelle, qui offre d’autres avantages.

 

Ceux qui souhaitent en savoir davantage sur .NET Native pourront lire l’annonce officielle du projet, ainsi que la FAQ, qui répond à de nombreuses questions.

Écrit par Vincent Hermann

Tiens, en parlant de ça :

Sommaire de l'article

Introduction

Une fondation .NET centrée sur le code open source 

Un compilateur .NET pour produire du code natif 

Une étape importante dans la nouvelle stratégie 

Fermer

Commentaires (136)


C’est ce que j’avais pressentit avec la liste des sessions de la BUILD, .Net revient clairement sur le devant de la scène cette année !



Excellente nouvelle <img data-src=" /><img data-src=" /><img data-src=" />


Charon est demandé dans les commentaires pour parler Tree-shaking, Roslyn et tout et tout <img data-src=" />



J’espère qu’on va pas avoir des commentaires du type “de l’open source made in MS cay le mal” <img data-src=" />


Le 04/04/2014 à 16h 37

Retour du bouton démarrer, compilation native de .NET, Windows gratuit, décidément ces temps-ci MS annonce plein de bonnes nouvelles.


Depuis le début de cette techno ils ont laissé la porte ouverte aux implémentations libre. Quelques projet ont été fait dont Mono pour Linux. Avec cette fondation et cette politique tout seras au même niveau et non plus une version affaiblt pour les plateforme autre que W\(.

µ\)
oft a toujours eu une politique d’ouverture sur les domaine ou il n’est pas dominant, mais une fois le cas il verrouille tout <img data-src=" />


de l’open source made in MS cay le mal <img data-src=" />



Plus sérieusement, je suis bien content de voir la direction que peut prendre Microsoft ces derniers temps.

On dirait que les douches froides à répétition leur ont permises d’écouter un peu plus les doléances des utilisateurs.

J’avoue que cette tournure des évènements me plais au plus haut point et pourtant je suis très loin d’être extrémiste de chez MS (ou de linux d’ailleurs). Je suis plutôt neutre.








arno53 a écrit :



Charon est demandé dans les commentaires pour parler Tree-shaking, Roslyn et tout et tout <img data-src=" />



J’espère qu’on va pas avoir des commentaires du type “de l’open source made in MS cay le mal” <img data-src=" />





Je ne pourrais pas trop intervenir,je rentre chez moi ce week end. Je dois tout préparer <img data-src=" />









charon.G a écrit :



Je ne pourrais pas trop intervenir,je rentre chez moi ce week end. Je dois tout préparer <img data-src=" />







C’est pas grave je vais déterrer tes vieux comms <img data-src=" />

Mais que ce soir, là je rentre aussi chez moi …



D’après ce que j’ai compris c’est pas l’ensemble .NET, c’est juste quelques blocs:

http://linuxfr.org/users/efournie/journaux/microsoft-libere-leur-compilateur-c





Comme le diable est dans le détail, c’est souvent ces derniers blocs qui s’avère le plus handicapant pour un vrai usage Libre sinon c’est de l’open source ready only comme le code de DOS 1.1 et de Word 1.1 vous pouvez lire mais surtout pas réutiliser.


Enfin je donne juste mon avis perso. Ca devrait pousser le .NET plus vers le multiplateforme. C’est une bonne chose cela devrait augmenter le nombre de développeurs .NET et augmenter la cible d’utilisateurs.



Il y avait pas mal de rumeurs sur un portage sur android et diverses choses du même acabit. Mais au vu de ces informations récentes ça parait plus crédible.



Microsoft a commencé le virage sur devices+services et s’adapte en conséquence :)


C’est là qu’on voit que les temps changent : D’abord le support du x64 et de l’ARM, celui du x86 plus tard.








arno53 a écrit :



J’espère qu’on va pas avoir des commentaires du type “de l’open source made in MS cay le mal” <img data-src=" />





C’est toujours un pas en avant… Mais faut garder les pieds sur terre, quand une multinationale publie une techno en OpenSource, c’est pas simplement pour faire plaisir arno53…



Je veux dire, quand tu te permet de verouiller un marché pendant 20ans à grand coup d’API proprio, de royalties, et logiciels pourris (bonjour office, ie6), tu te permets pas de debarquer comme une fleur en souriant et en clamant:

“Oui, chez Microsoft, on a une ethique! Nous aussi on veut contribuer à l’évolution de l’informatique!”












Yzokras a écrit :



Retour du bouton démarrer, compilation native de .NET, Windows gratuit, décidément ces temps-ci MS annonce plein de bonnes nouvelles.







Changement de PDG et de mentalité.



Il a compris qu’il fallait évoluer ou disparaître peut à peut <img data-src=" />

Il n’est plus le maître étalon de l’informatique, bonne stratégie Microsoft.



Mieux vaut tard que jamais, ils auraient du prendre cette décision il y a 10 ans (ça a été fait par Sun pour Java en 2006).

En attendant le concurrent direct, Java, est multi-plateformes, possède les meilleurs bindings/langages (Python, Ruby, Scala) et un écosystème open source beaucoup plus enviable.

Ça vaut ce que ça vaut, mais Java est le 3e langage le plus populaire sur GitHub, C# est 9e derrière Objective-C :http://adambard.com/blog/top-github-languages-for-2013-so-far/



Bref la plateforme se fait bouffer par tous les cotés (JavaScript, Java, Objective-C…), fallait bien qu’ils réagissent.








arno53 a écrit :



J’espère qu’on va pas avoir des commentaires du type “de l’open source made in MS cay le mal” <img data-src=" />





Si la licence n’est pas libre, ça ne change surtout rien du tout, ça restera une solution propriétaire pour enfermer les clients naïfs.









vloz a écrit :



C’est toujours un pas en avant… Mais faut garder les pieds sur terre, quand une multinationale publie une techno en OpenSource, c’est pas simplement pour faire plaisir arno53…



Je veux dire, quand tu te permet de verouiller un marché pendant 20ans à grand coup d’API proprio, de royalties, et logiciels pourris (bonjour office, ie6), tu te permets pas de debarquer comme une fleur en souriant et en clamant:

“Oui, chez Microsoft, on a une ethique! Nous aussi on veut contribuer à l’évolution de l’informatique!”





Enfin là c’est des licences Apache 2.0, c’est du vrai libre <img data-src=" />



Et le monde a changer, le business modèle de ces 20 dernières années chez Microsoft est voué a disparaitre et Microsoft l’a bien compris et compte vraiment se transformer en une société de service et de matériel… Personnellement je paris un Schoko-bons que le prochain OS totalement neuf (donc pas basé sur NT) de Microsoft sera Open Source.



On en reparlera dans les 5 ans qui viennent mais cette build + la nomination de Nadella me conforte dans cette idée.









tanguy_k a écrit :



Ça vaut ce que ça vaut, mais Java est le 3e langage le plus populaire sur GitHub,





Comme tu dit “Ça vaut ce que ça vaut”, Github est surtout representatif pour le developpement Open Source (c’est lié à la gratuité des repository ouverts)…

Les gens qui veulent versionner dans le privé, soit ils utilisent bitbucket (gratuit) soit ils utilisent leur propre serveur…









wagaf a écrit :



Si la licence n’est pas libre, ça ne change surtout rien du tout, ça restera une solution propriétaire pour enfermer les clients naïfs.







Ouais sinon en 3 clic t’aurais pu verifier par toi meme les licences …



Ce lien te permet de te rediriger sur chaque codeplex des projets permettant de voir la licence pas libre



La plupart sont sous Apache 2.0, seul quelques unes (au moins 3) sont sous Microsoft Public License









wagaf a écrit :



Si la licence n’est pas libre, ça ne change surtout rien du tout, ça restera une solution propriétaire pour enfermer les clients naïfs.





C’est une licence apache 2.0 et c’est libre….

Sauf si d’après ta définition un logiciel Microsoft n’est pas libre <img data-src=" />









charon.G a écrit :



C’est une licence apache 2.0 et c’est libre….





<img data-src=" />









vloz a écrit :



C’est toujours un pas en avant… Mais faut garder les pieds sur terre, quand une multinationale publie une techno en OpenSource, c’est pas simplement pour faire plaisir arno53…



Je veux dire, quand tu te permet de verouiller un marché pendant 20ans à grand coup d’API proprio, de royalties, et logiciels pourris (bonjour office, ie6), tu te permets pas de debarquer comme une fleur en souriant et en clamant:

“Oui, chez Microsoft, on a une ethique! Nous aussi on veut contribuer à l’évolution de l’informatique!”









Tu connais le dicton: “ya que les cons qui ne changent pas d’avis” …



En tout cas ça fait du bien de voir Microsoft reprendre un peu du poil de la bête. Espérons que ça continue comme ça.









tuxfanou a écrit :



de l’open source made in MS cay le mal <img data-src=" />



Plus sérieusement, je suis bien content de voir la direction que peut prendre Microsoft ces derniers temps.

On dirait que les douches froides à répétition leur ont permises d’écouter un peu plus les doléances des utilisateurs.

J’avoue que cette tournure des évènements me plais au plus haut point et pourtant je suis très loin d’être extrémiste de chez MS (ou de linux d’ailleurs). Je suis plutôt neutre.







C’est vachement contradictoire comme phrase surtout !



<img data-src=" />



<img data-src=" />



Et microsoft réinventa GCJ


cela veut dire qu’un code compilé en natif ne sera plus aussi facilement décompilable non ?



petit hors sujet mais pas tant que ça (.net + multiplateforme), quelqu’un a t’il un retour d’expérience sur dot42 ?








mimoza a écrit :



Depuis le début de cette techno ils ont laissé la porte ouverte aux implémentations libre. Quelques projet ont été fait dont Mono pour Linux. Avec cette fondation et cette politique tout seras au même niveau et non plus une version affaiblt pour les plateforme autre que W\(.

µ\)
oft a toujours eu une politique d’ouverture sur les domaine ou il n’est pas dominant, mais une fois le cas il verrouille tout <img data-src=" />





Tient, ça me rappelle Google <img data-src=" />









tanguy_k a écrit :



Mieux vaut tard que jamais, ils auraient du prendre cette décision il y a 10 ans (ça a été fait par Sun pour Java en 2006).

En attendant le concurrent direct, Java, est multi-plateformes, possède les meilleurs bindings/langages (Python, Ruby, Scala) et un écosystème open source beaucoup plus enviable.

Ça vaut ce que ça vaut, mais Java est le 3e langage le plus populaire sur GitHub, C# est 9e derrière Objective-C :http://adambard.com/blog/top-github-languages-for-2013-so-far/



Bref la plateforme se fait bouffer par tous les cotés (JavaScript, Java, Objective-C…), fallait bien qu’ils réagissent.





Oui mais non, ca ne veut rien dire. Ce n’est juste que le nombre de depots avec leur langage.

C’est un peut comme dire que sur Codeplex le C# est le plus populaire que les autres, juste par ce que tu y trouve plus de dépot.



Yeah !



En voilà une bonne nouvelle ! Bravo à M$ pour une fois :) maintenant il ne reste plus qu’à attendre quelques années pour voir les réels effets <img data-src=" />


Excellentes nouvelles et tant mieux, j’ai hâte de voir si la mayonnaise du développement multi-plateformes à la dotnet prend. Ce millésime de build aura décidément été un grand crû.









tanguy_k a écrit :



Ça vaut ce que ça vaut, mais Java est le 3e langage le plus populaire sur GitHub, C# est 9e derrière Objective-C :http://adambard.com/blog/top-github-languages-for-2013-so-far/





Github n’est représentatif que de l’open-source, le classement dans les offres d’empois internationales est très différent et c# y est souvent troisième aux côtés de Java et JS.



C#/Net c’est vraiment bien.

Achetez le.

Quoi ? Ca marche que sur Windows ? Bah achetez windows.

De toutes façons, on est leader sur PC.



Hum… bon ok, y aussi des machines Linux.

Bah prenez le projet Mono… Non, on n’assure pas la compatibilité. Et puis quoi encore.



Bon ok, on a fait une version express gratuite

Allez-y, prenez là.

Non, elle ne marche pas sous Linux. Faut pas abuser.



Ah… Y a aussi les smartphones.

Bon, on a fait une version C#/Net pour smartphone

Allez-y, prenez là



Quoi ? Ca marche que sur Windows Phone ? Bah achetez windows.Phone

De toutes façons, on est lead… Ah ! Non. Mais achetez le quand même



Bon ok, on a fait une version multi-plateforme.

et gratuite.

et open-source.

et libre.



Bordel ! Mais vous allez choisir C#/Net ou quoi ?!








charon.G a écrit :



Enfin je donne juste mon avis perso. Ca devrait pousser le .NET plus vers le multiplateforme. C’est une bonne chose cela devrait augmenter le nombre de développeurs .NET et augmenter la cible d’utilisateurs.



Il y avait pas mal de rumeurs sur un portage sur android et diverses choses du même acabit. Mais au vu de ces informations récentes ça parait plus crédible.



Microsoft a commencé le virage sur devices+services et s’adapte en conséquence :)







on dirait bien que MS espère que les solutions proposées par Xamarin sur ios vont faire de Windows la plateforme primaire de développement d’application, et qu’ensuite les devs feront un portage rapide et facile de leur appli Windows vers iOS.



quand Windows aura écrasé iOS niveau PDM sur les tablettes (c’est déjà en train de se produire en Europe sur les Smartphones), la plupart des devs devraient considerer ios comme une plateforme secondaire, et éviter objective-C au profit de .net.



Très bonne nouvelle! C’est vraiment lourd d’attendre le chargement du framework .NET… Ca va améliorer le confort d’utilisation de certains produits de ma boite! (et surtout éviter l’installation du dit framework sur tout les poste de travail…)


Microsoft et open source, c’est pas un oxymore, vous en êtes sûrs ?



En tout cas, ils ont une volonté de s’adapter aux réalités du marché, même si cela fait virage à 180°. Voyons la suite…








jmanici a écrit :



quand Windows aura écrasé iOS niveau PDM sur les tablettes (c’est déjà en train de se produire en Europe sur les Smartphones), la plupart des devs devraient considerer ios comme une plateforme secondaire, et éviter objective-C au profit de .net.





C’est pas demain la veille. iPad est pour quelques années encore l’étalon sur tablette à moins que tu ais des chifffres qui montre le déclin de ses ventes europe face à surface RT (pas x86).









Soriatane a écrit :



C’est pas demain la veille. iPad est pour quelques années encore l’étalon sur tablette à moins que tu ais des chifffres qui montre le déclin de ses ventes europe face à surface RT (pas x86).





il y a pas que la surface <img data-src=" />









Lafisk a écrit :



il y a pas que la surface <img data-src=" />







Si on parle des tablettes Windows RT, il y a pas grand chose en dehors de la surface qui fasse du bruit.



J’ai une tablette windows 8.1 Fujitsu et je peux assurer qu’elle fait du bruit. Grace à son mini-ventilateur d’au moins 3000db (à peu près).



Elle fait aussi 10 ans de plus à cotés de l’iPad air ou de l’xperia tablet z.


Ne rêvez pas, si Microsoft fais de “l’open source” c’est qu’il y a un intérêt derrière.








Jed08 a écrit :



Si on parle des tablettes Windows RT, il y a pas grand chose en dehors de la surface qui fasse du bruit.





Pourquoi ce limiter a rt ?? Il n’y a que lui qui veut ce limiter a ça car il sait que ça lui donne raison et que ça lui permet de troller en oubliant 99% des tablettes Windows









Haemy a écrit :



Ne rêvez pas, si Microsoft fais de “l’open source” c’est qu’il y a un intérêt derrière.





Et c’est bien parce que l’open-source permet à des forces colossales de trouver leur intérêt en lui contribuant que l’open-source a prospéré. Le rôle de ces grandes entreprises contributrices, motivées par des intérêts financiers, a été déterminant dans le succès des solutions open-source. L’open-source c’est un but “altruiste” atteint en mettant à profit des acteurs non-altruistes, contraints par la valeur légale des licences, et les désirs d’indépendance et de contrôle de leurs consommateurs institutionnels.



Peu importe les intérêts des uns ou des autres, seules importent leurs contributions.









arno53 a écrit :



J’espère qu’on va pas avoir des commentaires du type “de l’open source made in MS cay le mal” <img data-src=" />







L’open source c’est toujours bien, d’où qu’il provienne.



Le seul problème ici c’est que c’est un open source W$ only… donc très limité, du moins dans le monde mobile.



Je ne suis pas un spécialiste de la chose, et l’histoire était assez compliquée, mais les projets du genre mono qui visaient à avoir du .Net sur d’autres plate-formes ont été tués… il me semble.



Aussi, Open Sourcer un truc qui ne marche pas est souvent une “opération de la dernière chance” en espérant attirer des développeurs (sans les payer !).



Bref, Wait & See !









Haemy a écrit :



Ne rêvez pas, si Microsoft fais de “l’open source” c’est qu’il y a un intérêt derrière.









Non c’est vrai ? Une entreprise qui chercherait des intérêts pour faire quelque chose, ça alors … <img data-src=" />









methos1435 a écrit :



Non c’est vrai ? Une entreprise qui chercherait des intérêts pour faire quelque chose, ça alors … <img data-src=" />





Bah, à entendre certains, on a vraiment l’impression que Microsoft fait désormais dans la charité…









vloz a écrit :



Bah, à entendre certains, on a vraiment l’impression que Microsoft fait désormais dans la charité…





En tout cas c’est un peu le cas de Bill Gates :).



Et surtout qu’avec les intérêt qu’il peut gagner, donc pas vraiment d’argent de sa propre poche…








127.0.0.1 a écrit :



C#/Net c’est vraiment bien.

Achetez le.

Quoi ? Ca marche que sur Windows ? Bah achetez windows.

De toutes façons, on est leader sur PC.



Hum… bon ok, y aussi des machines Linux.

Bah prenez le projet Mono… Non, on n’assure pas la compatibilité. Et puis quoi encore.



Bon ok, on a fait une version express gratuite

Allez-y, prenez là.

Non, elle ne marche pas sous Linux. Faut pas abuser.



Ah… Y a aussi les smartphones.

Bon, on a fait une version C#/Net pour smartphone

Allez-y, prenez là



Quoi ? Ca marche que sur Windows Phone ? Bah achetez windows.Phone

De toutes façons, on est lead… Ah ! Non. Mais achetez le quand même



Bon ok, on a fait une version multi-plateforme.

et gratuite.

et open-source.

et libre.



Bordel ! Mais vous allez choisir C#/Net ou quoi ?!







C’est un peut le ressentis que ça me laisse.









vloz a écrit :



Bah, à entendre certains, on a vraiment l’impression que Microsoft fait désormais dans la charité…







Pas plus et pas moins que goog£e en tout cas.









Reznor26 a écrit :



Comme si cette assertion te rendait moins moutonnier, moins crédule, et moins stupide.





Mon petit je te souhaite d’avoir autant si ce n’est infiniment plus d’expérience que moi pour en juger…

Mais bon y a encore des gens qui pense que les ONG en général ne sont la que pour le bien de l’humanité et non pour le bien des bailleurs…. hein mais c’est pas grave continue a vivre dan ton monde lobotomisés…

J’ai bossé dans le milieu des gens qui parasitent le peu d’esprit qu’il te reste….

Je sais comment ça marche <img data-src=" /><img data-src=" /> <img data-src=" />



Le meilleur dans le légume c’est qu’il se prend pour un cheval :français: :findus:

<img data-src=" />









Holly Brius a écrit :









Je te la fais en plus étoffé si tu veux.





  • Moutonnier : parce que ce que tu dis n’est pas plus rebelle/subversif que de dire l’inverse. Ça s’étale partout sur le net, on a vu mieux niveau révélation.



  • Crédule : personne, toi y compris, n’est en mesure de poser une affirmation stricte et définitive sur un sujet pareil. Comme souvent la vérité se situe probablement entre les deux, au travers d’un avis mesuré et avec des éléments à piocher à droite et à gauche, et pas seulement sur des sites qui ne disent que ce que tu as envie d’entendre avant même le chargement de la page.



  • Stupide : le besoin de mépriser, de prendre de haut, de ne laisser aucune place au doute, et de transformer toute contradiction en parti pris devrait suffire.



    <img data-src=" />



Combien de développeurs ont participé aux commentaires ?



Parce que, perso, du C# natif sous Linux, ça me fout une demi molle.



Et bien que fan du cpp, il est évident qu’en matière de revenus générés, c# est loin devant car tellement facile.



Et il est évident que l’attitude de Microsoft a été vers l’ouverture depuis les dernières 5 ou 6 années.



Et encore une fois: je ne suis pas un fan de MS, loin de là, mais il faut aussi ouvrir ses yeux.








metaphore54 a écrit :



Pas plus et pas moins que goog£e en tout cas.





C’est franchement débile comme réponse… mais vraiment…









methos1435 a écrit :



Tu connais le dicton: “ya que les cons qui ne changent pas d’avis” …



En tout cas ça fait du bien de voir Microsoft reprendre un peu du poil de la bête. Espérons que ça continue comme ça.







C’est avec ce genre de raisonnement qu’on peut elire les meme politiciens pendant 20 ans, tout en se plaignant constamment de leur politique.



Comme disait Mimoza plus tot :







mimoza a écrit :



Depuis le début de cette techno ils ont laissé la porte ouverte aux implémentations libre. Quelques projet ont été fait dont Mono pour Linux. Avec cette fondation et cette politique tout seras au même niveau et non plus une version affaiblt pour les plateforme autre que W\(.

µ\)
oft a toujours eu une politique d’ouverture sur les domaine ou il n’est pas dominant, mais une fois le cas il verrouille tout <img data-src=" />







<img data-src=" />









127.0.0.1 a écrit :



Bordel ! Mais vous allez choisir C#/Net ou quoi ?!







Surtout qu’en prime, faut pas rêver, ca va trainer des morceaux entiers de la VM à bytecode qui sera intégrée à l’executable, pour tout ce qui est trop spécifique à une plateforme (processeur/SoC + capacités variables de la déclinaison de windows sous-jacente).



Donc ca va rester du lourd, en ajoutant les duplicats pour tous les exécutables générés, jusque là factorisés dans .NET!



Super, sur un smartphone avec quelques Go de stockage, qui plus est lourdement taxés chez nous au titre de la copie privée!



Il est beau notre windows phone avec un HDD 1To dedans (en 200€ de taxe copie privée)! <img data-src=" />









Maxim Killigan a écrit :



Et il est évident que l’attitude de Microsoft a été vers l’ouverture depuis les dernières 5 ou 6 années.







Bof, il y a surtout qu’ils n’ont pas trop le choix car sinon ils se retrouvent hors course faute de pouvoir proposer les mêmes avantages.



A ce sujet .NET peut dès le départ être vu comme une tentative de contrer l’open-source, recompilable sur toute plateforme ou la chaine GCC et l’OS (Linux surtout) existe. Un moyen de faire du bytecode, donc compilé sans livrer des sources, portable partout ou .NET est supporté.



Mais bon, il y a les problèmes inhérents à ce type de solution: Ton appli qui fonctionne sur PC merde lamentablement sur une tablette ARM, tu attends que Microsoft se bouge au lieu de pouvoir régler le pb toi même. Tu restes dépendant.



Et la question dépendance (supplier lock-in) qui ne se posait pas trop jusque là avec Microsoft dont le crédeau a toujours été la compatibilité de binaires (.NET en est un changement d’echelle aussi, mais incomparablement plus difficile à tester/réaliser car non limité a quelques services OS sur plateforme unique x86)… se pose désormais avec le lâchage de win32, quand bien même il faudrait passer à autre chose là n’est pas la question: Les yeux se sont soudain ouverts avec un nouveau crédeau non résolu par .NET: Plus question de se laisser verrouiller a l’avenir!









Vellou a écrit :



C’est avec ce genre de raisonnement qu’on peut elire les meme politiciens pendant 20 ans, tout en se plaignant constamment de leur politique.



Comme disait Mimoza plus tot :







<img data-src=" />









Tu sais perso la politique de Microsoft je m’en tape un peu… J’utilise un soft ou un OS parce qu’il me plait, pas en fonction de sa licence…



Donc Microsoft peut continuer à cracher du proprio, tant que j’estimerai que Windows m’est plus utile que n’importe quel autre OS, je continuerai à utiliser Windows et ce qui va autours…










vloz a écrit :



C’est franchement débile comme réponse… mais vraiment…







En même temps, il a pas tort.



Pas mal de personnes semble oublier qu’MS est un contributeur open source important depuis des années. Certes, plus par intérêt que par idéologie, mais peu importe.









vloz a écrit :



C’est franchement débile comme réponse… mais vraiment…





Non, pas du tout puisque tout a fait vrai en soit









Maxim Killigan a écrit :



Combien de développeurs ont participé aux commentaires ?



Parce que, perso, du C# natif sous Linux, ça me fout une demi molle.



Et bien que fan du cpp, il est évident qu’en matière de revenus générés, c# est loin devant car tellement facile.



Et il est évident que l’attitude de Microsoft a été vers l’ouverture depuis les dernières 5 ou 6 années.



Et encore une fois: je ne suis pas un fan de MS, loin de là, mais il faut aussi ouvrir ses yeux.





Et bien écoute, en tant qu’ancien dév C++ volontairement reconverti au C# presque depuis son introduction, ça me fait plaisir de lire ça.



Bon après moi j’en suis au stade où ses limites (*) finissent par me sortir par les yeux au point que je cherche un nouveau langage mais je crois que je vais chercher longtemps avant de trouver mieux.

<img data-src=" />





(*) Typage trop restrictif (sur ce point C# &lt; Java &lt; C++ !), absence totale d’optimisations des allocations (à voir si leur compilo AOT corrige ça) qui rend l’utilisation de certaines fonctionnalités prohibitives dans certains contextes, et une certaine verbosité dans certains cas, notamment des choses typiquement fonctionelles (types imputables & co, comme en Java ou C++)









127.0.0.1 a écrit :



C#/Net c’est vraiment bien.

Achetez le.

Quoi ? Ca marche que sur Windows ? Bah achetez windows.

De toutes façons, on est leader sur PC.



Hum… bon ok, y aussi des machines Linux.

Bah prenez le projet Mono… Non, on n’assure pas la compatibilité. Et puis quoi encore.



Bon ok, on a fait une version express gratuite

Allez-y, prenez là.

Non, elle ne marche pas sous Linux. Faut pas abuser.



Ah… Y a aussi les smartphones.

Bon, on a fait une version C#/Net pour smartphone

Allez-y, prenez là



Quoi ? Ca marche que sur Windows Phone ? Bah achetez windows.Phone

De toutes façons, on est lead… Ah ! Non. Mais achetez le quand même



Bon ok, on a fait une version multi-plateforme.

et gratuite.

et open-source.

et libre.



Bordel ! Mais vous allez choisir C#/Net ou quoi ?!





<img data-src=" /> La meilleure contribution des commentaires jusqu’ici.



On pourrait rajouter la question subsidiaire :

-quel est le logiciel que vous vendez le plus ?

-office

-l’avez-vous développé en dotnet ?

-euh, en fait non, on a juste un interpréteur VB dotnet dans les applis pour coder des macros.

-donc, vous poussez en avant une techno que vous n’utilisez pas vous-même…









HarmattanBlow a écrit :



Et bien écoute, en tant qu’ancien dév C++ volontairement reconverti au C# presque depuis son introduction, ça me fait plaisir de lire ça.



Bon après moi j’en suis au stade où ses limites (*) finissent par me sortir par les yeux au point que je cherche un nouveau langage mais je crois que je vais chercher longtemps avant de trouver mieux.

<img data-src=" />





(*) Typage trop restrictif (sur ce point C# &lt; Java &lt; C++ !), absence totale d’optimisations des allocations (à voir si leur compilo AOT corrige ça) qui rend l’utilisation de certaines fonctionnalités prohibitives dans certains contextes, et une certaine verbosité dans certains cas, notamment des choses typiquement fonctionelles (types imputables & co, comme en Java ou C++)







Curieux de savoir ce qui t’as volontairement fait passer de C++ à C# ? Je trouve le combo C++/Qt particulièrement souple et optimisé.



Han c’est bon ça !


Le 05/04/2014 à 08h 45

Stallman &gt; MS








ff9098 a écrit :



Stallman &gt; MS





Un troll qui admire un troll, comme c’est touchant <img data-src=" />



MS est un poids lourd dans l’éducation Américaine, comprenne qui pourra <img data-src=" />



Windows représente déjà une grande part des PC. Le Monde ne Fait que suivre


Le 05/04/2014 à 09h 32







Lafisk a écrit :



Un troll qui admire un troll, comme c’est touchant <img data-src=" />







Ton troll comme tu dis est en train de gagner son paris









divide a écrit :



Curieux de savoir ce qui t’as volontairement fait passer de C++ à C# ? Je trouve le combo C++/Qt particulièrement souple et optimisé.







Même avec QML, ça ne joue pas dans la même catégorie. Si on n’a pas besoin des performances ou de la souplesse de C++, ce dernier est extrêmement coûteux en temps. Sans parler du salaire des développeurs. Un bon développeur C++ est bien plus cher qu’un développeur Java/C#.



Je trouve le langage et l’API .Net très agréables, efficaces et sans prise de tête. Maintenant que la transition open-source est entamée, je vais pouvoir utiliser tout ça sans remords &lt;3









methos1435 a écrit :



Tu sais perso la politique de Microsoft je m’en tape un peu… J’utilise un soft ou un OS parce qu’il me plait, pas en fonction de sa licence…



Donc Microsoft peut continuer à cracher du proprio, tant que j’estimerai que Windows m’est plus utile que n’importe quel autre OS, je continuerai à utiliser Windows et ce qui va autours…







Comme tu disais, il y a que les cons qui changent pas d’avis <img data-src=" />









Xarkam a écrit :



[…] sur CodePlex le C# est le plus populaire que les autres





C’est juste : CodePlex a été créé par Microsoft pour les technos Microsoft.



Mais il faut garder à l’esprit que CodePlex est un nain comparé à GitHub :http://www.google.com/trends/explore#q=GitHub%2C%20CodePlex%2C%20BitBucket%2C%20…









Athropos a écrit :



C’est là qu’on voit que les temps changent : D’abord le support du x64 et de l’ARM, celui du x86 plus tard.







le x64 c’est du x86-64, cela ne change pas grand chose









HarmattanBlow a écrit :



Et bien écoute, en tant qu’ancien dév C++ volontairement reconverti au C# presque depuis son introduction, ça me fait plaisir de lire ça.



Bon après moi j’en suis au stade où ses limites (*) finissent par me sortir par les yeux au point que je cherche un nouveau langage mais je crois que je vais chercher longtemps avant de trouver mieux.

<img data-src=" />





(*) Typage trop restrictif (sur ce point C# C#?







J’aimerais bien savoir en quoi…. Java serait plutôt à la traîne, même si Java 8 change un peu la donne









ff9098 a écrit :



Ton troll comme tu dis est en train de gagner son paris





C’est pas son paris qui est trollesque mais plutôt son discours.









Lafisk a écrit :



Pourquoi ce limiter a rt ?? Il n’y a que lui qui veut ce limiter a ça car il sait que ça lui donne raison et que ça lui permet de troller en oubliant 99% des tablettes Windows





Dans ce cas peux-tu me donner un lien des chiffres de vente des tablettes windows.



Pour moi une tablettes en x86 à 700 € à qui on peux rajouter un clavier, c’est pas une tablette, c’est un pc ultra-portable qui peux devenir une tablette.



I est vrai que la limite PC/Tablette devient flou avec les hybrides.









Soriatane a écrit :



Dans ce cas peux-tu me donner un lien des chiffres de vente des tablettes windows.



Pour moi une tablettes en x86 à 700 € à qui on peux rajouter un clavier, c’est pas une tablette, c’est un pc ultra-portable qui peux devenir une tablette.



I est vrai que la limite PC/Tablette devient flou avec les hybrides.





lol, on voit bien que tu es mal renseigne, il y a une tripote de tablette atom hybride qui sont loin de 700€ euros et hautement plus utiles qu’un ipad normal ou mini … que toi tu consideres cela d’une facon ou d’une autre, je m’en tamponne par contre … Le marche est la seule reference en la matiere pas ta petite opinion qui range les choses la ou ca l’arrange.









Lafisk a écrit :



lol, on voit bien que tu es mal renseigne, il y a une tripote de tablette atom hybride qui sont loin de 700€ euros et hautement plus utiles qu’un ipad normal ou mini … que toi tu consideres cela d’une facon ou d’une autre, je m’en tamponne par contre … Le marche est la seule reference en la matiere pas ta petite opinion qui range les choses la ou ca l’arrange.





Donnes moi un lien, STP.



Ou comme dirais wikipédia: référence nécessaire.









Soriatane a écrit :



Donnes moi un lien, STP.



Ou comme dirais wikipédia: référence nécessaire.







Alors je vais t’apprendre a lire, je n’ai jamais affirme que les tablettes windows ce vendent mieux que l’ipad mais que c’est certainement pas en faisant une comparaison avec seulement la surface RT que tu vas faire une comparaison pertinente …



Oui ca ce vend moins bien, mais de la a dire que l’ipad a encore de tres bonne annees devant lui, je ne pense pas vu comment il ce fait bouffe par les trucs android deja et que quand les gens auront compris qu’une bonne tablette w8 avec un atom leur suffit et en fait 10 fois plus qu’un ipad pour un prix inferieur, t’en fais pas, cela ce vendra bien mieux.









Vellou a écrit :



Comme tu disais, il y a que les cons qui changent pas d’avis <img data-src=" />









Et ? Je change d’avis comme de chemise, suivant l’envie et les goûts du moment donc suis pas trop concerné <img data-src=" />









HarmattanBlow a écrit :



(*) Typage trop restrictif (sur ce point C# &lt; Java &lt; C++ !), absence totale d’optimisations des allocations (à voir si leur compilo AOT corrige ça) qui rend l’utilisation de certaines fonctionnalités prohibitives dans certains contextes, et une certaine verbosité dans certains cas, notamment des choses typiquement fonctionelles (types imputables & co, comme en Java ou C++)





Alors là, j’en suis parfaitement conscient :o



Au point que j’ai écrit ma librairie serveur en cpp.NET pour une appli C# :o





yl a écrit :



Bof, il y a surtout qu’ils n’ont pas trop le choix car sinon ils se retrouvent hors course faute de pouvoir proposer les mêmes avantages.



A ce sujet .NET peut dès le départ être vu comme une tentative de contrer l’open-source, recompilable sur toute plateforme ou la chaine GCC et l’OS (Linux surtout) existe. Un moyen de faire du bytecode, donc compilé sans livrer des sources, portable partout ou .NET est supporté.



Mais bon, il y a les problèmes inhérents à ce type de solution: Ton appli qui fonctionne sur PC merde lamentablement sur une tablette ARM, tu attends que Microsoft se bouge au lieu de pouvoir régler le pb toi même. Tu restes dépendant.



Et la question dépendance (supplier lock-in) qui ne se posait pas trop jusque là avec Microsoft dont le crédeau a toujours été la compatibilité de binaires (.NET en est un changement d’echelle aussi, mais incomparablement plus difficile à tester/réaliser car non limité a quelques services OS sur plateforme unique x86)… se pose désormais avec le lâchage de win32, quand bien même il faudrait passer à autre chose là n’est pas la question: Les yeux se sont soudain ouverts avec un nouveau crédeau non résolu par .NET: Plus question de se laisser verrouiller a l’avenir!





Je n’ai jamais dit qu’ils le faisaient par charité.



J’étais l’un des premiers à dire, il y a 10-12 ans que si MS ne s’ouvrait pas plus, ils allaient s’écraser.



Comme quoi, j’avais raison. :p









Maxim Killigan a écrit :



J’étais l’un des premiers à dire, il y a 10-12 ans que si MS ne s’ouvrait pas plus, ils allaient s’écraser.







Sauf que… trop tard je pense! Et pas avec de bonnes solutions car lourdes et ne supprimant pas les dépendances a une époque ou ces dernières sont fuies comme la peste.









Soriatane a écrit :



Pour moi une tablettes en x86 à 700 € à qui on peux rajouter un clavier, c’est pas une tablette, c’est un pc ultra-portable qui peux devenir une tablette.





Je veux pas troller vvos trolls respectifs … mais …





Tablette x86 à 700€ ? <img data-src=" />









tanguy_k a écrit :



Mieux vaut tard que jamais, ils auraient du prendre cette décision il y a 10 ans (ça a été fait par Sun pour Java en 2006).

En attendant le concurrent direct, Java, est multi-plateformes, possède les meilleurs bindings/langages (Python, Ruby, Scala) et un écosystème open source beaucoup plus enviable.





Le concurrent n’est pas un foudre de guerre côté performances, .NET non plus jusqu’à maintenant.









Maxim Killigan a écrit :



Combien de développeurs ont participé aux commentaires ?



Parce que, perso, du C# natif sous Linux, ça me fout une demi molle.



Et bien que fan du cpp, il est évident qu’en matière de revenus générés, c# est loin devant car tellement facile.



Et il est évident que l’attitude de Microsoft a été vers l’ouverture depuis les dernières 5 ou 6 années.



Et encore une fois: je ne suis pas un fan de MS, loin de là, mais il faut aussi ouvrir ses yeux.





#barbu #garage

EDIT: je vois le côté natif comme un retour en arrière.

ça empêche de prendre un binaire généré en x86 pour le mettre sur un ARM.









divide a écrit :



Curieux de savoir ce qui t’as volontairement fait passer de C++ à C# ? Je trouve le combo C++/Qt particulièrement souple et optimisé.





Premièrement c’était autour des années 2k, donc les biblios et le langage étaient très loin de là où ils sont aujourd’hui.



Et même aujourd’hui pour rien au monde je ne retrouverais ce foutu modèle de compilation par inclusion, pour rien au monde je n’échangerais mon GC contre des smart pointers (ou alors en option et sans avoir à polluer mon code avec douze annotations cryptiques), pour rien au monde je n’abandonnerais mes async-await-yield contre douze barriques de STL, pour rien au monde je n’échangerais mon introspection contre des bidouillages. Sans parler du fait que si aujourd’hui, après quinze ans d’attente, le C++ a fini par être modernisé, je ne suis pas prêt d’oublier les quinze années en question.



Enfin ajoute à cela le fait qu’à mes yeux des langages comme le C++ doivent et vont disparaître (peu ou prou) : l’état actuel de la sécurité est intolérable, nous devons admettre notre incapacité à écrire du code sûr et opter pour les outils qui permettent le plus de vérifications automatisées possibles. La seule alternative au code managé c’est la virtualisation stricte (la gourmande) à tous les étages et ça pose beaucoup plus de problèmes (GPGPU etc).









Nithril a écrit :



J’aimerais bien savoir en quoi…. Java serait plutôt à la traîne, même si Java 8 change un peu la donne





Les contraintes génériques sont beaucoup plus puissantes en Java (et la v8 a des méthodes directement dans l’interface en plus des méthodes d’extension). Le typage de Java est tout de même beaucoup trop limitatif, je ne dis pas que c’est un modèle, simplement qu’il est un peu moins naze que celui de C#. J’en ai ma claque d’écrire des “for” plutôt que des “foreach” sous prétexte de virer des tonnes d’allocations inutiles.









psn00ps a écrit :



Le concurrent n’est pas un foudre de guerre côté performances, .NET non plus jusqu’à maintenant.





C# a de bonnes performances, proches d’un code C++ 11 compilé sans optimisations. Ce qui me tue c’est de devoir bousiller mon code en faisant certaines optimisations à la main parce que le compilateur est une prune.







psn00ps a écrit :



#barbu #garage

EDIT: je vois le côté natif comme un retour en arrière.

ça empêche de prendre un binaire généré en x86 pour le mettre sur un ARM.





En même temps les serveurs de l’app store MS recevront du code IL et compileront aussi pour ARM. Et pour ta part rien ne t’empêche de continuer à compiler en IL.









HarmattanBlow a écrit :



Enfin ajoute à cela le fait qu’à mes yeux des langages comme le C++ doivent et vont disparaître (peu ou prou) : l’état actuel de la sécurité est intolérable, nous devons admettre notre incapacité à écrire du code sûr et opter pour les outils qui permettent le plus de vérifications automatisées possibles. La seule alternative au code managé c’est la virtualisation stricte (la gourmande) à tous les étages et ça pose beaucoup plus de problèmes (GPGPU etc).







Autant je peux comprendre que tu ai tes propres raisons dans le 1er paragraphe, autant ce 2nd paragraphe… WTF. J’ai l’impression que tu as complètement zappé toutes les applications qui sont basés sur les performances pures, sans aucun lien avec les problématiques de sécurité; je pense aux moteurs 3D temps réel, aux logiciel de création/édition pro dans le domaine 2D/3D/Vidéo/Son, ou l’optimisation du code et du code compilé l’emporte largement sur toute problématique de sécurité ( ? ).

Sans compter qu’une très large majorité de librairies utilitaires/scientifiques/média/hardware sont disponibles uniquement en C/C++.

Il y a eu tellement de langages apparus ces 20 dernières années, et le C++ est toujours aussi présents dans les applis qui demandent des perfs ou un accès bas niveau, donc à mon avis il n’est pas prêt de disparaitre…









HarmattanBlow a écrit :



C# a de bonnes performances, proches d’un code C++ 11 compilé sans optimisations. Ce qui me tue c’est de devoir bousiller mon code en faisant certaines optimisations à la main parce que le compilateur est une prune.



Une simple boucle for avec rien que des new dedans montre que le temps de chargement des libs est non négligeable. <img data-src=" />

En même temps les serveurs de l’app store MS recevront du code IL et compileront aussi pour ARM. Et pour ta part rien ne t’empêche de continuer à compiler en IL.



Je pense plutôt à un binaire lambda dans la nature. Sans le source, tu perds l’assurance que le binaire sera exécutable sur ta machine. (à moins qu’il ne soit dès le départ dépendant d’une librairie native, mais là c’est autre chose)









divide a écrit :



J’ai l’impression que tu as complètement zappé toutes les applications qui sont basés sur les performances pures, sans aucun lien avec les problématiques de sécurité





Premièrement rien n’est “sans aucun lien avec les problématiques de sécurité” : tout code disposant de droits peut être subverti. Ton innocent jeu peut être utilisé pour miner des bitcoins, pour te soutirer ta monnaie virtuelle pour les revendre à d’autres joueurs (jeu en ligne), pour télécharger et installer un malware sur la machine, pour espionner ton navigateur et récupérer tes identifiants, etc. Et puis on ne compte pas le nb d’applis critiques en termes de sécurité encore codées en C/C++ aujourd’hui sans que ce soit nécessaire.





Ensuite l’exigence en termes de performances n’est absolument pas un pb parce que :

* Aujourd’hui les performances c’est une affaire d’algos, et notamment de parallélisation, pas de trois instructions CPU en plus ou en moins (je caricature un peu, voir la suite).



* Aujourd’hui les performances c’est une affaire de GPGPU et d’archi hétérogène. Il y a un travail spécifique à y faire en termes de sécurité mais les performances sont insensibles au fait que tu utilises lua ou le C pour piloter ton GPU.



* Avec un bon compilateur il est possible d’avoir d’excellentes performances en C#, souvent supérieures à celles d’un C++ moderne avec son cortège boost/stl qui répliquent les lourdeurs du C# (parfois en pire). Ne manque vraiment que la capacité de contrôler plus finement les allocations et d’avoir des objets plus légers et sans introspection, d’où un projet comme celui de M#, sûr mais léger. Et il manquait un vrai compilateur, ce qui est en passe de correction.



* Cela restera t-il plus lourd qu’un code C très optimisé ? Oui et il faudra faire avec, ce qui ne sera pas un gros problème.







psn00ps a écrit :



Une simple boucle for avec rien que des new dedans montre que le temps de chargement des libs est non négligeable. <img data-src=" />

Je pense plutôt à un binaire lambda dans la nature. Sans le source, tu perds l’assurance que le binaire sera exécutable sur ta machine. (à moins qu’il ne soit dès le départ dépendant d’une librairie native, mais là c’est autre chose)





Si tu voulais dire par là que le compilateur JIT ne peut pas être rendu plus efficace, nous sommes d’accord, il faut de l’AOT.



Je vois ce que tu veux dire, mais tout ne repose pas sur le processing GPU pur et dur:

-Tout d’abord l’arrivée de Mantle et de DX12 montre bien que dans un contexte temps réel les cycles CPU restent importants pour piloter le GPU.

-Il y a des cas ou le GPU ne peut tout simplement pas être utilisé, soit parce que le calcul en lui même ne s’y prête pas (calcul en série), soit parce que le public visé n’est pas équipé en GPU performant (c’est mon cas, j’écris des applications de traitement audio lourd). Et je t’assure que chaque boucle critique est optimisé au pointeur et au compteur près, je mesure des différences sensibles de perf.

J’utilise aussi en parallèle des librairies comme Intel IPP, qui n’existent que pour C/C++.



Quand à la problématique de sécurité telle que tu la décrit, elle me parait un peu étrange: un jeu/programme ne sera détourné de son usage initial que si tu l’as récupéré d’une source douteuse; et dans ce cas tu peux tout autant récupérer des programmes .Net qui auront subis des détournements douteux.








HarmattanBlow a écrit :



Premièrement rien n’est “sans aucun lien avec les problématiques de sécurité” : tout code disposant de droits peut être subverti. Ton innocent jeu peut être utilisé pour miner des bitcoins, pour te soutirer ta monnaie virtuelle pour les revendre à d’autres joueurs (jeu en ligne), pour télécharger et installer un malware sur la machine, pour espionner ton navigateur et récupérer tes identifiants, etc. Et puis on ne compte pas le nb d’applis critiques en termes de sécurité encore codées en C/C++ aujourd’hui sans que ce soit nécessaire.







En même temps, ne surestime t’on pas les problèmes de sécurité liés au code natif ?



Sachant que :



(1) Les tâches sont isolées les unes des autres. Sur un système bien conçu, les logiciels n’ont pas latitude d’installer des malwares ni d’espionner les autres applications. C’est encore plus vrai quand on utilise des dispositifs de sécurité du type “apparmor” avec des profils qui n’autorisent pas un logiciel à faire des choses inhabituelles par rapport à leurs fonctionnalités.



(2) Il y a dorénavant des mécanismes de protection au niveau des processeurs qui interdisent l’exécution des données. Ce simple fait ruine de nombreuses stratégie d’attaque contre le code natif.



(3) La plupart des problèmes de sécurité en C étaient liées à l’utilisation d’anciennes fonctions (Genre strcpy) non bornées qui favorisaient les débordement de mémoire tampon. L’utilisation de fonctions modernes impliquant un bornage mémoire apporte exactement la même sécurité que dans un code managé.



(4) Contrairement à une idée reçue, l’utilisation d’un langage de “type managé” n’implique pas pour autant la disparition des problèmes de sécurité. Il suffit de voir l’exemple de certains logiciels écrits en PHP pour le comprendre.





Ensuite l’exigence en termes de performances n’est absolument pas un pb parce que :

* Aujourd’hui les performances c’est une affaire d’algos, et notamment de parallélisation, pas de trois instructions CPU en plus ou en moins (je caricature un peu, voir la suite).





Sauf dans les cas ou ces 3 instructions sont dans une boucle qui les répète des milliards de fois. C’est l’exemple type d’un décodeur vidéo, d’un traitement d’image (et de bien d’autres exemples).



Est ce qu’un décodeur vidéo qui serait 3 fois plus lent ne serait pas un problème ?





* Aujourd’hui les performances c’est une affaire de GPGPU et d’archi hétérogène. Il y a un travail spécifique à y faire en termes de sécurité mais les performances sont insensibles au fait que tu utilises lua ou le C pour piloter ton GPU.





Oui et non.



L’occupation CPU est justement un problème majeur pour préparer les données à traiter par les GPU.



Et nous sommes en ce moment à la remise en cause des API de haut niveau pour… gagner justement de la puissance.



L’optimisation revient à la mode parce que la loi de moore, c’est fini. Il ne suffira plus d’attendre un an pour rendre acceptable un programme qui rame.





* Avec un bon compilateur il est possible d’avoir d’excellentes performances en C#, souvent supérieures à celles d’un C++ moderne avec son cortège boost/stl qui répliquent les lourdeurs du C# (parfois en pire). Ne manque vraiment que la capacité de contrôler plus finement les allocations et d’avoir des objets plus légers et sans introspection, d’où un projet comme celui de M#, sûr mais léger. Et il manquait un vrai compilateur, ce qui est en passe de correction.





Les programmeurs qui veulent optimiser n’utilisent pas boost ou stl.





* Cela restera t-il plus lourd qu’un code C très optimisé ? Oui et il faudra faire avec, ce qui ne sera pas un gros problème.





On ne peut pas décréter que ce n’est pas un problème.



Beaucoup de programmeurs le pensent parce qu’ils n’écrivent pas le type de logiciel dans lequel un problème.



Mais ce qu’ils ne réalisent souvent pas, c’est qu’ils appellent dans leurs programmes des fonctions qui exploitent des algos de “bas niveau” et qui contiennent même parfois de l’assembleur.








Ton innocent jeu peut être utilisé pour miner des bitcoins





C’est également possible avec un langage managé.



La menace en la matière ne viens pas seulement des ordinateurs piratés, mais aussi potentiellement des éditeurs de logiciels eux même.









sr17 a écrit :



L’optimisation revient à la mode parce que la loi de moore, c’est fini. Il ne suffira plus d’attendre un an pour rendre acceptable un programme qui rame.





Rends moi acceptable le minage de bitcoin / doge. <img data-src=" />

So Harou !









methos1435 a écrit :



Et ? Je change d’avis comme de chemise, suivant l’envie et les goûts du moment donc suis pas trop concerné <img data-src=" />







Alors je te donne un point Chocapic <img data-src=" />

(Mais par contre faut les prendre avec du lait, sinon ca perd de son interet)









sr17 a écrit :



L’optimisation revient à la mode parce que la loi de moore, c’est fini. Il ne suffira plus d’attendre un an pour rendre acceptable un programme qui rame.





+1

J’ajoute “l’informatique mobile”, qui entraine des besoins d’optimisations supplémentaires : un programme qui tire 50% de moins sur le CPU, c’est toujours intéressant pour l’autonomie de la batterie.



D’ailleurs, il est également faux de croire qu’il n’y a que les améliorations d’algo qui permettent ce genre de gain. Par exemple, remplacer un test impliquant un saut conditionnel par plusieurs autres opérations peut aussi créer un gain énorme à cause des problèmes de prédiction de branchement du CPU, même si d’un point de vue algorithmique c’est plus lourd.



On peut aussi voir le succès des “intrinsics” qui permettent des optimisations parfois supérieures à l’assembleur, puisque le compilateur peut choisir les registres utilisés en fonction du code environnant, tout en gardant la lisibilité du C/C++…









brazomyna a écrit :



Je veux pas troller vvos trolls respectifs … mais …





Tablette x86 à 700€ ? <img data-src=" />





http://recherche.fnac.com/SearchResult/ResultList.aspx?SCat=0!1&Search=surface+pro+2&sft=1&sa=0



Je prends bonne note que toute les tablettes x86 ne sont pas à + 600 €









Liam a écrit :



Exactement le genre de commentaires qui m’énervent et qui d’ailleurs, ne devraient pas avoir leur place sur NXI.



Les gens sont posés, discutent calmement, et d’un seul coup un mec à qui personne n’a rien demandé débarque de nulle part et balance un commentaire de trois phrases mal fagotées, dont une parvient à balancer 3 insultes à des gens qui ne l’ont pas agressé, pas insulté, n’ont pas parlé de lui et ne lui ont pas adressé la parole.







Ça me rappelle quelqu’un, ça.



Du genre, swordé à la hache à chaque fois qu’il l’ouvre…



Quoi que lui, ses commentaires, s’ils ne comportaient que trois phrases, ils seraient lisibles.



<img data-src=" />









psn00ps a écrit :



Rends moi acceptable le minage de bitcoin / doge. <img data-src=" />

So Harou !







La mauvaise nouvelle, c’est que tout cela a déjà été optimisé à mort par d’excellents programmeurs.



Cela dit, en cherchant par ci, par la, on trouve des “kernels” encore mieux optimisés.









psn00ps a écrit :



#barbu #garage

EDIT: je vois le côté natif comme un retour en arrière.

ça empêche de prendre un binaire généré en x86 pour le mettre sur un ARM.





Ah non, le coup du natif, c’est géant.



Parce que:




  • Charger un framework, ça prend du temps.

  • Sur une installation Linux minimale (open wrt, par exemple), tu n’as VRAIMENT pas envie d’installer mono (150mo) pour faire tourner une bête application serveur

  • Optimisation à coup d’ASM











    yl a écrit :



    Sauf que… trop tard je pense! Et pas avec de bonnes solutions car lourdes et ne supprimant pas les dépendances a une époque ou ces dernières sont fuies comme la peste.





    J’ai coupé ma barbe, désolé… :(



elpetio &gt; Quand on veut donner une leçon sur les trolls, on n’intègre pas des insultes dans son commentaire.


elpetio &gt; Tu commences sérieusement à nous agacer avec tes théories du complot, alors je t’invite à te calmer.


Le 07/04/2014 à 09h 41







Vincent_H a écrit :



elpetio &gt; Quand on veut donner une leçon sur les trolls, on n’intègre pas des insultes dans son commentaire.



pas des insultes un constat. il ya le trollage de bas étage qui consiste a flooder continuellement et il y a les branleurs qui se contentent pas seulement de sortir des vannes mais ils ont besoin de venir emmerder les autres, en créant la zizanie. Moi je reproche rien personnellement a mon interlocuteur, car il assume parfaitement, ce qu’il est



j’ai juste répondu a ses attaques car il veut se faire passer pour ce qu’il n’est pas.

alors bien sur si la modération intervient en censurant les posts tout en laissant tous les messages débiles qu’on peut lire regulièrement sur le site et bien je me pose des questions sur votre maniere de modérer



en fait ca s’appelle juste de la censure tout bonnement et vous n’avez absolument aucune lecon a me donner puisque vore point de vue est subjectif



En effet, de deux choses l”une soit vous etes un site sérieux alors dans ce cas ne laissez pas les troll sévir dans les commentaires car la majorité des messages n’otn absolument aucun intéret

soit vous etes pas sérieux alors arreter de nous sortir des articles longs pompeux orientés idéologiquement









elpetio a écrit :



pas des insultes un constat. il ya le trollage de bas étage qui consiste a flooder continuellement et il y a les branleurs qui se contentent pas seulement de sortir des vannes mais ils ont besoin de venir emmerder les autres, en créant la zizanie. Moi je reproche rien personnellement a mon interlocuteur, car il assume parfaitement, ce qu’il est



j’ai juste répondu a ses attaques car il veut se faire passer pour ce qu’il n’est pas.

alors bien sur si la modération intervient en censurant les posts tout en laissant tous les messages débiles qu’on peut lire regulièrement sur le site et bien je me pose des questions sur votre maniere de modérer



en fait ca s’appelle juste de la censure tout bonnement et vous n’avez absolument aucune lecon a me donner puisque vore point de vue est subjectif



En effet, de deux choses l”une soit vous etes un site sérieux alors dans ce cas ne laissez pas les troll sévir dans les commentaires car la majorité des messages n’otn absolument aucun intéret

soit vous etes pas sérieux alors arreter de nous sortir des articles longs pompeux orientés idéologiquement







Chacun y voit ce qu’il veut y voir. Si tu trouves qu’il existe une idéologie, je serais bien curieux de savoir laquelle. Enfin “curieux” est un bien grand mot”.



Et il va falloir revoir ta définition de la censure. Nous modérons la forme, pas le fond. Tes commentaires seraient restés en place s’ils n’étaient pas insultants. Si c’est ce que tu appelles la censure, tu dois effectivement faire partie de ceux qui crient qu’on vit actuellement dans une dictature aujourd’hui.



Le 07/04/2014 à 10h 05







Vincent_H a écrit :



elpetio &gt; Tu commences sérieusement à nous agacer avec tes théories du complot, alors je t’invite à te calmer.





quelle théorie du complot?

je n’aime pas la censure. c’est assez simple. T’as des énergumènes qui polluent le site regulièrement car ce sont pas seulemetn des trolls mais des emmerdeurs professionnels. Also Spracht Wapdoowap est de ceux la et tu sembles l’oublier. Tu oses prendre sa défense alors qu’il mattaque directement. J’estime que j’ai le droit de lui répondre. C’est comme ca et pas autrement. si la liberté d’expression ne te plait pas tu peux toujours aller vivre en corée du nord. la aussi ils censurent les idées.



tu te permets apres de jouer au flic de la pensée alors que personne ne ta rien demandé en me censurant parce que j’ai posté un message qui pour le coup n’est pas une attaque gratuite , du trollage mais un long paragraphe dans lequel j’exprime ma pensée.

enfin tu m’excuseras mais tes accusations de complotiste sont particulièrement infondées…Mais bon j’attend avec impatience que tu prouves tes allégations.





T’as des énergumènes qui polluent le site regulièrement car ce sont pas seulemetn des trolls mais des emmerdeurs professionnels.









<img data-src=" /><img data-src=" /><img data-src=" />








Lafisk a écrit :



<img data-src=" /><img data-src=" /><img data-src=" />







<img data-src=" /> Il ressemble beaucoup à Olivier. THE <img data-src=" />



Le 07/04/2014 à 10h 22







Vincent_H a écrit :



Chacun y voit ce qu’il veut y voir. Si tu trouves qu’il existe une idéologie, je serais bien curieux de savoir laquelle. Enfin “curieux” est un bien grand mot”.



Et il va falloir revoir ta définition de la censure. Nous modérons la forme, pas le fond. Tes commentaires seraient restés en place s’ils n’étaient pas insultants. Si c’est ce que tu appelles la censure, tu dois effectivement faire partie de ceux qui crient qu’on vit actuellement dans une dictature aujourd’hui.









Vincent_H a écrit :



Chacun y voit ce qu’il veut y voir. Si tu trouves qu’il existe une idéologie, je serais bien curieux de savoir laquelle. Enfin “curieux” est un bien grand mot”.



Et il va falloir revoir ta définition de la censure. Nous modérons la forme, pas le fond. Tes commentaires seraient restés en place s’ils n’étaient pas insultants. Si c’est ce que tu appelles la censure, tu dois effectivement faire partie de ceux qui crient qu’on vit actuellement dans une dictature aujourd’hui.



on censure que les idées. c’est comme cela.

si je faisais dans la provocation stupide, et bien je prendrais l’exemple de Also Spracht

Wapdoowap, je prendrais meme pas la peine de me justifier c’est a dire que j’attaque en faisant des blagues en insultant en diffamant en crachant en rotant en beuglant en aboyant en pleurant et en rajoutant des smileys qui signifient simplement que je suis un troll de la pire espece et que j’assume pleinement mes propos. Donc qu’ets ce que je dois faire. changer la forme et ca passera mieux sans doute meme si je suis irrespectueux?

Et d’ailleurs tu sembles trs intransigeant quand moi je donne un avis et beaucop plus tolérant quand lafisk cs m’insultent et m’attaquent directement, ou alors quand les trolls habituels floodent

bien sur on peut penser que cest drole et que cest du second degrés sauf que non. car un type normal ne sortirait jamais les memes blagues débiles avec des amis ou des proches

Et tres franchement ils font rire qui? eux memes certainement car ils prennent juste du plaisir a troller mais personnellement je trouve cela pathétique.



finalement il n’y a rien de drole ni d’intéressant étant donné que c’est du trollage

Tu toléres le trollage (enfin la cest plus du troll car il n’y a plus que cela sur le site) tant mieux mais tu ne tolères pas mes posts a rallonge alors que j’oblige personne a les lire en fait. Peut etre qu’ils sont mal écrit mais moi je me contente pas de sortir les memes banalités qu’on entend quotidiennement sur le site. J’essaie au minimum d’argumenter meme si on peut certes me reprocher de ne pas trop soigner la forme .

Bref c’est bien dommage quen tant que journaliste tu aies oublier un peu ce que veux dire le mot objectivité et professionnalisme



Le 07/04/2014 à 10h 32







Lafisk a écrit :



<img data-src=" /><img data-src=" /><img data-src=" />





je te rassure tu n’es pas de ceux meme si tu te montres tres insultant parfois quand tu commences a dériver sur windows phone ou windows 8, la en effet tu peux parfois etre de mauvaise foi et aucune discussion n’est possible

enfin je te trouve quand meme mal placé quand tu donnes des lecons de modération et de savoir vivre et que tu donnes des recommandations (plutot des menaces et du chantage) avec la modération. moi contrairement a d’autres je prefere la liberté d’expression mais jestime avoir le droit de m’exprimer librement sans que quelqu’un me vienne m’insulter, me censure me harcele , diffame sur mon compte ou demande mon bannissement



Le 07/04/2014 à 10h 53







SEBCOCOON a écrit :



<img data-src=" /> Il ressemble beaucoup à Olivier. THE <img data-src=" />





c’est sur qu’en postant des petits crottes un peu partout, on ne prend aucun risque puisque la modération tolère ce type de comportement









SEBCOCOON a écrit :



<img data-src=" /> Il ressemble beaucoup à Olivier. THE <img data-src=" />







(accent chinois) cay noooormaaal <img data-src=" />









sr17 a écrit :



En même temps, ne surestime t’on pas les problèmes de sécurité liés au code natif ?





En préambule permets-moi d’énumérer certains schémas d’attaques courants impossibles en code managé :

* Buffer overflow

* Stack overflow

* Dangling pointers

* Mémoire non-initialisée.

* Mémoire non-effacée (données confidentielles).

* Altération des binaires (en dotnet ils sont signés et vérifiés à l’exécution par la CLI)



J’en oublie sans doute. Je trouve ça joliment large.





Sur un système bien conçu, les logiciels n’ont pas latitude d’installer des malwares ni d’espionner les autres applications.



Un “système bien conçu” c’est quoi ?

a) Un système programmé par des aliens infaillibles ?

b) Un système à micro-noyau codé en quasi-totalité en langage managé ? Exactement ce à quoi tu t’opposes.





C’est encore plus vrai quand on utilise des dispositifs de sécurité du type “apparmor” avec des profils qui n’autorisent pas un logiciel à faire des choses inhabituelles par rapport à leurs fonctionnalités.



Ces systèmes de permissions sont et resteront réservés aux administrateurs, les problèmes de sécurité sont plus larges. Et ils ne sont de toute façon pas une solution magique puisqu’ils ne concernent toujours que quelques risques précis, souvent l’accès à certaines ressources (fichiers notamment).





Il y a dorénavant des mécanismes de protection au niveau des processeurs qui interdisent l’exécution des données. Ce simple fait ruine de nombreuses stratégie d’attaque contre le code natif.



Ce simple fait ruine un seul type précis d’attaque (l’injection de code), certes important, mais en interdisant aussi toute forme de génération de code à l’exécution (nécessaire pour un compilateur, un navigateur, etc), une limitation qui n’a pas à être imposée au code managé.





(3) La plupart des problèmes de sécurité en C étaient liées à l’utilisation d’anciennes fonctions (Genre strcpy) non bornées qui favorisaient les débordement de mémoire tampon. L’utilisation de fonctions modernes impliquant un bornage mémoire apporte exactement la même sécurité que dans un code managé.



Non parce que :

a) Tu ne peux pas être sûr que les programmeurs ont correctement fait leur travail et uniquement utilisé des constructions sûres (équivalentes au code managé), a contrario du code managé qui offre des garanties inviolables.



b) Au mieux tu peux utiliser des outils pour détecter les schémas les plus courants dans le code source mais ces outils ne détecteront pas tout et ne t’offrent donc aucune garantie.



c) Il y a d’autres façons que le buffer overflow pour exécuter un code malicieux (voir liste du début).





(4) Contrairement à une idée reçue, l’utilisation d’un langage de “type managé” n’implique pas pour autant la disparition des problèmes de sécurité. Il suffit de voir l’exemple de certains logiciels écrits en PHP pour le comprendre.



Personne n’a prétendu que cela immunisait contre les problèmes, seulement que ça en fait disparaître la plupart. Dois-je avoir recours à une analogie sur la ceinture de sécurité et le cancer ?





Est ce qu’un décodeur vidéo qui serait 3 fois plus lent ne serait pas un problème ?



Ce serait un moins gros problème que l’état actuel de la sécurité informatique, qui est une plaisanterie.



Je ne dis pas qu’il n’y aurait pas de problème. Je dis qu’il ne serait pas si gros et qu’il y en a un plus gros.





L’occupation CPU est justement un problème majeur pour préparer les données à traiter par les GPU.



Il serait plus exact de dire que le goulet d’étrangement est en général le retour au CPU, plutôt que l’usage CPU : le problème tient davantage à la latence du bus PCIe (en micro-secondes) et aux va-et-vients de données entre les mémoires, qu’au code CPU. C’est pourquoi OpenCL évolue vers un GPU de plus en plus indépendant, quitte à faire lui réaliser la tâche de chef d’orchestre pour laquelle il est pourtant bien moins rapide.



Si tu pensais au JV ce cas est un peu particulier et la limite aujourd’hui est bien encore le manque de parallélisme.





L’optimisation revient à la mode parce que la loi de moore, c’est fini. Il ne suffira plus d’attendre un an pour rendre acceptable un programme qui rame.



A l’heure où les problèmes de sécurité sont de plus en plus cruciaux et où nos processeurs se dirigent vers les 64 coeurs et des GPU intégrés capables de mâcher des milliers d’additions par cycle, je pense qu’il y a vraiment d’autres priorités que de promouvoir la micro-optimisation, même si très occasionnellement elle est utile.





Les programmeurs qui veulent optimiser n’utilisent pas boost ou stl.



Les programmeurs qui veulent optimiser ont, comme les autres, des contraintes de temps, de coûts et de sécurité.





Beaucoup de programmeurs le pensent parce qu’ils n’écrivent pas le type de logiciel dans lequel un problème.



Si tu savais avec quoi je me bats question performances…





Mais ce qu’ils ne réalisent souvent pas, c’est qu’ils appellent dans leurs programmes des fonctions qui exploitent des algos de “bas niveau” et qui contiennent même parfois de l’assembleur.



Ce qui explique la découverte de centaines de failles de sécurité chaque année dans nos OS.









HarmattanBlow a écrit :











Chacun ses priorités; tu as visiblement une obsession pour la sécurité, je ne sais pas dans quel domaine tu bosse mais ça a visiblement une importance particulière. Dans mon domaine ce sont les performances des algo/binaires qui sont importantes avant tout; et à partir du moment ou l’environnement des utilisateurs est à peu près sécurisé (OS à jour les protections d’usage) et qu’ils récupèrent les binaires de source fiables, je ne vois pas de raison de psychoter. Dans mon cas, passer mon code en .Net serait un peu me tirer une balle dans le pied.



si 3.9999999 tend vers l’infini .org



si 4.0 MS avale .msx


Pour ceux qui parlaient de popularité des langages sur GitHub, on peut y ajouter StackOverflow (http://stackoverflow.com/tags ) pour contre-balancer.



On voit quand même au nombre de questions taggés que le c# semble très populaire sur ce site (qui est loin d’être petit), donc pour certains qui disent que le C# n’est pas utilisé et que MS est désespéré… J’en doute fortement quand même.



(Et personnellement, j’adore le C# <img data-src=" />)



Edit : viré la balise url qui me génère des trucs louches.








divide a écrit :



Chacun ses priorités; tu as visiblement une obsession pour la sécurité, je ne sais pas dans quel domaine tu bosse mais ça a visiblement une importance particulière. Dans mon domaine ce sont les performances des algo/binaires qui sont importantes avant tout; et à partir du moment ou l’environnement des utilisateurs est à peu près sécurisé (OS à jour les protections d’usage) et qu’ils récupèrent les binaires de source fiables, je ne vois pas de raison de psychoter. Dans mon cas, passer mon code en .Net serait un peu me tirer une balle dans le pied.





Je continue à développer sur client en C++. Mais programmer en C++ sur serveur est mon avis inconscient en terme de sécurité.



Au passage l’actualité nous montre régulièrement les dangers du C++ avec son lot de failles dans les navigateurs web ou les systèmes d’exploitations.

Un exemple récent dans openssl

J’ai vu pas mal de gens sur ce site qui viennent vous raconter qu’il suffit de relire le code pour trouver toutes les failles. C’est bien évidemment faux comme le raconte harmattanblow il faudrait être un alien pour ne pas faire de bugs.

Personnellement je pense qu’il ne faut pas faire confiance aux développeurs pour la sécurité, on a vu ce que ça a donné. Même si ça devait se traduire par une petite perte de performances(on en reparlera le moment venu..) l’utilisation de langage safe dans l’os resterait très intéressant pour l’utilisateur.



Un ami dev m’a dit il y a quelques années l’os parfait c’est l’os qui tient compte que l’utilisateur moyen est une buse et que le développeur moyen code avec les pieds.

Perso je trouve incroyable qu’en 2014 encore aucun OS n’isole les drivers par rapport au noyau quand on voit les dégats que ça peut provoquer.


Je finirai là dessus. On ne vit plus dans le même monde qu’il y a dix ans. Le cloud prend de plus en plus de place. Ca va de plus en plus loin. Bientôt on verra apparaître tout un tas de périphériques connectés. Comme harmattanblow j’ai codé longtemps en C++(je continue pour certaines choses) mais ce langage n’a clairement plus sa place dans ce nouveau monde qui se dessine.



Chez Microsoft ils ont déjà choisi, Le C++ devrait se cantonner dans l’avenir à l’intérieur d’une sandbox. Mais tout ce qui est système (os/drivers/services de base) devraient être codé dans un nouveau langage safe.


Même si on part du principe que le code managé sera toujours plus lente que le code natif (ça restera à prouver), les règles du jeu ont largement changées.



Le CPU ne coûte plus rien et on préfèrera booster un peu les machine en sécurisant son code avec du langage managé que de se cantonner à gagner le moindre pet de CPU pour une requête.

Nous sommes dans une société où le choix se fait uniquement sur le coût.

Le calcul est très simple et en faveur du code managé. Salaires moins élevé, facilité de développement, rapidité de développement, moins de tests nécessaires

Si il faut payer, même 30% de CPU, de mémoire, ou de disque en plus, le calcul est vite fait.



N’en déplaise aux développeurs de code natif, de plus en plus de développements se feront en code managé








charon.G a écrit :



Perso je trouve incroyable qu’en 2014 encore aucun OS n’isole les drivers par rapport au noyau quand on voit les dégats que ça peut provoquer.





J’ai vu ton tweet a propos de WDDM qui passe enfin en 2.x après 8 ans <img data-src=" />



Et sur ces imagesD3D12 Profiling, on voit que la partie Kernel-Mode Driver à un impact temps des plus négligeables … Ca veut dire que beaucoup de fonctions sont passé du Kernel-mode à l’User-Mode non ?



Si c’est le cas, j’imagine que ca va etre un grand pas pour isoler encore plus les pilotes comme te l’avais déjà plus ou moins dit le chef de projet du kernel pilote framework (dossier PCI Vista).









sepas a écrit :



Le CPU ne coûte plus rien





J’ai acheté il y a bientôt 3 ans un Core I7 2600k à 276 euros. Regarde donc les prix aujourd’hui

Intel n’a plus de concurrent sur le marché du desktop. Pour quelle raison baisserait-il les prix ?



Quant à la puissance des CPU, c’est pratiquement la même chose depuis 5 ans. Aujourd’hui, si tu veux plus de perf, il faut optimiser. Et si tu veux arriver à ce niveau-là avec un langage managé, ben… bon courage. <img data-src=" />









arno53 a écrit :



J’ai vu ton tweet a propos de WDDM qui passe enfin en 2.x après 8 ans <img data-src=" />



Et sur ces imagesD3D12 Profiling, on voit que la partie Kernel-Mode Driver à un impact temps des plus négligeables … Ca veut dire que beaucoup de fonctions sont passé du Kernel-mode à l’User-Mode non ?



Si c’est le cas, j’imagine que ca va etre un grand pas pour isoler encore plus les pilotes comme te l’avais déjà plus ou moins dit le chef de projet du kernel pilote framework (dossier PCI Vista).





je ne sais pas encore trop ce qu’on doit en conclure mais j’ai trouvé ça bizarre que ça soit réduit à ce point en effet…









vampire7 a écrit :



J’ai acheté il y a bientôt 3 ans un Core I7 2600k à 276 euros. Regarde donc les prix aujourd’hui

Intel n’a plus de concurrent sur le marché du desktop. Pour quelle raison baisserait-il les prix ?



Quant à la puissance des CPU, c’est pratiquement la même chose depuis 5 ans. Aujourd’hui, si tu veux plus de perf, il faut optimiser. Et si tu veux arriver à ce niveau-là avec un langage managé, ben… bon courage. <img data-src=" />





Sauf que les nouveaux modele ne ce concentrent pas tellement sur la puissance, meme si il y a du mieux aussi de ce cote mais plutot sur la consommation meme pour les desktop. en soit, si mon i7 920 avait pas crame, il n’aurait pas a rougir de trop fac aux actuels.



Apres, l’optimisation, c’est bon pour 23 trucs mais la plupart des programmes actuel n’en ont pas besoin, enfin programme … application, site web, etc… tout ce qui aujourd’hui ce fait pour consommer du media et qui represente une bonne partie de c qui est developpe depuis quelques annees, pas besoin de perf de ouf…









arno53 a écrit :



J’ai vu ton tweet a propos de WDDM qui passe enfin en 2.x après 8 ans <img data-src=" />



Et sur ces imagesD3D12 Profiling, on voit que la partie Kernel-Mode Driver à un impact temps des plus négligeables … Ca veut dire que beaucoup de fonctions sont passé du Kernel-mode à l’User-Mode non ?



Si c’est le cas, j’imagine que ca va etre un grand pas pour isoler encore plus les pilotes comme te l’avais déjà plus ou moins dit le chef de projet du kernel pilote framework (dossier PCI Vista).





Je complète <img data-src=" /> En fait Sur Vista le nouveau modèle graphique WDDM qui est apparu était hybride. Il y avait un driver en espace noyau qui devait effectuer les fonctions de bases et un driver en espace utilisateur devant contenir la plus grosse partie du code.



Mais dans les faits les constructeurs pour gagner des perfs ont déporté pas mal de code dans le driver noyau. Sur ma machine le driver noyau nvidia fait 12Mo(amd c’est aussi dans le même ordre de grandeur). C’est énorme pour un driver noyau.



WDDM 2.0 devrait être une version majeure. Ils ont peut être réévaluer le problème. Je sais que j’avais discuté avec des développeurs de KMDF qui m’avaient expliqué que dans l’avenir ils voyaient passer beaucoup plus de drivers en espace utilisateur. Mais avec les noyaux classiques ce n’est pas possible pour les performances. Cela signifie t’il des changements majeurs sur la base de 9?









charon.G a écrit :



Je finirai là dessus. On ne vit plus dans le même monde qu’il y a dix ans. Le cloud prend de plus en plus de place. Ca va de plus en plus loin. Bientôt on verra apparaître tout un tas de périphériques connectés. Comme harmattanblow j’ai codé longtemps en C++(je continue pour certaines choses) mais ce langage n’a clairement plus sa place dans ce nouveau monde qui se dessine.



Chez Microsoft ils ont déjà choisi, Le C++ devrait se cantonner dans l’avenir à l’intérieur d’une sandbox. Mais tout ce qui est système (os/drivers/services de base) devraient être codé dans un nouveau langage safe.







Ouaip mais ça c’est parce que tu pense “connecté”. Il y a tout un tas d’application où la notion de reseau n’a que peu d’importance, et où une surcouche reste une perte de perf ou une barrière gênante quoi qu’il en soit. Je suis prêt à parier que le CryEngine/UnrealEngine/Unity, le ProTools, le 3DSMax/Maya/XSI et le Photoshop de 2020 seront toujours codés en C++ pur et dur. Même pour Photoshop qui s’est orienté cloud, peut-être que la partie reseau est ou sera un module managé, mais le coeur de l’application j’en doute.



Et puis il y a un autre aspect à prendre en compte: avec .Net, tu ne peux pas écrire une application réellement multiplateforme, c’est limité aux plateformes Microsoft. Quand a Java, il n’est pas connu pour ses excellentes performances..









divide a écrit :



Ouaip mais ça c’est parce que tu pense “connecté”. Il y a tout un tas d’application où la notion de reseau n’a que peu d’importance, et où une surcouche reste une perte de perf ou une barrière gênante quoi qu’il en soit. Je suis prêt à parier que le CryEngine/UnrealEngine/Unity, le ProTools, le 3DSMax/Maya/XSI et le Photoshop de 2020 seront toujours codés en C++ pur et dur. Même pour Photoshop qui s’est orienté cloud, peut-être que la partie reseau est ou sera un module managé, mais le coeur de l’application j’en doute.



Et puis il y a un autre aspect à prendre en compte: avec .Net, tu ne peux pas écrire une application réellement multi-plateforme, c’est limité aux plateformes Microsoft. Quand a Java, il n’est pas connu pour ses excellentes performances..





Le C++ perdurera encore longtemps à mon avis mais pas pour cette raison .



*Une grande quantité de projets de taille importantes sont écrites en C++. Ils ne vont pas tout réécrire comme ça.



*C++ permet le développement multi-plateforme, ce qui n’est pas le cas de .NET qui fonctionne uniquement sur Windows. Mais au vu de cette actualité, cela pourrait changer. C’est une bonne stratégie.









Lafisk a écrit :



Sauf que les nouveaux modele ne ce concentrent pas tellement sur la puissance, meme si il y a du mieux aussi de ce cote mais plutot sur la consommation meme pour les desktop. en soit, si mon i7 920 avait pas crame, il n’aurait pas a rougir de trop fac aux actuels.





Bien sûr qu’ils se concentrent sur la consommation, et ce n’est pas uniquement parce qu’il y a le marché de la mobilité à conquérir, mais aussi parce qu’on atteint une limite technique que même l’amélioration de la finesse de gravure ne résout pas (si on dissipe 10 W sur 2 fois moins de surface, ça signifie que cette surface va chauffer 2 fois plus…).





Lafisk a écrit :



Apres, l’optimisation, c’est bon pour 23 trucs mais la plupart des programmes actuel n’en ont pas besoin, enfin programme … application, site web, etc… tout ce qui aujourd’hui ce fait pour consommer du media et qui represente une bonne partie de c qui est developpe depuis quelques annees, pas besoin de perf de ouf…





C’est tout le contraire : il n’y a qu’à voir la course à la performance des navigateurs web. Dès que tu regardes une vidéo, c’est pareil : le décodage des flux H264 et cie. sont des concentrés d’optimisations.

On peut ajouter à ça bon nombre de jeux, et les programmes traitant de grandes quantité de données, comme les logiciels de retouche photo, le chiffrement de données (les instructions AES-NI ne sont pas là pour rien)… Sur ce dernier point, on peut voir par exemple pas mal de gens se plaindre du manque d’optimisation de TrueCrypt.



Alors oui, développer un logiciel de gestion en C/C++, c’est pas forcément très malin, et le C# est certainement plus approprié. Mais l’informatique ne se limite pas aux logiciels à destination des entreprises, loin de là.









divide a écrit :



Chacun ses priorités; tu as visiblement une obsession pour la sécurité





Il suffit de voir la multiplication des APT (advanced persistent threat - malwares qui demeurent des années sur des machines sans jamais être détectés), des virus rançonneurs, ou le fait que de plus en plus de gens stockent des crypto-porte-monnaies sur leur disque. Je n’aime pas la sécurité non plus mais là on fonce dans le mur et quand on voit ces proliférations de menaces d’une part, et de l’autre le fait que les agences de renseignement entrent partout comme dans du beurre et peuvent tout écouter, il y a quand même de quoi se dire que notre industrie se complait dans l’amateurisme.



Parce qu’à part quelques exceptions nous ne nous sommes jamais donné les moyens de réaliser des systèmes fiables alors même que les systèmes informatiques sont utilisés pour des tâches extrêmement critiques, depuis des plateformes gérant des milliers de milliards d’euros jusqu’à des pacemakers en passant par des systèmes de pilotage. Et si tu tiens à me soutenir que ce n’est pas si mauvais que ça, qu’il y a d’autres sécurités derrière, etc, j’ai des hordes d’exemples dans tous ces domaines pour démontrer le contraire.



Il n’y a que dans le logiciel que l’on trouve des clauses dédouanant les éditeurs de toute responsabilité pour les défauts du produit ! Mais dans certains pays les ingénieurs sont pénalement responsables à titre personnel du fruit de leur travail. Un jour un logiciel va causer un désastre de grande ampleur et les médias et les politiciens vont se rendre compte que nous sommes une industrie de guignols et nous lyncher. Entre un bogue OpenSSL visiblement utilisé pendant des années par toutes les agences de renseignement de la planète pour nous fliquer et les Toyota qui te forcent à rouler à 150km/h, pour ne citer que les deux scandales les plus récents, il va falloir combien d’exemples encore ?





Dans mon cas, passer mon code en .Net serait un peu me tirer une balle dans le pied.



Je pense que tu sous-estimes de beaucoup les performances actuelles d’une part et, de l’autre, celles qui peuvent être atteintes avec un bon compilateur. L’écart ne serait pas si grand que tu le penses (sauf si tu passes ton temps à coder en C et assembleur - pas du C++ à grands renforts de STL et de smart pointers).







sepas a écrit :



Le CPU ne coûte plus rien et on préfèrera booster un peu les machine en sécurisant son code avec du langage managé que de se cantonner à gagner le moindre pet de CPU pour une requête.





Je ne suis par d’accord avec ce raisonnement : cette logique est valable pour les serveurs, où il vaut souvent mieux acheter un serveur de plus que d’optimiser (encore que le problème est différent si tu t’appelles Google ou Amazon et que tu achètes tes serveurs par millions).



Sauf que derrière il y a bien des cas où on ne peut pas acheter plus rapide parce que ça n’existe pas, et tu te retrouves avec un goulet d’étranglement. Ca fait belle lurette que les CPU ne coûtent plus grand chose et que la puissance par coeur stagne. Pas beaucoup de nouveauté de ce côté là.



Je pense qu’on ne doit pas dire qu’il n’y aura pas de pb. Seulement qu’il sera beaucoup plus rare que certains le pensent.







vampire7 a écrit :



C’est tout le contraire : il n’y a qu’à voir la course à la performance des navigateurs web. Dès que tu regardes une vidéo, c’est pareil : le décodage des flux H264 et cie. sont des concentrés d’optimisations.





Justement, la course aux perfs dans le web ce n’est pas de la micro-optimisation mais des algos très sophistiqués et complexes pour analyser le code, typiquement le genre de choses où tu veux un langage de haut-niveau pour garder une lisibilité et maintenabilité. Quant à la vidéo, même si à tout casser c’était deux fois plus lent que ce qu’on pouvait faire dans un langage sûr (et j’en doute foutrement), elle est de plus en plus traitée sur GPU et pour ça le fait d’utiliser lua ou le C ne fait aucune différence.





On peut ajouter à ça bon nombre de jeux, et les programmes traitant de grandes quantité de données, comme les logiciels de retouche photo, le chiffrement de données (les instructions AES-NI ne sont pas là pour rien)… Sur ce dernier point, on peut voir par exemple pas mal de gens se plaindre du manque d’optimisation de TrueCrypt.



On peut très bien exposer des API pour manipuler des fonctionnalités spécifiques du matériel. Et puis aujourd’hui les plus grosses innovations matérielles nécessitent de toute façon un changement de l’OS pour être adapté avec la fusion CPU-GPU, afin que le GPU ne soit plus un citoyen de seconde classe avec tout ce que ça implique pour les perfs.









HarmattanBlow a écrit :



Ca fait belle lurette que les CPU ne coûtent plus grand chose





Au contraire, les prix ne cessent d’augmenter, voir ma réponse à sepas.







HarmattanBlow a écrit :



Justement, la course aux perfs dans le web ce n’est pas de la micro-optimisation mais des algos très sophistiqués et complexes pour analyser le code, typiquement le genre de choses où tu veux un langage de haut-niveau pour garder une lisibilité et maintenabilité.





“Le web”, ça ne veut rien dire. Je parle des navigateurs : regarde un peu comme ça râle parce que sur certaines machines, l’interdiction de la compilation JIT empêche de concevoir des navigateurs performants sur le javascript… Ce genre de bidouille demande un travail énorme, et tout ça pourquoi ? Juste pour gagner un peu de perf.





HarmattanBlow a écrit :



Quant à la vidéo, même si à tout casser c’était deux fois plus lent que ce qu’on pouvait faire dans un langage sûr (et j’en doute foutrement), elle est de plus en plus traitée sur GPU et pour ça le fait d’utiliser lua ou le C ne fait aucune différence.





2 fois plus lent ? Alors voilà un exemple. Cette opération est le cœur du mode d’opération XTS utilisé en cryptographie.



1ère version :

#define Mult(T) \

{ unsigned char Cout1, Cout2; \

Cout1 = (T.ch[7] & 0x80) &gt;&gt; 7; \

Cout2 = T.ch[15] & 0x80; \

T.i128 = _mm_slli_epi64(T.i128, 1); \

T.ch[8] |= Cout1; \

if (Cout2) T.ch[0] ^= 0x87; }



2ème version :

#define Mult(T) \

{ __m128i tmp = _mm_shuffle_epi32(_mm_srli_epi64(T, 63), _MM_SHUFFLE(1, 0, 3, 2)); \

T = (_mm_slli_epi64(T, 1) | tmp) ^ _mm_mul_epu32(tmp, GF_128_FDBK); }



Comme tu peux le voir, il y a des “intrinsics” SSE2 pour exploiter des entiers de 128 bits.

Je compte 10 opérations dans le 1er cas, 8 dans le second, le second ayant toutefois une multiplication (en fait, 4 réalisées en une seule instruction).

Hé bien crois-le ou non, mais le second cas est 12 fois plus rapide. Oui, 12 fois.

Et j’ai vérifié le code ASM produit par le compilateur : le code produit pour la première version est très propre et ne contient quasiment pas de code superflu.

Si tu sais de quoi tu parles, alors la raison de cette différence de perf devrait te paraitre évidente.



Quant au calcul déporté sur GPU, c’est loin d’être la solution miracle, à cause de toutes les latences nécessaires : transfert des données vers la VRAM, récupération des résultats, et les calculs eux-mêmes : tous les algorithmes ne sont pas parallélisables. Par exemple, un calcul de hash, c’est purement séquentiel.







HarmattanBlow a écrit :



On peut très bien exposer des API pour manipuler des fonctionnalités spécifiques du matériel. Et puis aujourd’hui les plus grosses innovations matérielles nécessitent de toute façon un changement de l’OS pour être adapté avec la fusion CPU-GPU, afin que le GPU ne soit plus un citoyen de seconde classe avec tout ce que ça implique pour les perfs.





Le SSE2 est un jeu d’instructions CPU à manipuler directement. Ça a été créé pour ça : pour les développeurs, pour la performance, pour faire du code. Si tu fous ce code dans une API, alors tu passes d’une infinité de possibilités à quelques dizaines ou centaines tout au plus, autant dire que ça n’a plus le moindre intérêt.



Ne sous-estime pas l’importance de la performance : non seulement les gens sont impatients, mais des outils performants permettent de réaliser plusieurs choses à la fois dans de meilleures conditions. Un logiciel de chiffrement qui empêche de jouer pendant qu’on réalise une sauvegarde des données, c’est pas super-sexy…

Et bouffer une heure d’autonomie de batterie pour avoir regardé 5 min de vidéo avec un lecteur vidéo mal optimisé, c’est pas mieux.



Alors oui, il y a toujours des progrès à faire en matière de sécurité, mais ça ne doit pas être au détriment de la liberté d’utiliser son matériel comme on veut. Si Microsoft impose le code managé, alors même si ça m’emmerde, je passerai sous Linux. Et comme disait l’autre :

“Un peuple prêt à sacrifier un peu de liberté pour un peu de sécurité ne mérite ni l’une ni l’autre, et finit par perdre les deux.” <img data-src=" />









vampire7 a écrit :



“Le web”, ça ne veut rien dire. Je parle des navigateurs : regarde un peu comme ça râle parce que sur certaines machines, l’interdiction de la compilation JIT empêche de concevoir des navigateurs performants sur le javascript… Ce genre de bidouille demande un travail énorme, et tout ça pourquoi ? Juste pour gagner un peu de perf.





Il n’est pas nécessaire d’interdire la génération de code à l’exécution pour avoir quelque chose de sûr : il suffit d’imposer que celui-ci soit au moins dans des pages mémoire différentes voire un processus différent avec des privilèges moindres sans partage mémoire (ou seulement via un protocole déclaré dans le binaire d’origine).



Cette interdiction pure et simple relève d’une volonté de vérification du code par le gérant de l’appstore. Mais c’est inefficace et des outils automatisés travaillant sur un bytecode de bas niveau vérifiable feraient bien mieux. De tels outils pourraient être invoqués à l’exécution.





2 fois plus lent ? Alors voilà un exemple. Cette opération est le cœur du mode d’opération XTS utilisé en cryptographie.



Les performances de ton exemple s’appuient sur des instructions particulières. Comme je l’ai dit rien n’empêche d’exposer des moyens de consommer ces instructions. Ce genre d’optimisations existerait donc toujours. En fait je ne les considère même pas comme des optimisations tant elles sont évidentes.



Ce qui serait inaccessible c’est :

* Le code directement en asm.

* Les alignements manuels de données.

* Les callbacks personnalisés pour les interruptions utilisées par le langage.

* Quelques autres bidouilles de ce genre.



Et ce qui serait imposé serait :

* Les vérifications des indices.

* L’initialisation de la mémoire.

* Un GC ou un comptage de références, ce qui veut dire 4 à 8 octets de plus par objet.





Est-ce négligeable ? Non. Mais entre ça et un code super-optimisé, je doute qu’on ait plus de 20 ou 30% de différence dans les pires cas. Est-ce négligeable ? Non. Est-ce que de tels ralentissements sur une poignée de programmes valent un environnement sécurisé ? Oui.





Quant au calcul déporté sur GPU, c’est loin d’être la solution miracle, à cause de toutes les latences nécessaires : transfert des données vers la VRAM, récupération des résultats, et les calculs eux-mêmes : tous les algorithmes ne sont pas parallélisables. Par exemple, un calcul de hash, c’est purement séquentiel.



Bien sûr, néanmoins c’est pour de plus en plus de programmes la voie à suivre. Et tout l’enjeu est justement de supprimer cette latence en virant le bus PCIe et en faisait du GPU un citoyen de première classe.





Ne sous-estime pas l’importance de la performance



Ne sur-estime pas l’importance des micro-optimisations et le coût d’un code sûr.









vampire7 a écrit :



J’ai acheté il y a bientôt 3 ans un Core I7 2600k à 276 euros. Regarde donc les prix aujourd’hui

Intel n’a plus de concurrent sur le marché du desktop. Pour quelle raison baisserait-il les prix ?



Quant à la puissance des CPU, c’est pratiquement la même chose depuis 5 ans. Aujourd’hui, si tu veux plus de perf, il faut optimiser. Et si tu veux arriver à ce niveau-là avec un langage managé, ben… bon courage. <img data-src=" />







Tu es un particulier…Et même à 276€ c’est l’équivalent 3h de développement…









HarmattanBlow a écrit :



Il n’est pas nécessaire d’interdire la génération de code à l’exécution pour avoir quelque chose de sûr : il suffit d’imposer que celui-ci soit au moins dans des pages mémoire différentes voire un processus différent avec des privilèges moindres sans partage mémoire (ou seulement via un protocole déclaré dans le binaire d’origine).





Si le code généré dynamiquement n’a accès à rien, il ne sert pas à grand-chose…





HarmattanBlow a écrit :



Les performances de ton exemple s’appuient sur des instructions particulières.





Ces instructions n’ont rien de “particulières” : elles sont aujourd’hui largement utilisées, et sont même requises pour Windows 8. Et en temps d’exécution, là aussi, rien de particulier.



Le premier truc qui aurait dû te sauter aux yeux, même sans la moindre analyse, c’est le “if” du premier cas : un saut conditionnel rate statistiquement une fois sur deux, et dans ce cas, à cause d’une prédiction de branchement ratée, il y a tout le pipeline du CPU à recharger.

L’autre truc, c’est les accès RAM forcés par la forme du 1er cas, alors qu’il n’y a pratiquement pas d’accès dans le second.

Et voilà comment on peut, en gardant à l’esprit comment le matériel fonctionne, obtenir des gains de cet ordre. Mais ça nécessite de savoir à l’avance quelles instructions seront exécutées, ce que ne permet pas le code managé.







HarmattanBlow a écrit :



Comme je l’ai dit rien n’empêche d’exposer des moyens de consommer ces instructions. Ce genre d’optimisations existerait donc toujours. En fait je ne les considère même pas comme des optimisations tant elles sont évidentes.





C’est plus que des optimisations. L’algorithme lui-même doit être adapté ou adaptable. Par exemple, s’il faut accéder à des tables pour les calculs, s’il faut des sauts conditionnels, ou même parfois des trucs simples comme des rotations de bits fréquentes, c’est mort.





HarmattanBlow a écrit :



Est-ce négligeable ? Non. Mais entre ça et un code super-optimisé, je doute qu’on ait plus de 20 ou 30% de différence dans les pires cas.





La plupart de ces instructions nécessitent des données alignées sur 128 bits.



Qu’appelles-tu “vérifications des indices” ? Une vérification logicielle est impensable : tu n’obtiendrais pas un code 10 fois moins rapide mais plutôt de l’ordre de 50 ou plus. Avec des tests et des sauts conditionnels incessants, au lieu d’espérer 2 ou 3 instructions par cycle, ça risque plutôt d’avoisiner une instruction pour 20 cycles… Et avec le “comptage de références” dont tu parles, ce serait encore pire.

Quant à une vérification matérielle, c’est déjà présent et utilisé depuis les processeurs 80286… Quant au “bit NX”, c’est utilisé pour éviter les attaques par buffer overflow. A ce propos, j’espère que tu as pensé à activer la “prévention de l’exécution des données” pour tous les programmes et services… <img data-src=" />





HarmattanBlow a écrit :



Est-ce que de tels ralentissements sur une poignée de programmes valent un environnement sécurisé ? Oui.





Comme beaucoup d’autres, je veux rester maître de ma machine et pouvoir exploiter chaque composant comme je le veux. Ton “environnement sécurisé” ne me le permet pas.

Qu’un environnement complètement verrouillé soit souhaitable dans certains cas, c’est possible, mais pendant combien de temps aura-t-on le choix ? Encore une fois, le jour où Microsoft ne me permet plus de faire ce que je veux de ma machine (utiliser mon processeur comme je veux, accéder directement au disque dur, etc.), j’irais voir ailleurs.

Mais heureusement, ce n’est pas près d’arriver, car ça supprimerait bon nombre de jeux qui requiert des performances maximales, un marché que Microsoft ne peut pas se permettre de perdre.



D’ailleurs, je te rappelle que la sécurité absolue n’existe pas, et .NET est loin d’être à l’abri des failles.









sepas a écrit :



Tu es un particulier…Et même à 276€ c’est l’équivalent 3h de développement…





92 euros de l’heure ? Euh… c’est quoi ta boîte ? <img data-src=" />









vampire7 a écrit :



Si le code généré dynamiquement n’a accès à rien, il ne sert pas à grand-chose…





Les données ne seront pas partagées mais elles pourront être communiquées : autrement dit on peut dupliquer les données d’un processus à l’autre via un protocole spécifié par le processus hôte.



Pour un navigateur ça revient par exemple à fournir initialement au processus JS une copie du DOM et JS envoie alors les modifications à effectuer au parent, chacun des deux modifiant sa propre copie. Le genre de construction qui est de toute façon nécessaire pour mettre en place un rendu concurrent de l’exécution javascript.





Ces instructions n’ont rien de “particulières”



Je sais pertinemment ce que sont ces instructions et ce qui importe c’est qu’elles peuvent être rendues accessibles par des langages sûrs, tout comme elles le sont aujourd’hui par le C++ 11. On pourrait même choisir d’exposer un contrôle plus fin que ce qu’a fait C++ 11 qui, de ce que j’ai lu, semble avoir masqué les complexités.





Le premier truc qui aurait dû te sauter aux yeux, même sans la moindre analyse, c’est le “if” du premier cas : un saut conditionnel rate statistiquement une fois sur deux, et dans ce cas, à cause d’une prédiction de branchement ratée, il y a tout le pipeline du CPU à recharger.



Sauf que le coût est en fait négligeable parce que le code asm produit est optimisé pour les algos “next line” typiquement mis en oeuvre dans les CPU.



Cet algo se base sur la différence entre la position courante et la cible du branchement pour optimiser les cas tels que :

1: aller à 3 quand vrai

2: aller à “fin de boucle”

3: début du corps de boucle



Pour simplifier à partir du moment où le compilateur est conscient d’une méthode pour optimiser les boucles sur la plateforme actuelle il est automatiquement conscient d’une méthode pour optimiser les vérifications aux indices. Le seul poids significatif qui demeure est l’obligation de charger la taille.



Enfin n’oublions pas tous les cas où les vérifications aux indices sont simplement virés, comme dans l’exemple suivant où le compilateur vérifiera simplement “quantité” : “pour i de 0 à quantité faire tableau[i] = tableau[i] + 1”





Mais ça nécessite de savoir à l’avance quelles instructions seront exécutées, ce que ne permet pas le code managé.



En quoi ne le permet-il pas ? Il n’y a aucune différence avec un autre langage de programmation. D’ailleurs inspecter le code asm généré est un jeu d’enfant sous VS.





C’est plus que des optimisations. L’algorithme lui-même doit être adapté ou adaptable. Par exemple, s’il faut accéder à des tables pour les calculs, s’il faut des sauts conditionnels, ou même parfois des trucs simples comme des rotations de bits fréquentes, c’est mort.



Et tu pourras très bien faire ça dans un code sûr.





La plupart de ces instructions nécessitent des données alignées sur 128 bits.



Ce qui ne pose aucun problème dès lors qu’un type ad hoc existe. Comme en C++.





Quant à une vérification matérielle



Les tables virtuelles ne peuvent pas être modifiées par un code en espace utilisateur et mon intuition me dit qu’elles sont certainement trop longues à altérer et peut-être même trop longues à lire.





Qu’appelles-tu “vérifications des indices” ? Une vérification logicielle est impensable : tu n’obtiendrais pas un code 10 fois moins rapide mais plutôt de l’ordre de 50 ou plus.



Un branchement conditionnel raté (avec vidange du pipeline) coûte trois à quatre fois le coût d’une addition d’entiers, pas cinq cent fois. Il est donc mathématiquement impossible que la plus sommaire des boucles (dix instructions dont un branchement) soit ralentie de plus d’une dizaine de pourcents par l’ajout d’une vérification indicielle statiquement invérifiable exécutée sur une plateforme exotique où l’on ne pourrait pas optimiser la prédiction des branchements.





Comme beaucoup d’autres, je veux rester maître de ma machine et pouvoir exploiter chaque composant comme je le veux.



C’est loin d’être le cas aujourd’hui : l’assembleur est de bien plus haut niveau que les instructions du processeur et ce dernier contient un sacré bazar qui ne te sert à rien. Par ailleurs tous tes programmes s’exécutent en espace utilisateur et le moindre accès mémoire passe sous les fourches caudines de la mémoire virtuelle.





Mais heureusement, ce n’est pas près d’arriver, car ça supprimerait bon nombre de jeux qui requiert des performances maximales, un marché que Microsoft ne peut pas se permettre de perdre.

@

Et je t’assure que ces jeux peuvent parfaitement être programmés dans un langage “sûr”.





D’ailleurs, je te rappelle que la sécurité absolue n’existe pas, et .NET est loin d’être à l’abri des failles.



Et la ceinture de sécurité ne soigne pas le cancer.







vampire7 a écrit :



92 euros de l’heure ? Euh… c’est quoi ta boîte ? <img data-src=" />





Une boîte où ils ont eu la bonne idée de payer les charges et taxes, de louer des locaux, de payer les factures, d’embaucher des secrétaires, des commerciaux, des comptables, des juristes, des traducteurs, etc.









HarmattanBlow a écrit :



Les données ne seront pas partagées mais elles pourront être communiquées : autrement dit on peut dupliquer les données d’un processus à l’autre via un protocole spécifié par le processus hôte.





Dupliquer des données : perte de perf. Et c’est loin d’être négligeable : regarde toutes les tentatives d’améliorer la vitesse de memcpy. Le problème est qu’il n’y a même pas de “meilleure solution” parce que, encore une fois, ça dépend du matériel (utilisation et quantité des caches CPU).







HarmattanBlow a écrit :



Sauf que le coût est en fait négligeable parce que le code asm produit est optimisé pour les algos “next line” typiquement mis en oeuvre dans les CPU.





Comme je l’ai dit, j’ai examiné le code ASM produit. Je passe même beaucoup de temps à ça… Et il n’y a pas de boucle dans mon exemple, seulement un saut conditionnel.







HarmattanBlow a écrit :



En quoi ne le permet-il pas ? Il n’y a aucune différence avec un autre langage de programmation. D’ailleurs inspecter le code asm généré est un jeu d’enfant sous VS.





Parce que le code est généré à l’exécution, pas à la compilation. Ou alors tu parles d’autre chose.







HarmattanBlow a écrit :



Un branchement conditionnel raté (avec vidange du pipeline) coûte trois à quatre fois le coût d’une addition d’entiers, pas cinq cent fois. Il est donc mathématiquement impossible que la plus sommaire des boucles (dix instructions dont un branchement) soit ralentie de plus d’une dizaine de pourcents par l’ajout d’une vérification indicielle statiquement invérifiable exécutée sur une plateforme exotique où l’on ne pourrait pas optimiser la prédiction des branchements.





Tu es très loin du compte…

Wikipedia : Modern microprocessors tend to have quite long pipelines so that the misprediction delay is between 10 and 20 clock cycles.

Et une addition d’entiers peut être exécutée avec plusieurs autres instructions en un seul cycle, on peut donc considérer que c’est moins d’un cycle.

Comme quoi l’accélération x12 de mon exemple n’a vraiment rien de surprenant.







HarmattanBlow a écrit :



C’est loin d’être le cas aujourd’hui : l’assembleur est de bien plus haut niveau que les instructions du processeur et ce dernier contient un sacré bazar qui ne te sert à rien. Par ailleurs tous tes programmes s’exécutent en espace utilisateur et le moindre accès mémoire passe sous les fourches caudines de la mémoire virtuelle.





Curieusement, les intrinsics permettent de redécouvrir certaines instructions inutilisées, comme par exemple _bit_scan_forward

Bon sinon, pas la peine de me faire un cours sur les architectures RISC et CISC ou les vieilleries 16 bits, j’ai connu ce temps-là, un temps où on pouvait joyeusement écrire à l’adresse 0xA0000 pour faire apparaitre un pixel… <img data-src=" />







HarmattanBlow a écrit :



Et la ceinture de sécurité ne soigne pas le cancer.





Mais en es-tu vraiment persuadé ? Tu as l’air d’imaginer que le code managé est la solution à tous les problèmes de sécurité. Tout comme d’autres s’imaginent qu’une “sandbox” permet à navigateur d’être sûr…



De toute façon, outre le risque de perdre un marché pour Microsoft, il n’y a pas grand-monde qui veut d’un système aussi verrouillé que celui dont tu rêves : voir l’exemple du jailbreak d’iOS…



Hop, un bench de perf sans appel pour alimenter le débat:

http://www.codeproject.com/Articles/212856/Head-to-head-benchmark-Csharp-vs-NET








vampire7 a écrit :



Dupliquer des données : perte de perf.





Oui, sauf dans les cas, nombreux (et de plus en plus avec la multiplication du parallélisme), où c’est plus avantageux que de partager en verrouillant tour à tour. Les structures immuables jouent un rôle de plus en plus grand et ça n’a rien à voir avec la sécurité.



Et puis au regard d’une compilation dynamique, le memcpy est rarement significatif. ;)





Et il n’y a pas de boucle dans mon exemple, seulement un saut conditionnel.



Au temps pour moi je pensais que tu parlais des vérifications aux indices, je n’avais pas vu ton branchement dans ton exemple. Sauf que ton premier exemple implique aussi des entrelacements/désentracements additionels et (si mes vieux souvenirs sont corrects) des aller-retours vers la mémoire, tandis que dans le second tout reste sagement dans les registres SSE. Je te trouve bien hâtif de mettre le problème sur le compte du branchement conditionnel.





Parce que le code est généré à l’exécution, pas à la compilation. Ou alors tu parles d’autre chose.



Et alors ? Qu’est-ce que ça change ? Tu écris ton code en fonction de la façon dont tu penses qu’il sera transformé en asm, puis tu vérifies la façon dont il a été compilé.



La seule différence c’est que pour le code managé il faudra effectivement attendre l’exécution. Et alors ? Il est de toute façon plus simple de placer ton breakpoint et d’inspecter à l’exécution en pas-à-pas que d’aller fouiner dans un logiciel séparé en retapant le nom de ta fonction.





Tu es très loin du compte…

Wikipedia : Modern microprocessors tend to have quite long pipelines so that the misprediction delay is between 10 and 20 clock cycles.



Tu me permettras d’être en désaccord avec une affirmation non-sourcée de wikipedia. ;)



Mais supposons que j’ai tort : combien de cycles a t-il fallu dans ton premier exemple pour exécuter les quelques trente instructions asm qu’il nécessite ? Pour qu’une pénalité de dix cycles en moyenne (20 cycles 50% du temps) multiplie le temps d’exécution de douze fois il faudrait donc que tu exécutes plus de trente instructions par cycle. Dans la réalité on est plutôt en-dessous d’une instruction par cycle, notamment à cause des accès mémoire.



Accessoirement je ne crois pas que le coût d’une erreur de prédiction soit liée à la longueur du pipeline, sauf si celui-ci est trop court par rapport aux besoins du code.





Mais en es-tu vraiment persuadé ? Tu as l’air d’imaginer que le code managé est la solution à tous les problèmes de sécurité. Tout comme d’autres s’imaginent qu’une “sandbox” permet à navigateur d’être sûr…



Il y a trois types de problèmes de sécurité que j’observe :

a) Les problèmes évitables avec le code managé (buffer overflow & co).

b) Les problèmes liés à l’évaluation des entrées (injection SQL, protocoles Turing-complet, etc)

c) Les problèmes externes (erreurs de l’administrateur, utilisateur qui donne son mdp, interface obscure, etc)



Le premier peut “facilement” être résolu (en sacrifiant des perfs et en réinventant nos piles logicielles). Le second peut “facilement” être résolu dans la majorité des cas (en utilisant de bons outils). Dans tous les cas le procédé est le même : créons des outils peu nombreux et de taille réduite, aussi simples que possibles, qui nous protégerons de nos erreurs.





il n’y a pas grand-monde qui veut d’un système aussi verrouillé que celui dont tu rêves : voir l’exemple du jailbreak d’iOS…



Pas grand monde à part l’ensemble des entreprises de la planète tu veux dire ?







divide a écrit :



Hop, un bench de perf sans appel pour alimenter le débat:

http://www.codeproject.com/Articles/212856/Head-to-head-benchmark-Csharp-vs-NET





Malheureusement…

* Les tests comparent parfois des poires et des pommes.

* Le compilo de C# est une bouse qui ne fait quasiment aucune optimisation.

* On peut avoir un langage sûr qui soit plus léger que C# (pas de mise en cache du hash code, verrous dédiés, etc).









divide a écrit :



Hop, un bench de perf sans appel pour alimenter le débat:

http://www.codeproject.com/Articles/212856/Head-to-head-benchmark-Csharp-vs-NET





Sans appel ? Le plus intéressant dans ce genre de truc, c’est les commentaires (enfin, ceux de plus de 3 lignes).



Quant au SSE2… Les résultats montrent clairement qu’il ne suffit pas de “enable SSE/SSE2”, comme il dit dans la conclusion. Le SSE2 n’est pas un switch à activer, c’est un ensemble d’instructions. Les compilateurs n’utilisent que très rarement ces instructions, pour la simple raison que pour traiter par exemple 4 entiers de 32 bits simultanément, il faut que l’algorithme soit conçu dans cette optique.



Par exemple, l’algorithme de chiffrement Serpent utilise des entiers de 32 bits pour chiffrer un bloc de 128 bits. Mais à ce niveau-là, il n’y a rien à faire avec le SSE2 parce que chaque entier subit des opérations différentes.

Toutefois, le premier entier 32 bits d’un bloc subit les mêmes opérations que le premier entier du second bloc. Et l’astuce est là : chiffrer 4 blocs (4*128 bits) simultanément. Comment un compilateur pourrait trouver ça ? Comment pourrait-il savoir que ça implique des modifications du mode d’opération XTS implémenté ailleurs ?

Et si on n’obtient qu’un gain d’environ 2,5x la vitesse d’origine, c’est uniquement à cause de l’absence d’opération de rotation de bits.



Bref, faut arrêter d’espérer que d’activer un switch va arranger votre algorithme comme il faut et trouver toutes les astuces à votre place.