Pourquoi les bases de données ne sont-elles pas intégrées en tant que fonction linguistique?


25

Existe-t-il des langages de programmation qui ont une base de données intégrée comme fonctionnalité de langage de première classe plutôt que de se connecter à une base de données SQL (ou autre) externe? Quels seraient les inconvénients et les avantages d'une telle fonctionnalité? À quoi ressemblerait une telle fonctionnalité et comment changerait-elle la façon dont nous programmons?


17
Je pensais que SQL était un langage. : D
Kevin Cantu

8
.NET a LINQ pour SQL, ce qui, selon moi, est la bonne approche pour un problème général. Vous ne devez pas vous enfermer dans une base de données particulière, et vous ne pouvez pas créer quelque chose d'assez général, et pourtant implémenter toutes les fonctionnalités de tout ce qui existe. LINQ est toujours génial, tout comme moi.
Job du

linq2SQL est mort, remplacé par linq2EF, mais même principe
BlackICE

3
et malheureusement, Linq2EF a quelques extensions méchantes uniquement pour Microsoft, ce qui signifie que vous êtes verrouillé dans SQLServer avec lui si vous faites quelque chose de complexe.
gbjbaanb

1
@Job "Vous ne devriez pas vous enfermer dans une base de données particulière". En général, comme cela est indiqué, je ne pourrais pas être plus en désaccord avec cette idée en général. Je raffinerais plutôt cette philosophie ou cesserais de l'adopter. Par exemple, je ne verrouillerais pas mon code de couche d'interface utilisateur dans une base de données particulière. Cependant, je verrouillerais très certainement mon code de couche de services dans une base de données particulière.
Michael O'Neill

Réponses:


15

Le seul langage auquel je peux penser est les anciens langages xBase comme DBase, Clipper et FoxPro. Il existe un projet GNU qui propose une version gratuite et principalement compatible appelée Clip

C'était aussi Pick Basic qui liait un langage de programmation directement à une plate-forme de base de données.

Ceci a été fait. C'était une impasse évolutive qui limitait la façon dont une langue pouvait accéder aux données.


2
Pouvez-vous expliquer pourquoi c'est une impasse évolutive? Je ne pense pas à en mettre en place un, je suis juste curieux.
VirtuosiMedia

1
@VM Il y a eu une tendance claire à utiliser des API et à garder le langage, les bibliothèques et le runtime distincts. Pour l'instant, des API bien définies qui permettent d'accéder aux données de manière commune; indépendamment de la langue ou de la base de données ou même du schéma de base de données sont communs. La plupart des langues courantes livrent une API de base de données commune dans le cadre de la bibliothèque standard. Idem pour l'accès aux fichiers et http. Il n'est plus nécessaire de l'intégrer dans la langue.
sal

1
il existe des ordres de grandeur de différence entre le temps d'appel local et l'API distante, ajoutez-en plus s'il existe une interface réseau. Il y a encore des avantages distincts et réels à utiliser des langues dans une pile DB.
Jé Queue

@Xepoch certainement si vous souhaitez vous enfermer dans la base de données et l' implémentation du langage de ce fournisseur .
BlackICE

1
@David, relisez la question, dites-moi quelle langue cela ne serait jamais pour le verrouillage du vendeur?
Jé Queue

29

Les langues sont "petites" et les bases de données sont "grandes"; donc chaque fois que les deux sont combinés, ce n'est pas une langue avec la base de données comme fonctionnalités, mais une base de données avec la langue comme fonctionnalité. De nombreuses bases de données contiennent des langages propriétaires, par exemple PL / SQL, T-SQL.


Comment les langues sont-elles "petites"?
Rei Miyasaka

C'est une question de perception. Bien sûr, les bases de données semblent avoir une base de code plus grande, une documentation plus grande, des exigences de disque plus importantes (même si nous ne considérons pas les données actuall); mais ces comparaisons ne sont pas justes car la plupart des bases de données sont livrées avec un ou même plusieurs langages de programmation.
user281377

3
Rei: Vous n'avez pas regardé de plus près PL / SQL, n'est-ce pas? BTW, Oracle inclut également une JVM dans le SGBDR.
user281377

3
Rei: En fait, beaucoup de gens utilisent PL / SQL pour écrire des applications, au moins la partie logique métier. Comme vous le savez peut-être, PL / SQL est également le langage utilisé dans Oracle Forms, vous pouvez donc essentiellement écrire et exécuter un programme PL / SQL qui ne touche jamais une base de données. Dans la pratique, cependant, PL / SQL est utilisé conjointement avec un SGBDR Oracle.
user281377

