Verkkotunnuskohtainen kieli

Verkkotunnuskohtainen kieli ( eng.  domain-specific language , DSL  - " domain -specific language ") - tietokonekieli , joka on erikoistunut tiettyyn sovellusalueeseen (toisin kuin yleiskäyttöinen kieli , jota voidaan soveltaa useilla aloilla ja joka ei ota huomioon ottaa huomioon tiettyjen alojen tietämyksen ominaispiirteet). Tällaisen kielen rakentaminen ja/tai sen tietorakenne heijastavat sen avulla ratkaistujen tehtävien erityispiirteitä [1] . Se on kielisuuntautuneen ohjelmoinnin avainkäsite .

Tarkkaan ottaen ohjelmointikielten jako yleiskäyttöisiin ja verkkoaluekohtaisiin kieliin on hyvin mielivaltaista, varsinkin kun otetaan huomioon, että muodollisesti mikä tahansa protokolla tai tiedostomuoto on . On monia yleiskäyttöisiä kieliä, joita käytetään toimialuekohtaisina kielinä tiettyihin tehtäviin, ja päinvastoin, verkkoaluekohtaisia ​​kieliä käytetään yleiskielinä. Joten ML-kieli , josta syntyi koko joukko yleiskäyttöisiä kieliä (mukaan lukien Haskell ), kehitettiin alun perin DSL: ksi LCF - lauseen todistamisjärjestelmälle . Esimerkki luokituksen ehdollisuuden osoittamisesta on BNF -kieli (ja sen kääntäjä Lex / Yacc ): toisaalta tämä on elävä esimerkki metakielestä , toisaalta se on suunniteltu tiettyyn tehtävään.

Terminologia

Yksinkertaisimpia verkkoaluekohtaisia ​​kieliä, joita käytetään yhdessä tietyssä sovelluksessa, kutsutaan usein "minikieliksi" [2] .

Martin Ward [ 3] käytti työssään "Language Oriented Programming" [4] (jota pidetään LOP :n kehityksen lähtökohtana ) termejä " ongelmaoriented " ja " domain oriented " , mutta englanninkielisessä  tieteellisessä kielessä. yhteisössä termi " verkkoaluekohtainen ", lisäksi se on " verkkoaluekohtainen kieli " eikä " verkkoaluekohtainen ohjelmointikieli ". Venäläisessä ohjelmointikirjallisuudessa on vaihtoehtoja " aluekohtainen ", " ongelmakeskeinen " , " aluekohtainen ".

Fowler [5] ja Dmitriev [6] määrittelevät DSL:n käsitteen " tyhjennetyksi ohjelmointikieleksi (useimmiten Turingin epätäydellinen ) ".

Esimerkkejä

Kielisuuntautuneen ohjelmoinnin johtavat tutkijat (Martin Ward, Paul Hudak , Walid Taha ja muut) mainitsevat seuraavat esimerkit aluekohtaisista kielistä klassisina [4] [7] [8] :

Walid Tahin mukaan LOP:n näkökulmasta Microsoft Excel on ehkä eniten käytetty ohjelmointikieli maailmassa [8] .

Muita esimerkkejä verkkoaluekohtaisista kielistä ovat tietokannan hallintakielet ( SQL :n lisäksi täällä voidaan kutsua esimerkiksi FoxPro -kieliä ), käyttöjärjestelmän komentokielet (interaktiiviset komentokulkikielet, ensisijaisesti Unix Shell , erä työkielet, kuten JCL jne.) [9] , Turingin epätäydelliset tiedon strukturointikielet ( XML , .ini , .conf), wikin merkintäkieli , mallintamiskielet ( UML , GPSS ), Erlang monelle -Käyttäjäpalvelimet toimivat keskeytymättömässä tilassa.

Yrityksen resurssienhallintajärjestelmään on sisäänrakennettu ohjelmointikieliä (ABAP-kieli SAP / R3:ssa, Galaktika-, Parus-, 1C-, Info-Accountant-järjestelmien kielet) ja niitä käytettiin täydentämään organisaatiokohtaisilla moduuleilla. Sulautetun kielen käyttö yksinkertaistaa tiettyjen tehtävien ohjelmointia, koska kieli sisältää aluksi aihealueen käsitteet. Jonkin verran[ mitä? ] maantieteellisissä tietojärjestelmissä ja CAD:ssä on myös sisäänrakennetut ohjelmointikielet.

Muita esimerkkejä:

Upotetut kielet

Toisinaan tietokonekielet toteutetaan riippuvaisella tavalla, eli käännetyn kielen "sisällä", jota ilman näitä kieliä ei vain voida suorittaa, eivätkä usein muodosta yhtenäistä symbolijärjestelmää eikä niissä ole Turingia . täydellisyys . Tällaisia ​​kieliä kutsutaan " sulautetuiksi verkkoaluekohtaisiksi kieliksi " ( eng.  embedded DSL , EDSL ; joskus DSEL ) tai yksinkertaisesti " sulautetuiksi kieliksi " ( sulautetuksi kieliksi ) [7] [10] , samoin kuin "kieliksi, jotka on toteutettu tämän kielen yläpuolella tai perustuu tähän kieleen".

