Senin, 30 Desember 2013

Jenis sistem


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