Magik
Fitur-fitur yang disediakan

Magik menggunakan token # untuk menandai suatu baris yang ingin dijadikan komentar.
# Ini adalah contoh cara membuat komentar dalam bahasa magik
Magik menggunakan operator << yang menandakan pemberian suatu penugasan:
a<<1.234
 b<<b+a
Notasi di atas dapat diartikan "Variabel A diisi oleh 1.234" dan "Variabel b diisi oleh variabel b sendiri ditambah a".
Magik juga mendukung variasi penugasan yang lebih ringkas yang cara penulisannya mirip dengan bahasa C:
b+<<a # Ekivalen dengan b<<b+a
Magik memiliki tipe data symbol dimana tipe data ini sama seperti tipe data biasa seperti Integer, float and string.
Simbol adalah tipe data spesial yang sering digunakan dalam Magik untuk mengidentifikasikan secara unik suatu objek. Cara penulisannya adalah dengan menggunakan huruf titik koma diikuti oleh beberapa huruf. Simbol dapat juga ditambahkan garis lurus setelah titik koma jika nama simbol mempunyai spasi di antara dua huruf/kata. For example:
a<<:hello  
 b<<:|hello world|
Variabel dalam Magik tidak perlu dideklarasikan terlebih dahulu dan dapat menampung objek yang berbeda pada saat runtime. Semua yang ada di dalam Magik adalah objek (tidak ada perbedaan antara objek dan tipe data yang lain misalnya seperti integer):
a<<1.2     # Variabel a menampung angka yang bertipe data float
 a<<"1.2"   # Disini variabel a juga dapat menampung tipe data string
Untuk mendefinisikan objek atau kelas di dalam Magik digunakan kata exemplars. Magik mensupport pewarisan berganda, and mixins(suatu function yang tidak ada datanya). Instan baru dapat dibuat dengan cara meng-cloning instan yang sudah ada.
Exemplars baru dapat dibuat menggunakan baris perintah def_slotted_exemplar(), sebagai contoh:
def_slotted_exemplar(:objek_ku,
 {
   {:slot_a,34},
   {:slot_b,"hallo"}
 },{:objek_a,:objek_b})
Baris perintah di atas dapat diartikan bahwa kita membuat suatu kelas baru dengan nama:objek_ku yang memiliki dua buah field yaitu:slot_a yang berisi nilai 34 dan:slot_b yang berisi kata "hallo" dan kelas ini mewarisi dari dua buah exemplars yang sudah ada yaitu:objek_a dan:objek_b.
Magik seperti bahasa yang lain juga menggunakan binari operator (=, <, <=, >, >=, ~=/<>) untuk perbandingan.
Operator _is and _isnt juga dipakai sebagai perbandingan dan biasanya digunakan untuk membandingkan antara dua buah instan objek.
Contoh:
a << "hello"
 b << "hello"
a = b mengembalikan nilai True (_true) karena nilai dari a dan b adalah sama
 a _is b mengembalikan nilai False (_false) karena instan a tidak sama dengan instan b
a << "hello"
 b << a
a = b mengembalikan nilai True (_true) karena nilai a dan b sama
a _is b mengembalikan nilai True (_true) karena b dan a ke instan objek yang sama tapi bukan nilainya
Methods didefinisikan dalam exemplars menggunakan baris perintah _method dan _endmethod:
_method objek_ku.method_ku (a, b)
   _return a+b
 _endmethod
Methods bisa dijadikan private (tidak untuk digunakan oleh public) dengan menggunakan baris perintah _private. Private methods ini hanya dapat dipanggil dengan baris perintah _self, _super and _clone.
Iterasi dalam Magik menggunakan baris perintah _for, _over, _loop and _endloop.
_method objek_ku.method_ku (_gather values)
   total<<0.0
   _for a _over values.elements()
   _loop
      total+<<a
   _endloop
   _return total
 _endmethod
m<<objek_ku.new()
 x<<m.method_ku(1.0,2,3.0,4) # x=10.0
Magik juga mensupport penggunaan fungsi namanya procedure. Procedure juga merupakan objek dan dideklarasikan menggunakan baris perintah _proc and _endproc.
procedure_ku<<_proc @procedure_ku (a, b, c)
   _return a+b+c
 _endproc
x<<procedure_ku(1,2,3) # x=6
Karena Magik awalnya dikembangkan di Inggris, method-method yang ada di dalam Smallworld Core menggunakan ejaan British bukan American. Contohnya:
Gunakan kata "initialise", bukan "initialize".
| --- | --- |
Pengawasan otoritas :  Microsoft Academic