Language related articles/id

From Lazarus wiki

Kembali ke Artikel pengembangan kompilator

Hal-hal yang saat ini tidak didukung FPC 2.x.x

Hal-hal yang sebagian didukung FPC 1.9.x

  • Dukungan variant lebih maju atau buggy (detail bugs, dukungan variants kustom kurang, masalah vararray masih dalam pengembangan)
  • saat ini diperlukan dukungan pengujian (ada beberapa pekerjaan yang selesai akhir-akhir ini)
  • Dynarrays, termasuk fungsi Slice nampaknya bermasalah
  • Reintroduce; hanya dilewati bukan diproses (setidaknya kompilator mengatakan tidak)
    • saya sangat yakin bahwa reintroduce telah melewati peringatan dalam Plugwash
  • widestrings. Rutin konversi standar untuk ansistring<>widestring hanya mengubah karakter dalam ascii jangkauan (poin kode 0-127). Rutin dapat diganti melalui procvars tapi ia didesain dalam cara yang menjadi sia-sia untuk setiap charset lokal yang tidak memiliki pemetaan 1:1 ke unicode.

02:56, 1 Jan 2005 (CET)

Variant besar menggunakan paket DECAL telah ditulis baru-baru ini dan bekerja baik. Maka saya pikir masalah variant banyak yang selesai, dan hanya konversi tipikal yang kurang. (yang biasanya dibetulkan dengan mudah jika anda mengirimkan bug dengan contoh sederhana yang bekerja dalam Delphi dan tidak dalam FPC). Akan tetapi beberapa dukungan RTL (pelapis kelas) banyak yang tidak diimplementasikan

Baru dalam 1.9.x (belum ada dalam docs)

  • {$fputype xxx) untuk memilih gaya fpu tertentu atau -Cfxxx pada baris perintah/file cfg
    • semua: soft (belum diimplementasikan)
    • i386: x87, sse, sse2
      • kode terkompilasi dengan sse menggunakan sse untuk melakukan kalkulasi dengan tipe data single. Kode ini hanya berjalan pada Pentium III dan di atasnya dan AthlonXP dan di atasnya
      • kode terkompilasi dengan sse2 menggunakan unit sse untuk melakukan kalkulasi dengan tipe data single dan double. Kode ini hanya berjalan pada PentiumIV dan di atasnya dan Athlon64 dan di atasnya
    • x86-64: sse64
    • powerpc: standar
    • arm: libgcc, fpa, fpa10, fpa11, vfp
  • dukungan properti procedural (properti di luar kelas dengan prosedur normal pengambil/penyetel.
  • Parameter -Fa yang membolehkan anda MENGGUNAKAN sebuah unit di awal unit dalam setiap unit. Baik untuk misalnya mendefinisikan ulang tipe base dll.
  • penggunaan ulang kata kunci mengimpor semua impor unit yang dipakai ulang.
  • reintroduce mengabaikan peringatan mengenai metode tersembunyi
  • Beberapa ekstensi mac, lihat Mode MacPas.
  • system.prefetch(const mem); tergantung pada target prosesor kompilator membuat petunjuk prefetch pada lokasi memori yang diberikan. Pada iA32 ini adalah instruksi sse prefetchnta yang didukung oleh Pentium3/AthlonXP dan di atasnya. Jika set intruksi, dipilih dengan -Cp (pada iA-32, instruksi prefetch dibuat untuk -Oppentium3 dan di atasnya) tidak mendukung instruksi ini, tidak ada kode yang dibuat untuk prefetch.
  • Pemilihan tipe antarmuka: saklar baris perintah -SI dan direktif $interfaces (nilai yang mungkin: corba dan com) membolehkan anda untuk memilih tipe antarmuka yang tidak mempunyai leluhur. Antarmuka dengan turunan leluhur gaya dari leluhurnya mengabaikan tipe antarmuka yang dipilih saat ini.
    • antarmuka gaya COM bekerja seperti antarmuka Delphi: menurunkan secara implisit dari IUnknown dan referensi dijumlahkan.
    • antarmuka gaya CORBA tidak satupun baik referensi dijumlahkan ataupun diturunkan dari IUnknown.

Untuk hal-hal terkait rtl baru silahkan lihat di New in the 1.9.x rtl (not yet in the docs).

Penggunaan SSE

Untuk menentukan set instruksi yang didukung, gunakan is_sse_cpu dan is_sse2_cpu pada unit mmx unit. Karena kode sse biasanya lebih cepat dari kode x87-fpu, direkomendasikan untuk menggunakan saklar ini untuk perhitungan floating point berat. Jika anda ingin aplikasi berjalan pada semua arsitektur fpu, solusi yang mungkin adalah untuk menyimpan kode ke dalam file include dan sertakan file ini ke dalam program anda: sekali dikompilasi misalnya -Cfsse2 dan sekali tanpa itu. Gunakan misalnya variabel is_sse2_cpu untuk memilih kode yang sesuai:

 {$fputype x87}
 procedure calc_x87;
 {$i mymathcode.inc}
 {$fputype sse2}
 procedure calc_sse2;
 {$i mymathcode.inc}
 begin 
   if is_sse2_cpu then
     calc_sse2
   else
     calc_x87;
 end;

Baru dalam 2.0.x

Dukungan UTF-8

Dukungan untuk string utf-8 di dalam '...' sudah ditambahkan. Enkode dapat dipilih dengan mengirimkan -Fcutf8 pada baris perintah, menggunakan direktif $codepage utf8 atau menambahkan tanda utf-8 $ef $bb $bf di awal file. String dengan chars>=$80 diubah ke widestrings dan ditangani secara internal sebagai widestrings. Unicode chars > 65535 tidak bisas disajikan dengan cara ini, ini akan menyebabkan pesan kesalahan.

Baru dalam 2.1.x

Unaligned Keyword

Ketika melakukan typecast variabel sebagai "unaligned" anda memberitahu kompilator bahwa variabel ini harus dibaca atau ditulis ke satu byte sekali waktu. Ini berguna pada sistem yang memerlukan akses data aligned. Saat ini hanya diimplementasikan pada arm cpu.

Ide untuk hal baru

Generics

Modernised Pascal

Mac Local Procedure Parameters

OpenMP support