Dalam
bahasa pemrograman , sistem tipe adalah kumpulan aturan yang menetapkan
properti disebut tipe ke berbagai konstruksi-seperti variabel , ekspresi ,
fungsi atau modul -a program komputer terdiri dari. Tujuan utama dari tipe
sistem adalah untuk mengurangi bug dalam program komputer dengan mendefinisikan
antarmuka antara bagian-bagian berbeda dari sebuah program komputer, dan
kemudian memeriksa bahwa bagian-bagian telah terhubung dengan cara yang
konsisten. Pemeriksaan ini dapat terjadi statis (pada waktu kompilasi ),
dinamis (pada saat run ), atau sebagai kombinasinya.
Contoh
dari sistem tipe sederhana adalah bahwa dari bahasa C . Bagian dari program C
adalah fungsi definisi. Salah satu fungsi dipanggil oleh fungsi lain. Antarmuka
fungsi menyatakan nama fungsi dan daftar nilai yang dilewatkan ke kode fungsi.
Kode dari fungsi invoking menyatakan nama dipanggil, bersama dengan nama-nama
variabel yang memegang nilai-nilai untuk lulus untuk itu. Selama eksekusi,
nilai-nilai yang ditempatkan ke dalam penyimpanan sementara, maka eksekusi
melompat ke kode fungsi dipanggil. Kode Fungsi dipanggil itu mengakses
nilai-nilai dan memanfaatkan mereka. Jika instruksi dalam fungsi ditulis dengan
asumsi menerima nilai integer, tetapi kode panggilan melewati nilai floating-point,
maka hasil yang salah akan dihitung oleh fungsi dipanggil. The C compiler
memeriksa jenis dideklarasikan untuk masing-masing variabel yang dikirim,
terhadap jenis dideklarasikan untuk masing-masing variabel dalam antarmuka
fungsi dipanggil. Jika jenis tidak cocok, compiler melempar kesalahan saat
kompilasi.
Dalam
kedalaman teknis yang lebih besar, tipe-sistem mengaitkan jenis dengan
masing-masing nilai dihitung. Dengan memeriksa aliran nilai-nilai ini, sistem
tipe mencoba untuk memastikan atau membuktikan bahwa tidak ada jenis kesalahan
dapat terjadi. The jenis tertentu sistem yang bersangkutan menentukan apa yang
merupakan kesalahan jenis, tetapi secara umum tujuannya adalah untuk mencegah
operasi mengharapkan jenis tertentu dari nilai yang digunakan dengan
nilai-nilai yang operasi yang tidak masuk akal ( kesalahan logika ); kesalahan
memori akan juga dicegah. Sistem jenis seringkali ditentukan sebagai bagian
dari bahasa pemrograman , dan dibangun ke dalam interpreter dan kompiler bagi
mereka, meskipun sistem jenis bahasa dapat diperpanjang dengan alat opsional
yang melakukan jenis tambahan pemeriksaan menggunakan sintaks jenis asli bahasa
dan tata bahasa.
Sebuah
compiler juga dapat menggunakan jenis statis nilai untuk mengoptimalkan
penyimpanan yang dibutuhkan dan pilihan algoritma untuk operasi pada nilai.
Dalam banyak C kompiler float tipe data , misalnya, diwakili di 32 bit , sesuai
dengan spesifikasi IEEE untuk nomor tunggal-presisi floating point . Sehingga
mereka akan menggunakan floating-titik tertentu operasi mikroprosesor pada
nilai-nilai (penambahan floating-point, perkalian, dll).
Kedalaman
jenis kendala dan cara evaluasi mereka mempengaruhi mengetik bahasa. Sebuah
bahasa pemrograman lebih lanjut dapat mengaitkan operasi dengan berbagai
algoritma beton pada setiap jenis dalam kasus jenis polimorfisme . Ketik teori
adalah studi tentang jenis sistem, meskipun sistem jenis beton bahasa
pemrograman berasal dari isu-isu praktis arsitektur komputer, implementasi
compiler, dan desain bahasa.
Secara
formal, jenis teori studi tipe sistem. Sebuah bahasa pemrograman harus memiliki
kejadian mengetik cek menggunakan sistem tipe apakah saat kompilator atau
runtime, dijelaskan secara manual atau secara otomatis disimpulkan. Seperti
Mark Manasse singkat meletakkannya
Masalah
mendasar ditangani oleh teori tipe adalah untuk memastikan bahwa program
memiliki makna. Masalah mendasar yang disebabkan oleh teori tipe adalah bahwa
program yang berarti mungkin tidak memiliki arti berasal mereka. Pencarian
untuk sistem tipe kaya hasil dari ketegangan ini.
Menetapkan
jenis data, apa yang disebut mengetik, memberi makna ke urutan bit seperti
nilai dalam memori atau beberapa objek seperti variabel . Perangkat keras dari
sebuah komputer tujuan umum tidak dapat membedakan antara misalnya alamat
memori dan kode instruksi , atau antara karakter , suatu bilangan bulat , atau
angka floating-point , karena tidak membuat perbedaan intrinsik antara salah
satu nilai yang mungkin yang urutan bit mungkin berarti. Bergaul urutan bit
dengan tipe menyampaikan bahwa makna ke hardware diprogram untuk membentuk sistem
simbolik yang terdiri dari perangkat keras dan beberapa program yang.
Suatu
program asosiasi setiap nilai dengan setidaknya satu jenis tertentu, tetapi
juga dapat terjadi bahwa satu nilai dikaitkan dengan banyak subtipe . Entitas
lain, seperti benda , modul , saluran komunikasi, dependensi dapat menjadi
terkait dengan tipe. Bahkan jenis bisa menjadi terkait dengan tipe. Sebuah
implementasi dari beberapa jenis sistem bisa dalam teori mengasosiasikan
beberapa identifikasi bernama cara ini: tipe data - tipe nilai, kelas - jenis
obyek, jenis (tipe teori) - jenis tipe, atau metatype. Ini adalah jenis
abstraksi mengetik dapat pergi melalui pada hirarki tingkat yang terkandung
dalam sistem.
Ketika
sebuah bahasa pemrograman berkembang sistem tipe yang lebih rumit, itu
keuntungan aturan yang lebih halus-grained set dari jenis pemeriksaan dasar,
tapi ini datang pada harga ketika kesimpulan jenis (dan properti lainnya)
menjadi diputuskan , dan ketika lebih banyak perhatian harus dibayar oleh
programmer untuk membubuhi keterangan kode atau untuk mempertimbangkan operasi
yang berkaitan dengan komputer dan berfungsi. Hal ini menantang untuk menemukan
sistem tipe ekspresif cukup yang memenuhi semua praktek pemrograman dalam jenis
yang aman cara.
Pembatasan
lebih jenis yang dipaksakan oleh kompilator, semakin kuat mengetik bahasa
pemrograman. Bahasa sangat diketik sering membutuhkan programmer untuk membuat
konversi eksplisit dalam konteks di mana konversi implisit akan menyebabkan
tidak membahayakan. Jenis sistem Pascal telah digambarkan sebagai "terlalu
kuat" karena, misalnya, ukuran array atau string yang merupakan bagian
dari jenis, membuat beberapa tugas pemrograman yang sulit. Haskell juga sangat
diketik tetapi jenisnya adalah otomatis disimpulkan sehingga konversi eksplisit
tidak diperlukan.
Sebuah
kompiler bahasa pemrograman juga dapat menerapkan jenis tergantung atau sistem
efek , yang memungkinkan spesifikasi program yang bahkan lebih untuk
diverifikasi oleh jenis checker. Selain nilai-tipe pasangan sederhana, virtual
"wilayah" kode dikaitkan dengan komponen "efek"
menggambarkan apa yang sedang dilakukan dengan apa, dan memungkinkan misalnya
untuk "membuang" laporan kesalahan. Dengan demikian sistem simbolik
mungkin jenis dan efek sistem, yang endows dengan lebih memeriksa keamanan dari
jenis pemeriksaan saja.
Apakah
otomatis oleh kompilator atau ditentukan oleh programmer, sistem tipe membuat
perilaku program ilegal yang berada di luar aturan-jenis sistem. Keuntungan
yang disediakan oleh sistem tipe programmer yang ditentukan meliputi:
Abstraksi
(atau modularitas) - Jenis memungkinkan programmer untuk berpikir pada tingkat
yang lebih tinggi daripada bit atau byte, tidak mengganggu dengan penerapan
tingkat rendah. Sebagai contoh, programmer dapat mulai memikirkan string
sebagai kumpulan nilai-nilai karakter bukan sebagai array byte belaka. Lebih
tinggi lagi, jenis memungkinkan programmer untuk memikirkan dan mengungkapkan
antarmuka antara dua subsistem setiap berukuran. Hal ini memungkinkan tingkat
lebih lokalisasi sehingga definisi diperlukan untuk interoperabilitas dari
subsistem tetap konsisten ketika dua subsistem berkomunikasi.
Dokumentasi
- Pada tipe lebih ekspresif sistem, jenis dapat berfungsi sebagai bentuk
dokumentasi menjelaskan maksud dari programmer. Misalnya, jika seorang
programmer menyatakan fungsi sebagai kembali tipe timestamp, ini
mendokumentasikan fungsi ketika jenis timestamp dapat secara eksplisit
dinyatakan lebih dalam kode menjadi tipe integer.
Keuntungan
yang disediakan oleh jenis sistem compiler-ditentukan meliputi:
Optimization
- Static tipe pengecekan dapat memberikan informasi waktu kompilasi berguna.
Sebagai contoh, jika tipe mensyaratkan bahwa nilai harus menyelaraskan di
memori pada kelipatan dari empat byte, compiler mungkin dapat menggunakan
instruksi mesin yang lebih efisien.
Keselamatan
- Sebuah sistem tipe memungkinkan compiler untuk mendeteksi kode bermakna atau
mungkin tidak valid. Sebagai contoh, kita dapat mengidentifikasi ekspresi 3 /
"Hello, World" sebagai tidak sah, ketika aturan tidak menentukan
bagaimana membagi suatu bilangan bulat oleh tali . Mengetik kuat menawarkan
lebih aman, tetapi tidak dapat menjamin lengkap keselamatan jenis .
Keselamatan
jenis kontribusi untuk memprogram kebenaran , tetapi hanya dapat menjamin kebenaran
dengan mengorbankan membuat jenis memeriksa sendiri merupakan masalah
diputuskan . Dalam sistem tipe dengan tipe otomatis memeriksa program dapat
membuktikan untuk menjalankan salah belum secara aman diketik, dan tidak
menghasilkan kesalahan kompilator. Pembagian dengan nol adalah operasi yang
tidak aman dan tidak benar, tetapi jenis checker berjalan hanya pada waktu
kompilasi tidak memindai pembagian dengan nol dalam kebanyakan bahasa
pemrograman, dan kemudian dibiarkan sebagai error runtime . Untuk membuktikan
adanya cacat ini lebih umum dari yang jenis-, jenis lain dari metode formal ,
yang dikenal sebagai Program analisis , yang umum digunakan. Selain pengujian
perangkat lunak adalah empiris metode untuk menemukan kesalahan yang jenis
checker tidak dapat mendeteksi.
Tidak ada komentar:
Posting Komentar