Konsep penting .NET (secara praktek)

PENDAHULUAN

Contoh error yang ditemui pada C++/CLI:
C4368: cannot define ___ as a member of managed ___ : mixed types are not supported

Alasan:
Karena belum mengerti konsep .NET, jadi mencampuradukkan tipe managed dan unmanaged (dalam hal ini, array).
SO1SO2

PENJELASAN
disarikan dari sini

Dua jenis alokasi memori: stack & heap
Stack bertanggung jawab menelusuri -keeping track- running memory di aplikasi yang sedang berjalan. Alokasi memori dan dealokasi memori pada stack menggunakan logika LIFO (Last In First Out).

Ketika suatu obyek diciptakan (misal class1 cls1 = new class1();), suatu pointer diciptakan di stack namun obyek yang sebenarnya diletakkan pada tipe memory yang berbeda, yaitu heap. Heap tidak menelusuri (keeping track) running memory. Heap adalah tumpukan obyek yang bisa diakses pada saat kapanpun (tidak melalui LIFO). Heap digunakan untuk alokasi memori dinamis.

Penting

– reference pointer dialokasikan pada stack
– class1 cls –> mengalokasikan stack variable cls1 (di-set sebagai null)
– class1 cls –> tidak mengalokasikan memory untuk instance Class1
– keyword new –> mengalokasikan memory pada heap
– ketika keluar dari suatu method, memory variable pada stack di-dealokasi degan menggunakan (fashion) LIFO.
– ketika keluar dari suatu method, heap memory tidak di-dealokasi, hanya stack memory yang di-dealokasi
– heap memory nantinya akan di-dealokasi dengan menggonakan garbage collector

(visualisasi alokasi/dealokasi memori yang simpel dan deskriptif. Gambar diambil dari codeproject.com)

Review tipe data: primitif, obyek
– primitif:
–> tidak kompleks, hanya memiliki satu nilai (besaran)
–> tipe data primitif membutuhkan memori statik
–> jika suatu data membutuhkan memori statik, makan ia akan dialokasikan di stack
– obyek:
–> kompleks, merefer ke obyek lain dan atau tipe data primitif lain
–> tipe data obyek memegang referensi dari beberapa nilai (tidak hanya satu), dan setiap nilai tersebut harus disimpan di dalam memori
–> tipe data obyek membutuhkan memori dinamis
–> jika suatu data membutuhkan memori dinamis, makan ia akan dialokasikan di heap

Tipe nilai dan tipe referensi
– tipe nilai (value type)
–> memegang data dan memory, keduanya pada lokasi yang sama
–> ketike meng-assign suatu nilai integer ke nilai integer lainnya, maka kita akan memiliki dua kopi (yang jika salah satunya diubah, maka kopi yang lainnya tidak ikut mengalami perubahan)
–> selain tipe data string atau obyek
– tipe referensi
–> memiliki pointer yang menunjuk lokasi memori
–> ketika kita meng-assign suatu obyek ke obyek lainnya, mereka (kedua obyek tersebut) akan menunjuk ke lokasi memori yang sama. Jika satu obyek diubah, maka obyek lain juga akan terpengaruh.
–> string atau obyek

Boxing dan unboxing
– Boxing
–> data bergerak dari tipe nilai ke tipe referensi
–> data bergerak dari stack ke heap
–> contoh: int i=1; object O =i;
– Unboxing
–> data bergerak dari tipe refernsi ke tipe nilai
–> data bergerak dari heap ke stack
–> contoh: int j = (int) O

Boxing dan unboxing ini memperlambat waktu eksekusi. Jadi sebisa mungkin, sebaiknya dihindari.

TENTANG Mixed Types

Library: native & .NET
CLR: memungkinkan language interop antara assembly

Traditional native heap memory managers
– traditional memory managers: data yang tersimpan di memori tidak pernah dipindahkan oleh sistem, melainkan hanya bisa dipindahkan oleh program (yang ditulis)
– suatu range memori berada pada kendali program, sampai ketika range memori tersebut tidak lagi di-referensi-kan
– pada titik ini garbage collector bisa membebaskan memori

