Quelles sont les différences entre un systems programming language
et Application programming language
?Différence entre le langage de programmation des systèmes et les langages de programmation des applications
Répondre
Quelques facteurs devraient dans mon opinon venir en considération
Dans un langage de programmation du système, vous devez être en mesure d'atteindre des choses de bas niveau, se rapprocher du monde réel du matériel. Dans un langage d'application, il y a plutôt une sorte de «monde virtuel» (heureusement plus agréable et plus facile à interagir) qui a été conçu avec la langue et il suffit de pouvoir y faire face.
Dans un langage de programmation système, il ne devrait y avoir aucune concession en termes de performances. Il faut être capable d'écrire du code qui évince tout le jus du matériel.Ce n'est pas la plus grande préoccupation dans un langage de programmation d'application, où le temps nécessaire pour écrire réellement le programme joue à la place un rôle plus important. En raison de 2, un langage de programmation système est libre de supposer que le programmeur ne commet aucune erreur et qu'il n'y aura donc pas de protections "d'erreur d'exécution". Par exemple, l'indexation hors d'un tableau va signifier la fin du monde à moins que le matériel ne donne ces contrôles gratuitement (mais dans ce cas vous pourriez probablement choisir un matériel moins cher ou plus rapide à la place). L'idée est que si vous supposez que le code est correct, il ne sert à rien de payer même un petit prix pour vérifier l'impossible. De plus, un langage de programmation système ne devrait pas gêner le programmeur qui fait quelque chose qu'il veut faire intentionnellement ... il suppose qu'il sait que c'est la bonne chose à faire. Dans un langage de programmation d'application, il est préférable d'aider le programmeur à vérifier le code et d'essayer de forcer le code à utiliser certains schémas philosophiques. Dans les langages de programmation d'applications, des choses comme la vitesse d'exécution, le temps de frappe et la taille du code peuvent être sacrifiées en essayant d'aider les programmeurs à éviter de se tirer d'affaire.
En raison de 3, un langage de programmation système sera beaucoup plus difficile à apprendre par expérimentation. Dans un sens, ils sont en quelque sorte des outils puissants mais dangereux que l'on devrait utiliser soigneusement en pensant à chaque déclaration et pour la même raison, ils sont des langues où le débogage est beaucoup plus difficile. Dans les langages de programmation d'application, l'approche "try-and-see" peut être raisonnable (si l'abstraction du monde virtuel ne fuit pas trop) et laisser les erreurs pour les supprimer plus tard est considérée comme une option viable.
Comme pour beaucoup de choses dans l'informatique, la ligne est floue. Par exemple, C a commencé sa vie comme un langage de programmation système (et a été utilisé pour implémenter Unix), mais a été et est également utilisé pour le développement d'applications. Cela dit, il existe clairement des langages mieux adaptés à la programmation de systèmes que d'autres (par exemple, C/C++ sont plus adaptés que COBOL/FORTRAN pour la programmation de systèmes). De même, il existe des langages mieux adaptés au développement d'applications et non à la programmation de systèmes, par exemple. VB.NET.
Les caractéristiques de langage qui ressortent des exemples ci-dessus sont les caractéristiques de bas niveau des langages de programmation système comme C/C++ (par exemple, pointeurs, opérateurs de manipulation de bits, etc.). Il y a bien sûr la vieille blague que C est un langage de niveau "mer" (assis quelque part entre le niveau d'assemblage et le niveau "haut"). Attention: J'arrive à la programmation système du point de vue du développeur OS/développeur d'OS.
Je pense qu'il est juste de dire, nonobstant les projets de développement de systèmes d'exploitation avec Java (même si je crois que la plupart sont compilés en natif plutôt qu'en octets et en JIT), les langages de programmation système ciblent le code machine natif de leurs plates-formes cibles. Ainsi, les langues qui ciblent principalement le code managé/interprété sont moins susceptibles d'être utilisées pour la programmation des systèmes.
Quoi qu'il en soit, ce qui est sûrement assez pour susciter des commentaires aussi bien à l'appui et en opposition :)
C aurait dû rester programmation "systèmes" ;-) –
C ne peut pas être le meilleur choix pour beaucoup d'applications, mais il y a encore assez d'applications où C est un bon choix. C est également ressuscité en tant que base sur les langages de programmation parallèles (par exemple CUDA, OpenCL). Sa popularité (sans tenir compte de l'impact du support hérité) ne peut être refusée (par exemple, www.tiobe.com Programming Language Index). Je développe dans une gamme de langues, mais je vais toujours avoir un faible pour C, appelez-moi masochiste; J'adore le langage d'assemblage aussi ;-) –
* "... Je crois que la plupart sont natives compilées, plutôt que de code octet et JIT'ed/interprété" *. Pour JNode, le système de base et les plugins core sont natifs compilés, le reste est compilé JIT (sans aucune interprétation). –
Ce ne sont pas des concepts exacts, mais en essence, les langages de programmation systèmes sont adaptés à l'écriture des systèmes d'exploitation (donc ils ont concepts de bas niveau tels que pointeurs, intégration avec assembleur, types de données correspondant à la mémoire et à l'organisation des registres), alors que les langages de programmation d'application sont plus adaptés aux applications d'écriture, ils utilisent généralement des concepts de niveau supérieur pour représenter le calcul. , fermetures, types de données complexes intégrés et ainsi de suite).
En général, un langage de programmation système est inférieur au langage de programmation des applications. Cependant, le langage lui-même n'a rien à voir avec ça .. c'est plus les détails de l'implémentation du langage. Par exemple, Pascal a commencé sa vie comme un langage d'enseignement, et était à peu près strictement des applications .. cependant, il a évolué dans un langage système et a été utilisé pour créer les premières versions de MacOS et Windows. C# n'est pas, typiquement un langage de système, car il ne peut pas effectuer de travail de bas niveau, bien que même cette ligne soit floue à mesure que les systèmes d'exploitation gérés voient le jour.
Je ne pense pas qu'il y ait une réponse finale ici.
Perl et Python viennent par défaut avec presque tous les distro linux ... les deux peuvent inline C ... les deux peuvent faire le contrôle de l'emploi et d'autres « bas niveau » tâches ... filetage etc.
toute langue avec un bon ensemble de liaisons d'appel système et/ou FFI devrait être aussi fondamentalement sensible au système que C ou C++.
les seules langues que je ne tiendrions pas comme langues de systèmes sont ceux qui traitent spécifiquement une autre plate-forme (jvm, clr) et cherchent activement à empêcher une interaction native
http://wiki.answers.com/Q/What_is_the_difference_between_system_programming_and_application_programming –
Cette question a déjà été soulevée, mais je n'arrive pas à la trouver sur SO. –