2
Eh bien, je n'aurais jamais pensé.
Rei Miyasaka

16

Je ne pense pas nécessairement que la bonne question soit "pourquoi n'y est-il pas?" mais "pourquoi devrait-il y en avoir?". Que gagnerait-on à ce que les bases de données soient une caractéristique du langage? N'oubliez pas que le langage est tout en bas de la pile de programmation. Faire gonfler une langue affecte tout . Ainsi, les concepteurs de langage doivent être lents à ajouter de nouvelles fonctionnalités, en particulier celles qui impliqueraient un tel investissement.


6
Parce que vous souhaitez bénéficier des avantages de la vérification de type et même de la simple vérification de nom, lorsque vous travaillez au-delà des limites du langage de requête et du langage de programmation.
Macneil

4
@Macneil, les outils ORM le font maintenant. Que devrait-il être intégré dans le langage lorsque les API peuvent le faire?
sal

1
@sal Pour que les distributeurs d'applications n'aient pas à regrouper un énorme SGBD juste pour obtenir des écritures atomiques et une vérification de cohérence dans leurs caches, index de recherche, etc. C'est pourquoi SQLite existe: " pour concurrencerfopen() ".
Damian Yerrick

@sal: ce serait probablement pour une raison similaire que les expressions régulières ou virgule flottante sont regroupées dans certaines langues lorsque les API peuvent le faire. Parce que quelqu'un écrivait une langue et a décidé qu'ils étaient suffisamment fondamentaux pour justifier une syntaxe spéciale. Bien sûr, c'est une raison générique de ne pas être une réponse utile ;-)
Steve Jessop

14

Il existe 3 systèmes hérités proches de vos besoins:

  1. Pick ,
  2. MUMPS ,
  3. Microsoft Access

Pick et MUMPS ont été développés des années avant le premier article académique sur les bases de données relationnelles (qui était environ une décennie avant que le premier système commercial de base de données basé sur SQL n'arrive sur le marché - d'une société que nous appelons maintenant Oracle; la première tentative d'IBM pour un produit a échoué et un système basé sur SQL réussi était plus tard). Vous les trouverez peut-être encore utilisés (notre système de transport public local utilisait Pick jusqu'à récemment pour le système de planification de voyage). Vous ne voulez rien avoir à faire avec Pick ou MUMPS, et le meilleur conseil que je puisse vous donner est "éloignez-vous du clavier avec vos mains en l'air!" Si vous ne rien avoir à faire avec eux, l'expression « vous serez désolé » devrait sonner dans vos oreilles.

Microsoft Access est sévèrement moqué et critiqué dans les cercles informatiques, car il est assez facile pour un non-développeur de créer une application commerciale critique à partir d'Access et de la faire muter en quelque chose dont la société ne peut littéralement pas vivre. Il est également très probable que bon nombre de développeurs aient commencé à développer via MS Access et que les choses s'enlisaient, ils ont appris à les corriger (la première étape consiste traditionnellement à apprendre le Visual Basic et à réécrire d'abord l'application Access en VB, puis dans quelque chose de "mieux"). Il est possible de créer une application Access bien comportée qui s'exécute distribuée avec une énorme quantité de données - je l'ai vu faire - mais il existe des moyens plus faciles de faire les choses, et il faut beaucoup moins de compétences pour créer (et entretenir) un puits application se comporte de VB et SQL Server.

Depuis SQL Server 2005, Microsoft a introduit la possibilité de mettre CLR dans des procédures et fonctions stockées. Et si vous voulez être délicat à ce sujet, vous pouvez créer des types de données que vous pouvez ensuite utiliser comme colonnes dans la base de données. Je pense qu'Oracle a eu quelque chose de similaire avec Java.

Cela étant dit, je ne pense pas que quelque chose vous empêche d'en créer un ou de faire des hypothèses à leur sujet. Pick et MUMPS sont plus anciens que la plupart des codeurs ici et reflètent une façon très COOL de regarder le monde.

Mon conseil personnel est de garder les choses séparées. Utilisez un langage qui est bon pour manipuler les données dont votre projet a besoin (avec la mise en garde que parfois le "meilleur" langage est celui que vous pouvez facilement trouver des programmeurs qui peuvent lire / écrire le code). Utilisez un système de base de données capable de conserver les données dont votre projet a besoin.


+1, bien que je pense qu'un programmeur suffisamment qualifié pour créer une application Access évolutive mérite un meilleur environnement de travail.
Larry Coleman

3
Access n'est pas un langage de programmation, c'est plutôt un environnement de développement et d'exécution intégré. Le langage qu'il utilise, VBA est le même langage utilisé pour la programmation macro dans les autres produits bureautiques et n'est pas spécifique à Access. L'accès à la base de données se fait toujours via les différents fournisseurs aux pilotes JET.
Jeremy

