Tag: Programming Language

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! šŸ™‚

Gunakan Bahasa Pemrograman Pada Tempatnya

Gunakan Bahasa Pemrograman Pada Tempatnya

MengutipĀ perkataanĀ “buanglah sampah pada tempatnya”, kita mestinya membuang memakai bahasa pemrograman pada tempat, konteks, dan waktu yang tepat!

Saat menulis program, kita inginnya cepat dan cepat. Cepat eksekusinya, dan cepat proses developingnya. Kita juga punya kecenderungan untuk memakai bahasa tertentu–bahkan untuk keperluan apapun. Misalnya saja Mas gondrong pencinta bahasa C, mau urusan embedded system pakai C, sorting string pada file pakai C, membuat aplikasi Android pakai C (tidak percaya? Bisa lho.), membuat kernel dengan C, membuat aplikasi server dengan C. Mas gondrong sangat memuja-muja C.

Sebetulnya tak ada yang terlalu salah dengan Mas gondrong, ia mengandalkan C untuk menyelesaikan segalanya. Namun, saat kita melihat ia bekerja membuat program sorter ia kesulitan mencari library yang mantap, meskipun ia tak kesulitan saat bekerja di embedded system, dan saat bekerja di lingkungan Android dia betul-betul kesulitan.

Mas gondrong tentu tidak akan kesulitan membuat aplikasi Android dengan Java, bahasa yang memang seharusnya digunakan. Dan mungkin akan lebih mudah mensorting list dengan Lisp atau men-setup server dengan Perl misalnya.

Ada baiknya kita dengar cerita dari Google, raksasa internet. Google akhir-akhir ini banyak mem-port modul-modul yang tadinya ditulis dengan python, menjadi C. Alasannya tentu saja peningkatan performa. Lantas mengapa Google tidak langsung saja pakai C ya?

Python adalah bahasa interpreted, dalam arti Python tidak perlu dikompilasi untuk dijalankan, tujuan pemakaian Python adalah proses developing yang lebih cepat daripada C (meskipun Python juga dapat dikompilasi dengan sengaja menjadi bytecode yang akhirnya memberikan waktu eksekusi yang sama cepatnya dengan C, python memang semakin membaik), developer Google tidak ingin meng-compile source code C ribuan kali. Akan lebih baik suatu program baru dikembangkan dengan Python, dan setelah nyaris sempurna source code tersebut di-port ke bahasa lain.

Mahasiswa jurusan sains pasti kenal dengan Matlab, software komputasi yang powerful. Matlab sering dipakai untuk menghitung matriks, pemodelan, atau visualisasi data. Pada dasarnya mereka bisa saja memakai C untuk melakukan hal yang sama. Tapi yang ingin saya tekankan adalah akan lebih mudah dengan tool yang tepat.

Nah, sekarang kita beralih ke web programming. Jika ingin membuat halaman web dinamis berisi konten yang sangat cepat diupdate, HTML adalah pilihan yang jelek, kita punya PHP untuk halaman yang lebih fleksibel dan dinamis.

Saya ingin menekankan bahasa yang tepat untuk pekerjaan tertentu, ini mungkin akan membuat kita belajar bahasa-bahasa baru. Bisa saja Anda tidak sepakat sepenuhnya dengan tulisan ini, tapi saya pibadi sih tidak masalah. šŸ™‚

Sekali lagi, buanglah sampah pada tempatnya.