Ini ialah arahan stalin yang boleh dijalankan dalam penyedia pengehosan percuma OnWorks menggunakan salah satu daripada berbilang stesen kerja dalam talian percuma kami seperti Ubuntu Online, Fedora Online, emulator dalam talian Windows atau emulator dalam talian MAC OS.
JADUAL:
NAMA
stalin - Pengkompil pengoptimuman global untuk Skim
SINOPSIS
Stalin [-turun]
[-I sertakan-direktori]*
[[-s|-x|-q|-t]]
[[-layan-semua-simbol-sebagai-luaran|
-jangan-perlakukan-semua-simbol-sebagai-luaran]]
[[-index-allocated-string-types-by-expression|
-do-not-index-allocated-string-types-by-expression]]
[[-jenis-struktur-malar-indeks-mengikut-jenis-slot|
-jangan-indeks-struktur-malar-jenis-mengikut-jenis-slot]]
[[-indeks-struktur-malar-jenis-dengan-ungkapan|
-jangan-indeks-struktur-malar-jenis-dengan-ungkapan]]
[[-jenis-struktur-diperuntukkan-indeks-mengikut-jenis-slot|
-jangan-indeks-diperuntukkan-jenis-struktur-mengikut-jenis-slot]]
[[-indeks-diperuntukkan-jenis-jenis-dengan-ungkapan|
-jangan-indeks-diperuntukkan-jenis-jenis-dengan-ungkapan]]
[[-index-constant-headed-vector-types-by-element-types|
-jangan-indeks-constant-headed-vector-types-by-element-type]]
[[-indeks-constant-headed-vector-types-by-expression|
-jangan-indeks-constant-headed-vector-types-by-expression]]
[[-index-allocated-headed-vector-types-by-element-type|
-do-not-index-allocated-headed-vector-types-by-element-types]]
[[-index-allocated-headed-vector-types-by-expression|
-do-not-index-allocated-headed-vector-types-by-expression]]
[[-index-constant-nonheaded-vector-types-by-element-type|
-jangan-indeks-constant-nonheaded-vector-types-by-element-type]]
[[-index-constant-nonheaded-vector-types-by-expression|
-jangan-indeks-constant-nonheaded-vector-types-by-expression]]
[[-index-allocated-nonheaded-vector-types-by-element-types|
-do-not-index-allocated-nonheaded-vector-types-by-element-type]]
[[-index-allocated-nonheaded-vector-types-by-expression|
-do-not-index-allocated-nonheaded-vector-types-by-expression]]
[[-tiada-had-saiz-klon|
-had-saiz-klon bilangan-ungkapan]]
[-berpecah-walaupun-tidak-melebar]
[[-tukar-sepenuhnya-ke-CPS|
-tiada-melarikan-sambungan]]
[-daripada]
[-Ob] [-Om] [-Dalam] [- Atau] [-Ot]
[-d0] [-d1] [-d2] [-d3] [-d4] [-d5] [-d6] [-d7]
[-statistik-penukaran-penutupan]
[-dc] [-dC] [-dH] [-dg] [- dh]
[-d]
[-seni bina nama]
[[-garis dasar|
-konvensional|
-ringan]]
[[-segera-rata|
-tidak langsung-rata|
-paparan segera|
-paparan-tidak langsung|
-berkait]]
[[-menjajarkan-rentetan|-jangan-selaraskan-rentetan]]
[-daripada] [-df] [-dG] [-du] [-dI] [-dp] [-dP]
[-d] [-dS] [-Tmk]
[-pengoptimuman-panggilan-tiada-ekor]
[-db] [-c] [-k]
[-cc C-compiler]
[-copt C-penyusun-pilihan]*
[nama jalan]
Menyusun fail sumber Skim nama jalan.sc dahulu ke dalam fail C nama jalan.c dan kemudian ke
imej boleh laksana nama jalan. Juga menghasilkan fail pangkalan data nama jalan.db. The nama jalan
hujah diperlukan melainkan -turun dinyatakan.
DESCRIPTION
Stalin ialah penyusun yang sangat cekap untuk Skim. Ia direka untuk digunakan bukan sebagai a
alat pembangunan tetapi sebaliknya sebagai satu cara untuk menjana imej boleh laku yang cekap sama ada untuk
penghantaran permohonan atau untuk menjalankan penyelidikan pengeluaran. Berbeza dengan Skim tradisional
pelaksanaan, Stalin ialah pengkompil mod kelompok. Tiada READ-EVAL-PRINT interaktif
gelung. Stalin menyusun satu fail sumber Skim ke dalam imej boleh laku (secara tidak langsung
melalui C). Menjalankan imej itu mempunyai semantik yang setara dengan memuatkan fail sumber Skim
menjadi jurubahasa Skim dara dan kemudian menamatkan pelaksanaannya. Batasan utama
ialah tidak mungkin untuk MEMUAT atau EVAL ungkapan atau definisi prosedur baharu ke dalam a
menjalankan program selepas penyusunan. Sebagai balasan untuk had ini, Stalin melakukan banyak perkara
analisis masa kompilasi global program sumber di bawah andaian dunia tertutup ini dan
menghasilkan imej boleh laku yang kecil, berdiri sendiri dan pantas.
Stalin menggabungkan pelbagai strategi untuk menghasilkan kod yang cekap. Antaranya, Stalin
adakah analisis jenis statik global menggunakan sistem jenis lembut yang menyokong kesatuan rekursif
jenis. Stalin boleh menentukan jenis sempit atau monomorfik untuk setiap kod sumber
ungkapan dalam program Skim sewenang-wenangnya tanpa pengisytiharan jenis. Ini membolehkan Stalin
mengurangkan, atau selalunya menghapuskan, pemeriksaan jenis masa jalan dan penghantaran. Stalin juga melakukan
pemilihan perwakilan peringkat atas dasar per-ungkapan. Ini membolehkan penggunaan unboxed
perwakilan data mesin asas untuk semua jenis monomorfik yang menghasilkan sangat tinggi-
kod angka prestasi. Stalin juga melakukan analisis statik sepanjang hayat global untuk semua
data yang diperuntukkan. Ini membolehkan banyak storan yang diperuntukkan sementara dituntut semula tanpa
kutipan sampah. Akhirnya, Stalin mempunyai strategi yang sangat cekap untuk menyusun penutupan.
Bersama-sama, teknik kompilasi ini secara sinergi menghasilkan kod objek yang cekap.
Tambahan pula, imej boleh laku yang dibuat oleh Stalin tidak mengandungi (takrif pengguna atau
perpustakaan) prosedur yang tidak dipanggil, pembolehubah dan parameter yang tidak digunakan, dan
ungkapan yang tidak dapat dicapai. Ini menggalakkan gaya pengaturcaraan di mana satu
mencipta dan menggunakan prosedur perpustakaan yang sangat umum tanpa rasa takut bahawa imej boleh laku akan
mengalami kembung kod.
PILIHAN
-turun
Mencetak versi Stalin dan keluar serta-merta.
Pilihan berikut mengawal prapemprosesan:
-I Menentukan direktori untuk mencari Skim termasuk fail. Pilihan ini boleh
diulang untuk menentukan berbilang direktori. Stalin mula-mula mencari fail termasuk
dalam direktori semasa, kemudian setiap direktori yang dinyatakan dalam arahan
baris, dan akhirnya dalam pemasangan lalai termasuk direktori.
-s Termasuk makro daripada pustaka keserasian Skim->C. Pada masa ini, ini
mentakrifkan sintaks WHEN dan UNLESS.
-x Termasuk makro daripada perpustakaan Xlib dan GL. Pada masa ini, ini mentakrifkan
Sintaks FUNGSI ASING dan DEFINISI ASING. Ini bermakna -s.
-q Termasuk makro daripada perpustakaan QobiScheme. Pada masa ini, ini mentakrifkan
Sintaks DEFINE-STRUCTURE, antara lain. Ini bermakna -x.
-t Termasuk makro yang diperlukan untuk menyusun Stalin dengan dirinya sendiri. Ini bermakna -q.
Pilihan berikut mengawal ketepatan analisis aliran:
-layan-semua-simbol-sebagai-luaran
Semasa analisis aliran, hasilkan satu simbol luaran abstrak yang dikongsi
antara semua simbol.
-jangan-perlakukan-semua-simbol-sebagai-luaran
Semasa analisis aliran, apabila memproses ungkapan malar yang mengandungi simbol,
menjana simbol dalaman abstrak baharu untuk setiap pemalar simbol yang berbeza dalam
program. Ini adalah lalai.
-index-allocated-string-types-by-expression
Semasa analisis aliran, apabila memproses ungkapan panggilan prosedur yang boleh memperuntukkan
rentetan, jana rentetan abstrak baharu untuk setiap ungkapan tersebut. Ini adalah
lalai.
-do-not-index-allocated-string-types-by-expression
Semasa analisis aliran, apabila memproses ungkapan panggilan prosedur yang boleh memperuntukkan
rentetan, menjana rentetan abstrak tunggal yang dikongsi antara semua itu
ungkapan.
Ambil perhatian bahawa tiada versi pilihan di atas untuk jenis elemen kerana elemen
jenis rentetan sentiasa char. Tambahan pula, tiada versi pilihan di atas
untuk ungkapan malar kerana sentiasa ada hanya rentetan pemalar abstrak tunggal.
-jenis-struktur-malar-indeks-mengikut-jenis-slot
Semasa analisis aliran, apabila memproses ungkapan malar yang mengandungi struktur,
menjana struktur abstrak baharu untuk setiap set jenis slot yang berpotensi untuk itu
struktur.
-jangan-indeks-struktur-malar-jenis-mengikut-jenis-slot
Semasa analisis aliran, apabila memproses ungkapan malar yang mengandungi struktur,
menjana struktur abstrak tunggal yang dikongsi di antara semua set potensi
jenis slot untuk struktur itu. Ini adalah lalai.
-indeks-struktur-malar-jenis-dengan-ungkapan
Semasa analisis aliran, apabila memproses ungkapan malar yang mengandungi struktur,
menjana struktur abstrak baharu untuk setiap ungkapan tersebut. Ini adalah lalai.
-jangan-indeks-struktur-malar-jenis-dengan-ungkapan
Semasa analisis aliran, apabila memproses ungkapan malar yang mengandungi struktur,
menjana struktur abstrak tunggal yang dikongsi di antara semua ungkapan tersebut.
-jenis-struktur-diperuntukkan-indeks-mengikut-jenis-slot
Semasa analisis aliran, apabila memproses ungkapan panggilan prosedur yang boleh memperuntukkan
struktur, menjana struktur abstrak baharu untuk setiap set jenis slot yang berpotensi
untuk struktur itu.
-jangan-indeks-diperuntukkan-jenis-struktur-mengikut-jenis-slot
Semasa analisis aliran, apabila memproses ungkapan panggilan prosedur yang boleh memperuntukkan
struktur, menjana satu struktur abstrak yang dikongsi antara semua set
jenis slot yang berpotensi untuk struktur itu. Ini adalah lalai.
-indeks-diperuntukkan-jenis-jenis-dengan-ungkapan
Semasa analisis aliran, apabila memproses ungkapan panggilan prosedur yang boleh memperuntukkan
struktur, menjana struktur abstrak baharu untuk setiap ungkapan tersebut. Ini adalah
lalai.
-jangan-indeks-diperuntukkan-jenis-jenis-dengan-ungkapan
Semasa analisis aliran, apabila memproses ungkapan panggilan prosedur yang boleh memperuntukkan
struktur, menjana satu struktur abstrak yang dikongsi di kalangan semua itu
ungkapan.
Ambil perhatian bahawa, pada masa ini, pasangan adalah satu-satunya jenis struktur yang boleh muncul dalam pemalar
ungkapan. Ini mungkin berubah pada masa hadapan, jika pembaca diperluaskan untuk menyokong yang lain
jenis struktur.
-index-constant-headed-vector-types-by-element-types
Semasa analisis aliran, apabila memproses ungkapan malar yang mengandungi kepala
vektor, jana vektor berkepala abstrak baharu untuk setiap jenis elemen yang berpotensi untuk
vektor berkepala itu.
-jangan-indeks-constant-headed-vector-types-by-element-type
Semasa analisis aliran, apabila memproses ungkapan malar yang mengandungi kepala
vektor, menjana satu vektor berkepala abstrak yang dikongsi di kalangan semua
jenis elemen berpotensi untuk vektor berkepala itu. Ini adalah lalai.
-indeks-constant-headed-vector-types-by-expression
Semasa analisis aliran, apabila memproses ungkapan malar yang mengandungi kepala
vektor, menjana vektor berkepala abstrak baharu untuk setiap ungkapan tersebut. Ini adalah
lalai.
-jangan-indeks-constant-headed-vector-types-by-expression
Semasa analisis aliran, apabila memproses ungkapan malar yang mengandungi kepala
vektor, menjana satu vektor berkepala abstrak yang dikongsi antara semua itu
ungkapan.
-index-allocated-headed-vector-types-by-element-type
Semasa analisis aliran, apabila memproses ungkapan panggilan prosedur yang boleh memperuntukkan
vektor berkepala, menjana vektor berkepala abstrak baharu untuk setiap elemen berpotensi
taip untuk vektor berkepala itu.
-do-not-index-allocated-headed-vector-types-by-element-types
Semasa analisis aliran, apabila memproses ungkapan panggilan prosedur yang boleh memperuntukkan
vektor berkepala, menjana satu vektor berkepala abstrak yang dikongsi di kalangan semua
jenis elemen berpotensi untuk vektor berkepala itu. Ini adalah lalai.
-index-allocated-headed-vector-types-by-expression
Semasa analisis aliran, apabila memproses ungkapan panggilan prosedur yang boleh memperuntukkan
vektor berkepala, menjana vektor berkepala abstrak baharu untuk setiap ungkapan tersebut.
Ini adalah lalai.
-do-not-index-allocated-headed-vector-types-by-expression
Semasa analisis aliran, apabila memproses ungkapan panggilan prosedur yang boleh memperuntukkan
vektor berkepala, menjana satu vektor berkepala abstrak yang dikongsi di kalangan semua
ungkapan sedemikian.
-index-constant-nonheaded-vector-types-by-element-type
Semasa analisis aliran, apabila memproses ungkapan malar yang mengandungi tanpa kepala
vektor, jana vektor tanpa kepala abstrak baharu untuk setiap jenis elemen yang berpotensi
untuk vektor bukan kepala itu.
-jangan-indeks-constant-nonheaded-vector-types-by-element-type
Semasa analisis aliran, apabila memproses ungkapan malar yang mengandungi tanpa kepala
vektor, menjana satu vektor tanpa kepala abstrak yang dikongsi di kalangan semua
jenis elemen berpotensi untuk vektor bukan kepala itu. Ini adalah lalai.
-index-constant-nonheaded-vector-types-by-expression
Semasa analisis aliran, apabila memproses ungkapan malar yang mengandungi tanpa kepala
vektor, menjana vektor tanpa kepala abstrak baharu untuk setiap ungkapan tersebut. ini
adalah lalai.
-jangan-indeks-constant-nonheaded-vector-types-by-expression
Semasa analisis aliran, apabila memproses ungkapan malar yang mengandungi tanpa kepala
vektor, menjana satu vektor tanpa kepala abstrak yang dikongsi di kalangan semua itu
ungkapan.
-index-allocated-nonheaded-vector-types-by-element-types
Semasa analisis aliran, apabila memproses ungkapan panggilan prosedur yang boleh memperuntukkan
vektor tanpa kepala, menjana vektor tanpa kepala abstrak baharu untuk setiap potensi
jenis elemen untuk vektor tanpa kepala itu.
-do-not-index-allocated-nonheaded-vector-types-by-element-type
Semasa analisis aliran, apabila memproses ungkapan panggilan prosedur yang boleh memperuntukkan
vektor tanpa kepala, menjana satu vektor tanpa kepala abstrak yang dikongsi sesama
semua jenis elemen yang berpotensi untuk vektor tanpa kepala itu. Ini adalah lalai.
-index-allocated-nonheaded-vector-types-by-expression
Semasa analisis aliran, apabila memproses ungkapan panggilan prosedur yang boleh memperuntukkan
vektor tanpa kepala, hasilkan vektor tanpa kepala abstrak baharu untuk setiap vektor tersebut
ungkapan. Ini adalah lalai.
-do-not-index-allocated-nonheaded-vector-types-by-expression
Semasa analisis aliran, apabila memproses ungkapan panggilan prosedur yang boleh memperuntukkan
vektor tanpa kepala, menjana satu vektor tanpa kepala abstrak yang dikongsi sesama
semua ungkapan tersebut.
Ambil perhatian bahawa, pada masa ini, ungkapan malar tidak boleh mengandungi vektor tanpa kepala dan tanpa kepala
vektor tidak pernah diperuntukkan oleh sebarang ungkapan panggilan prosedur. ARGV adalah satu-satunya yang tidak berkepala
vektor. Pilihan ini disertakan hanya untuk kesempurnaan dan sekiranya sambungan akan datang kepada
bahasa membenarkan pemalar vektor tanpa kepala dan prosedur yang memperuntukkan tanpa kepala
vektor.
-tiada-had-saiz-klon
Benarkan polivarian tanpa had, iaitu membuat salinan prosedur dalam sebarang saiz.
-had-saiz-klon
Nyatakan had polivarian, iaitu membuat salinan prosedur yang mempunyai kurang daripada
banyak ungkapan ini. Mestilah integer bukan negatif. Lalai kepada 80. Nyatakan 0
untuk melumpuhkan polivarians.
-berpecah-walaupun-tidak-melebar
Biasanya, polivarian akan membuat salinan prosedur hanya jika ia dipanggil dengan
hujah pelbagai jenis. Tentukan pilihan ini untuk membuat salinan prosedur
walaupun apabila mereka dipanggil dengan hujah jenis yang sama. Ini akan membolehkan mereka
berada dalam barisan.
-tukar-sepenuhnya-ke-CPS
Biasanya, penukaran CPS ringan digunakan, menukar hanya ungkapan tersebut
dan prosedur yang diperlukan untuk menyokong kesinambungan melarikan diri. Apabila pilihan ini
ditentukan, program ini ditukar sepenuhnya kepada CPS.
-tiada-melarikan-sambungan
Biasanya, kesinambungan penuh disokong. Apabila pilihan ini ditentukan,
hanya sambungan yang disokong adalah yang tidak boleh dipanggil selepas
prosedur yang mencipta kesinambungan telah kembali.
-daripada Biasanya, selepas analisis aliran, Stalin memaksa setiap jenis set untuk mempunyai paling banyak satu
ahli jenis struktur bagi nama tertentu, paling banyak satu ahli jenis vektor berkepala, dan
paling banyak satu ahli jenis vektor bukan kepala. Pilihan ini melumpuhkan ini, membenarkan jenis
ditetapkan untuk mempunyai berbilang ahli jenis struktur bagi nama tertentu, berbilang tajuk-
ahli jenis vektor, dan berbilang ahli jenis vektor bukan kepala. Kadang-kadang membuahkan hasil
kod yang lebih cekap dan kadangkala menghasilkan kod yang kurang cekap.
Pilihan berikut mengawal jumlah kod semakan ralat masa jalan yang dihasilkan. Nota
bahawa, bebas daripada tetapan pilihan ini, Stalin akan sentiasa menjana kod itu
mematuhi semantik bahasa Skim untuk program yang betul. Pilihan ini sahaja
mengawal tahap keselamatan, iaitu tahap pemeriksaan ralat masa jalan untuk tidak betul
program.
-Ob Menentukan bahawa kod untuk menyemak vektor keluar-terikat atau subskrip rentetan adalah
ditindas. Jika tidak dinyatakan, ralat masa jalan akan dikeluarkan jika vektor atau
subskrip rentetan adalah di luar batasan. Jika dinyatakan, tingkah laku program yang
mempunyai vektor luar terikat atau subskrip rentetan tidak ditentukan.
-Om Menentukan bahawa kod untuk menyemak ralat di luar ingatan akan ditindas. Jika tidak
ditentukan, ralat masa jalan akan dikeluarkan jika ingatan yang mencukupi tidak dapat
diperuntukkan. Jika dinyatakan, tingkah laku program yang kehabisan ingatan ialah
tidak ditentukan.
-Dalam Menentukan bahawa kod untuk menyemak limpahan integer yang tepat akan ditindas. Jika
tidak dinyatakan, ralat masa jalan akan dikeluarkan pada limpahan integer yang tepat. Jika
ditentukan, gelagat atur cara yang menyebabkan limpahan integer tepat tidak ditentukan.
Pada masa ini, Stalin tidak tahu bagaimana untuk menjana kod semakan limpahan jadi ini
pilihan mesti dinyatakan.
- Atau Menentukan bahawa kod untuk menyemak pelbagai ralat sistem fail masa jalan adalah
ditindas. Jika tidak dinyatakan, ralat masa jalan akan dikeluarkan apabila ralat tidak berjaya
percubaan dibuat untuk membuka atau menutup fail. Jika dinyatakan, tingkah laku program
yang membuat percubaan capaian fail yang tidak berjaya itu tidak ditentukan.
-Ot Menentukan kod itu untuk menyemak bahawa prosedur primitif diluluskan argumen bagi
jenis yang betul ditindas. Jika tidak dinyatakan, ralat masa jalan akan dikeluarkan jika a
prosedur primitif dipanggil dengan hujah jenis yang salah. Jika dinyatakan,
tingkah laku program yang memanggil prosedur primitif dengan data jenis yang salah ialah
tidak ditentukan.
Pilihan berikut mengawal verbositi pengkompil:
-d0 Menghasilkan jejak belakang masa kompilasi atas ralat pengkompil.
-d1 Menghasilkan ulasan semasa penyusunan menerangkan perkara yang dilakukan oleh pengkompil.
-d2 Menghasilkan penyenaraian berhias program sumber selepas analisis aliran.
-d3 Menghasilkan penyenaraian berhias program sumber selepas jenis yang setara telah
bergabung.
-d4 Menghasilkan graf panggilan program sumber.
-d5 Menghasilkan perihalan semua prosedur asli bukan remeh yang dihasilkan.
-d6 Menghasilkan senarai semua ungkapan dan penutupan yang memperuntukkan storan bersama a
perihalan tempat storan itu diperuntukkan.
-d7 Menghasilkan jejak proses penukaran penutupan yang ringan.
-statistik-penukaran-penutupan
Menghasilkan ringkasan statistik penutupan-penukaran. Ini adalah secara automatik
diproses oleh program bcl-to-latex.sc yang dikendalikan oleh bcl-tanda aras skrip
(kedua-duanya dalam /usr/local/stalin/penanda aras direktori) untuk menghasilkan jadual II, III, dan
IV, daripada kertas itu Diarah Aliran Ringan Penutupan Penukaran.
Pilihan berikut mengawal strategi pengurusan storan yang digunakan oleh kod yang disusun:
-dc Melumpuhkan penggunaan alloca(3). Biasanya, pengkompil akan menggunakan alloca(3) kepada
peruntukkan pada timbunan panggilan apabila boleh.
-dC Melumpuhkan penggunaan pemungut sampah konservatif Boehm. Biasanya, yang
pengkompil akan menggunakan pengumpul Boehm untuk memperuntukkan data yang hayatnya tidak diketahui
menjadi pendek. Ambil perhatian bahawa pengkompil masih akan menggunakan pengumpul Boehm untuk beberapa
data jika ia tidak dapat memperuntukkan data itu pada timbunan atau pada rantau.
-dH Melumpuhkan penggunaan wilayah untuk memperuntukkan data.
-dg Hasilkan kod untuk menghasilkan mesej diagnostik apabila segmen rantau diperuntukkan dan
dibebaskan.
- dh Melumpuhkan penggunaan kawasan boleh dikembangkan dan sebaliknya menggunakan kawasan bersaiz tetap.
Pilihan berikut penjanaan kod kawalan:
-d Menentukan bahawa nyata tidak tepat diwakili sebagai C ganda. Biasanya, real tidak tepat
diwakili sebagai C terapung.
-seni bina
Nyatakan seni bina untuk menjana kod. Lalai adalah untuk menjana
kod untuk apa sahaja seni bina pengkompil dijalankan. Pada masa ini, yang diketahui
seni bina ialah IA32, IA32-align-double, SPARC, SPARCv9, SPARC64, MIPS, Alpha,
ARM, M68K, PowerPC dan S390.
-garis dasar
Jangan lakukan penukaran penutupan ringan. Penutupan dibuat untuk semua
prosedur. Pengguna biasanya tidak akan menentukan pilihan ini. Ia hanya bertujuan
untuk mengukur keberkesanan penukaran penutupan ringan. Ia digunakan oleh
bcl-tanda aras skrip (dalam /usr/local/stalin/penanda aras direktori) untuk menghasilkan
jadual II, III, dan IV, kertas itu Diarah Aliran Ringan Penutupan Penukaran.
-konvensional
Lakukan versi ringkas penukaran penutupan ringan yang tidak bergantung
mengenai analisis antara prosedur. Percubaan untuk meniru apa yang dilakukan oleh penyusun `konvensional'
(apa pun itu). Pengguna biasanya tidak akan menentukan pilihan ini. Ia hanya
bertujuan untuk mengukur keberkesanan penukaran penutupan ringan. Ia adalah
digunakan oleh bcl-tanda aras skrip (dalam /usr/local/stalin/penanda aras direktori) kepada
menghasilkan jadual II, III, dan IV kertas itu Diarah Aliran Ringan Penutupan
Penukaran.
-ringan
Lakukan penukaran penutupan ringan. Ini adalah lalai.
-segera-rata
Hasilkan kod menggunakan penutupan rata serta-merta. Ini belum (belum) dilaksanakan.
-tidak langsung-rata
Hasilkan kod menggunakan penutupan rata tidak langsung. Ini belum (belum) dilaksanakan.
-paparan segera
Hasilkan kod menggunakan penutupan paparan serta-merta.
-paparan-tidak langsung
Hasilkan kod menggunakan penutupan paparan tidak langsung. Ini belum (belum) dilaksanakan.
-berkait
Hasilkan kod menggunakan penutupan terpaut. Ini adalah lalai.
-menjajarkan-rentetan
Jajarkan semua rentetan kepada penjajaran fixnum. Ini tidak akan berfungsi apabila rentetan ada
dikembalikan oleh prosedur asing yang tidak sejajar dengan penjajaran fixnum. Ia akan
juga tidak berfungsi apabila ARGV digunakan, kerana rentetan tersebut juga tidak sejajar dengan fixnum
penjajaran. Ini adalah lalai.
-jangan-selaraskan-rentetan
Jangan selaraskan rentetan kepada penjajaran fixnum. Ini mesti dinyatakan apabila rentetan
dikembalikan oleh prosedur asing tidak sejajar dengan penjajaran fixnum.
-daripada Mendayakan pengoptimuman pengkompil yang dikenali sebagai EQ? pemalsuan. Kadang-kadang menghasilkan lebih banyak
kod yang cekap dan kadangkala menghasilkan kod yang kurang cekap.
-df Melumpuhkan pengoptimuman pengkompil yang dikenali sebagai pemalsuan.
-dG Lulus hujah menggunakan pembolehubah global dan bukannya parameter apabila boleh.
-du Hasilkan pernyataan if dan bukannya tukar pernyataan untuk penghantaran.
-dI Membolehkan penggunaan struktur segera.
-dp Membolehkan promosi perwakilan. Menggalakkan beberapa jenis set daripada diperah kepada
squished atau squished kepada umum jika ini akan mengurangkan jumlah run-time
pemaksaan perwakilan bercabang atau menghantar. Kadang-kadang menghasilkan lebih cekap
kod dan kadangkala menghasilkan kod yang kurang cekap.
-dP Membolehkan penyebaran salinan. Kadangkala menghasilkan kod yang lebih cekap dan kadangkala
menghasilkan kod yang kurang cekap.
-d Melumpuhkan pengoptimuman pengkompil yang dikenali sebagai memerah.
-dS Melumpuhkan pengoptimuman pengkompil yang dikenali sebagai squishing.
-Tmk Membolehkan penjanaan kod yang berfungsi dengan Treadmarks distributed-shared-memory
pakej. Pada masa ini pilihan ini tidak dilaksanakan sepenuhnya dan tidak diketahui berfungsi.
-pengoptimuman-panggilan-tiada-ekor
Stalin kini menjana kod yang betul rekursif ekor, secara lalai, dalam semua kecuali
keadaan yang paling jarang berlaku. Dan ia boleh dipaksa untuk menghasilkan ekor yang betul-
kod rekursif dalam semua keadaan dengan pilihan yang sesuai. Beberapa ekor-rekursif
panggilan, yang mana tapak panggilan berada dalam baris dalam sasaran, diterjemahkan sebagai C
goto dan sentiasa menghasilkan kod rekursif ekor dengan betul. Selebihnya ialah
diterjemahkan sebagai panggilan fungsi C dalam kedudukan ekor. Ini bergantung pada pengkompil C untuk
melaksanakan pengoptimuman panggilan ekor. gcc(1) versi 2.96 dan 3.0.2 (dan mungkin yang lain
versi) melakukan pengoptimuman panggilan ekor pada IA32 (dan mungkin seni bina lain)
apabila -foptimize-sibling-panggilan dinyatakan. (-O2 bererti -foptimize-adik-
panggilan.) gcc(1) hanya melakukan pengoptimuman panggilan ekor pada IA32 secara tertentu
keadaan. Pertama, sasaran dan tapak panggilan mesti mempunyai serasi
tandatangan. Untuk menjamin tandatangan yang serasi, Stalin menyerahkan parameter kepada C
fungsi yang merupakan sebahagian daripada gelung rekursif ekor dalam pembolehubah global. Kedua, yang
sasaran tidak boleh diisytiharkan __atribut__ ((noreturn)). Oleh itu Stalin tidak akan
menjana a __atribut__ ((noreturn)) pengisytiharan untuk fungsi yang merupakan sebahagian daripada a
gelung ekor-rekursif walaupun Stalin tahu bahawa ia tidak pernah kembali. Ketiga, yang
fungsi yang mengandungi tapak panggilan tidak boleh memanggil alloca(3). gcc(1) tidak mengalir
analisis. Sebarang panggilan ke alloca(3) dalam fungsi yang mengandungi tapak panggilan, no
tidak kira sama ada data yang diperuntukkan terlepas, akan melumpuhkan pengoptimuman panggilan ekor.
Oleh itu Stalin melumpuhkan peruntukan tindanan data dalam mana-mana prosedur dalam baris dalam a
prosedur yang merupakan sebahagian daripada gelung rekursif ekor. Akhirnya, tapak panggilan tidak boleh
mengandungi kawasan reentrant kerana kawasan reentrant dibebaskan apabila prosedur keluar
dan panggilan ekor akan memerlukan penambakan kawasan campur tangan. Oleh itu Stalin
melumpuhkan peruntukan data pada rantau yang masuk semula dalam mana-mana prosedur yang merupakan sebahagian daripada
gelung rekursif ekor. Melumpuhkan pengoptimuman ini memerlukan kos untuk faedah
untuk mencapai pengoptimuman panggilan ekor. Jika pengkompil C anda tidak melakukan panggilan ekor
pengoptimuman maka anda mungkin ingin tidak membayar kos tersebut. The -pengoptimuman-panggilan-tiada-ekor
pilihan menyebabkan Stalin tidak mengambil empat langkah di atas untuk menjana kod
yang gcc(1) akan melakukan pengoptimuman panggilan ekor. Walaupun menyatakan ini
pilihan, Stalin masih menterjemah panggilan, di mana tapak panggilan adalah sebaris dalam
sasaran, seperti yang dinyatakan oleh C goto. Terdapat tiga kejadian yang jarang berlaku yang masih boleh digagalkan
rekursi ekor yang betul. Pertama, jika anda nyatakan -dC anda boleh memaksa Stalin untuk menggunakan stack
atau peruntukan wilayah walaupun dalam kitaran panggilan ekor. Anda boleh mengelakkan ini dengan tidak
menentukan -dC. Kedua, gcc(1) tidak akan melakukan pengoptimuman panggilan ekor apabila
fungsi yang mengandungi tapak panggilan digunakan unary & pada pembolehubah setempat. gcc(1) tidak
tiada analisis aliran. Sebarang aplikasi unary & kepada pembolehubah tempatan dalam fungsi
yang mengandungi tapak panggilan, tidak kira sama ada penuding terlepas, akan melumpuhkan ekor-
pengoptimuman panggilan. Stalin boleh menjana penggunaan unary & apabila anda nyatakan -daripada
atau jangan nyatakan -df. Anda boleh mengelakkan kes sedemikian dengan menyatakan -df dan tidak
menentukan -daripada. Akhirnya, gcc(1) tidak akan melakukan pengoptimuman panggilan ekor apabila
fungsi yang mengandungi panggilan tapak panggilan setjmp(3). gcc(1) tidak melakukan analisis aliran.
Sebarang panggilan ke setjmp(3) dalam fungsi yang mengandungi tapak panggilan, tidak kira sama ada
yang jmp_buf melarikan diri, akan melumpuhkan pengoptimuman panggilan ekor. Stalin menterjemah
panggilan tertentu ke panggilan-dengan-sambungan-semasa sebagai panggilan kepada setjmp(3). Anda boleh
memaksa Stalin untuk tidak berbuat demikian dengan menyatakan -tukar-sepenuhnya-ke-CPS. Stalin akan
menjana amaran dalam kes pertama dan ketiga, iaitu, apabila tail-call
pengoptimuman digagalkan oleh peruntukan wilayah masuk semula atau panggilan ke alloca(3) or
setjmp(3). Jadi anda boleh menangguhkan menyatakan -tukar-sepenuhnya-ke-CPS atau menahan diri daripada
menentukan -dC sehingga anda melihat amaran sedemikian. Tiada amaran sedemikian dijana, walau bagaimanapun,
apabila menggunakan pengoptimuman panggilan ekor unary & foil. Jadi anda mungkin mahu sentiasa
nyatakan -df dan elakkan daripada menyatakan -daripada jika anda inginkan program anda
rekursif ekor dengan betul.
Pilihan berikut mengawal fasa kompilasi C:
-db Melumpuhkan pengeluaran fail pangkalan data.
-c Menentukan bahawa pengkompil C tidak boleh dipanggil selepas menjana kod C.
Biasanya, pengkompil C dipanggil selepas menjana kod C untuk menghasilkan kod
imej boleh laku. Ini bermakna -k.
-k Menentukan bahawa fail C yang dihasilkan tidak akan dipadamkan. Biasanya, yang dihasilkan
Fail C dipadamkan selepas ia disusun.
-cc Menentukan pengkompil C untuk digunakan. Lalai kepada gcc(1).
-copt Menentukan pilihan yang pengkompil C akan dipanggil. Biasanya C
pengkompil dipanggil tanpa sebarang pilihan. Pilihan ini boleh diulang untuk membenarkan
menghantar berbilang pilihan kepada pengkompil C.
Gunakan stalin dalam talian menggunakan perkhidmatan onworks.net