A doménspecifikus nyelv (DSL) egy adott alkalmazástartományra szakosodott számítógépes nyelv. Ez ellentétben áll az általános célú nyelvvel (GPL), amely széles körben alkalmazható az összes területen. A DSL-ek széles skálája létezik, a széles körben használt nyelvektől kezdve az általános területeken használt nyelvekig, mint például a HTML a weboldalakhoz, egészen a csak egy vagy néhány szoftver által használt nyelvekig, mint például a MUSH soft code. Magukban foglalják a doménspecifikus jelölőnyelveket, a doménspecifikus modellező nyelveket (általánosabban a specifikációs nyelveket) és a doménspecifikus programozási nyelveket. Speciális célú számítógépes nyelvek mindig is léteztek a számítógépes korszakban, de a „doménspecifikus nyelv” kifejezés a doménspecifikus modellezés térhódítása miatt vált népszerűbbé. Az egyszerűbb DSL-eket, különösen az egyetlen alkalmazás által használtakat, néha informálisan mininyelveknek nevezik.
Az általános célú nyelvek és a doménspecifikus nyelvek közötti határvonal nem mindig éles, mivel egy nyelv rendelkezhet egy adott doménre specializált jellemzőkkel, de szélesebb körben is alkalmazható, vagy fordítva, elvileg széles körben alkalmazható, de a gyakorlatban elsősorban egy adott doménen használják. Például a Perl-t eredetileg szövegfeldolgozó és ragasztó nyelvként fejlesztették ki, ugyanarra a területre, mint az AWK-t és a shell szkripteket, de később főként általános célú programozási nyelvként használták. Ezzel szemben a PostScript egy Turing-teljes nyelv, és elvileg bármilyen feladatra használható, de a gyakorlatban szűk körben oldalleíró nyelvként használják.
Használata
A megfelelő DSL-ek megtervezése és használata a domain engineering kulcsfontosságú része, az adott területnek megfelelő nyelv használatával - ez lehet egy meglévő DSL vagy GPL használata, vagy egy új DSL kifejlesztése. A nyelvközpontú programozás a problémák kifejezésére szolgáló speciális célú nyelvek létrehozását a problémamegoldási folyamat standard részének tekinti. Egy doménspecifikus nyelv létrehozása (az azt támogató szoftverrel együtt) egy meglévő nyelv újrafelhasználása helyett akkor lehet kifizetődő, ha a nyelv lehetővé teszi egy adott típusú probléma vagy megoldás egyértelműbb kifejezését, mint azt egy meglévő nyelv lehetővé tenné, és a kérdéses problématípus kellően gyakran fordul elő. Pragmatikusan egy DSL specializálódhat egy adott problématerületre, egy adott probléma reprezentációs technikára, egy adott megoldási technikára vagy a terület egyéb aspektusaira.
Áttekintés
A doménspecifikus nyelvek kifejezetten egy adott domén problémáinak megoldására készülnek, és nem arra szolgálnak, hogy azon kívül is képesek legyenek problémákat megoldani (bár ez technikailag lehetséges). Ezzel szemben az általános célú nyelvek számos terület problémáinak megoldására készülnek. A tartomány lehet egy üzleti terület is. Néhány példa az üzleti területekre:
életbiztosítási kötvények (egy nagy biztosítótársaság belső fejlesztése)
harci szimuláció
bérszámítás
számlázás
A doménspecifikus nyelv valahol egy apró programozási nyelv és egy szkriptnyelv között helyezkedik el, és gyakran egy programkönyvtárhoz hasonlóan használják. E fogalmak közötti határok meglehetősen elmosódottak, hasonlóan a szkriptnyelvek és az általános célú nyelvek közötti határvonalhoz.
Tervezésben és kivitelezésben
A doménspecifikus nyelvek olyan nyelvek (vagy gyakran deklarált szintaxisok vagy nyelvtanok), amelyek tervezése és megvalósítása nagyon specifikus célokat szolgál. A tartományspecifikus nyelv lehet vizuális diagramkészítő nyelv, mint például a Generic Eclipse Modeling System által létrehozott nyelvek, programozási absztrakciók, mint például az Eclipse Modeling Framework, vagy szöveges nyelvek. Például a grep parancssori segédprogramnak van egy reguláris kifejezés szintaxisa, amely a szövegsorokban található mintákra illeszkedik. A sed segédprogram meghatározza a reguláris kifejezések illesztésére és helyettesítésére szolgáló szintaxist. Gyakran ezek az apró nyelvek együttesen használhatók egy shellen belül összetettebb programozási feladatok elvégzésére.
A doménspecifikus nyelvek és a szkriptnyelvek közötti határvonal némileg elmosódik, de a doménspecifikus nyelvek gyakran nem tartalmaznak alacsony szintű funkciókat a fájlrendszerhez való hozzáféréshez, a folyamatok közötti vezérléshez és más funkciókhoz, amelyek a teljes értékű programozási nyelveket, a szkriptnyelveket vagy más nyelveket jellemzik. Sok doménspecifikus nyelv nem bájtkóddá vagy végrehajtható kóddá, hanem különféle médiaobjektumokká fordítható: A GraphVizPostScript, GIF, JPEG stb. formátumba exportál, a Csound hangfájlokba, a sugárkövetéses tartományspecifikus nyelv, mint például a POV pedig grafikus fájlokba. Egy olyan számítógépes nyelv, mint az SQL, érdekes esetet mutat: terület-specifikus nyelvnek tekinthető, mivel egy adott területre (az SQL esetében a relációs adatbázisok elérésére és kezelésére) specializálódott, és gyakran egy másik alkalmazásból hívják, de az SQL-nek több kulcsszava és funkciója van, mint sok szkriptnyelvnek, és gyakran önálló nyelvnek tekintik, talán azért, mert a programozásban az adatbázis-manipuláció elterjedt, és a nyelv szakértőjéhez szükséges elsajátítás mértéke miatt.
Ezt a vonalat tovább homályosítja, hogy sok doménspecifikus nyelv rendelkezik nyílt API-kkal, és más programozási nyelvekből is elérhetők anélkül, hogy megszakadna a végrehajtás folyamata, vagy külön folyamat meghívása nélkül, és így programozási könyvtárként működhetnek.
Programozási eszközök
Egyes doménspecifikus nyelvek idővel teljes értékű programozási eszközökkel bővülnek, ami tovább bonyolítja a kérdést, hogy egy nyelv doménspecifikus-e vagy sem. Jó példa erre az XSLT funkcionális nyelv, amelyet kifejezetten az egyik XML-gráfnak egy másikba való átalakítására terveztek, és amelyet a kezdetek óta kibővítettek, hogy (különösen a 2.0-s verzióban) lehetővé tegye a fájlrendszerrel való interakció különböző formáit, a karakterlánc- és dátummanipulációt, valamint az adattípusok tipizálását.
A modellvezérelt tervezésben számos példa található a doménspecifikus nyelvekre, mint például az OCL, amely a modellek állításokkal való díszítésére szolgáló nyelv, vagy a QVT, amely egy doménspecifikus transzformációs nyelv. Az olyan nyelvek azonban, mint az UML, jellemzően általános célú modellező nyelvek.
Összefoglalva, egy hasonlat hasznos lehet: egy nagyon kis nyelv olyan, mint egy kés, amelyet ezerféleképpen lehet használni, az ételvágástól a fák kivágásáig. Egy doménspecifikus nyelv olyan, mint egy elektromos fúrógép: egy nagy teljesítményű eszköz, amely sokféleképpen használható, de csak egy meghatározott kontextusban, nevezetesen a dolgok kilyukasztására. Egy általános célú nyelv egy teljes munkapad, különféle eszközökkel, amelyek különféle feladatok elvégzésére szolgálnak. A doménspecifikus nyelveket olyan programozóknak kell használniuk, akik a jelenlegi munkapadjukat áttekintve rájönnek, hogy szükségük van egy jobb fúróra, és úgy találják, hogy egy adott doménspecifikus nyelv pontosan ezt nyújtja.
Doménspecifikus nyelvi témák
Külső és beágyazott doménspecifikus nyelvek
A független fordítóprogrammal vagy fordítóprogrammal megvalósított DSL-eket külső tartományspecifikus nyelveknek nevezzük. Jól ismert példák erre a LaTeX vagy az AWK. A beágyazott (vagy belső) doménspecifikus nyelvek külön kategóriája jellemzően egy gazdanyelven belül, könyvtárként valósul meg, és általában a gazdanyelv szintaxisára korlátozódik, bár ez a gazdanyelv képességeitől függ.
Felhasználási minták
A doménspecifikus nyelveknek többféle használati mintája van:
Feldolgozás önálló eszközökkel, amelyeket közvetlen felhasználói művelettel, gyakran a parancssorból vagy egy Makefile-ból hívunk elő (pl. grep a reguláris kifejezések egyeztetéséhez, sed, lex, yacc, a GraphViz eszközkészlet stb.).
olyan tartományspecifikus nyelvek, amelyeket programozási nyelvi makrorendszerek segítségével valósítanak meg, és amelyeket fordítási időben vagy valós időben konvertálnak vagy bővítenek egy általános célú fogadó nyelvvé.
beágyazott doménspecifikus nyelvek (eDSL), amelyeket olyan könyvtárak formájában valósítanak meg, amelyek kihasználják a befogadó általános célú nyelv vagy annak egy részhalmazának szintaxisát, miközben hozzáadnak doménspecifikus nyelvi elemeket (adattípusok, rutinok, módszerek, makrók stb.). (pl. jQuery, React, Embedded SQL, LINQ).
Tartományspecifikus nyelvek, amelyeket (futásidőben) általános célú nyelveken, például C vagy Perl nyelven írt programokból hívnak meg egy adott funkció elvégzésére, gyakran a művelet eredményét további feldolgozásra visszaadva a "gazdaprogramozási nyelvnek"; általában a tartományspecifikus nyelv értelmezője vagy virtuális gépe be van ágyazva a gazdaalkalmazásba (pl. formázó karakterláncok, reguláris kifejezések motorja).
A felhasználói alkalmazásokba beágyazott tartományspecifikus nyelvek (pl. a táblázatkezelőben lévő makrónyelvek), amelyeket 1) az alkalmazás felhasználói által írt kódok végrehajtására, 2) az alkalmazás által dinamikusan generált kódok végrehajtására vagy 3) mindkettőre használnak.
Sok doménspecifikus nyelv többféleképpen is használható. A DSL kódja a gazdanyelvbe ágyazva rendelkezhet speciális szintaxis támogatással, mint például a sed, AWK, Perl vagy JavaScript regexek, vagy átadható karakterláncokként.
Tervezési célok
A doménspecifikus nyelvi megközelítés alkalmazása a szoftverfejlesztésben kockázatokat és lehetőségeket egyaránt rejt magában. A jól megtervezett doménspecifikus nyelv képes megtalálni a megfelelő egyensúlyt ezek között.
A doménspecifikus nyelveknek fontos tervezési céljaik vannak, amelyek eltérnek az általános célú nyelvek céljaitól:
A tartományspecifikus nyelvek kevésbé átfogóak.
A tartományspecifikus nyelvek sokkal kifejezőbbek a saját tartományukban.
A tartományspecifikus nyelvek minimális redundanciát mutatnak.
Idiómák
A programozásban az idiómák a programozók által a gyakori fejlesztési feladatok kezelésére alkalmazott módszerek, pl.:
Biztosítsa az adatok mentését az ablak bezárása előtt.
Szerkessze a kódot, amikor a parancssori paraméterek megváltoznak, mert ezek befolyásolják a program viselkedését.
Az általános célú programozási nyelvek ritkán támogatják az ilyen idiómákat, de a doménspecifikus nyelvek képesek leírni őket, például:
Egy szkript automatikusan menthet adatokat.
Egy doménspecifikus nyelv paraméterezheti a parancssori bevitelt.
Példák
A doménspecifikus nyelvek közé tartozik például a HTML, a Logo a ceruzaszerű rajzoláshoz, a Verilog és a VHDL hardverleíró nyelvek, a MATLAB és a GNU Octave a mátrixprogramozáshoz, a Mathematica, a Maple és a Maxima a szimbolikus matematikához, a Specification and Description Language a reaktív és elosztott rendszerekhez, a táblázatkezelő formulák és makrók, az SQL a relációs adatbázis-lekérdezésekhez, a YACC nyelvtanok a parserek létrehozásához, reguláris kifejezések a lexerek megadásához, a Generic Eclipse Modeling System a diagramkészítő nyelvek létrehozásához, Csound a hang- és zeneszintézishez, valamint a GraphViz és a GrGen bemeneti nyelvei, a gráfok elrendezéséhez és gráfok újraírásához használt szoftvercsomagok, a Terraform és más Hashicorp eszközökhöz használt Hashicorp Configuration Language, a Puppetnek is van saját konfigurációs nyelve.
GameMaker nyelv
A GameMaker Studio által használt GML szkriptnyelv egy doménspecifikus nyelv, amely a kezdő programozókat célozza meg, hogy könnyen megtanulhassák a programozást. Bár a nyelv több nyelv, köztük a Delphi, a C++ és a BASIC keverékeként szolgál, hiányoznak belőle a struktúrák, adattípusok és egy teljes értékű programozási nyelv egyéb jellemzői. A beépített függvények közül sok a könnyű hordozhatóság érdekében sandboxolt. A nyelv elsősorban azt a célt szolgálja, hogy bárki könnyen felvehesse a nyelvet és játékot fejlesszen.
ColdFusion Markup Language
A ColdFusion kapcsolódó szkriptnyelv egy másik példa az adatvezérelt weboldalakhoz használt tartományspecifikus nyelvre. Ez a szkriptnyelv olyan nyelvek és szolgáltatások összeszövésére szolgál, mint a Java, .NET, C++, SMS, e-mail, e-mail szerverek, http, ftp, exchange, könyvtárszolgáltatások és fájlrendszerek, amelyeket a weboldalakon használnak.
A ColdFusion Markup Language (CFML) olyan címkéket tartalmaz, amelyek a ColdFusion oldalakon az adatforrásokkal való interakcióra, az adatok kezelésére és a kimenet megjelenítésére használhatók. A CFML címke szintaxis hasonlít a HTML elem szintaxisához.
Erlang OTP
Az Erlang Open Telecom Platformot eredetileg az Ericssonon belüli használatra tervezték, mint doménspecifikus nyelvet. Maga a nyelv véges állapotú gépek, általános kiszolgálók és eseménykezelők létrehozására szolgáló könyvtárak platformját kínálja, amelyek segítségével a mérnök gyorsan alkalmazásokat vagy támogató könyvtárakat telepíthet, amelyekről az iparági összehasonlító tesztek kimutatták, hogy felülmúlják más, vegyes területekre szánt nyelvek, például a C és a C++ teljesítményét. A nyelv immár hivatalosan is nyílt forráskódú, és letölthető a honlapjukról.
FilterMeister
A FilterMeister egy C-alapú programozási nyelvvel rendelkező programozási környezet, amely kifejezetten a Photoshop-kompatibilis képfeldolgozó szűrő plug-inek létrehozására szolgál; a FilterMeister maga is Photoshop plug-inként fut, és képes betölteni és végrehajtani a szkripteket, illetve önálló plug-inekként lefordítani és exportálni azokat. Bár a FilterMeister nyelv a C nyelv és függvénykönyvtár jelentős részét reprodukálja, csak azokat a funkciókat tartalmazza, amelyek a Photoshop plug-inek kontextusában használhatók, és számos, csak ezen a speciális területen hasznos funkcióval egészül ki.
MediaWiki sablonok
A MediaWiki Sablon funkciója egy beágyazott doménspecifikus nyelv, amelynek alapvető célja, hogy támogassa az oldalsablonok létrehozását és a MediaWiki oldalak más MediaWiki oldalakba való bevonását (hivatkozással történő beépítését).
Szoftverfejlesztési felhasználások
A szoftverfejlesztés termelékenységének és minőségének javítása érdekében nagy érdeklődés mutatkozik a doménspecifikus nyelvek iránt. A doménspecifikus nyelvek valószínűleg robusztus eszközkészletet biztosíthatnak a hatékony szoftverfejlesztéshez. Az ilyen eszközök kezdenek teret nyerni a kritikus szoftverrendszerek fejlesztésében.
Erre példa a szoftverköltség-csökkentési eszköztár. Az eszközkészlet egy sor segédprogram, köztük egy specifikációs szerkesztő a követelményspecifikáció létrehozásához, egy függőségi gráf böngésző a változófüggőségek megjelenítéséhez, egy konzisztenciaellenőrző a specifikáció jól formázott formuláinak hiányzó eseteinek felderítéséhez, egy modellellenőrző és egy tételpróbáló a programtulajdonságok ellenőrzéséhez a specifikációval szemben, valamint egy invariánsgenerátor, amely automatikusan invarianciákat állít össze a követelmények alapján.
Újabb fejlemény a nyelvközpontú programozás, egy integrált szoftverfejlesztési módszertan, amely elsősorban a doménspecifikus nyelvek létrehozásán, optimalizálásán és használatán alapul.
Metakompilerek
A nyelvközpontú programozást, valamint a doménspecifikus nyelvek minden más formáját kiegészítik a fordítóprogram-író eszközök metakompilereknek nevezett osztálya. Egy metakompiler nem csak arra hasznos, hogy a doménspecifikus nyelvekhez parsereket és kódgenerátorokat generáljon, hanem egy metakompiler maga is lefordít egy olyan doménspecifikus metanyelvet, amelyet kifejezetten a metaprogramozás területére terveztek.
A metakompilerek a doménspecifikus nyelvek elemzése mellett a szoftverfejlesztő és -elemző eszközök széles skálájának létrehozására is alkalmasak. A metakompiláló módszertan gyakran megtalálható a programtranszformációs rendszerekben.
A számítástechnikában és a számítástechnikai iparban is jelentős szerepet játszó metakompilerek közé tartozik a Meta-II és annak leszármazottja, a TreeMeta.
Unreal Engine a 4-es verzió előtt és más játékok
Az Unreal és az Unreal Tournament bemutatott egy UnrealScript nevű nyelvet. Ez lehetővé tette a módosítások gyors fejlesztését a versenytárs Quake-hez képest (amely az Id Tech 2 motort használta). Az Id Tech motor szabványos C kódot használt, ami azt jelenti, hogy a C-t meg kellett tanulni és megfelelően alkalmazni, míg az UnrealScriptet a könnyű használatra és hatékonyságra optimalizálták. Hasonlóképpen az újabb játékok fejlesztése során is bevezették a saját specifikus nyelveket, az egyik elterjedtebb példa a Lua a szkripteléshez.[forrás?]
Szabálymotorok a házirend-automatizáláshoz
A kormányzati és a magánszektorban egyaránt használt irányelvek és üzleti szabályok automatizálására különböző üzleti szabálymotorokat fejlesztettek ki. Az ILOG, az Oracle Policy Automation, a DTRules, a Drools és mások támogatást nyújtanak a különböző problématerületek támogatását célzó DSL-ekhez. A DTRules olyan messzire megy, hogy egy szabálykészleten belül több DSL használatához is definiál egy interfészt.
Az üzleti szabálymotorok célja, hogy az üzleti logika reprezentációját a lehető legemberibb olvashatóságú módon definiálják. Ez lehetővé teszi, hogy mind a szakemberek, mind a fejlesztők az üzleti logika azonos reprezentációjával dolgozzanak és értsék azt. A legtöbb Rules Engines az üzleti logika vezérlési struktúráinak egyszerűsítésére szolgáló megközelítést (például deklaratív szabályok vagy döntési táblázatok használatával), valamint a DSL-ek helyett a programozási szintaxis alternatíváit kínálja.
Statisztikai modellező nyelvek
A statisztikai modellezők olyan terület-specifikus nyelveket fejlesztettek ki, mint az R (az S nyelv implementációja), a Bugs, a Jags és a Stan. Ezek a nyelvek szintaxist biztosítanak egy Bayes-modell leírásához, és módszert generálnak a modell szimulációval történő megoldásához.
Modell és szolgáltatások generálása több programozási nyelvhez
Objektumkezelés és szolgáltatások generálása egy interfész-leíró nyelv alapján egy doménspecifikus nyelvhez, például JavaScript a webes alkalmazásokhoz, HTML a dokumentációhoz, C++ a nagy teljesítményű kódokhoz stb. Ezt olyan nyelvközi keretrendszerek végzik, mint az Apache Thrift vagy a Google Protocol Buffers.
Gherkin
A Gherkin egy olyan nyelv, amelyet a szoftverek viselkedésének ellenőrzésére szolgáló tesztesetek definiálására terveztek, anélkül, hogy meghatároznák, hogyan valósul meg a viselkedés. Célja, hogy nem műszaki felhasználók is olvashassák és használhassák, természetes nyelvi szintaxis és sororientált felépítés segítségével. A Gherkin segítségével definiált teszteket ezután egy általános programozási nyelven kell megvalósítani. Ezután a Gherkin program lépései a nem fejlesztők számára is elérhető szintaxisként szolgálnak a metódusmeghíváshoz.
Egyéb példák
A doménspecifikus nyelvek további kiemelkedő példái a következők:
A doménspecifikus nyelvek lehetővé teszik, hogy a megoldásokat a problématerület nyelvezetében és absztrakciós szintjén fejezzük ki. Az elképzelés lényege, hogy a doménszakértők maguk is megérthetik, érvényesíthetik, módosíthatják, sőt gyakran még fejleszthetik is a doménspecifikus nyelvi programokat. Ez azonban ritkán van így.
A doménspecifikus nyelvek lehetővé teszik a validálást a domén szintjén. Amíg a nyelvi konstrukciók biztonságosak, addig minden velük írt mondat biztonságosnak tekinthető.[forrás?]
A doménspecifikus nyelvek segíthetnek abban, hogy az üzleti információs rendszerek fejlesztése a hagyományos szoftverfejlesztőktől átkerüljön a doménszakértők jellemzően nagyobb csoportjába, akik (annak ellenére, hogy kevesebb műszaki ismerettel rendelkeznek) mélyebb ismeretekkel rendelkeznek a doménről.
A doménspecifikus nyelveket könnyebb megtanulni, tekintettel korlátozott terjedelmükre.
Néhány hátrány:
Egy új nyelv elsajátításának költségei és korlátozott alkalmazhatósága között
Egy doménspecifikus nyelv, valamint a vele való fejlesztéshez szükséges eszközök (IDE) megtervezésének, bevezetésének és karbantartásának költségei.
A megfelelő hatókör megtalálása, beállítása és fenntartása.
A doménspecifikusság és az általános célú programozási nyelvi konstrukciók közötti kompromisszumok közötti egyensúlyozás nehézsége.
A processzor hatékonyságának potenciális csökkenése a kézzel kódolt szoftverekhez képest.
A hasonló, nem szabványos, doménspecifikus nyelvek elterjedése, például az egyik biztosítótársaságnál használt DSL egy másik biztosítótársaságnál használt DSL-lel szemben.
A nem műszaki szakemberek számára nehézséget okozhat a DSL-programok önálló megírása vagy módosítása.
A DSL-nek az informatikai rendszer más összetevőivel való integrálása megnövekedett nehézségekkel jár (az általános célú nyelvvel való integráláshoz képest).
A DSL-szakértők alacsony száma általában növeli a munkaerőköltségeket.
Nehezebb kódpéldákat találni.
Eszközök a doménspecifikus nyelvek tervezéséhez
A JetBrains MPS egy olyan eszköz, amely doménspecifikus nyelvek tervezéséhez használható. Projektív szerkesztést használ, amely lehetővé teszi a nyelvi parserek korlátainak leküzdését és DSL-szerkesztők, például táblázatokkal és diagramokkal ellátott DSL-szerkesztők építését. Nyelvközpontú programozást valósít meg. Az MPS egyesíti magában a nyelvi definícióhoz szükséges környezetet, a nyelvi munkapadot és az ilyen nyelvek integrált fejlesztőkörnyezetét (IDE).
Az Xtext egy nyílt forráskódú szoftver keretrendszer programozási nyelvek és doménspecifikus nyelvek (DSL) fejlesztésére. A szabványos elemzőgenerátorokkal ellentétben az Xtext nemcsak elemzőt, hanem az absztrakt szintaxisfa osztálymodelljét is generálja. Ezen kívül egy teljes körű, testreszabható Eclipse-alapú IDE-t is biztosít.
A Racket egy platformokon átívelő nyelvi eszköztár, amely fordítót, JIT-fordítót, IDE-t és parancssori eszközöket tartalmaz, amelyeket úgy terveztek, hogy mind doménspecifikus nyelvek, mind teljesen új nyelvek létrehozására alkalmasak legyenek.
Jegyzetek
↑Marjan Mernik, Jan Heering, and Anthony M. Sloane. When and how to develop domain-specific languages. ACM Computing Surveys, 37(4):316–344, 2005.doi:10.1145/1118890.1118892
Ez a szócikk részben vagy egészben a Domain-specific language című angol Wikipédia-szócikk ezen változatának fordításán alapul. Az eredeti cikk szerkesztőit annak laptörténete sorolja fel. Ez a jelzés csupán a megfogalmazás eredetét és a szerzői jogokat jelzi, nem szolgál a cikkben szereplő információk forrásmegjelöléseként.
Former railway company and heritage railway East Somerset RailwayCranmore railway station is the line's headquartersLocaleSomersetCommercial operationsOriginal gauge7 ft 1⁄4 in (2,140 mm) Brunel gaugePreserved operationsLength1 mi 63 ch (2.9 km)Preserved gauge4 ft 8+1⁄2 in (1,435 mm) standard gaugeCommercial historyOpened9 November 18581 March 1862Extension opened1874Converted to4 ft 8+1⁄2 in (1,435 m...
Marwan bin al-Hakam مروان بن الحكمAmirul MukmininKhalīfahDrachma Khalifah MarwanKhalifah Kekhalifahan Umayyah ke-4BerkuasaJuni 684 – 12 April 685PendahuluMuawiyah bin YazidPenerusAbdul Malik bin MarwanInformasi pribadiKelahiran623 atau 626Kematian685 (sekitar 63 tahun)Damaskus atau ash-ShinnabraWangsaUmayyah (trah Marwani)Nama lengkapAbū ʿAbdul-Malik Marwān ibn al-Ḥakam ibn Abiʾl-ʿAsh ibn Umayyah ibn ʿAbd Syams[1]Nama dan tanggal periodeKekhalifahan Umayyah:...
Small natural satellite of Pluto StyxPluto's moon Styx, as seen by the New Horizons spacecraft on 13 July 2015, from a distance of 632,000 kmDiscoveryDiscovered byShowalter, M. R. et al.Discovery siteHubble Space TelescopeDiscovery date 26 June 2012 (verified 7 July 2012) Detection methodPhotographicDesignationsDesignationPluto VPronunciation/ˈstɪks/[1]Named afterΣτύξ StyxAlternative namesS/2012 (134340) 1S/2012 P 1[2]AdjectivesStygian /ˈstɪdʒiən/...
العلاقات السودانية الباهاماسية السودان باهاماس السودان باهاماس تعديل مصدري - تعديل العلاقات السودانية الباهاماسية هي العلاقات الثنائية التي تجمع بين السودان وباهاماس.[1][2][3][4][5] مقارنة بين البلدين هذه مقارنة عامة ومرجعية للدولتين: و�...
برايان مارسدن (بالإنجليزية: Brian Geoffrey Marsden) معلومات شخصية الميلاد 5 أغسطس 1937(1937-08-05)كامبريدج الوفاة 18 نوفمبر 2010 (73 سنة)بورلينغتون سبب الوفاة ابيضاض الدم مواطنة المملكة المتحدة عضو في الأكاديمية النرويجية للعلوم والآداب الحياة العملية المدرسة الأم جامعة ييل ...
Kamitetep Phereoeca uterella Rekaman TaksonomiKerajaanAnimaliaFilumArthropodaKelasInsectaOrdoLepidopteraFamiliTineidaeGenusPhereoecaSpesiesPhereoeca uterella Walsingham, 1897 lbs Kamitetep (Phereoeca uterella) adalah spesies ngengat berwujud ulat berkepompong. Kepompongnya menyerupai biji labu, pipih, lunak, dan berwarna cokelat muda. Wujud fisik Kamitetep seperti ulat di dalam kepompong. Kepompong ini merupakan kombinasi gumpalan serat sutra, tanah, dan pasir. Terdapat lubang pada masing-mas...
Willi Münzenberg (1936) Gedenktafel für Willi Münzenberg in der Augustinerstraße in Erfurt (2017) Wilhelm „Willi“ Münzenberg (* 14. August 1889 in Erfurt; † Juni 1940 in Saint-Marcellin, Département Isère, Frankreich) war ein deutscher Politiker (KPD), Verleger und Filmproduzent. Mit dem Neuen Deutschen Verlag, den Zeitungen Welt am Abend, Berlin am Morgen und vor allem der Arbeiter-Illustrierten-Zeitung (A-I-Z), gehörte Münzenberg zu den einflussreichsten Vertretern der KPD de...
Romanian politician (1893–1960) See also: Pauker (disambiguation) and Pauker (surname) Ana PaukerMinister of Foreign AffairsIn office30 December 1947 – 9 July 1952PresidentConstantin Ion Parhon Petru GrozaPrime MinisterPetru Groza Gheorghe Gheorghiu-DejPreceded byGheorghe TătărescuSucceeded bySimion Bughici Personal detailsBornHannah Rabinsohn(1893-02-13)13 February 1893Codăești, Vaslui County, Kingdom of RomaniaDied3 June 1960(1960-06-03) (aged 67)Bucharest, People's Re...
Politics of SerbiaCoat of ArmsPolity typeUnitary parliamentary constitutional republicConstitutionConstitution of SerbiaFormation5 June 2006Legislative branchNameNational AssemblyTypeUnicameralMeeting placeHouse of the National AssemblyPresiding officerVladimir Orlić, President of the National AssemblyExecutive branchHead of StateTitlePresidentCurrentlyAleksandar VučićAppointerDirect popular voteHead of GovernmentTitlePrime MinisterCurrentlyAna BrnabićAppointerPresident (nominator)Nation...
Stephen Bruton at Antone's in Austin, TX during SXSW 2006. Turner Stephen Bruton (November 7, 1948 – May 9, 2009) was an American actor and musician.[1] Background Born in Wilmington, Delaware, United States, he moved with his family to Texas at the age of two. He fell into the Fort Worth music scene after graduating from Texas Christian University when he joined Kris Kristofferson's band as the latter's career was about to take off; their collaboration and friendship lasted more th...
Bombing of BolognaPart of World War IIAn air raid on Bologna in 1943DateJuly 1943–April 1945LocationBologna, ItalyBelligerents United Kingdom United States Kingdom of Italy (1943) Italian Social Republic (1943-1945) During World War II the Italian city of Bologna, the regional capital and largest city of Emilia-Romagna, suffered nearly a hundred air raids by the Royal Air Force and the USAAF, mostly aimed at disabling its strategically important marshalling yards, used...
French paramilitary unit Corps franc de la Montagne noireArmband of the Corps Franc de la Montagne NoireActiveApril – September 1944Country FranceAllegiance Free FranceTypeParamilitaryIrregular militarySize900[1]Garrison/HQMontagne NoireEngagementsWorld War II French Resistance CommandersNotablecommanders Roger Mompezat Henri Sevenet † Antoine Carceler Jouan de Kervenoaël Major Richardson Military unit The Corps Franc de la Montagne Noire (Free Corps of the Black Mounta...
This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: 1956 French Grand Prix – news · newspapers · books · scholar · JSTOR (January 2017) (Learn how and when to remove this message) 1956 French Grand Prix ← Previous raceNext race → Reims-Gueux layoutRace detailsDate 1 July 1956Official name...
Car shopping and research website based in Cambridge, Massachusetts CarGurus, Inc.Company typePublicTraded asNasdaq: CARG (Class A)Russell 2000 ComponentS&P 600 ComponentIndustryInternetAutomotiveFounded2006; 18 years ago (2006)FounderLangley SteinertHeadquartersCambridge, Massachusetts, U.S.Key peopleJason Trevisan (CEO)Websitewww.cargurus.com CarGurus, Inc. is a Cambridge, Massachusetts-based automotive research and shopping website that assists users in comparing...
Canadian singer (born 1965) This article is about the singer. For her eponymous album, see Shania Twain (album). Shania redirects here. For the given name, see Shania (given name). Shania TwainOCTwain performing at the Glastonbury Festival in 2024BornEilleen Regina Edwards (1965-08-28) August 28, 1965 (age 58)Windsor, Ontario, CanadaOccupationsSingersongwriterYears active1983–presentSpouses Robert John Mutt Lange (m. 1993; div. 2010)...
Species of mammal This article is about the animal. For other uses, see Okapi (disambiguation). Okapi Male okapi at Beauval Zoo Conservation status Endangered (IUCN 3.1)[1] Scientific classification Domain: Eukaryota Kingdom: Animalia Phylum: Chordata Class: Mammalia Order: Artiodactyla Family: Giraffidae Genus: OkapiaLankester, 1901 Species: O. johnstoni Binomial name Okapia johnstoni(P.L. Sclater, 1901) Range of the okapi The okapi (/oʊˈkɑːpiː/; Okapia johnstoni), al...
Tripoli III, Rheinisches Landesmuseum Bonn (1963) Emy Roeder (Würzburg, 30 gennaio 1890 – Magonza, 7 febbraio 1971) è stata una scultrice tedesca. Biografia Cominciò a studiare disegno e scultura nel 1908 e nel 1912 si trasferì a Darmstadt per studiare con lo sculture espressionista Bernhard Hoetger. Nel 1915 si trasferì a Berlino, dove entrò a far parte di un gruppo di artisti che incluedeva Käthe Kollwitz, Erich Heckel, Karl Schmidt-Rottluff ed Herbert Garble, che sposò nel 1920.&...