Tekstin kielet

Perinteisen kielten jaon tulkittuihin ja käännettyihin kieliin lisäksi upotettavat kielet tuovat käyttöön useita muita kielitoteutustyyppejä:

Toisaalta upotettavan kielen toteutusta voidaan pitää " käännättömänä toteutuksena ", mikä tarkoittaa, että DSL on sen kielen syntaktinen ja semanttinen osajoukko, johon se on upotettu [11] .

Kieltä, jota käytetään peruskielenä toisen toteuttamisessa, kutsutaan usein metakieleksi .

Upotetun tekstin kielten kehittämiselle on kolme pääsyytä:

Yleisimmät esimerkit ensimmäisen ryhmän kielistä ovat olio- ominaisuuksien toteutukset toiminnallisilla [12] tai proseduurikielillä [13] , ja CLOS on klassinen esimerkki . On huomattava, että termiä "kieli" ei aina käytetä täällä - joskus puhutaan vain " uusien ominaisuuksien käyttöönotosta kielessä " tai " kielen laajentamisesta alijärjestelmällä, jonka tarkoituksena on ratkaista tiettyjä tehtäviä ". ei tiukkaa jakoa " kirjastoihin " ja "sulautettuihin kieliin", koska muodollisesti mitä tahansa API- , protokolla- tai tietorakennetta voidaan pitää kielenä [14] . Joten esimerkiksi Lisp-kielen olennainen osa on sisäänrakennettu ei-Turingin täydellinen S-lausekekieli .

Toinen upotettavien kielten ryhmä on täydellisimmin edustettuna Haskellin kieliyhteisössä , ja siksi itse Haskellia kutsutaan toisinaan " denotaatiosemantiikan DSL:ksi " [7] . Esimerkkejä ovat Elm ja muut kielet, jotka edustavat toiminnallista reaktiivista paradigmaa , sekä Curry -kieli . Joskus myös Lispistä löytyy samanlainen ilmaus : " Lisp ei ole kieli, vaan puitteet kielten kehittämiselle ." Esimerkki Lispin päälle toteutetusta kielestä on Qi . OCaml -kielellä on toteutettu paljon upotettavaa minikieliä CamlpX -kääntäjämoduulin kautta . Rebol -kieli suunniteltiin myös ohjelmointiin sulautettavien minikielten raskaalla toteutuksella . Lispin Scheme - murre toteuttaa ei-Turing-täydellisen kielen SXML S- lausekekielellä , joka toteuttaa XML - protokollan upotettavalla tavalla.

Upotettavalla kielellä voi olla omavarainen Turing-täydellinen semantiikka, mutta siitä huolimatta itsenäisen toteutuksen sijaan käyttää uudelleen peruskielen komponentteja (kolmas ryhmä, kahden ensimmäisen sekoitus). Silmiinpistävä esimerkki on kieli Schelog [15] , joka toteuttaa Prologin semantiikan Lisp-murrekaavion sisällä jatko - osien kautta ja muuttaa Prologin "erillisestä" kielestä upotettavaksi. Perinteinen opetus- tai "urheilu"tehtävä monille toiminnallisille kielille on jonkin muun kielen toteuttaminen tarkasteltavan kielen lisäksi, useimmiten ensimmäisen asteen predikaattilogiikan kielen [16] .

Metakielien yhteydessä itsenäisiä kieliä kutsutaan joskus "ensimmäisen luokan kieliksi" (samanlainen kuin kielten ensimmäisen luokan kokonaisuuksia ), ja upotettuja kieliä kutsutaan joskus "objektikieliksi".

Suurimmassa osassa tapauksista upotetuilla kielillä on vain yksi tuettu toteutus, ja erot tuloksena olevan koodin koneesityksen välillä riippuvat vain käytetystä peruskielen kääntäjästä. On kuitenkin poikkeuksia - esimerkiksi Concurrent ML (CML) -kielellä, joka laajentaa Standard ML :n rakenteilla eksplisiittistä rinnakkaisuutta varten , on kaksi pohjimmiltaan erilaista toteutusta.

Visuaaliset kielet

Yksi kielistä (perus- tai sulautettu) voi olla visuaalinen , jota käytetään usein käyttäjäohjelmoinnissa ( loppukäyttäjäkehityksessä ) .  Tyypillisiä esimerkkejä tällaisista pareista ovat AutoLisp  - AutoCAD ja VBA  - Microsoft Excel . Tällaiset parit muodostavat täydellisen interaktiivisen järjestelmän, ja on mahdotonta (eikä välttämätöntä) määrittää käyttäjän näkökulmasta, ovatko visuaaliset työkalut lisäosa, joka matkii sisäänrakennetun tekstikielen komentoja vai onko teksti kieli ohjaa visuaalisia työkaluja. Näiden parien todelliset suhteet ovat kehittäjästä riippuvaisia.

