Magik (programovací jazyk) - Magik (programming language) - Wikipedia

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

  1. ^ 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

externí odkazy