11
votes

Bibliothèques standard de langage transversal?

Nous savons tous que l'apprentissage d'un langage de programmation est une petite partie de la production de productivité sur une plate-forme. Il faut beaucoup plus longtemps pour apprendre les bibliothèques Java qu'à apprendre le langage de programmation Java, même chose pour C #, JavaScript, Python, Ruby ... etc.

En tant que programmeurs, nous pouvons facilement effectuer l'observation qu'une boucle ou une matrice est une boucle ou une matrice dans n'importe quel langage de programmation. Une fois que vous avez appris le concept, vous n'avez pas besoin de réapprendre la syntaxe, mais que zéro effort est consacré à réapprendre le concept. Évidemment, ce n'est pas le cas des bibliothèques standard, ce qui signifie que nous devons réapprendre comment les tâches courantes telles que la manipulation de fichiers, la discussion à une base de données, en effectuant une mise en réseau sur chaque plate-forme que nous utilisons, c'est inefficace et douloureuse, il doit y avoir une meilleure façon de sortir là-bas.

Le W3C DOM est un exemple de bibliothèque de langage croisé censé avoir les mêmes noms de fonction et la même sémantique, quel que soit le langage de programmation. W3C DOM est difficile à utiliser, mais au moins une fois que vous l'apprenez dans une langue / une plate-forme, c'est la même chose dans d'autres.

existe-t-il un ensemble de bibliothèques de langage croisé définies n'importe où pour les tâches les plus courantes qu'un développeur circa 2011 se soucierait de.

  1. Opérations IO de fichier
  2. Networking
  3. Gestion des processus
  4. Accès à la base de données
  5. Collections et structures de données
  6. cryptographie, signatures numériques, hachage cryptographiques
  7. autre chose d'autre qui est utile qui n'implique pas le code UI

    Clarification: Je ne suis pas intéressé par les API liées à la plate-forme actuelle comme .NET ou la JVM, car ceux-ci sont liés à une seule entreprise et dans de nombreux cas, les API montrent leur âge et s'ils ont été ré-conçus aujourd'hui être beaucoup plus propre / meilleur. Également en train d'être principalement un développeur Java surveille Oracle Take Over Wide Sue Google a été un véritable spectacle d'horreur. Je ne veux vraiment pas que les heures que j'investissez dans la maîtrise d'une plate-forme soient liées à une entité unique, mais plutôt une sorte de projet open source, où les meilleures conceptions gagnent.

    Clarification: Je recherche des API qui sont les mêmes dans de nombreuses langues différentes non liées à une seule langue. Par exemple, envisagez de lire le contenu d'un fichier texte. Je dois ouvrir le fichier, lire le contenu, etc. Je rechercherais une API où la fonction avait exactement le même nom dans toutes les langues, les mêmes paramètres, dans le même ordre, avec les mêmes données de retour, Même erreur de sémantique de traitement des erreurs. Je suis au courant de différents paradigmes de programmation, donc je suis d'accord avec une version OO de l'API, une version fonctionnelle ... etc.


2 commentaires

On dirait que vous voulez avoir une seule langue. Ne jamais arriver.


J'ai démarré un site Web, LOYC.NET , que j'espère que le jour sera une communauté consacrée à des problèmes comme celui-ci. Certaines fonctionnalités deviennent standard dans la plupart des langues - fermetures, dictionnaires, exceptions, une sorte de gestion automatique de la mémoire (au moins refc.), une sorte de généricité (dans des langages typées statiquement), une sorte d'interfaces ", une sorte d'héritage, Générateurs / Async - mais il y a toujours une variation substantielle, entrave la normalisation. Si quelqu'un travaille sur le problème de la cartographie des mêmes concepts dans diverses langues, faites le moi savoir!


6 Réponses :


1
votes

Oui, il y en a quelques-uns. Windows, MacOS X, Linux ... :)

Plus sérieusement, les runtimes .NET et Java appuient à la fois de nombreuses langues. Si vous restez dans l'ensemble des langues, vous pouvez également conserver les connaissances de votre bibliothèque.


2 commentaires

Java Runtime ??? Autre que Java et Scala, Nom One ...