Emacs  - Emacs Lisp -parissa suhde on tarkempi. Lisp on perinteisesti luokiteltu metakieleksi , ja tässä tapauksessa sen päälle on rakennettu tekstieditori visuaalisena DSL:nä, mikä tekee jälkimmäisestä muunneltavan ja laajennettavan.

Siinä tapauksessa, että molemmat kielet ovat visuaalisia, upotettuja kieliä kutsutaan yleensä muilla termeillä - laajennuksilla , suodattimilla jne., eivätkä ne käytä kielisuuntautuneen ohjelmoinnin terminologiaa. Muodollisesti voimme esimerkiksi sanoa, että Adobe Photoshopin grafiikankäsittelyn visuaaliseen metakieleen on olemassa monia upotettavia visuaalisia minikieliä (katso Photoshop-laajennus ).

Toiminnalliset ja loogiset ohjelmointikielet näyttävät epäluonnollisilta visuaalisessa ympäristössä, koska toiminnallinen ohjelmointi ja puhdas logiikkaohjelmointi kieltävät sivuvaikutukset ja GUI -vuorovaikutuksen ; niiden käsitteellistä eheyttä on rikottava. Pedagogisesti katsottuna on toivottavaa opettaa ohjelmointia konsolityökaluilla , jotta opiskelijoiden huomio kiinnittyy algoritmisoinnin perusteisiin, ei ergonomiaan, ja vielä vähemmän menettelytaitoihin tiettyjen IDE :iden käytössä [17] .

Edut ja haitat

Tietyn DSL:n käytön yleiskäyttökielen sijaan tietyssä tehtävässä edut ja haitat ovat paljon selkeämpiä kuin yhden yleiskäyttökielen käytön edut ja haitat toisen sijaan: useimmissa tapauksissa jo kehitetty DSL osoittautuu olla käsitteellisesti soveltumattomia joihinkin tehtäviin ja antaa kiistattoman edun useimmissa laatuindikaattoreissa toisissa, ja jotkut osatehtävät jäävät yleensä ratkaisematta DSL:n kehittämiseen asti [4] .

Siten kysymys eduista ja haitoista on oikeampaa ottaa esille kielisuuntautuneen metodologian käytön valossa minkään muun sijasta valmiin DSL:n alun puuttuessa, ja sen käytöstä saatavaa mahdollista hyötyä verrataan sen kehittämisen ja ylläpidon kustannuksia.

Katso myös

Muistiinpanot

  1. A. Ya. Friedland, L. S. Chanamirova. Informatiikka ja tietotekniikka: perustermit: selittävä sanakirja. - Astrel, 2003.01.01. – 270 s. — ISBN 9785170145461 .
  2. Bentley - Pienet kielet, 1986 .
  3. Martin Wardin kotisivu
  4. 1 2 3 Ward - Language Oriented Programming, 1994 .
  5. Martin Fowler . Language Toolkit: Uusi elämä verkkotunnuksen kielille . – 2005.
  6. Sergei Dmitriev ( JetBrains ). Kielisuuntautunut ohjelmointi: Seuraava paradigma  // = RSDN Magazine . – 2005.
  7. 1 2 3 4 Hudak - Modulaarinen verkkotunnuskohtaiset kielet ja työkalut, 1998 .
  8. 1 2 Taha - Verkkotunnuskohtaiset kielet, 2008 .
  9. Brett D. Hirsch. Digitaalinen humanistinen pedagogiikka: käytännöt, periaatteet ja politiikka . - Open Book Publishers, 2012. - 450 s. — ISBN 9781909254251 .
  10. Mernik, 2012 .
  11. 1 2 Czarnecki, O'Donnell, Striegnitz, Taha - DSL-toteutus metaocamlissa, template haskell ja C++, 2004 .
  12. Bernard Berthomieu. OO Ohjelmointityylit ML:ssä . — LAAS-raportti #2000111, Center National De La Recherche Scientifique Laboratoire d'Analysis et d'Architecture des Systèmes, 2000.
  13. Sello - kirjasto, joka esittelee korkeamman tason ohjelmoinnin C:lle
  14. Hopcroft, Motwani, Ullman - Automaattiteoria, kielet ja tietojenkäsittely, 2001 .
  15. Schelog, 2003 .
  16. Paulson - ML työohjelmoijalle, 1996 .
  17. Igor Golovin, Andrei Stolyarov. Monen paradigman lähestymistapa ohjelmoinnin opettamiseen ja vapaiden ohjelmistojen rooliin // Lomonosov Moskovan valtionyliopisto, Abstracts of the II Conference of Free Software Developers "On Protva". - Obninskin kaupunki, 2005.

Kirjallisuus

Linkit