1
En plus des trois que vous avez mentionnés, il existe plusieurs environnements 4GL: Oracle Forms, CA OpenROAD (née Ingres Windows4GL) et Unify's Accell (pour ne nommer que ceux avec lesquels j'ai travaillé).
TMN

De plus, je ne suis pas sûr qu'Access soit vraiment "hérité", peu importe à quel point vous aimeriez qu'il soit :)
haylem

+1 pour les oreillons superbe base de données liée à un langage divin.
James Anderson

4

L'ajout d'une base de données dans un langage de programmation peut s'adresser uniquement à un ensemble très restreint d'utilisateurs. Et s'ils veulent utiliser des fonctionnalités non SGBDR? Ou vous ne voulez pas du tout utiliser une base de données? Le compilateur sera inutilement gonflé pour de tels cas d'utilisation.


4

Se tromper.

Eh bien, tout d'abord, vous demandez pourquoi le cadre dans lequel le langage fonctionne ne fournit pas de base de données. Une langue est simplement un moyen d'exprimer quelque chose que vous voulez faire dans des grammaires définies; il ne fournit pas vraiment de services comme ça. :)

Cela dit, il y a plusieurs raisons.

  • La construction d'un système de stockage de base de données efficace est un problème difficile, probablement de l'ordre ou supérieur à la construction du .NET Framework (par exemple). Si une équipe essayait d'inclure une base de données dans son framework, ce serait tout ce sur quoi elle finirait par travailler.

  • Une base de données qui se charge doit se trouver sur sa propre machine distincte et non dans le processus du code qui y accède.

  • Les ORM fournissent une grande partie du type de sécurité et de vérification du temps de compilation qui serait le bénéfice d'une telle action, sans pour autant que le framework essaie d'être une base de données.

Cela dit, je suppose qu'il serait judicieux d'inclure une sorte d'implémentation SQLite dans le cadre contre lequel des applications ayant des besoins d'accès aux données moins importants pourraient fonctionner. Cependant, je ne suis pas sûr que ce serait utile dans des applications non triviales.


sqlite intégré est vraiment génial, si vous ne l'avez pas, les concepteurs de langage finissent par utiliser XML comme mécanisme de stockage à la place :(
gbjbaanb

2

elles sont; ces langues sont appelées 4GL . DataFlex est mon préféré, bien que je ne l'utilise plus.

Mise en garde: J'ai aidé à développer la version orientée objet de DataFlex, v3.0


2

Je pense que votre vraie question est "pourquoi n'y a-t-il pas de langages de programmation fournis avec les bibliothèques de bases de données ".

Les langages à usage général traitent toutes les E / S comme une seule et même chose, que ce soit en écrivant ou en lisant sur / depuis un disque, une webcam, le réseau, l'écran, un emplacement en mémoire - tout est des E / S, et c'est tout ce qui concerne les langages de programmation. avec.

En fait, à part la lecture / écriture dans le tas et la pile, la plupart des langages de programmation ne font même pas d'E / S réelles. Certains langages fournissent des fonctionnalités natives pour exprimer les opérations d'E / S (par exemple la print commande en BASIC), mais la plupart des langages les traitent simplement comme des appels de fonction normaux (par exemple printfen C) et laissent les bibliothèques gérer l'écriture réelle.

Certains langages comme C # offrent des fonctionnalités de langage pour exprimer des requêtes, mais même alors, ce ne sont que des expressions sur la structure de données la plus élémentaire des listes (ou IEnumerables, comme on les appelle en .NET) qui sont traduites en opérations SQL par les bibliothèques - le langage lui-même ne fait que travailler avec des notions très abstraites d'IO.

Quant à savoir pourquoi la construction d'un package de base de données dans la bibliothèque standard d'un langage de programmation n'est pas une bonne idée, c'est très probablement parce que rien d'autre dans une bibliothèque standard ne dépendrait normalement de la fonctionnalité de la base de données.


De nombreux langages de programmation sont fournis avec des bibliothèques DB. Python et PHP ont tous deux sqlite. Visual Studio est livré avec SQL Server Express.
quanticle

Ce sont des interfaces DB, pas des DB elles-mêmes. Le runtime .NET n'est pas livré avec Visual Studio ni SQL Server Express.
Rei Miyasaka

@ReiMiyasaka La bibliothèque standard Python inclut le moteur SQLite complet, car SQLite est juste une bibliothèque C à laquelle un programme est lié, pas un processus séparé ou quoi que ce soit.
Damian Yerrick

