web-dev-qa-db-fra.com

Qu'est-ce que Linus Torvalds entend par sa citation sur la portabilité?

Dans n débat avec Andrew Tanenbaum sur microkernel vs architecture du système d'exploitation monolithique, Linus Torvalds dit,

La portabilité est destinée aux personnes qui ne peuvent pas écrire de nouveaux programmes.

Que voulait-il dire par là?

41
ykombinator

Alors que Linus écrit dans le débat, c'est avec la langue dans la joue (c'est-à-dire de ne pas être prise trop au sérieux).

Ensuite, il poursuit pour expliquer que pendant que la portabilité est une bonne chose, c'est aussi un compromis; Le code inutile peut être beaucoup plus simple. C'est-à-dire au lieu de rendre le code parfaitement portable, rendez-le simplement simple et suffisamment portable ("adhérer à une API portable"), puis si elle doit être portée, réécrivez-la au besoin. Rendre le code parfaitement portable peut également être considéré comme une forme d'optimisation prématurée - souvent plus de mal que de bien.

Bien sûr que ce n'est pas possible si vous ne pouvez pas écrire de nouveaux programmes et avoir à coller avec l'original :)

82
Joonas Pulakka

Je pense que cela signifie que chaque programme doit être écrit spécifiquement pour le système matériel et d'exploitation qu'il s'exécute.

Je pense que ce qu'il conduit comme c'est que le code général pouvant exécuter sur plusieurs plates-formes est moins efficace ou plus erroné que le code écrit spécifiquement et adapté à une plate-forme. Cela signifie toutefois que lorsque vous développez comme ça, vous devez conserver plusieurs lignes de code différentes.

12
ChrisF

Retour Lorsque Linux a été écrit pour la première fois, il a utilisé des fonctionnalités disponibles uniquement sur la CPU I386, qui était assez nouvelle et coûteuse à l'époque.

C'est exactement ce que Linux fait: il utilise simplement un sous-ensemble plus gros des caractéristiques 386 que d'autres noyaux semblent faire. Bien sûr, cela rend le noyau approprié inutile, mais cela fait aussi pour une conception/beaucoup/plus simple. Un compromis acceptable et celui qui a rendu Linux possible en premier lieu.

Alors que nous sommes allés au XXIe siècle, les fonctionnalités qui ont créé l'I386 unique sont devenues totalement traditionnelles, permettant à Linux de devenir très portable.

9
Andomar

En tant que quelqu'un qui a fait beaucoup de Java et a connu l'expérience de la "écriture une fois, déboguer partout" phénomène sur une base hebdomadaire depuis des années, je peux bien comprendre cela.

Et Java est probablement un exemple doux. Je ne peux même pas commencer à imaginer ce que les gens traversent ceux qui essaient de passer une base de code portable dans une langue/une boîte à outils qui n'a même pas été conçue pour être portable en soi.

À l'heure actuelle, au travail, nous enquêtons sur l'idée d'écrire une version Lite de l'un de nos produits pour les appareils mobiles. J'ai fait des recherches sur la façon de faire une version portable de celui-ci pour J2ME et Android - qui tente de partager autant que possible du codeBase (ne peut évidemment pas être entièrement "portable "Par soi, mais c'est une philosophie similaire). C'est un cauchemar.

Alors oui, parfois, il est vraiment bon de pouvoir penser (et faire) en termes d'utilisation des outils donnés pour le travail donné. Par exemple, se développer librement contre une plate-forme/environnement monolithique simple et monolithique. Et juste écrire des versions propres et propres pour chacun.

7
Bobby Tables

Tanenbaum indique que beaucoup de Linux est écrit de manière non modulaire pour tirer parti de la 386 processeur, l'état de la technique à l'époque, au lieu de rendre l'interaction de la CPU être un composant, et donc très facilement échangeable. Tanenbaum croit essentiellement que le fait que le noyau est tellement monolithique et attaché à 386 processeurs le rend très difficile à faire,

  • Port Linux elle-même sur une autre plate-forme de processeur (évidemment incorrecte, AMD64, PowerPC, etc.)
  • Programmes ports écrits pour Linux X86 à une autre architecture de la CPU (également incorrect)

Le camp Linux fait plusieurs points, parmi lesquels:

  • Linux propose des systèmes de fichiers multithreads dans le cadre de la conception
  • Microkernel, bien intéressant et intuitif ne sont pas très performants
  • L'adhésion de l'API portable rend la portabilité de la portabilité plus ou un niggle par opposition à un bloqueur.
4
Anatoly G

Si vous souhaitez écrire un code portable, vous devez écrire un code portable.

Qu'est-ce que je veux dire par là?

La conception doit refléter le but. Si la langue est C, par exemple, la concevez-la de manière à ce que le nombre minimum de lignes de code nécessite changer pour qu'il fonctionne. Cela signifie souvent séparer l'affichage du calcul, qui est une bonne philosophie de design de toute façon (MVC). La plupart des CODE C peuvent être compilés n'importe où, à condition que vous ayez accès à un bon compilateur. Tirer parti de cela et écrivez autant que vous pouvez être générique.

BTW, cette réponse s'appliquera uniquement aux applications. Le système d'exploitation et incorporé sont un autre animal entièrement.

3
Michael K

Cela signifie que les personnes qui peuvent écrire de bons programmes n'ont pas besoin de choses pour être portables, car elles peuvent travailler à partir de zéro.

Il s'agit de programmeurs moins doués qui souhaitent "importer" d'autres programmes (portabilité) à l'autre.

2
Tom Au

Interpréter cette déclaration "littéralement" la façon dont c'est.

Dans une autre des citations de Linus, il a déclaré: "C++ tente de résoudre tous les mauvais problèmes. Les choses c ++ résolvèrent sont des objets triviaux, presque purement syntaxiques de c, plutôt que de fixer un véritable problème profond".

Également dans sa biographie, "juste pour le plaisir" linus lors de la citation sur les microkernels a déclaré que, pour un problème de complexité "N" Si vous divisez le problème dans "1/N" des parties uniques .. Ensuite, la complexité totale du développement d'un tel système serait être 'n!' Cela lui-même est suffisamment facteur pour ne pas tenter une telle chose et extraire l'efficacité d'un système aussi complexe serait très difficile.

2
pankajdoharey