@Sevaalekseyev Jruby, Jython, Erjang, Rhino ...?



1
votes

Les choses suivantes viennent à l'esprit:

  • Microsoft .NET - plutôt étroitement lié à l'écosystème Microsoft (mais gardez le mono à l'esprit), a des liaisons à de nombreuses langues, la conception est quelque peu inspirée de Java. Fait la plupart des choses que vous avez énumérées?

  • QT - racines très fermement en C ++, a des liaisons à d'autres langues, pas aussi de poids lourds que .NET, mais ne se sent pas aussi étranger sur * Nix et MacOS. La prise en charge de la base de données est très primitive, la prise en charge de Crypto est inexistante.


0 commentaires

3
votes

C'est une bonne question. Une telle bibliothèque sera un bon atout pour chaque développeur, mais il ne peut pas être standard , car les bibliothèques standard sont très conservatrices et qu'il faut du temps pour que l'API idéale s'installe. Il existe également un problème avec la compatibilité en retard qu'une fois le code entré la bibliothèque standard, il ne peut pas changer. Dans la communauté Python, il y a une blague que de bons modules entrent dans la bibliothèque standard de mourir.

Cette bibliothèque peut commencer, non pas comme une bibliothèque, mais comme un site de communauté / de recette qui se concentrera sur le processus de collaboration, car il n'est pas facile pour un homme de persuader tous les autres que le choisi API est le meilleur. Vous devez vraiment convaincre tout le monde .

Je ne peux pas dire pour d'autres langues, mais dans la communauté Python, il est préoccupé par le déplacement de STDLIB hors du cœur afin de pouvoir évoluer plus rapidement. Il y a un Proposition étiquetée PEP 413 , mais ce n'est pas suffisant. Le plan pourrait être de:

  1. Définir les espaces de noms (modules en Python)
  2. Rassemblez des statistiques pour une utilisation réelle de la fonction (analyse statique + araignée de référentiel public)
  3. Obtenez le meilleur de toutes les langues
  4. Analyser, débattre et vote (ou simplement utiliser que vous aimez) - cela nécessite une base de données d'histoire utilisatrice qui enrit des problèmes courants, des moyens de les résoudre et contient des résumés (Python> (Python Recook) une fois très bel exemple de tels résumés). Il y a une fonction de plus importante de la base de données - détecte des cas d'utilisation contradictoire .
  5. est d'accord sur la licence (ou acceptez simplement que le domaine public est la seule manière compatible de copie / pâte)

    Ainsi, la réponse est - il n'y a pas de telles bibliothèques de langue interrompue. Parce qu'il y a une communication insuffisante entre les parties. Parce qu'il n'y a pas de plate-forme intuitive pour le faire.


2 commentaires

Je pensais à démarrer un site Web comme une offshoot de LOYC.NET consacré à la suggestion de "interfaces" communes et comment elles seraient Travail - Pas seulement les trucs habituels comme des listes, des dictionnaires, des chaînes et des fichiers, mais des représentations de couleurs, de points / de vecteurs, d'itérateurs / de gammes, de graphiques, de géométrie, de syntaxe, des tests d'unité, de la journalisation, du traitement parallèle, des mathématiques symboliques, des Guis, peu importe. Une autre idée: un système d'interopérabilité transversal en langage binaire construit sur le site Web du site Web (qui est susceptible de prendre le monde entier). Si quelqu'un commence un projet dans l'une de ces zones, faites le moi savoir!


@Qwertie interfaces est une bonne idée. Et les interfaces sont spécifiques pour une tâche à accomplir. J'aime aller pour changer d'obsession des personnes d'OOP aux interfaces. Il n'y a pas d'interface idéale qui peut satisfaire à toutes les tâches. Mais pour vous rendre compte que les tâches devraient être placées en premier. Comme tests automatiques. Comme exercism.io mais domaine public pour des expériences sans restriction.



4
votes