2

Oui. Les langues de la plate-forme AS / 400 ont une prise en charge native de première classe des bases de données.

En effet, la plate-forme AS / 400 a la base de données entièrement intégrée partout et permet de nombreuses fonctionnalités très intéressantes, comme la facilité de navigation dans un jeu de résultats mettant à jour les valeurs en cours de route.


0

Dépend de la langue et de la plateforme. Par exemple, il est assez trivial pour moi d'utiliser une variété de bases de données tout en travaillant avec C, j'utilise simplement la bibliothèque appropriée.

Un langage doit maintenir son implémentation standard, ce qui signifie généralement fournir le montant minimum nécessaire pour que quelqu'un puisse construire ce qu'il veut construire. Tout le reste devient une bibliothèque, ou peut-être une extension de la langue maintenue par les autres.

C'est du moins le cas pour les langues qui suivent des normes établies par des organisations telles que l'ISO.


0

Tel qu'écrit, la question est partiellement fausse, comme l'ont montré certains contre-exemples ci-dessus.

J'affinerais donc d'abord la question comme suit: "Pourquoi un SGBD n'est-il généralement pas intégré en tant que fonctionnalité d'un langage de programmation généraliste de haut niveau?"

C'est pour la même raison que d'autres produits logiciels tels que les systèmes d'exploitation, les systèmes de fichiers, les serveurs Web, les couches de mise en cache, etc. ne sont généralement pas intégrés. Les langages à usage général fonctionnent généralement à un niveau d'abstraction supérieur à celui de ces produits. Il est donc raisonnable qu'un programmeur implémente un SGBD dansun langage à usage général, et que le SGBD peut même exposer des aspects de son langage parent ou un langage déclaratif spécifique à la base de données à l'usage des programmeurs de bases de données. Mais il y a trop d'options de conception dans l'écriture d'un SGBD pour qu'il soit sage de les corriger dans un langage de programmation à usage général. Si vous les corrigez, vous vous retrouvez avec un cas comme MUMPS, où l'intrication des deux entraîne une industrie entière embourbée dans un problème de poule et d'oeuf, coincée avec un SGBD obsolète et un langage de programmation obsolète.


0

Utilisé pour fonctionner dans NonStop / SQL qui était entièrement intégré à NonStop / C, NonStop / C ++, NonStop / Cobol, NonStop / Fortran, et probablement dans d'autres langues, ainsi qu'être entièrement intégré à NonStop / Guardian, le système d'exploitation sur lequel les ordinateurs couru.

Je pense que c'est probablement l'intégration la plus proche que vous pouvez obtenir, où la base de données EST le système de fichiers du système d'exploitation. C'est aussi une impasse, il n'y a aucun moyen de découpler les composants, la base de données, le système d'exploitation, le matériel et les logiciels écrits dessus ne peuvent jamais être utilisés séparément, portés vers un autre environnement.

Le plus proche que vous allez obtenir sur un PC serait probablement MS Access, Embarcadero / Borland Delphi étant une seconde proche.

Après cela, vous examinez les bases de données intégrées dans votre application, ce qui peut avoir un attrait limité pour ceux qui créent des applications autonomes qui ont besoin d'un ensemble de données hiérarchiques qui ne sont pas facilement stockées dans un fichier de configuration simple et / ou ont besoin d'une mise à jour régulière pendant l'exécution de l'application . Ou pour les personnes qui souhaitent avoir une version portable d'une application qui conserve un instantané d'une partie d'une base de données plus grande et peut-être synchronise celle-ci avec la plus grande base de données à des moments où l'application peut établir une connexion (pratique, par exemple, un vendeur qui est souvent hors de portée de le réseau d'entreprise a encore besoin de données de vente pour son groupe de clients, ou un médecin sur le terrain qui veut des dossiers de patients mais ne peut pas se connecter au réseau de l'hôpital car il n'y a pas d'accès au réseau où il doit aller).


0

En tant qu'ancien développeur de Visual Foxpro, j'ai du mal à comprendre qu'aucun langage traditionnel ne définisse le modèle relationnel comme faisant partie du langage.

Avoir le moteur de base de données complet n'est pas une bonne idée, mais avoir le langage "SQL" à la place pourrait être TRÈS utile.

En OO, il existe le décalage d'impédance. Cela est arrivé parce que les objets et les ensembles ne se ressemblent pas. Mais si un langage me permet de définir TABLES, FIELDS, RELATIONS, CONTRAINS, etc (sans le lier à un stockage particulier) sera très puissant. De plus, la création d'un ORM sera davantage un mappage 1 à 1.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.