[0] The seven programming ur-languages mesupakan sebuah sebuah tulisan web yang ditulis oleh Frederick J. Ross mengenai, dalam pemrograman kita hanya perlu mengetahui 7 tipe bahasa saja, dalam perkembangan teknologi dini hari banyak sekali bahasa program yang baru, terkadang beberapa orang sulit untuk mempelajarinya namun ada beberapa orang yang mudah memahaminya juga, dan menurut saya mempelajari bahasa baru itu mudah karna biasanya bahasa baru menyalin cara bahasa yang lama karna itu jika anda ingin mempelajari bahasa pemrograman saya sarankan hanya mempelajari 7 tipe bahasa ini.
Too Long did’t read
berikut listnya
1. ALGOL: C99
2. LISP: Common Lisp (SBCL)
3. ML: Haskell (GHC)
4. Self: Pharo
5. Forth: UXN
6. APL: BQN
7. PROLOG: Strands (FLeng)
ALGOL
di dalam tulisan web Frederick J. Ross tipe bahasa ini berasal dari keluarga [1] ALGOL, karakteristik pada bahasa ini adalah penggunaan loop, merubah variabel dan kondisional, bahasa ini juga merupakan bahasa yang simpel karena penulisan program sangat mirip dengan cara kerja mesin, yaitu mengeksekusi baris perintah satu persatu, karena cara kerja yang seperti mesin tipe bahasa ini juga merupakan yang paling tua dibanding yang lain, contoh bahasa dalam keluarga ini adalah, Assembly, C, Fortran, Pascal, GO, Hare, dll
dalam keluarga ini bahasa pilihan saya adalah C, karna di C saya bisa bebas melakukan apa saja, termasuk menembakan peluru ke kaki saya, berikut adalah contoh menghitung Faktorial di bahasa C
#include <stdio.h>
unsigned long long
fac(unsigned int N)
{
int acc = 1;
for(int i = 1; i <= N; i++)
acc *= i;
return acc;
}
int
main(void)
{
unsigned int N = 5;
unsigned long long f = fac(N);
printf("%u! = %llu\n", N, f);
return 0;
}
LISP
bahasa berikutnya adalah lisp, lisp bahasa yang di desain oleh John McCarthy dengan papper berjudul [2] "Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I" namun orang pertama kali yang mengimplementasikannya adalah Steve Rusell untuk IBM 704, Lisp merupakan singkatan dari List Procesing, desin pertama lisp menggunakan [3] M-expression namun kemudian menggunakan [4] S-expression, bahasa Lisp sangatlah terkenal sampai sebuah hardware dibuat hanya untuk bahasa ini, namun karena ada [5] AI Winter, mesin ini tidak lagi diproduksi, saat ini bahasa Lisp terpisah menjadi dua, yaitu [6] Scheme dan Common Lisp, Scheme lebih mengarah ke bahasa fungsional dan Common Lisp lebih mengarah ke paradigma general, salah satu implementasi dari Scheme adalah Guile, MIT Scheme, Racket, Chicken, dll, sementara untuk Common Lisp ada SBCL, ABCL, ECL, Clasp, dll.
dalam keluarga ini bahasa pilihan saya adalah Common Lisp Implementasi dari [7] SBCL, karena menurut saya SBCL Common Lisp memiliki kecepatan yang bagus, Memperogram menggunakan Common Lisp juga sangat menyenangkan karena kita dapat mengevaluasi kapan saja, jika ada kesalahan kita akan ditampilkan tampilan debugger yang interaktif, SBCL juga langsung mengkompilasi kode ke bahasa mesin, jadi sangat cepat dan saya juga memiliki pengalaman Game Development menggunakan Trial Game Enggine, dan saya sangat senang menggunakanya, untuk contoh kecil berikut kode faktorial dalam bahasa lisp, karena tidak semua implementasi Common Lisp melakukan Tail Call Optimization saya menggunakan gaya Imperatif dan Common lisp merupakan bahasa interaktif jadi kita bisa membuat fungsi dan memanggilnya langsung
(defun factorial (n)
(loop for i from 1 to n
for result = 1 then (* result i)
finally (return result)))
(format t "~a" (factorial 5))
ML
dari semua bahasa program, ini lah salah satu bahasa yang membuka pikiran saya, bahasa keluarga [8] ML merupakan bahasa fungsional dimana semua yang kita lakukan menggunakan fungsi, tidak hanya itu fungsi dapat memiliki argumen fungsi dan return fungsi ini biasa dinamakan currying, dalam bahasa fungsional biasanya di bedakan menjadi dua, yaitu pure dan impure, bahasa yang pure adalah bahasa yang tidak dapat mengubah suatu variable dan sebaliknya, dalam bahasa pure bahasa program yaitu Haskell, Clean, Idris, dan dalam impure ada OCaml, F#, dll, dan dalam bahasa pure kita menggunakan fungsi rekursif karena dalam pure bahasa pure fungsi tidak memiliki for loop atau while loop
bahasa pilihan saya yaitu bahasa pure [9] Haskell, bahasa yang sangat elegan namun menurut saya memiliki kekurangan yaitu package manager dalam haskell ada dua yaitu [10] Stack dan [11]Cabal, dua package manager ini memiliki sejarah panjang, package pilihan saya yaitu Cabal karna Official, seperti biasa saya memberikan contoh program factorial
factorial :: (Eq t, Num t) => t -> t
factorial n = go n 1
go :: (Eq t, Num t) => t -> t -> t
go 1 a = a
go n a = go ( n - 1 ) ( a * n )
kode diatas merupakan versi tail recursion yang lebih efisien dari yang biasa
Self
self sama dengan [12] object oriented programming, saat ini bahasa object oriented programming yang paling popular adalah Java namun saya rasa java bukan lah pure object oriented, yang saya maksud object oriented itu sama dalam yang ada dalam bahasa [13] SmallTalk, dan SmallTalk merupakan bahasa pertama yang menggunakan konsep object oriented programming, untuk saat ini yang saya tau hanya ada 2 bahasa program yang masih menggunakan paradigma pure object oriented yaitu [14] Squeak dan [15] Pharo, dari kedua itu saya mencoba Pharo, ketika saya menjalankan Pharo saya seperti berada dalam VM Qemu, setelah mencoba beberapa minggu programming di Pharo sangat bagus karna tools yang disediakan berupa gui, jadi kita bisa bisa melihat/menginspeksi semua class dengan gui.
dalam bahasa pure OOP, ada konsep yang dinamakan message passing, mirip dengan aktor model, jadi untuk berinteraksi dengan klass kita mengirim sebuah pesan ke klass tersebut, seperti ini contoh jika kita ingin menghubungi Objek Transcrip dan menggunakan method show, dimana digunakan untuk printing sebuah pesan ke jendela Transcript
Transcript show: ’Hello Pharo!’.
saya sudah lama tidak menggunakan Pharo di lain waktu akan saya update halaman ini
Forth
hampir mirip dengan LISP [16] forth bekerja pada sebuah stack, forth pertama kali digunakan untuk embeded machine karna forth merupakan bahasa yang simpel dan mini, di keluarga ini saya pernah menulis kode forth dengan implementasi dari gnu, namanya adalah [17] gnuforth, gnuforth ini sangat portabel sampai bisa di jalankan di ponsel android, namun karna lisensi yang kurang saya suka maka saya mencari alternative, bertemulah UXN, [18] UXN merupakan sebuah bahasa program untuk mesin Varvara, Varvara ini di targetkan untuk mesin mini, namun memiliki fungsionalitas gui, saya juga pernah menjalankannya di Nintendo 3DS saya, dan berjalan dengan lancar, karna portabel dan simpel inilah saya memilih UXN.
seperti inilah wujud hello world dari UXN
|10 @Console &vector $2 &read $1 &pad $5 &write $1 &error $1
|100
@on-reset ( -> )
;my-string print-text
BRK
@print-text ( str* -- )
&while
LDAk .Console/write DEO
INC2 LDAk ?&while
POP2
JMP2r
@my-string
"Hello 20 "World! 00
APL
A Programming Language, [19] APL sama dengan Forth dan Lisp, tetapi APL bekerja pada Array, di dalam [20] Array Programming jika kita menambah angka dua dalam sebuah Array maka akan mempengaruhi seluruh isi dari Array tersebut, yang paling terkenal dari keluarga APL adalah penggunaan symbol yang mungkin memiliki berbeda arti dalam konteks tertentu, dalam bahasa ini saya pernah mencoba bahasa Dyalog APL dan BQN, Dyalog APL merupakan bahasa Non-Free sebaliknya dengan BQN jadi saya memilih BQN disini, sebelumnya untuk keluarga ini saya tidak tertarik dikarenakan penggunaan symbol namun karna saya menonton youtube dari code_report saya rasa keluarga dari APL itu keren jika kita tau apa maksud dari simbol yang digunakan, untuk merasakan kode BQN berikut kodennya, diambil dari [21] github codereport Contest 336
MaxScore <- +´0<·+‘∨
# Tests
MaxScore (2,-1,0,1,-3,3,-3) # 6
MaxScore (-2,-3,0) # 0
dan ini untuk bahasa Haskell
import Data.List (sort)
maxScore = length
. filter (>0)
. scanr1 (+)
. sort
Prolog
prolog merupakan singkatan dari [22] Programming Logic, dimana kita menggunakan logic untuk menentukan semuanya, salah satu fitur yang saya suka dari prolog adalah Backtracking, jadi ada sebuah rule dapat menghasilkan banyak output kita bisa memilihnya di repl, di dalam prolog tidak ada yang namanya fungsi, yang ada hanyalah fact dan rule, di prolog juga menggunakan koma dan semikolon untuk percabangan, sama dengan Lisp prolog merupakan bahasa yang di kembangkan untuk AI, namun saya rasa Prolog berhasil selamat dari AI Winter, Prolog juga merupakan bahasa standar seperti Lisp, salah satu implementasi yang saya suka adalah [23] trella prolog, namun pada keluarga ini ada jenis bahasa yang unik yaitu [24] Concurent Prolog System, contohnya adalah Strands Prolog, dimana kita bisa menjalankan perintah secara konkuren dan cepat, namun pada concurent prolog sepertinya sudah banyak ditinggalkan dan saya tidak tau kenapa akan saya update jika mengetahuinya, salah satu implementasi compiler yaitu [25] Fleng yang dikembangkan oleh pembuat [26] Chicken Scheme yaitu Felix Winkelmann, bahasa fleng ini tidak memiliki interpreter melakukan kompilasi langsung ke bahasa mesin, berikun adalah contoh bahasa Strands
-initialization(main).
-uses([unix, fmt]).
main :-
unix:unix([
connect(inet(’127.0.0.1’, 8080), C)
]),
handle(C).
handle(normal(C)) :-
C = [
fread(256, R)
],
fmt:format(’~s’, [R]).
Referensi
[0] The seven programming ur-languages https://madhadron.com/programming/seven_ur_languages.html
[1] ALGOL https://en.wikipedia.org/wiki/ALGOL
[2] Recursive Functions of Symbolic Expressions and Their Computation by Machine, Part I https://www-formal.stanford.edu/jmc/recursive.pdf
[3] M-expression https://en.wikipedia.org/wiki/M-expression
[4] S-expression https://en.wikipedia.org/wiki/S-expression
[5] AI Winter https://en.wikipedia.org/wiki/AI_winter
[6] Scheme https://en.wikipedia.org/wiki/Scheme_(programming_language)
[7] SBCL: Steel Bank Common Lisp http://www.sbcl.org
[8] ML https://en.wikipedia.org/wiki/ML_(programming_language)
[9] Haskell Language https://www.haskell.org
[10] The Haskell Tool Stack https://docs.haskellstack.org/en/stable/
[11] Cabal: Common Architecture for Building Applications and Libraries https://www.haskell.org/cabal/
[12] Object Oriented Programming https://en.wikipedia.org/wiki/Object-oriented_programming
[13] Smalltalk https://en.wikipedia.org/wiki/Smalltalk
[14] Squeak/Smalltalk https://squeak.org
[15] Pharo: The immersive programming experience https://pharo.org
[16] Forth https://forth-standard.org
[17] GNU Forth https://gforth.org
[18] UXN https://100r.co/site/uxn.html
[19] APL https://aplwiki.com
[20] Array Programming https://en.wikipedia.org/wiki/Array_programming
[21] codereport/LeetCode https://github.com/codereport/LeetCode
[22] Logic Programming https://en.wikipedia.org/wiki/Logic_programming
[23] trella prolog https://github.com/trealla-prolog/trealla
[24] Concurrent logic programming https://en.wikipedia.org/wiki/Concurrent_logic_programming
[25] Fleng https://www.call-with-current-continuation.org/fleng/fleng.html
[26] Chicken Scheme https://www.call-cc.org