Category: Programming

What Programming Language You Mostly Use Then & Now? Why?

What Programming Language You Mostly Use Then & Now? Why?

This probably is the most frequent asked question: programming language choice. Well, there are literally hundreds even thousands of programming languages out there. Several have gained sweet popularity, some have been discontinued, buried along with obsolete technologies. Some languages have lasted to date, some others just get illusively overhyped.

That, of course, makes total beginners get confused. What should I learn? Where can I find help if I get stuck? This short article would probably help you clear your path to choose a programming language.

Continue reading “What Programming Language You Mostly Use Then & Now? Why?”

Interpreter Bahasa Brainfuck Dalam Bahasa C

Brainfuck? Jangan salah paham dulu, Brainfuck adalah sebuah bahasa pemrograman esoteric yang minimalis. Bahasa Brainfuck hanya memiliki delapan perintah yaitu , . [ ] < > + -. Sebetulnya sudah banyak juga sih yang menulis compiler dan interpreter untuk bahasa ini, tapi saya ingin membuatnya sendiri karena tertarik perintahnya yang sedikit, hihi.

Untuk implementasi interpreter Brainfuck, saya memutuskan menggunakan Bahasa C sebagai permulaan. Di bawah ini adalah kode C untuk interpreter Brainfuck, kurang dari 170 baris, dan itu belum dioptimasi! 😛 Setelah di-compile interpreternya dapat menerima file program Brainfuck. Kalau malas compile sendiri, saya juga sudah siapkan executable untuk Windows di link github yang saya sediakan di bagian bawah. 🙂
https://github.com/Rosmianto/Brainfuck-interpreter

[code language=”cpp” collapse=”true”]
#include &lt;stdio.h&gt; // for basic I/O operation.
#include &lt;stdlib.h&gt; // for memory management.

typedef struct stack {
int value;
struct stack *next;
} stack_node_t;

typedef struct {
stack_node_t *top;
} stack_t;

int pop(stack_t *s);
void push(stack_t *s, int i);
char *bracemap(char *program);
void loadBFtoMemory(FILE *handle);
void process(char c);

const int memorySize = 30000;
char *cell;
int currentCell = 0;
int InstructionPointer = 0;
int i, charCount;
FILE *hInput; // Handle to File object.
char *programArray; // Cleaned up Brainfuck program.
char *braces; // Storage of braces pair location.
char *bracesStack; // temporary array for braces stack.
char _temp;

int main(int argc, char *argv[])
{
// Make sure file path always be specified.
if(argc &lt; 2)
return 0;

cell = calloc(memorySize, sizeof(char));

hInput = fopen(argv[1], &quot;r&quot;);

loadBFtoMemory(hInput);

braces = bracemap(programArray);

while(InstructionPointer &lt; charCount)
{
process(programArray[InstructionPointer]);
InstructionPointer++;
}

// printf(&quot;\n&quot;);

// for(i = 0; i &lt; 20; i++)
// printf(&quot;%d|&quot;, cell[i]);

// printf(&quot;\n&quot;);

free(programArray);
fclose(hInput);
return 0;
}

char *bracemap(char *program)
{
int i, start;
char *temp = calloc(charCount, sizeof(char));
stack_t tempStack = {NULL};

for(i = 0; i &lt; charCount; i++)
{
if(programArray[i] == ‘[‘)
{
push(&amp;tempStack, i);
start = i;
}
else if(programArray[i] == ‘]’)
{
int start = pop(&amp;tempStack);
temp[start] = i;
temp[i] = start;
}
}
return temp;
}

void process(char c)
{
switch(c)
{
case ‘+’:
cell[currentCell]++;
break;
case ‘-‘:
cell[currentCell]–;
break;
case ‘&gt;’:
currentCell++;
break;
case ‘&lt;’:
currentCell–;
break;
case ‘.’:
printf(&quot;%c&quot;, cell[currentCell]);
break;
case ‘,’:
cell[currentCell] = (char)getchar();
break;
case ‘[‘:
InstructionPointer = (cell[currentCell] == 0) ? braces[InstructionPointer] : (InstructionPointer);
break;
case ‘]’:
InstructionPointer = (cell[currentCell] == 0) ? (InstructionPointer) : braces[InstructionPointer];
break;
default: // Ignore other characters.
break;
}
}

void loadBFtoMemory(FILE *handle){
char c;
charCount = 0;
programArray = (char*) malloc((charCount + 1) * sizeof(char));
if(programArray == NULL)
printf(&quot;Memory allocation failed.&quot;);
else
{
c = fgetc(hInput);
while(c != EOF)
{
switch(c)
{
case ‘+’:
case ‘-‘:
case ‘&gt;’:
case ‘&lt;’:
case ‘.’:
case ‘,’:
case ‘[‘:
case ‘]’:
programArray[charCount++] = c;
realloc(programArray, (charCount + 1) * sizeof(char));
default:
break;
}
c = (char)fgetc(hInput);
}
}
}