Une question intéressante ... Je pense qu'il existe une plus grande opportunité pour les bibliothèques qui effectuent des fonctions plus spécialisées à développer avec plusieurs liaisons de langue (et vous commencez à le voir avec divers services Web). Malheureusement, les abstractions fournies ont tendance à être assez simplistes et souvent ressentir «étrangers» malgré les efforts des développeurs pour rendre les liaisons de langue aussi naturelles que possible. Peut-être une meilleure façon de dire que c'est qu'ils ont tendance à être unidiomomatique. Les API de POSIX de bas niveau, par exemple, représentent en effet une sorte de dénominateur commun le plus faible pour une bibliothèque standard, mais le défi est que différentes langues (peuvent) approcher même ces abstractions de base très différemment dans leur quête pour les rendre "naturels" pour cette langue. Un autre problème (comme mentionné dans des postes précédents) est que de par leur nature même, des bibliothèques standard doivent être convenues et cela peut être extrêmement difficile. Malheureusement, ce processus conduit souvent à des API qui satisfont vraiment à personne. (Par exemple ... Devons-nous vraiment soutenir 36 mots bits ou le calendrier copte? Cela dépend de votre point de vue. Si l'API soit orienté objet, fonctionnel ou autre chose comme des flux? Dépend également de votre point de vue. Juste soulignant que c'est peut-être une question plus compliquée que celle de penser.

Il convient de noter qu'il y a eu des efforts pour fournir des API meilleures (au moins plus cohérentes) pour des choses standard. Un exemple est plan9, un système d'exploitation dans lequel tout est un fichier. Dans l'ensemble, des critiques ont été mitigées.


0 commentaires

1
votes

Je suppose que le cas d'utilisation évident est de faciliter la transition des développeurs vers de nouvelles langues et du portage du code.

code OpenGL peut sembler assez similaire dans certaines langues, mais pas tous. Le DOM est un excellent exemple. Le très minimal JSON Parse / StringIny Interface peut être la bibliothèque la plus largement portée et sans ambiguïtée!

Mais ce que vous voulez vraiment, une API de la langue continue complète, je n'ai pas vu.

Comme Martin souligne à juste titre, il y a des problèmes liés à la portée d'une telle entreprise. Devoir répondre au dénominateur commun le plus bas signifie perdre toutes les caractéristiques de la langue qui ne sont pas disponibles dans tous les des langues de notre spectre souhaité. Cela pourrait signifier

  • pas de fonctions de premier ordre
  • Aucun générique / modèles / polymorphes
  • La nécessité de libérer () mémoire inutilisée
  • Typothing statique, pass-par -notes forcée
  • Opérabilité sans fermeture
  • Écouteurs d'événements compliqués
  • et la possibilité de fonctionner dans des environnements multi-threads et uniformes (Retour VS Rappel).

    tandis que cela pourrait être frustrant de perdre les caractéristiques mêmes que nous avons choisi une langue pour, il pourrait toujours y avoir des avantages d'un tel projet. Une portée plus étroite est susceptible de fournir de meilleurs résultats.

    Le La langue peut intéresser une personne envisageant un tel projet. Il a déjà une bibliothèque standard minimale (et Stax ) et peut exporter vers un certain nombre de langues différentes, y compris C ++, Flash, PHP, Neko, JavaScript et plus récemment C # et Java. (Je ne sais pas si les résultats finaux sont identiques dans toutes les langues.)

    tandis que communJs et Narwhal sont spécifiques à la langue (JavaScript), ils peuvent être notables comme des tentatives de création d'une interface de bibliothèque standard.

    Traitement a été porté dans quelques langues, il peut donc y avoir des bibliothèques utiles là-bas.

    Il doit y avoir un grand nombre d'exemples spécifiques, comme JSON. Par exemple, le Fuse L'interface de système de fichiers virtuel est accessible depuis C, Python, Java et beaucoup d'autres langues. Et je serais surpris si quelqu'un n'a pas essayé de créer une implémentation de l'API de Canvas 2D pour les langues que JavaScript.

    Apache a publié beaucoup de logiciels de même domaine dans différentes langues et peut avoir produit un aspect similaire à celui Bibliothèques.


0 commentaires

1
votes

Il y a une bibliothèque qui fait exactement ce que vous dites. Il s'appelle des turbocommons et vous CAN trouvez-le sur GitHub:

https://github.com/ederton/tururbocommons


0 commentaires