Magik (programovací jazyk) - Magik (programming language) - Wikipedia
tento článek příliš spoléhá na Reference na primární zdroje.Leden 2008) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Magik je objektově orientované programování jazyk, který podporuje vícenásobné dědictví a polymorfismus, a to je dynamicky zadáno. Byl navržen a implementován v roce 1989 Arthurem Chanceem z Smallworld Systems Ltd. jako součást geografického informačního systému Smallworld (GIS). Po akvizici Smallworld v roce 2000 společnost Magik nyní poskytuje GE Energy, stále jako součást své technologické platformy Smallworld.
Magik (Inspirational Magik) byl původně představen v roce 1990 a v průběhu let byl vylepšován a aktualizován. Jeho aktuální verze je 5.2.
V červenci 2012 vývojáři Magik oznámili, že jsou v procesu portování jazyka Magik na platformě Virtuální stroj Java. Úspěšné přenesení bylo potvrzeno uživatelem Oracle Corporation v listopadu téhož roku.[1]
Podobnosti s Smalltalkem
Magik sám sdílí některé podobnosti s Pokec pokud jde o jeho jazykové vlastnosti a jeho architekturu: jazyk Magik je kompilován do bajtové kódy interpretováno Magikem virtuální stroj. Virtuální stroj Magik je k dispozici na několika platformách včetně Microsoft Windows, různé příchutě Unix a Linux.
Magik je založen na konzole a kód lze upravovat za běhu, i když je aplikace spuštěna. Konzolu lze také použít k provedení Magikova kódu a k zobrazení výsledků.
Zkompilovaný kód je uložen v jediném souboru, který se nazývá obrazový soubor. Každý obrazový soubor obsahuje zkompilované bajtové kódy a stav relace (například hodnoty proměnných), kdy byl obraz naposledy uložen.
Jazykové funkce
Komentáře
Magik používá #
token k označení sekcí kódu jako komentářů:
# Toto je komentář.
Úkoly
Magik používá <<
operátor úkoly:
a << 1,234 b << b + a c << "foo" + "bar" # řetězce Concat
Kvůli jasnosti se tento zápis čte jako „a se stává 1,234“ nebo „b se stane b plus a“. Tato terminologie odděluje přiřazení od srovnání.
Magik také podporuje komprimovanou variantu tohoto operátoru, která funguje podobným způsobem jako ty nalezené v C:
b + << a # Ekvivalent k b << b + a
K tisku proměnné můžete použít následující příkaz
a << „ahoj“ zápis (a)
Symboly
Kromě běžných datových typů, jako jsou celá čísla, plováky a řetězce, implementuje Magik také symboly. Symboly jsou speciální tokenový datový typ, který se v celé Magik rozsáhle používá k jedinečné identifikaci objektů. Jsou reprezentovány dvojtečkou následovanou řetězcem znaků. Symboly lze uniknout pomocí svislá čára charakter. Například:
a <<: ahoj # kdykoli: narazí na ahoj, je to stejná instance b <<: | ahoj svět |
Dynamické psaní
Proměnné Magik nejsou psány tak, jak jsou v říkají C# a může za běhu odkazovat na různé objekty. Všechno v Magik je objekt (není žádný rozdíl mezi objekty a primitivními typy, jako jsou celá čísla):
a << 1.2 # číslo s plovoucí desetinnou čárkou je přiřazeno proměnné 'a' a << "1.2" # později, řetězec je přiřazen proměnné 'a'
- Objekty
Objekty jsou v Magiku implementovány pomocí příkladů. Příklady mají podobnosti s třídami v jiných programovacích jazycích, jako je Jáva, ale s důležitými rozdíly. Magik podporuje vícenásobné dědictví a mixiny (které implementují funkce bez dat). Nové instance se vytvářejí klonováním existující instance (která bude obvykle příkladem, ale nemusí být).
Pomocí příkazu jsou vytvářeny nové exempláře def_slotted_exemplar ()
, například:
def_slotted_exemplar (: my_object, {{: slot_a, 34}, {: slot_b, "hello"}}, {: parent_object_a,: parent_object_b})
Tento fragment kódu bude definovat nový exemplář s názvem můj_objekt
který má dva sloty (nebo pole) s názvem slot_a
(předem inicializováno na 34) a slot_b
(předem inicializováno na „ahoj“), které dědí ze dvou existujících volaných exemplářů parent_object_a
a parent_object_b
.
Srovnání
Magik implementuje všechny obvyklé logické operátory (=
, <
, <=
, >
, >=
, ~=/<>
) pro srovnání, stejně jako několik neobvyklých. The _je
a _isnt
operátory se používají k porovnání konkrétních instancí objektů nebo odkazů na objekty, nikoli hodnot.
Například:
a << "ahoj" b << "ahoj" a = b # vrací True (_true), protože hodnoty a a b jsou stejné a _is b # vrací False (_false), protože a není stejná instance jako ba << "ahoj" b << aa = b # vrací True (_true), protože hodnoty a a b jsou stejné a _is b # vrací True (_true), protože b byla přiřazena konkrétní instance stejného objektu jako a, spíše než hodnota a.
Metody
Metody jsou definovány na příkladech pomocí příkazů _metoda
a _endmethod
:
_method my_object.my_method (a, b) _return a + b _endmethod
Konvencí je dodávat dvě metody Nový()
(k vytvoření nové instance) a init ()
(k inicializaci instance).
# Nová metoda _metoda person.new (name, age) _return _clone.init (name, age) _endmethod # Inicializovat metodu. _private _method person.init (name, age) # Zavolejte nadřazenou implementaci. _super.init (name, age) # Inicializujte sloty. .name << name .age << age _return _self _endmethod
The _clone
vytvoří fyzickou kopii souboru osoba
objekt. The _super
příkaz umožňuje objektům vyvolat implementaci metody na nadřazeném exempláři. Objekty se mohou odkazovat pomocí _já
prohlášení. Sloty objektu jsou přístupné a přiřazené pomocí tečkové notace.
Metody, které nejsou součástí veřejného rozhraní objektu, lze označit jako soukromé pomocí _soukromí
prohlášení. Soukromé metody lze volat pouze pomocí _já
, _super
a _clone
.
Volitelné argumenty lze deklarovat pomocí _volitelný
prohlášení. Nepovinné argumenty, které nejsou předány, Magik přiřadí speciálnímu objektu _unset
(ekvivalent null). The _shromáždit
příkazem lze deklarovat seznam volitelných argumentů.
_method my_object.my_method (_ shromáždit hodnoty) _endmethod
Opakování
V Magik _zatímco
, _pro
, _přes
, _smyčka
a _endloop
příkazy umožňují iteraci.
_block _local s << 0 _local i << 0 _ zatímco i <= 100 _loop s + << i i + << 1 _endloop >> s_endblock
Zde je _ While kombinováno s _loop a _endloop.
_method my_object.my_method (_gather values) total << 0.0 _for a _over values.elements () _loop total + << a _endloop _return total _endmethod m << my_object.new () x << m.my_method (1.0, 2, 3.0 , 4) # x = 10,0
Zde values.elements () je iterátor, který pomáhá iterovat hodnoty.
V Magik generátor metody se nazývají iterátorové metody. Nové metody iterátoru lze definovat pomocí _iter
a _loopbody
prohlášení:
_iter _method my_object.even_elements () _pro _over _self.elements () _loop _if a.even? _je _pravda _ pak _loopbody (a) _endif _endloop _endmethod
Postupy
Magik také podporuje funkce zvané procedury. Procedury jsou také objekty a jsou deklarovány pomocí _proc
a _endproc
prohlášení. Postupy jsou přiřazeny proměnným, které lze poté vyvolat:
my_procedure << _proc @my_procedure (a, b, c) _return a + b + c _endproc x << my_procedure (1, 2, 3) # x = 6
Regulární výraz
Magik podporuje // syntaxi regulárního výrazu:
_if /Hello,s(w)+!/.matches?("Ahoj, Magiku! ") _pak napiš (" Mám shodu! ") _ endif
a zachytit skupiny v Regexu:
/sw([0-9]+)-([0-9]+).*/.replace_all("sw65456-324sss "," $ 1 ") #" 65456 "/ sw ([0-9] +) - ([0-9] +). * /. Replace_all ("sw65456-324sss", "$ 2") # "324"
Knihovna HTTP
Magik podporuje vytváření požadavků HTTP nebo HTTPS prostřednictvím knihovny http, viz příklady níže:
magikhttp << http.new () magikhttp.url ("https://www.google.com") .get () magikhttp.url ("https://www.google.com"). post ({"Uživatel -agent "," Bot "}," some data ")
Jazykové vtipy
Protože Magik byl původně vyvinut v Anglii, jsou metody v základních knihovnách malého světa hláskovány pomocí Britská angličtina. Například:
Použijte „inicializovat“, nikoli „inicializovat“.
Sbírky
Stejně jako ostatní programovací jazyky má Magik také sbírky. Zahrnují následující:
- Jednoduchý vektor
- Lano
- Tabulka hash
- Seznam nemovitostí
- Sada rovnosti
- Tašky
Příklad Hello World
Následuje příklad souboru Program Hello world napsáno Magikem:
napište („Hello World!“)
Reference
- ^ Jim Connors (05.11.2012). „Posypte na tento virtuální stroj Java nějakou Magiku“. Citováno 2012-11-06.
S touto novou schopností společnost GE Energy uspěla v hostování svého prostředí Magik nad virtuálním strojem Java