int pop(stack_t *s){
stack_node_t *free_node;
int c;

free_node = s-&gt;top;
c = free_node-&gt;value;
s-&gt;top = free_node-&gt;next;
free(free_node);

return c;
}

void push(stack_t *s, int c){
stack_node_t *new_node;
new_node = (stack_node_t *) malloc(sizeof(stack_node_t));
new_node-&gt;value = c;
new_node-&gt;next = s-&gt;top;

s-&gt;top = new_node;
}
[/code]

Lanjut Lagi Desain Programming Language-nya!

fig-compiler-architectureKira-kira sudah lima tahun sejak tahun 2010 saya vakum belajar konstruksi compiler atau interpreter. Saya pernah menulis artikel tentang perancangan bahasa pemrograman di blog lama saya (artikelnya terdiri dari dua bagian, klik sini untuk melihat bagian pertamanya).

Artikel yang saya tulis tersebut bisa dibilang low-quality, dan terlalu banyak bias. Di artikel tersebut saya berusaha menjabarkan saja sepengetahuan saya tentang tips & trik mendesain bahasa pemrograman. Pokoknya low-quality deh! Hehe.

Di tahun 2010 saya pernah membuat interpreter menggunakan bahasa Autohotkey, sulit juga membuat lexer dan parser dengan tangan (maksudnya tidak diotomasi dengan program bantuan). Namun dari titik itu, pemahaman saya tentang mekanisme kerja tool semacam itu semakin membaik. Nah, sejak akhir tahun 2011 saya sudah tidak lagi oprek-oprek interpreter.

Saya sudah pernah mendengar tool YACC (Yet Another Compiler-Compiler) alias Bison dan tool Flex untuk men-generate program lexer, tapi malas juga belajar bahasa baru (C dan C++). Nah, saat mengambil mata kuliah Problem Solving With C di ITB, mau tidak mau saya belajar C. Otomatis saya jadi tertarik oprek Bison dan Flex, baru nyambung ilmunya sekarang. Hehe.

Baik, jadi begini. Kalau Anda pernah membuat program apapun dalam bahasa apapun, baik C yang dikompilasi dengan GCC, atau Python yang di-interpretasi, maka yang saya dari tadi bicarakan adalah bagaimana membuat program yang mampu menjalankan source code Anda.

Entah apa saya akan benar-benar bereksperimen hingga mampu membuat interpreter yang baik, atau hanya nostalgia. Tulisan ini hanyalah curhat, basa-basi. Terima kasih sudah membaca hingga tanda baca terakhir! 🙂

Saya mengenai C++ dan C#

C++ didesain sebagai superset dari C, dan C# adalah turunan dari C++. Bahkan designernya, Anders Hejlsberg menyatakan bahwa C# dalam desainnya lebih mirip ke C++ ketimbang Java.

C# dan Java sendiri adalah dua bahasa yang serupa. Tapi tetap, masing-masing memiliki karakteristik yang berbeda. Walau sama-sama mempunyai konsep Intermediate Language. Yaitu C# dengan MSIL dan Java dengan Bytecode-nya.

Baik, C++ dan C# menurut saya lebih dari ‘Bapak-Anak’, walaupun C# didesain dengan sangat bersih, dan efisien. Terkadang agak menyulitkan awam untuk mengerti konsep pemrograman.

Saya mempelajari C# dari buku “C# 4.0 Unleashed” karangan Bart De Smet. Buku yang mahal, dan saya sedikit menyesal. Pasalnya menurut saya bahasa yang dipakai Bart agak berputar-putar, dan walaupun ia menyatakan “tidak akan menampilkan rujukan yang menyebabkan ‘mental-jump'”, tetap saja dia mengatakan “perkenalkan! delegate.. perkenalkan! static method! Kita akan pelajari nanti.. di bab sekian..”

Itu jelas sekali membuat saya langsung membuka bab tersebut, tapi inilah kelebihannya, ia melakukan itu semua dengan baik. Pernyataan “jangan khawatir bila Anda tak mengerti segalanya sekarang, teruskanlah membaca dan semuanya meresap.” memang benar. Lama kelamaan saya menyukai buku ini.

Kembali ke topik. Menurut saya C# memunculkan fitur yang sebenarnya adalah konsep pemrograman pada C++, contohnya adalah delegate, sebuah konsep C++ yang dinamakan function pointer. Namun delegate bersifat type-safe dan object-oriented.

ProgLang Designing: Language basic structure.

Di artikel ini saya akan menjelaskan fundamental designing programming language. Dalam bahasa pemrograman, ada struktur kata-kata yang disusun sesuai aturan bahasa pemrograman itu, seperti halnya bahasa inggris, Anda harus menyusun kata dengan baik dan benar agar kalimat yang dibuat dapat diterima. Nah, struktur itulah yang disebut syntax. Contoh real dalam C# seperti ini:

