harmful | cat-v | acme | uriel | 9front | sl | sigrid | qwx | cinap_lenrek

My 7 programming ur-language

html | troff | pdf | txt | gmi

[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



Powered by troff(1)