Kasus run out of memory
– bukan (melulu) karena memory leak, tapi karena memory heap terfragmentasi
– fragmentasi memori: walaupun sebenarnya ada cukup memori yang tersisa untuk alokasi memori, namun space yang masih bebas (free space) pada blok yang bersebelahan (contiguous block) tidak cukup

 CLR garbage collector
– merupakan teknik manajemen memori yang sophisticated
– setiap garbage collection terjadi, obyek yang tersisa akan dipindah ke bagian awal heap
– ini berarti memory yang masih kosong selalu tersedia pada potongan memory yang bersebelahan pada range alamat heap yang lebih tinggi (bukan awal heap)
– hal ini membuat alokasi memori menjadi sangat cepat
– namun ini juga berarti, tidak seperti manajemn memori secara tradisional, pada .NET garbage collector, obyek pada GC heap dipindahkan oleh sistem (CLR).
– alamat memory yang mereferensi ke obyek akan diupdate oleh sistem

Masalah dengan unmanaged code
– Ketika alamat memori diupdate oleh sistem (CLR), sistem hanya mengetahui referensi memori yang berasal dari managed code.
– ini berarti, referensi apapun ke suatu obyek pada GC heap yang berasal dari unmanaged code tidak akan diupdate, dan program bisa berhenti setelah GC terjadi/bekerja

Apa itu mixed type
– adalah native class atau ref class yang memerlukan anggota obyek (baik melalui deklarasi atau penurunan/inheritance) untuk dialokasikan pada GC heap.

Terminology
ILDASM: Intermediate Language  Dis-assembler
Tool untuk melihat isi assembly dari setiap kelas atau method pada .NET application
ILDASM ada pada mesin/PC yang:
– sudah terinstal Visual Studio
– sudah mendownload .NET SDK

Source control, Github

Dari youtube

Apa itu source control / version control system

– untuk kolaborasi (mengerjakan suatu proyek bersama tim)
– the art of managing changes to information

Terminology

– repository
– merge conflict

Command:

– git
– git clone
– git status (result: n0thing added to commit but untracked files present)
– git add (to add any changes –> ), git add . , git add -A
– git commit -m “message whatever”
– git push (to sync ‘up’ to repository)
– git pull (to sync ‘down’)
– git commit (esc :wq –> escape colon double-you q)

Workflow
– git pull : get everybody updates
– make changes
– git add -A, git commit -m “made blablabla more specific”

Menangani merge conflict
– manually revise
– save, git commit (result –> commit is not possible because you have unmerged files)
– git add -A, git commit, esc :wq
– git push

Personal remark

– sejenis subversion (SVN) repository –> youtube link, academic link

Surface Pro

Lagi dibekelin Surface Pro sama agan baru. Jadi gatel pengen beli Surface Pro 2, hehehe. Satu2 dulu ya pen..

Anyway, mau ngumpulin tips and trick surface pro sebagai berikut.

(ps: pelan2 diupdate 😀 )

Tanpa  keyboard

1. Print screen

 

 

Dengan keyboard

1. Print screen

>> semua screen: Fn + Spacebar

>> window yang aktif saja: Fn + Alt + Spacebar

 

Referensi:

6 Tips for Mastering Microsoft’s Surface Pro

Browser ke browser

Personal assessment

Internet Explorer:
+ Basic, ada di semua windows

Mozilla Firefox:
+ Beragam pilihan plug-in
+ Ada suggestion ttg harmful site
– Terakhir kali mencoba (2007?) berat di memory

Opera
+ Ringan (ketimbang Firefox, teruji -2007)
+ Speed Dial (waktu jaman itu sih keren banget)
+ Bisa dengan mudah membuka accidentally closed tab
– Banyak kurang menyupport fitur2 di website (lupa jenis fiturnya apa)
– Tidak ada suggestion ttg harmful site

Chrome
+ Opsi translate
+ integrated url box & search box
+  Ada suggestion ttg harmful site