[sourcecode language=”csharp”]
string name = “Rosmianto Aji S”;
[/sourcecode]

Jadi struktur kata-katanya seperti:

[sourcecode language=”csharp”]
string <NamaVar> = <IsiVar>;
[/sourcecode]

Simbol ‘=’ dan ‘;’ disebut semantik. Yaitu simbol yang dipakai dalam syntax. Sebenarnya definisi ini agak keliru. Yang benar adalah: “.. semantik adalah struktur simbol-simbol yang dipakai dalam syntax ..”, penerapan praktisnya sbb:

[sourcecode language=”csharp”]
var = namadepan & namabelakang;
// semantiknya adalah:     … = … & … ;
// tiga simbol digunakan dalam semantik ini.
[/sourcecode]

Contoh lain:

[sourcecode language=”csharp”]
calc = 1 + 2 – 3 * 1;
// semantiknya:    … = … + … – … * …;
// lima simbol untuk kasus ini.
[/sourcecode]

Selanjutnya. command disebut juga identifier, mudahnya lihat dibawah ini:

[sourcecode language=”csharp”]
string name = variabellain;
[/sourcecode]

bila diurai akan menjadi:

[sourcecode language=”csharp”]
[string identifier] [name variable] [equal] [variabellain variable] [semicolon]
[/sourcecode]

Baris yang diidentifikasi sebagai komentar harusnya diabaikan.

AutoHotkey tutorial Released!

Improved! Sebelumnya saya pernah membuat tutorial mengenai AutoHotkey. Namun tidak dirilis ke publik. Melainkan hanya kalangan tertentu saja.

Nah, saat ini saya telah menyelesaikan prototipe dari revisi tutorial AutoHotkey saya yang terbaru. Untuk me-review silahkan unduh [disini]

Dokumen tersebut berformat PDF, pastinya Anda tahu kan, software apa yang harus dijalankan?

Ok, dengan merilis tutorial ini diharapkan Anda dapat memberi kontribusi tentang dokumen tersebut, apa yang harus diperbaiki? Bagaimana layout-nya? Bagaimana gaya bahasannya?

Bila respon yang masuk cukup untuk dijadikan background. maka saya akan melanjutkan menulis tutorial tersebut, hingga tingkat Advanced.

Yap, sedikitnya beri kesan Anda terhadap tutorial saya ini. I’m looking for your comment!

Bagaimana cara membuat bahasa pemrograman sendiri [bagian 2]

Jika Anda belum membaca bagian pertama, silakan klik [sini]

Merancang Syntax

Seperti yang sudah dibahas di bagian pertama, setelah Anda membuat daftar kelemahan bahasa pemrograman yang Anda pakai. Maka selanjutnya Anda harus merancang sintaks bahasa pemrograman Anda.

Untuk dapat merancang sintaks bahasa pemrograman yang baru, beberapa poin berikut yang harus diperhatikan:

Bagaimana cara membuat bahasa pemrograman sendiri?

Bahasa pemrograman saat ini sudah sangat banyak nama, jenis, berikut keunggulannya. Mulai dari yang populer (seperti Java, C++, VB, PHP, keluarga .NET,  Delphi, dst.) dengan segala kelebihan, kelemahan, dan tipe source-nya (entah itu open source atau closed source).

Bila Anda programmer, adakalanya Anda membenci (atau setidaknya merasa kurang pas) dengan bahasa pemrograman yang sedang dipakai. Entah itu C++ dengan banyak istilahnya, statement yang kurang tepat,  pemakaian suatu sintaks yang tidak (atau kurang) berguna, dsb. Continue reading “Bagaimana cara membuat bahasa pemrograman sendiri?”

Ayo! Optimasi kode program Anda.

Anda programmer? Aktif membuat program 1-2 tahun belakangan ini?
Cukup banyakkah program buatan Anda? Kalau ya, mari kita optimasi
kode program buatan kita!

Semenjak saya pertama kali menyentuh komputer tiga tahun lalu, dan
belajar pemrograman. Sampai saat ini, ratusan script untuk kepentingan
sendiri sudah saya buat. Tak terasa sudah sebanyak ini…
Wah, saatnya nostalgia!!

Mulai dari script pertama yang sangat jelek dibuka. Hihi, ternyata teknik
pemrograman saya tiga tahun lalu sangat buruk. Karena saya berbeda dengan
saya tiga tahun lalu, saya berpikir betapa bodohnya saya waktu itu, dan tentu
harus diganti teknik pemrograman dengan yang baru. Ternyata setelah dioptimasi,
kecepatan program lama saya meningkat antara 5-20x lipat. Wew!!

Tentu saja karena Continue reading “Ayo! Optimasi kode program Anda.”