stalin - ອອນລາຍໃນຄລາວ

ນີ້ແມ່ນ stalin ຄໍາສັ່ງທີ່ສາມາດດໍາເນີນການໄດ້ໃນ OnWorks ຜູ້ໃຫ້ບໍລິການໂຮດຕິ້ງຟຣີໂດຍໃຊ້ຫນຶ່ງໃນຫຼາຍໆບ່ອນເຮັດວຽກອອນໄລນ໌ຂອງພວກເຮົາເຊັ່ນ Ubuntu Online, Fedora Online, Windows online emulator ຫຼື MAC OS online emulator

ໂຄງການ:

NAME


stalin - ການລວບລວມການເພີ່ມປະສິດທິພາບທົ່ວໂລກສໍາລັບ Scheme

ສະຫຼຸບສັງລວມ


stalin [-ການປ່ຽນແປງ]

[-I include-directory]*
[[-s|-x|-q|-t]]

[[-treat-all-symbols-as-external|
-do-not-treat-all-symbols-as-external]]
[[-index-alocated-string-types-by-expression|
-do-not-index-alocated-string-types-by-expression]]

[[-index-constant-structure-types-by-slot-types|
-do-not-index-constant-structure-types-by-slot-types]]
[[-index-constant-structure-types-by-expression|
-do-not-index-constant-structure-types-by-expression]]
[[-index-alocated-structure-types-by-slot-types|
-do-not-index-alocated-structure-types-by-slot-types]]
[[-index-alocated-structure-types-by-expression|
-do-not-index-alocated-structure-types-by-expression]]

[[-index-constant-headed-vector-types-by-element-type|
-do-not-index-constant-headed-vector-types-by-element-type]]
[[-index-constant-headed-vector-types-by-expression|
-do-not-index-constant-headed-vector-types-by-expression]]
[[-index-alocated-headed-vector-types-by-element-type|
-do-not-index-alocated-headed-vector-types-by-element-type]]
[[-index-alocated-headed-vector-types-by-expression|
-do-not-index-alocated-headed-vector-types-by-expression]]
[[-index-constant-nonheaded-vector-types-by-element-type|
-do-not-index-constant-nonheaded-vector-types-by-element-type]]
[[-index-constant-nonheaded-vector-types-by-expression|
-do-not-index-constant-nonheaded-vector-types-by-expression]]
[[-index-alocated-nonheaded-vector-types-by-element-type|
-do-not-index-alocated-nonheaded-vector-types-by-element-type]]
[[-index-alocated-nonheaded-vector-types-by-expression|
-do-not-index-alocated-nonheaded-vector-types-by-expression]]

[[-no-clone-size-limit|
- ຈຳກັດຂະໜາດ ຈໍາ​ນວນ​ຂອງ​ການ​ສະ​ແດງ​ອອກ​]]
[-split-even-if-no-widening]
[[-fully-convert-to-CPS|
-no-escaping-ສືບຕໍ່]]
[-ຂອງ]

[-ອ] [-ໂອມ] [- ໂອ] [- ຫຼື] [-ອອດ]

[-d0] [-d1] [-d2] [-d3] [-d4] [-d5] [-d6] [-d7]
[-close-conversion-ສະຖິຕິ]

[-dc] [-dC] [-dH] [-dg] [-ດ]

[-d]
[- ສະຖາປັດຕະຍະກໍາ ຊື່]
[[- ພື້ນຖານ|
- ທຳ ມະດາ|
- ນ້ຳໜັກເບົາ]]
[[- ທັນ​ທີ​ທັນ​ໃດ​|
-indirect-ແປ|
- ການ​ສະ​ແດງ​ທັນ​ທີ​|
- ການ​ສະ​ແດງ​ໂດຍ​ທາງ​ອ້ອມ​|
- ເຊື່ອມ​ຕໍ່​]]
[[-align-strings|-do-not-align-strings]]
[-from] [-df] [-dG] [-du] [-dI] [-dp] [-dP]
[-ds] [-dS] [-Tmk]
[-no-tail-call-optimization]

[-db] [-c] [-k]
[-cc C-compiler]
[-copt C-compiler-option]*

[ຊື່ເສັ້ນທາງ]

ລວບລວມໄຟລ໌ແຫຼ່ງ Scheme ຊື່ເສັ້ນທາງ.sc ທໍາອິດເຂົ້າໄປໃນໄຟລ໌ C ຊື່ເສັ້ນທາງ.c ແລະຫຼັງຈາກນັ້ນເຂົ້າໄປໃນ
ຮູບ​ພາບ​ທີ່​ສາ​ມາດ​ປະ​ຕິ​ບັດ​ໄດ້​ ຊື່ເສັ້ນທາງ. ຍັງຜະລິດໄຟລ໌ຖານຂໍ້ມູນ ຊື່ເສັ້ນທາງ.db. ໄດ້ ຊື່ເສັ້ນທາງ
ການໂຕ້ຖຽງແມ່ນຕ້ອງການເວັ້ນເສຍແຕ່ -ການປ່ຽນແປງ ຖືກກໍານົດ.

ລາຍລະອຽດ


Stalin ເປັນ compiler ປະສິດທິພາບທີ່ສຸດສໍາລັບ Scheme. ມັນຖືກອອກແບບເພື່ອໃຊ້ບໍ່ແມ່ນເປັນ
ເຄື່ອງ​ມື​ການ​ພັດ​ທະ​ນາ​ແຕ່​ແທນ​ທີ່​ຈະ​ເປັນ​ວິ​ທີ​ການ​ເພື່ອ​ສ້າງ​ຮູບ​ພາບ​ປະ​ສິດ​ທິ​ພາບ​ບໍ່​ວ່າ​ຈະ​ເປັນ​
ການຈັດສົ່ງຄໍາຮ້ອງສະຫມັກຫຼືສໍາລັບການດໍາເນີນການຄົ້ນຄ້ວາການຜະລິດ. ກົງກັນຂ້າມກັບໂຄງການແບບດັ້ງເດີມ
ການປະຕິບັດ, Stalin ແມ່ນການລວບລວມຮູບແບບ batch-mode. ບໍ່ມີການໂຕ້ຕອບ READ-EVAL-PRINT
ວົງ. Stalin ລວບລວມໄຟລ໌ Scheme ດຽວເຂົ້າໄປໃນຮູບພາບທີ່ສາມາດປະຕິບັດໄດ້ (ທາງອ້ອມ
ຜ່ານ C). ການແລ່ນຮູບພາບນັ້ນມີຄວາມໝາຍທຽບເທົ່າກັບການໂຫຼດໄຟລ໌ແຫຼ່ງ Scheme
ເຂົ້າໄປໃນຕົວແປໂຄງການເວີຈິນໄອແລນແລະຫຼັງຈາກນັ້ນຢຸດການປະຕິບັດຂອງມັນ. ຂໍ້ຈໍາກັດຕົ້ນຕໍ
ແມ່ນວ່າມັນເປັນໄປບໍ່ໄດ້ທີ່ຈະ LOAD ຫຼື EVAL ນິຍາມການສະແດງອອກຫຼືຂັ້ນຕອນໃຫມ່ເຂົ້າໄປໃນ a
ແລ່ນໂຄງການຫຼັງຈາກການລວບລວມ. ໃນການກັບຄືນສໍາລັບຂໍ້ຈໍາກັດນີ້, Stalin ເຮັດຢ່າງຫຼວງຫຼາຍ
ການວິເຄາະການລວບລວມເວລາທົ່ວໂລກຂອງໂຄງການແຫຼ່ງພາຍໃຕ້ການສົມມຸດຕິຖານໂລກປິດນີ້ແລະ
ຜະລິດຮູບພາບທີ່ສາມາດປະຕິບັດໄດ້ທີ່ມີຂະຫນາດນ້ອຍ, ຢືນຢູ່ຄົນດຽວ, ແລະໄວ.

Stalin ລວມເອົາຍຸດທະສາດຈໍານວນຫລາຍສໍາລັບການສ້າງລະຫັດປະສິດທິພາບ. ໃນບັນດາພວກເຂົາ, Stalin
ເຮັດການວິເຄາະປະເພດສະຖິດທົ່ວໂລກໂດຍໃຊ້ລະບົບປະເພດອ່ອນທີ່ສະຫນັບສະຫນູນສະຫະພັນ recursive
ປະເພດ. Stalin ສາມາດກໍານົດປະເພດແຄບຫຼືແມ້ກະທັ້ງ monomorphic ສໍາລັບແຕ່ລະລະຫັດແຫຼ່ງ
ການສະແດງອອກໃນໂຄງການ Scheme arbitrary ໂດຍບໍ່ມີການປະກາດປະເພດ. ນີ້ອະນຸຍາດໃຫ້ Stalin
ຫຼຸດຜ່ອນ, ຫຼືມັກຈະລົບລ້າງ, ການກວດສອບປະເພດທີ່ໃຊ້ເວລາແລ່ນແລະສົ່ງ. ສະ​ຕາ​ລິນ​ຍັງ​ເຮັດ​ໃຫ້​ຕ່ຳ
ການ​ຄັດ​ເລືອກ​ຕົວ​ແທນ​ລະ​ດັບ​ບົນ​ພື້ນ​ຖານ​ຕໍ່​ການ​ສະ​ແດງ​ອອກ​. ນີ້ອະນຸຍາດໃຫ້ໃຊ້ unboxed ໄດ້
ການເປັນຕົວແທນຂໍ້ມູນເຄື່ອງຈັກພື້ນຖານສໍາລັບປະເພດ monomorphic ທັງຫມົດທີ່ສົ່ງຜົນໃຫ້ສູງທີ່ສຸດ.
ລະຫັດຕົວເລກການປະຕິບັດ. Stalin ຍັງເຮັດການວິເຄາະຊີວິດແບບຄົງທີ່ທົ່ວໂລກສໍາລັບທຸກຄົນ
ຂໍ້ມູນຈັດສັນ. ນີ້ອະນຸຍາດໃຫ້ການເກັບຮັກສາທີ່ຈັດສັນຊົ່ວຄາວຫຼາຍທີ່ຈະຍຶດຄືນໂດຍບໍ່ມີການ
ການເກັບຂີ້ເຫຍື້ອ. ສຸດທ້າຍ, Stalin ມີຍຸດທະສາດທີ່ມີປະສິດທິພາບຫຼາຍສໍາລັບການລວບລວມການປິດ.
ຮ່ວມກັນ, ເຕັກນິກການລວບລວມເຫຼົ່ານີ້ synergistically ຜົນຜະລິດລະຫັດວັດຖຸປະສິດທິພາບ.
ຍິ່ງ​ໄປ​ກວ່າ​ນັ້ນ​, ຮູບ​ພາບ​ປະ​ຕິ​ບັດ​ທີ່​ສ້າງ​ໂດຍ Stalin ບໍ່​ມີ (ໂດຍ​ຜູ້​ໃຊ້​ກໍາ​ນົດ​ຫຼື
library) ຂັ້ນຕອນທີ່ບໍ່ຖືກເອີ້ນ, ຕົວແປ ແລະພາລາມິເຕີທີ່ບໍ່ໄດ້ໃຊ້, ແລະ
ການສະແດງອອກທີ່ບໍ່ສາມາດບັນລຸໄດ້. ນີ້ຊຸກຍູ້ໃຫ້ຮູບແບບການຂຽນໂປລແກລມທີ່ຫນຶ່ງ
ສ້າງແລະນໍາໃຊ້ຂັ້ນຕອນຫ້ອງສະຫມຸດທົ່ວໄປຫຼາຍໂດຍບໍ່ມີການຢ້ານກົວວ່າຮູບພາບທີ່ປະຕິບັດໄດ້ຈະ
ທົນ​ທຸກ​ຈາກ bloat ລະ​ຫັດ​.

OPTIONS


-ການປ່ຽນແປງ
ພິມສະບັບຂອງ Stalin ແລະອອກທັນທີ.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມການປະມວນຜົນກ່ອນ:

-I ລະບຸໄດເລກະທໍລີເພື່ອຊອກຫາ Scheme ລວມມີໄຟລ໌. ທາງເລືອກນີ້ສາມາດເປັນ
ຊໍ້າຄືນເພື່ອລະບຸຫຼາຍໄດເລກະທໍລີ. Stalin ທໍາອິດຄົ້ນຫາສໍາລັບການລວມໄຟລ໌
ໃນໄດເລກະທໍລີປະຈຸບັນ, ຫຼັງຈາກນັ້ນແຕ່ລະໄດເລກະທໍລີທີ່ລະບຸໄວ້ໃນຄໍາສັ່ງ
ເສັ້ນ, ແລະສຸດທ້າຍໃນການຕິດຕັ້ງໃນຕອນຕົ້ນປະກອບມີໄດເລກະທໍລີ.

-s ຮວມເອົາມາໂຄຈາກຫ້ອງສະໝຸດ Scheme->C ເຂົ້າກັນໄດ້. ໃນປັດຈຸບັນ, ນີ້
ກໍານົດ syntax WHEN ແລະ UNLESS.

-x ຮວມເອົາມາໂຄຣຈາກຫ້ອງສະໝຸດ Xlib ແລະ GL. ໃນປັດຈຸບັນ, ນີ້ກໍານົດ
FOREIGN-FUNCTION ແລະ FOREIGN-DEFINE syntax. ນີ້ຫມາຍຄວາມວ່າ -s.

-q ຮວມເອົາມາໂຄຣຈາກຫ້ອງສະໝຸດ QobiScheme. ໃນປັດຈຸບັນ, ນີ້ກໍານົດ
DEFINE-STRUCTURE syntax, ໃນບັນດາສິ່ງອື່ນໆ. ນີ້ຫມາຍຄວາມວ່າ -x.

-t ລວມມີມະຫາພາກທີ່ຕ້ອງການເພື່ອລວບລວມ Stalin ດ້ວຍຕົວມັນເອງ. ນີ້ຫມາຍຄວາມວ່າ -q.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມຄວາມຊັດເຈນຂອງການວິເຄາະການໄຫຼ:

-treat-all-symbols-as-external
ໃນລະຫວ່າງການວິເຄາະການໄຫຼ, ສ້າງສັນຍາລັກພາຍນອກທີ່ບໍ່ມີຕົວຕົນດຽວທີ່ຖືກແບ່ງປັນ
ໃນບັນດາສັນຍາລັກທັງຫມົດ.

-do-not-treat-all-symbols-as-external
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​, ໃນ​ເວ​ລາ​ທີ່​ປະ​ມວນ​ຜົນ​ການ​ສະ​ແດງ​ອອກ​ຄົງ​ທີ່​ທີ່​ມີ​ສັນ​ຍາ​ລັກ​,
ສ້າງສັນຍາລັກພາຍໃນທີ່ບໍ່ມີຕົວຕົນໃຫມ່ສໍາລັບແຕ່ລະສັນຍາລັກທີ່ແຕກຕ່າງກັນຄົງທີ່ຢູ່ໃນ
ໂຄງການ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-index-alocated-string-types-by-expression
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​ເຂົ້າ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປຸງ​ແຕ່ງ​ລະ​ບຽບ​ການ - ໂທ​ສະ​ແດງ​ອອກ​ທີ່​ສາ​ມາດ​ຈັດ​ສັນ​
strings, ສ້າງ string abstract ໃຫມ່ສໍາລັບແຕ່ລະ expression ດັ່ງກ່າວ. ນີ້​ແມ່ນ
Default

-do-not-index-alocated-string-types-by-expression
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​ເຂົ້າ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປຸງ​ແຕ່ງ​ລະ​ບຽບ​ການ - ໂທ​ສະ​ແດງ​ອອກ​ທີ່​ສາ​ມາດ​ຈັດ​ສັນ​
strings, ສ້າງ string abstract ດຽວທີ່ຖືກແບ່ງປັນໃນບັນດາສິ່ງດັ່ງກ່າວ
ສຳ ນວນ.

ໃຫ້ສັງເກດວ່າບໍ່ມີຮຸ່ນຂອງຕົວເລືອກຂ້າງເທິງສໍາລັບປະເພດອົງປະກອບເພາະວ່າອົງປະກອບ
ປະເພດຂອງສະຕຣິງແມ່ນສະເຫມີ char. ຍິ່ງໄປກວ່ານັ້ນ, ບໍ່ມີສະບັບຂອງທາງເລືອກຂ້າງເທິງ
ສໍາ​ລັບ​ການ​ສະ​ແດງ​ອອກ​ຄົງ​ທີ່​ເນື່ອງ​ຈາກ​ວ່າ​ມີ​ພຽງ​ແຕ່​ສະ​ຕ​ຣິງ​ຄົງ​ທີ່ abstract ດຽວ​.

-index-constant-structure-types-by-slot-types
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​, ໃນ​ເວ​ລາ​ທີ່​ປະ​ມວນ​ຜົນ​ການ​ສະ​ແດງ​ອອກ​ຄົງ​ທີ່​ທີ່​ມີ​ໂຄງ​ສ້າງ​,
ສ້າງໂຄງສ້າງທີ່ບໍ່ມີຕົວຕົນໃຫມ່ສໍາລັບແຕ່ລະຊຸດຂອງປະເພດຊ່ອງທີ່ມີທ່າແຮງສໍາລັບການນັ້ນ
ໂຄງສ້າງ.

-do-not-index-constant-structure-types-by-slot-types
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​, ໃນ​ເວ​ລາ​ທີ່​ປະ​ມວນ​ຜົນ​ການ​ສະ​ແດງ​ອອກ​ຄົງ​ທີ່​ທີ່​ມີ​ໂຄງ​ສ້າງ​,
ສ້າງໂຄງສ້າງທີ່ບໍ່ມີຕົວຕົນອັນດຽວທີ່ຖືກແບ່ງປັນລະຫວ່າງທຸກຊຸດຂອງທ່າແຮງ
ປະເພດຊ່ອງສໍາລັບໂຄງສ້າງນັ້ນ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-index-constant-structure-types-by-expression
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​, ໃນ​ເວ​ລາ​ທີ່​ປະ​ມວນ​ຜົນ​ການ​ສະ​ແດງ​ອອກ​ຄົງ​ທີ່​ທີ່​ມີ​ໂຄງ​ສ້າງ​,
ສ້າງໂຄງສ້າງທີ່ບໍ່ມີຕົວຕົນໃຫມ່ສໍາລັບແຕ່ລະສະແດງອອກດັ່ງກ່າວ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-do-not-index-constant-structure-types-by-expression
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​, ໃນ​ເວ​ລາ​ທີ່​ປະ​ມວນ​ຜົນ​ການ​ສະ​ແດງ​ອອກ​ຄົງ​ທີ່​ທີ່​ມີ​ໂຄງ​ສ້າງ​,
ສ້າງໂຄງສ້າງທີ່ບໍ່ມີຕົວຕົນອັນດຽວທີ່ຖືກແບ່ງປັນໃນບັນດາການສະແດງອອກດັ່ງກ່າວ.

-index-alocated-structure-types-by-slot-types
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​ເຂົ້າ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປຸງ​ແຕ່ງ​ລະ​ບຽບ​ການ - ໂທ​ສະ​ແດງ​ອອກ​ທີ່​ສາ​ມາດ​ຈັດ​ສັນ​
ໂຄງສ້າງ, ສ້າງໂຄງສ້າງທີ່ບໍ່ມີຕົວຕົນໃຫມ່ສໍາລັບແຕ່ລະຊຸດຂອງປະເພດຊ່ອງທີ່ມີທ່າແຮງ
ສໍາລັບໂຄງສ້າງນັ້ນ.

-do-not-index-alocated-structure-types-by-slot-types
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​ເຂົ້າ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປຸງ​ແຕ່ງ​ລະ​ບຽບ​ການ - ໂທ​ສະ​ແດງ​ອອກ​ທີ່​ສາ​ມາດ​ຈັດ​ສັນ​
ໂຄງ​ສ້າງ​, ສ້າງ​ໂຄງ​ປະ​ກອບ​ການ​ບໍ່​ມີ​ຕົວ​ຕົນ​ດຽວ​ທີ່​ແບ່ງ​ປັນ​ໃນ​ບັນ​ດາ​ຊຸດ​ທັງ​ຫມົດ​ຂອງ​
ປະເພດຊ່ອງສຽບທີ່ມີທ່າແຮງສໍາລັບໂຄງສ້າງນັ້ນ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-index-alocated-structure-types-by-expression
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​ເຂົ້າ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປຸງ​ແຕ່ງ​ລະ​ບຽບ​ການ - ໂທ​ສະ​ແດງ​ອອກ​ທີ່​ສາ​ມາດ​ຈັດ​ສັນ​
ໂຄງສ້າງ, ສ້າງໂຄງສ້າງທີ່ບໍ່ມີຕົວຕົນໃຫມ່ສໍາລັບແຕ່ລະສະແດງອອກດັ່ງກ່າວ. ນີ້​ແມ່ນ
ຄ່າເລີ່ມຕົ້ນ.

-do-not-index-alocated-structure-types-by-expression
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​ເຂົ້າ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປຸງ​ແຕ່ງ​ລະ​ບຽບ​ການ - ໂທ​ສະ​ແດງ​ອອກ​ທີ່​ສາ​ມາດ​ຈັດ​ສັນ​
ໂຄງສ້າງ, ສ້າງໂຄງສ້າງທີ່ບໍ່ມີຕົວຕົນດຽວທີ່ແບ່ງປັນໃນບັນດາສິ່ງດັ່ງກ່າວ
ສຳ ນວນ.

ໃຫ້ສັງເກດວ່າ, ໃນປັດຈຸບັນ, ຄູ່ແມ່ນປະເພດດຽວຂອງໂຄງສ້າງທີ່ສາມາດປາກົດຢູ່ໃນຄົງທີ່
ການສະແດງອອກ. ນີ້ອາດຈະມີການປ່ຽນແປງໃນອະນາຄົດ, ຖ້າຜູ້ອ່ານຖືກຂະຫຍາຍເພື່ອສະຫນັບສະຫນູນອື່ນໆ
ປະເພດຂອງໂຄງສ້າງ.

-index-constant-headed-vector-types-by-element-type
ໃນລະຫວ່າງການວິເຄາະການໄຫຼ, ໃນເວລາທີ່ປະມວນຜົນການສະແດງອອກຄົງທີ່ປະກອບດ້ວຍຫົວ
vectors, ສ້າງ vector ຫົວ abstract ໃຫມ່ສໍາລັບແຕ່ລະປະເພດອົງປະກອບທີ່ມີທ່າແຮງສໍາລັບ
vector ຫົວ​ຫນ້າ​ນັ້ນ​.

-do-not-index-constant-headed-vector-types-by-element-type
ໃນລະຫວ່າງການວິເຄາະການໄຫຼ, ໃນເວລາທີ່ປະມວນຜົນການສະແດງອອກຄົງທີ່ປະກອບດ້ວຍຫົວ
vectors, ສ້າງ vector headed abstract ດຽວທີ່ແບ່ງປັນລະຫວ່າງທັງຫມົດ
ປະເພດອົງປະກອບທີ່ເປັນໄປໄດ້ສໍາລັບ vector ຫົວນັ້ນ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-index-constant-headed-vector-types-by-expression
ໃນລະຫວ່າງການວິເຄາະການໄຫຼ, ໃນເວລາທີ່ປະມວນຜົນການສະແດງອອກຄົງທີ່ປະກອບດ້ວຍຫົວ
vectors, ສ້າງ vector headed abstract ໃຫມ່ສໍາລັບແຕ່ລະສະແດງອອກດັ່ງກ່າວ. ນີ້​ແມ່ນ
ຄ່າເລີ່ມຕົ້ນ.

-do-not-index-constant-headed-vector-types-by-expression
ໃນລະຫວ່າງການວິເຄາະການໄຫຼ, ໃນເວລາທີ່ປະມວນຜົນການສະແດງອອກຄົງທີ່ປະກອບດ້ວຍຫົວ
vectors, ສ້າງ vector headed abstract ດຽວທີ່ຖືກແບ່ງປັນໃນບັນດາສິ່ງດັ່ງກ່າວ
ສຳ ນວນ.

-index-alocated-headed-vector-types-by-element-type
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​ເຂົ້າ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປຸງ​ແຕ່ງ​ລະ​ບຽບ​ການ - ໂທ​ສະ​ແດງ​ອອກ​ທີ່​ສາ​ມາດ​ຈັດ​ສັນ​
vectors ຫົວ, ສ້າງ vector ຫົວ abstract ໃຫມ່ສໍາລັບແຕ່ລະອົງປະກອບທີ່ມີທ່າແຮງ
ປະເພດສໍາລັບ vector ຫົວນັ້ນ.

-do-not-index-alocated-headed-vector-types-by-element-type
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​ເຂົ້າ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປຸງ​ແຕ່ງ​ລະ​ບຽບ​ການ - ໂທ​ສະ​ແດງ​ອອກ​ທີ່​ສາ​ມາດ​ຈັດ​ສັນ​
vectors ຫົວ, ສ້າງ vector ຫົວ abstract ດຽວທີ່ແບ່ງປັນລະຫວ່າງທັງຫມົດ
ປະເພດອົງປະກອບທີ່ເປັນໄປໄດ້ສໍາລັບ vector ຫົວນັ້ນ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-index-alocated-headed-vector-types-by-expression
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​ເຂົ້າ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປຸງ​ແຕ່ງ​ລະ​ບຽບ​ການ - ໂທ​ສະ​ແດງ​ອອກ​ທີ່​ສາ​ມາດ​ຈັດ​ສັນ​
vectors ຫົວ, ສ້າງ vector ຫົວ abstract ໃຫມ່ສໍາລັບແຕ່ລະສະແດງອອກດັ່ງກ່າວ.
ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-do-not-index-alocated-headed-vector-types-by-expression
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​ເຂົ້າ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປຸງ​ແຕ່ງ​ລະ​ບຽບ​ການ - ໂທ​ສະ​ແດງ​ອອກ​ທີ່​ສາ​ມາດ​ຈັດ​ສັນ​
vectors ຫົວ, ສ້າງ vector ຫົວ abstract ດຽວທີ່ແບ່ງປັນລະຫວ່າງທັງຫມົດ
ການສະແດງອອກດັ່ງກ່າວ.

-index-constant-nonheaded-vector-types-by-element-type
ໃນລະຫວ່າງການວິເຄາະການໄຫຼ, ໃນເວລາທີ່ປະມວນຜົນການສະແດງອອກຄົງທີ່ປະກອບດ້ວຍ nonheaded
vectors, ສ້າງ vector nonheaded abstract ໃຫມ່ສໍາລັບແຕ່ລະປະເພດອົງປະກອບທີ່ມີທ່າແຮງ
ສໍາລັບ vector nonheaded ນັ້ນ.

-do-not-index-constant-nonheaded-vector-types-by-element-type
ໃນລະຫວ່າງການວິເຄາະການໄຫຼ, ໃນເວລາທີ່ປະມວນຜົນການສະແດງອອກຄົງທີ່ປະກອບດ້ວຍ nonheaded
vectors, ສ້າງ vector nonheaded ເປັນ abstract ດຽວທີ່ແບ່ງປັນໃນບັນດາທັງຫມົດ
ປະເພດອົງປະກອບທີ່ເປັນໄປໄດ້ສໍາລັບ vector nonheaded ນັ້ນ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-index-constant-nonheaded-vector-types-by-expression
ໃນລະຫວ່າງການວິເຄາະການໄຫຼ, ໃນເວລາທີ່ປະມວນຜົນການສະແດງອອກຄົງທີ່ປະກອບດ້ວຍ nonheaded
vectors, ສ້າງ vector nonheaded abstract ໃຫມ່ສໍາລັບແຕ່ລະສະແດງອອກດັ່ງກ່າວ. ນີ້
ເປັນຄ່າເລີ່ມຕົ້ນ.

-do-not-index-constant-nonheaded-vector-types-by-expression
ໃນລະຫວ່າງການວິເຄາະການໄຫຼ, ໃນເວລາທີ່ປະມວນຜົນການສະແດງອອກຄົງທີ່ປະກອບດ້ວຍ nonheaded
vectors, ສ້າງ vector nonheaded ທີ່ບໍ່ມີຕົວຕົນດຽວທີ່ຖືກແບ່ງປັນໃນບັນດາສິ່ງດັ່ງກ່າວ
ສຳ ນວນ.

-index-alocated-nonheaded-vector-types-by-element-type
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​ເຂົ້າ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປຸງ​ແຕ່ງ​ລະ​ບຽບ​ການ - ໂທ​ສະ​ແດງ​ອອກ​ທີ່​ສາ​ມາດ​ຈັດ​ສັນ​
vectors nonheaded, ສ້າງ vector nonheaded abstract ໃຫມ່ສໍາລັບແຕ່ລະທ່າແຮງ
ປະເພດອົງປະກອບສໍາລັບ vector nonheaded ນັ້ນ.

-do-not-index-alocated-nonheaded-vector-types-by-element-type
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​ເຂົ້າ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປຸງ​ແຕ່ງ​ລະ​ບຽບ​ການ - ໂທ​ສະ​ແດງ​ອອກ​ທີ່​ສາ​ມາດ​ຈັດ​ສັນ​
vectors nonheaded, ສ້າງ vector nonheaded ເປັນ abstract ດຽວທີ່ແບ່ງປັນລະຫວ່າງ
ປະເພດອົງປະກອບທີ່ເປັນໄປໄດ້ທັງໝົດສຳລັບ vector ທີ່ບໍ່ມີຫົວນັ້ນ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-index-alocated-nonheaded-vector-types-by-expression
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​ເຂົ້າ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປຸງ​ແຕ່ງ​ລະ​ບຽບ​ການ - ໂທ​ສະ​ແດງ​ອອກ​ທີ່​ສາ​ມາດ​ຈັດ​ສັນ​
vectors nonheaded, ສ້າງ vector nonheaded abstract ໃຫມ່ສໍາລັບແຕ່ລະອັນ
ການສະແດງອອກ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-do-not-index-alocated-nonheaded-vector-types-by-expression
ໃນ​ລະ​ຫວ່າງ​ການ​ວິ​ເຄາະ​ການ​ໄຫຼ​ເຂົ້າ​, ໃນ​ເວ​ລາ​ທີ່​ການ​ປຸງ​ແຕ່ງ​ລະ​ບຽບ​ການ - ໂທ​ສະ​ແດງ​ອອກ​ທີ່​ສາ​ມາດ​ຈັດ​ສັນ​
vectors nonheaded, ສ້າງ vector nonheaded ເປັນ abstract ດຽວທີ່ແບ່ງປັນລະຫວ່າງ
ການສະແດງອອກດັ່ງກ່າວທັງຫມົດ.

ໃຫ້ສັງເກດວ່າ, ໃນປັດຈຸບັນ, ການສະແດງອອກຄົງທີ່ບໍ່ສາມາດມີ vectors ທີ່ບໍ່ມີຫົວແລະ nonheaded
vectors ບໍ່ເຄີຍຖືກຈັດສັນໂດຍການສະແດງອອກການໂທຫາຂັ້ນຕອນໃດໆ. ARGV ແມ່ນຜູ້ດຽວທີ່ບໍ່ມີຫົວ
vector. ທາງ​ເລືອກ​ເຫຼົ່າ​ນີ້​ແມ່ນ​ລວມ​ພຽງ​ແຕ່​ສໍາ​ລັບ​ຄວາມ​ສົມ​ບູນ​ແລະ​ໃນ​ກໍ​ລະ​ນີ​ທີ່​ຈະ​ຂະ​ຫຍາຍ​ໃນ​ອະ​ນາ​ຄົດ​
ພາສາອະນຸຍາດໃຫ້ຄ່າຄົງທີ່ vector nonheaded ແລະຂັ້ນຕອນການຈັດສັນ nonheaded
vectors.

-no-clone-size-limit
ອະ​ນຸ​ຍາດ​ໃຫ້ polyvariance ບໍ່​ຈໍາ​ກັດ​, ເຊັ່ນ​ວ່າ​ເຮັດ​ໃຫ້​ສໍາ​ເນົາ​ຂະ​ບວນ​ການ​ຂອງ​ຂະ​ຫນາດ​ໃດ​ຫນຶ່ງ​.

- ຈຳກັດຂະໜາດ
ກໍານົດຂອບເຂດຈໍາກັດ polyvariance, ie ເຮັດສໍາເນົາຂັ້ນຕອນທີ່ມີຫນ້ອຍກວ່າ
ການສະແດງອອກຫຼາຍອັນນີ້. ຕ້ອງເປັນຈຳນວນເຕັມທີ່ບໍ່ແມ່ນລົບ. ຄ່າເລີ່ມຕົ້ນເປັນ 80. ລະບຸ 0
ເພື່ອປິດການທໍາງານ polyvariance.

-split-even-if-no-widening
ໂດຍປົກກະຕິ, polyvariance ຈະເຮັດສໍາເນົາຂັ້ນຕອນພຽງແຕ່ຖ້າມັນຖືກເອີ້ນດ້ວຍ
ການໂຕ້ຖຽງຂອງປະເພດຕ່າງໆ. ລະບຸທາງເລືອກນີ້ເພື່ອເຮັດສໍາເນົາຂັ້ນຕອນ
ເຖິງແມ່ນວ່າໃນເວລາທີ່ພວກເຂົາຖືກເອີ້ນດ້ວຍການໂຕ້ຖຽງຂອງປະເພດດຽວກັນ. ນີ້ຈະຊ່ວຍໃຫ້ເຂົາເຈົ້າ
ຢູ່ໃນແຖວ.

-fully-convert-to-CPS
ໂດຍປົກກະຕິ, ການແປງ CPS ທີ່ມີນ້ໍາຫນັກເບົາແມ່ນຖືກນໍາໃຊ້, ປ່ຽນພຽງແຕ່ການສະແດງອອກເຫຼົ່ານັ້ນ
ແລະຂັ້ນຕອນທີ່ຈໍາເປັນເພື່ອສະຫນັບສະຫນູນການຫລົບຫນີຢ່າງຕໍ່ເນື່ອງ. ໃນເວລາທີ່ທາງເລືອກນີ້ແມ່ນ
ລະບຸໄວ້, ໂຄງການຖືກປ່ຽນເປັນ CPS ຢ່າງສົມບູນ.

-no-escaping-ສືບຕໍ່
ໂດຍປົກກະຕິ, ການສືບຕໍ່ຢ່າງເຕັມທີ່ແມ່ນສະຫນັບສະຫນູນ. ເມື່ອຕົວເລືອກນີ້ຖືກລະບຸ, the
ພຽງແຕ່ສືບຕໍ່ໄດ້ຮັບການສະຫນັບສະຫນູນແມ່ນຜູ້ທີ່ບໍ່ສາມາດເອີ້ນໄດ້ຫຼັງຈາກ
ຂັ້ນຕອນທີ່ສ້າງການສືບຕໍ່ໄດ້ກັບຄືນມາ.

-ຂອງ ໂດຍປົກກະຕິ, ຫຼັງຈາກການວິເຄາະການໄຫຼ, Stalin ບັງຄັບໃຫ້ແຕ່ລະປະເພດທີ່ກໍານົດໄວ້ມີຢ່າງຫນ້ອຍຫນຶ່ງ
ສະມາຊິກປະເພດໂຄງສ້າງຂອງຊື່ທີ່ລະບຸ, ຫຼາຍທີ່ສຸດຫນຶ່ງສະມາຊິກປະເພດຫົວ vector, ແລະ
ຢູ່ໃນຫຼາຍທີ່ສຸດຫນຶ່ງສະມາຊິກທີ່ບໍ່ມີຫົວ-vector-type. ຕົວເລືອກນີ້ປິດການໃຊ້ງານນີ້, ອະນຸຍາດໃຫ້ປະເພດ
ກໍາ​ນົດ​ທີ່​ຈະ​ມີ​ສະ​ມາ​ຊິກ​ໂຄງ​ສ້າງ​ຫຼາຍ​ປະ​ເພດ​ຂອງ​ຊື່​ທີ່​ໄດ້​ຮັບ​, ຫຼາຍ​ຫົວ​-
ສະມາຊິກ vector-type, ແລະສະມາຊິກຫຼາຍປະເພດ nonheaded-vector-type. ບາງຄັ້ງຜົນຜະລິດ
ລະຫັດປະສິດທິພາບຫຼາຍ ແລະບາງຄັ້ງໃຫ້ລະຫັດປະສິດທິພາບຫນ້ອຍ.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມຈໍານວນລະຫັດການກວດສອບຄວາມຜິດພາດໃນເວລາແລ່ນທີ່ສ້າງຂຶ້ນ. ຫມາຍ​ເຫດ​
ວ່າ, ເປັນເອກະລາດຂອງການຕັ້ງຄ່າຂອງທາງເລືອກເຫຼົ່ານີ້, Stalin ສະເຫມີຈະສ້າງລະຫັດທີ່
obeys semantics ຂອງພາສາ Scheme ສໍາລັບໂຄງການທີ່ຖືກຕ້ອງ. ທາງເລືອກເຫຼົ່ານີ້ເທົ່ານັ້ນ
ການ​ຄວບ​ຄຸມ​ລະ​ດັບ​ຂອງ​ຄວາມ​ປອດ​ໄພ​, ນັ້ນ​ແມ່ນ​ລະ​ດັບ​ຂອງ​ຄວາມ​ຜິດ​ພາດ​ໃນ​ໄລ​ຍະ​ການ​ກວດ​ສອບ​ສໍາ​ລັບ​ການ​ບໍ່​ຖືກ​ຕ້ອງ​
ໂຄງການ.

-ອ ລະບຸລະຫັດນັ້ນເພື່ອກວດສອບ vector ທີ່ບໍ່ມີຂອບເຂດ ຫຼື string subscripts ຈະເປັນ
ສະກັດກັ້ນ. ຖ້າບໍ່ໄດ້ລະບຸ, ຂໍ້ຜິດພາດໃນເວລາແລ່ນຈະຖືກອອກຖ້າ vector ຫຼື
string subscript ແມ່ນບໍ່ມີຂອບເຂດ. ຖ້າຫາກວ່າກໍານົດ, ພຶດຕິກໍາຂອງບັນດາໂຄງການທີ່
ມີ vector ທີ່ບໍ່ມີຂອບເຂດຫຼືຕົວຍ່ອຍສະຕຣິງແມ່ນບໍ່ໄດ້ກໍານົດ.

-ໂອມ ລະບຸລະຫັດນັ້ນເພື່ອກວດຫາຂໍ້ຜິດພາດຂອງຄວາມຊົງຈຳທີ່ບໍ່ໄດ້ໃຊ້ແມ່ນຈະຖືກສະກັດກັ້ນ. ຖ້າ​ບໍ່
ລະບຸໄວ້, ຂໍ້ຜິດພາດໃນເວລາແລ່ນຈະຖືກອອກຖ້າຄວາມຊົງຈໍາພຽງພໍບໍ່ສາມາດເຮັດໄດ້
ຈັດສັນ. ຖ້າລະບຸ, ພຶດຕິກໍາຂອງໂປລແກລມທີ່ຫມົດຄວາມຈໍາແມ່ນ
ບໍ່ໄດ້ກໍານົດ.

- ໂອ ລະບຸລະຫັດນັ້ນເພື່ອກວດສອບການລົ້ນຈຳນວນເຕັມທີ່ແນ່ນອນແມ່ນຈະຖືກສະກັດກັ້ນ. ຖ້າ
ບໍ່ໄດ້ລະບຸໄວ້, ຂໍ້ຜິດພາດຂອງເວລາແລ່ນຈະຖືກອອກໃນຈໍານວນເຕັມທີ່ທີ່ແນ່ນອນ. ຖ້າ
ລະບຸໄວ້, ພຶດຕິກຳຂອງໂປຣແກຣມທີ່ເຮັດໃຫ້ເກີດການລົ້ນຈຳນວນເຕັມແມ່ນບໍ່ໄດ້ກຳນົດ.
ໃນປັດຈຸບັນ, Stalin ບໍ່ຮູ້ວິທີການສ້າງລະຫັດການກວດສອບ overflow ດັ່ງນັ້ນນີ້
ທາງເລືອກຕ້ອງໄດ້ຮັບການລະບຸ.

- ຫຼື ລະ​ບຸ​ລະ​ຫັດ​ທີ່​ຈະ​ກວດ​ສອບ​ສໍາ​ລັບ​ຄວາມ​ຜິດ​ພາດ​ຂອງ​ລະ​ບົບ​ໄຟລ​໌ run-time ຕ່າງໆ​ແມ່ນ​ຈະ​ເປັນ​
ສະກັດກັ້ນ. ຖ້າບໍ່ໄດ້ລະບຸ, ຂໍ້ຜິດພາດໃນເວລາແລ່ນຈະຖືກອອກເມື່ອບໍ່ສໍາເລັດ
ພະຍາຍາມເປີດ ຫຼືປິດໄຟລ໌ໃດໜຶ່ງ. ຖ້າຖືກກໍານົດ, ພຶດຕິກໍາຂອງໂປຼແກຼມ
ທີ່ເຮັດໃຫ້ຄວາມພະຍາຍາມໃນການເຂົ້າເຖິງໄຟລ໌ທີ່ບໍ່ປະສົບຜົນສໍາເລັດດັ່ງກ່າວແມ່ນບໍ່ໄດ້ກໍານົດ.

-ອອດ ລະ​ບຸ​ລະ​ຫັດ​ທີ່​ຈະ​ກວດ​ສອບ​ວ່າ​ຂັ້ນ​ຕອນ​ຕົ້ນ​ແມ່ນ​ຜ່ານ​ການ​ໂຕ້​ຖຽງ​ຂອງ​
ປະເພດທີ່ຖືກຕ້ອງຖືກສະກັດກັ້ນ. ຖ້າບໍ່ໄດ້ລະບຸ, ຂໍ້ຜິດພາດໃນເວລາແລ່ນຈະຖືກອອກຖ້າ a
ຂັ້ນຕອນເບື້ອງຕົ້ນແມ່ນເອີ້ນວ່າມີການໂຕ້ຖຽງຂອງປະເພດທີ່ບໍ່ຖືກຕ້ອງ. ຖ້າລະບຸ, ໄດ້
ພຶດຕິກໍາຂອງບັນດາໂຄງການທີ່ໂທຫາຂັ້ນຕອນເບື້ອງຕົ້ນທີ່ມີຂໍ້ມູນປະເພດທີ່ບໍ່ຖືກຕ້ອງ
ບໍ່ໄດ້ກໍານົດ.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມ verbosity ຂອງ compiler:

-d0 ຜະລິດການລວບລວມເວລາຄືນຫຼັງເມື່ອມີຂໍ້ຜິດພາດໃນການລວບລວມ.

-d1 ຜະລິດຄໍາຄິດຄໍາເຫັນໃນລະຫວ່າງການລວບລວມທີ່ອະທິບາຍສິ່ງທີ່ຜູ້ລວບລວມກໍາລັງເຮັດ.

-d2 ຜະລິດລາຍການທີ່ຕົກແຕ່ງຂອງໂປຼແກຼມແຫຼ່ງຫຼັງຈາກການວິເຄາະການໄຫຼ.

-d3 ຜະ​ລິດ​ຕະ​ພັນ​ລາຍ​ການ​ຕົກ​ແຕ່ງ​ຂອງ​ໂຄງ​ການ​ທີ່​ມາ​ຫຼັງ​ຈາກ​ປະ​ເພດ​ທຽບ​ເທົ່າ​ໄດ້​
ຮວມເຂົ້າກັນ.

-d4 ຜະລິດເສັ້ນສະແດງການເອີ້ນຂອງໂປຼແກຼມແຫຼ່ງ.

-d5 ຜະລິດລາຍລະອຽດຂອງທຸກຂັ້ນຕອນພື້ນເມືອງທີ່ບໍ່ແມ່ນເລື່ອງຈິງທີ່ສ້າງຂຶ້ນ.

-d6 ຜະລິດບັນຊີລາຍຊື່ຂອງການສະແດງອອກທັງຫມົດແລະການປິດທີ່ຈັດສັນການເກັບຮັກສາພ້ອມກັບ a
ລາຍ​ລະ​ອຽດ​ຂອງ​ບ່ອນ​ທີ່​ການ​ເກັບ​ຮັກ​ສາ​ໄດ້​ຖືກ​ຈັດ​ສັນ​.

-d7 ຜະລິດຮ່ອງຮອຍຂອງຂະບວນການປິດການແປງທີ່ມີນ້ໍາຫນັກເບົາ.

-close-conversion-ສະຖິຕິ
ສ້າງບົດສະຫຼຸບຂອງສະຖິຕິການປິດການແປງ. ເຫຼົ່ານີ້ແມ່ນອັດຕະໂນມັດ
ດໍາເນີນການໂດຍໂຄງການ bcl-to-latex.sc ເຊິ່ງດໍາເນີນການໂດຍ bcl-benchmark script
(ທັງ​ໃນ​ /usr/local/stalin/benchmarks directory) ເພື່ອຜະລິດຕາຕະລາງ II, III, ແລະ
IV, ຂອງເຈ້ຍ Flow-directed lightweight ປິດ ການປ່ຽນແປງ.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມກົນລະຍຸດການຈັດການບ່ອນເກັບມ້ຽນທີ່ໃຊ້ໂດຍລະຫັດທີ່ລວບລວມ:

-dc ປິດການໃຊ້ງານຂອງ alloca(3​). ໂດຍປົກກະຕິ, compiler ຈະໃຊ້ alloca(3​) to
ຈັດສັນຢູ່ໃນ stack ການໂທເມື່ອເປັນໄປໄດ້.

-dC ປິດການນຳໃຊ້ເຄື່ອງເກັບຂີ້ເຫຍື້ອແບບອະນຸລັກ Boehm. ປົກກະຕິແລ້ວ, ໄດ້
compiler ຈະໃຊ້ຕົວເກັບລວບລວມ Boehm ເພື່ອຈັດສັນຂໍ້ມູນທີ່ບໍ່ຮູ້ຈັກຕະຫຼອດຊີວິດ
ສັ້ນ. ໃຫ້ສັງເກດວ່າຜູ້ລວບລວມຂໍ້ມູນຍັງຈະໃຊ້ຕົວເກັບລວບລວມ Boehm ສໍາລັບບາງຄົນ
ຂໍ້ມູນຖ້າມັນບໍ່ສາມາດຈັດສັນຂໍ້ມູນນັ້ນຢູ່ໃນ stack ຫຼືໃນພາກພື້ນ.

-dH ປິດການນຳໃຊ້ພາກພື້ນສຳລັບການຈັດສັນຂໍ້ມູນ.

-dg ສ້າງລະຫັດເພື່ອຜະລິດຂໍ້ຄວາມວິນິດໄສເມື່ອພາກສ່ວນພາກພື້ນຖືກຈັດສັນ ແລະ
ປົດປ່ອຍ.

-ດ ປິດການນຳໃຊ້ພາກພື້ນທີ່ສາມາດຂະຫຍາຍໄດ້ ແລະໃຊ້ພື້ນທີ່ທີ່ມີຂະໜາດຄົງທີ່ແທນ.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມການສ້າງລະຫັດ:

-d ລະບຸວ່າຂອງແທ້ທີ່ບໍ່ແນ່ນອນແມ່ນສະແດງເປັນ C doubles. ໂດຍປົກກະຕິ, ຄວາມຈິງທີ່ບໍ່ແນ່ນອນ
ຖືກສະແດງເປັນ C floats.

- ສະຖາປັດຕະຍະກໍາ
ລະບຸສະຖາປັດຕະຍະກໍາທີ່ຈະສ້າງລະຫັດ. ຄ່າເລີ່ມຕົ້ນແມ່ນເພື່ອສ້າງ
ລະຫັດສໍາລັບສະຖາປັດຕະໃດກໍ່ຕາມທີ່ compiler ຖືກເປີດໃຊ້. ໃນປັດຈຸບັນ, ເປັນທີ່ຮູ້ຈັກ
ສະຖາປັດຕະຍະກຳແມ່ນ IA32, IA32-align-double, SPARC, SPARCv9, SPARC64, MIPS, Alpha,
ARM, M68K, PowerPC, ແລະ S390.

- ພື້ນຖານ
ຢ່າປະຕິບັດການປິດທີ່ມີນ້ໍາຫນັກເບົາ. ການປິດແມ່ນຖືກສ້າງຂຶ້ນສໍາລັບທຸກຄົນ
ຂັ້ນ​ຕອນ​ການ. ໂດຍປົກກະຕິຜູ້ໃຊ້ຈະບໍ່ລະບຸຕົວເລືອກນີ້. ມັນມີຈຸດປະສົງເທົ່ານັ້ນ
ເພື່ອວັດແທກປະສິດຕິຜົນຂອງການປ່ຽນແປງປິດທີ່ມີນ້ໍາຫນັກເບົາ. ມັນຖືກນໍາໃຊ້ໂດຍ
bcl-benchmark script (ໃນ /usr/local/stalin/benchmarks directory) ເພື່ອຜະລິດ
ຕາຕະລາງ II, III, ແລະ IV, ຂອງເຈ້ຍ Flow-directed lightweight ປິດ ການປ່ຽນແປງ.

- ທຳ ມະດາ
ດໍາເນີນການສະບັບທີ່ງ່າຍດາຍຂອງການແປງປິດທີ່ມີນ້ໍາຫນັກເບົາທີ່ບໍ່ອີງໃສ່
ກ່ຽວ​ກັບ​ການ​ວິ​ເຄາະ​ລະ​ບຽບ​ການ​. ຄວາມພະຍາຍາມທີ່ຈະເຮັດຕາມສິ່ງທີ່ຜູ້ລວບລວມຂໍ້ມູນ 'ທຳມະດາ' ເຮັດ
(ອັນ​ໃດ​ກໍ​ຕາມ). ໂດຍປົກກະຕິຜູ້ໃຊ້ຈະບໍ່ລະບຸຕົວເລືອກນີ້. ມັນເປັນພຽງແຕ່
ມີຈຸດປະສົງເພື່ອວັດແທກປະສິດທິພາບຂອງການປ່ຽນແປງປິດທີ່ມີນ້ໍາຫນັກເບົາ. ມັນ​ແມ່ນ
ໃຊ້ໂດຍ bcl-benchmark script (ໃນ /usr/local/stalin/benchmarks directory) ກັບ
ຜະລິດຕາຕະລາງ II, III, ແລະ IV ຂອງເຈ້ຍ Flow-directed lightweight ປິດ
ການປ່ຽນແປງ.

- ນ້ຳໜັກເບົາ
ປະຕິບັດການແປງປິດທີ່ມີນ້ໍາຫນັກເບົາ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

- ທັນ​ທີ​ທັນ​ໃດ​
ສ້າງລະຫັດໂດຍໃຊ້ການປິດຮາບພຽງທັນທີ. ອັນນີ້ຍັງບໍ່ທັນໄດ້ປະຕິບັດເທື່ອ.

-indirect-ແປ
ສ້າງລະຫັດໂດຍໃຊ້ການປິດຮາບພຽງທາງອ້ອມ. ອັນນີ້ຍັງບໍ່ທັນໄດ້ປະຕິບັດເທື່ອ.

- ການ​ສະ​ແດງ​ທັນ​ທີ​
ສ້າງລະຫັດໂດຍການປິດການສະແດງຜົນທັນທີ.

- ການ​ສະ​ແດງ​ໂດຍ​ທາງ​ອ້ອມ​
ສ້າງລະຫັດໂດຍໃຊ້ການປິດການສະແດງຜົນທາງອ້ອມ. ອັນນີ້ຍັງບໍ່ທັນໄດ້ປະຕິບັດເທື່ອ.

- ເຊື່ອມ​ຕໍ່​
ສ້າງລະຫັດໂດຍການປິດການເຊື່ອມຕໍ່. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-align-strings
ຈັດຮຽງສະຕຣິງທັງໝົດໃຫ້ກັບການຈັດຮຽງ fixnum. ອັນນີ້ຈະບໍ່ເຮັດວຽກເມື່ອສະຕຣິງຢູ່
ກັບຄືນມາໂດຍຂັ້ນຕອນຕ່າງປະເທດທີ່ບໍ່ສອດຄ່ອງກັບການຈັດລໍາດັບ fixnum. ມັນ​ຈະ
ຍັງໃຊ້ບໍ່ໄດ້ໃນເວລາທີ່ ARGV ຖືກນໍາໃຊ້, ເນື່ອງຈາກວ່າສາຍເຫຼົ່ານັ້ນຍັງບໍ່ໄດ້ສອດຄ່ອງກັບ fixnum
ການຈັດວາງ. ນີ້ແມ່ນຄ່າເລີ່ມຕົ້ນ.

-do-not-align-strings
ຢ່າຈັດຮຽງສະຕຣິງເພື່ອຈັດຮຽງ fixnum. ອັນນີ້ຕ້ອງຖືກລະບຸເມື່ອສະຕຣິງ
ກັບຄືນໂດຍຂະບວນການຕ່າງປະເທດແມ່ນບໍ່ສອດຄ່ອງ fixnum ສອດຄ່ອງ.

-from ເປີດໃຊ້ການເພີ່ມປະສິດທິພາບການລວບລວມຂໍ້ມູນທີ່ເອີ້ນວ່າ EQ? ການປອມແປງ. ບາງຄັ້ງໃຫ້ຜົນຜະລິດຫຼາຍ
ລະຫັດປະສິດທິພາບແລະບາງຄັ້ງໃຫ້ລະຫັດປະສິດທິພາບຫນ້ອຍ.

-df ປິດໃຊ້ງານການເພີ່ມປະສິດທິພາບການລວບລວມຂໍ້ມູນທີ່ເອີ້ນວ່າການປອມແປງ.

-dG ຜ່ານອາກິວເມັນໂດຍໃຊ້ຕົວແປທົ່ວໂລກແທນພາລາມິເຕີທຸກຄັ້ງທີ່ເປັນໄປໄດ້.

-du ສ້າງ if statements ແທນ switch statement ສຳລັບການສົ່ງ.

-dI ເປີດການນຳໃຊ້ໂຄງສ້າງທັນທີ.

-dp ເປີດໃຊ້ການສົ່ງເສີມການເປັນຕົວແທນ. ສົ່ງເສີມຊຸດບາງປະເພດຈາກບີບໄປຫາ
squiished ຫຼື squished ໂດຍທົ່ວໄປຖ້າຫາກວ່ານີ້ຈະຫຼຸດລົງຈໍານວນຂອງ run-time
ການ​ບີບ​ບັງ​ຄັບ​ການ​ແບ່ງ​ແຍກ​ຫຼື​ການ​ສົ່ງ​ຕົວ​ແທນ​. ບາງຄັ້ງໃຫ້ຜົນຜະລິດທີ່ມີປະສິດທິພາບຫຼາຍຂຶ້ນ
code ແລະບາງຄັ້ງໃຫ້ລະຫັດປະສິດທິພາບຫນ້ອຍ.

-dP ເປີດໃຊ້ການຂະຫຍາຍການສຳເນົາ. ບາງຄັ້ງໃຫ້ລະຫັດທີ່ມີປະສິດທິພາບຫຼາຍແລະບາງຄັ້ງ
ໃຫ້ລະຫັດປະສິດທິພາບຫນ້ອຍ.

-ds ປິດໃຊ້ງານການເພີ່ມປະສິດທິພາບການລວບລວມຂໍ້ມູນທີ່ເອີ້ນວ່າການບີບ.

-dS ປິດໃຊ້ງານການເພີ່ມປະສິດທິພາບການລວບລວມຂໍ້ມູນທີ່ເອີ້ນວ່າ squishing.

-Tmk ເປີດໃຊ້ການສ້າງລະຫັດທີ່ເຮັດວຽກກັບ Treadmarks distribution-shared-memory
ຊຸດ. ໃນປັດຈຸບັນທາງເລືອກນີ້ບໍ່ໄດ້ຖືກປະຕິບັດຢ່າງເຕັມສ່ວນແລະບໍ່ຮູ້ວ່າຈະເຮັດວຽກ.

-no-tail-call-optimization
ໃນປັດຈຸບັນ Stalin ສ້າງລະຫັດທີ່ເປັນຫາງ recursive ຢ່າງຖືກຕ້ອງ, ໂດຍຄ່າເລີ່ມຕົ້ນ, ທັງຫມົດແຕ່
ທີ່ຫາຍາກທີ່ສຸດຂອງສະຖານະການ. ແລະມັນສາມາດຖືກບັງຄັບໃຫ້ສ້າງຫາງຢ່າງຖືກຕ້ອງ
ລະຫັດ recursive ໃນທຸກສະຖານະການໂດຍທາງເລືອກທີ່ເຫມາະສົມ. ບາງຫາງ-recursive
ການໂທ, ຜູ້ທີ່ສະຖານທີ່ໂທຫາຢູ່ໃນເສັ້ນຢູ່ໃນເປົ້າຫມາຍ, ແປເປັນ C
goto statements ແລະສະເຫມີສົ່ງຜົນໃຫ້ຖືກຕ້ອງ tail-recursive code. ສ່ວນທີ່ເຫຼືອແມ່ນ
ແປເປັນການໂທຟັງຊັນ C ໃນຕໍາແຫນ່ງຫາງ. ນີ້ແມ່ນອີງໃສ່ C compiler ເພື່ອ
ປະຕິບັດການເພີ່ມປະສິດທິພາບການໂທຫາງ. gcc(1​) ຮຸ່ນ 2.96 ແລະ 3.0.2 (ແລະບາງທີອາດມີອື່ນໆ
ຮຸ່ນ) ປະຕິບັດການເພີ່ມປະສິດທິພາບການໂທຫາງໃນ IA32 (ແລະບາງທີສະຖາປັດຕະຍະກໍາອື່ນໆ)
ໃນເວລາທີ່ -foptimize-sibling-calls ຖືກກໍານົດ. (-O2 implies -foptimize-sibling-
ໂທ.) gcc(1​) ພຽງແຕ່ປະຕິບັດການເພີ່ມປະສິດທິພາບການໂທຫາງໃນ IA32 ໃນສະເພາະໃດຫນຶ່ງ
ສະຖານະການ. ຫນ້າທໍາອິດ, ເປົ້າຫມາຍແລະສະຖານທີ່ໂທຫາຕ້ອງມີຄວາມເຂົ້າກັນໄດ້
ລາຍເຊັນ. ເພື່ອ​ຮັບ​ປະ​ກັນ​ລາຍ​ເຊັນ​ເຂົ້າ​ກັນ​ໄດ້, Stalin ຜ່ານ​ພາ​ລາ​ມິ​ເຕີ​ເພື່ອ C
ຟັງຊັນທີ່ເປັນສ່ວນຫນຶ່ງຂອງຫາງ-recursive loops ໃນຕົວແປທົ່ວໂລກ. ອັນທີສອງ, ໄດ້
ເປົ້າໝາຍຈະຕ້ອງບໍ່ຖືກປະກາດ __ຄຸນລັກສະນະ__ ((ຕອນ​ແລງ)). ດັ່ງນັ້ນ Stalin ຈະບໍ່
ສ້າງກ __ຄຸນລັກສະນະ__ ((ຕອນ​ແລງ)) ການປະກາດສໍາລັບຫນ້າທີ່ເປັນສ່ວນຫນຶ່ງຂອງ a
tail-recursive loop ເຖິງແມ່ນວ່າ Stalin ຮູ້ວ່າມັນບໍ່ເຄີຍກັບຄືນມາ. ອັນທີສາມ, ໄດ້
ຟັງຊັນທີ່ປະກອບດ້ວຍເວັບໄຊທ໌ການໂທບໍ່ສາມາດໂທຫາໄດ້ alloca(3​). gcc(1​) ບໍ່ໄຫຼ
ການວິເຄາະ. ໂທມາຫາ alloca(3​) ໃນຟັງຊັນທີ່ປະກອບດ້ວຍເວັບໄຊທ໌ໂທ, ບໍ່ມີ
ບໍ່ວ່າຂໍ້ມູນທີ່ຈັດສັນຈະຫຼົບຫນີ, ຈະປິດການເພີ່ມປະສິດທິພາບການໂທຫາງ.
ດັ່ງນັ້ນ Stalin ຈຶ່ງປິດການຈັດສັນ stack ຂອງຂໍ້ມູນໃນຂັ້ນຕອນໃດນຶ່ງໃນແຖວ a
ຂັ້ນ​ຕອນ​ການ​ທີ່​ເປັນ​ສ່ວນ​ຫນຶ່ງ​ຂອງ loop ຫາງ​-recursive​. ສຸດທ້າຍ, ເວັບໄຊທ໌ໂທຫາບໍ່ສາມາດ
ບັນຈຸພື້ນທີ່ reentrant ເພາະວ່າເຂດ reentrant ໄດ້ຖືກປ່ອຍອອກມາເມື່ອອອກຈາກຂັ້ນຕອນ
ແລະການໂທຫາຫາງຈະຮຽກຮ້ອງໃຫ້ມີການແຊກແຊງພາກພື້ນ reclamation. ດັ່ງນັ້ນ ສະຕາລິນ
ປິດການຈັດສັນຂໍ້ມູນໃນພາກພື້ນທີ່ເຂົ້າມາໃນຂັ້ນຕອນໃດໆກໍຕາມທີ່ເປັນສ່ວນໜຶ່ງຂອງ
ຫາງ-recursive loop. ການປິດການເພີ່ມປະສິດທິພາບເຫຼົ່ານີ້ເຮັດໃຫ້ເກີດຄ່າໃຊ້ຈ່າຍສໍາລັບຜົນປະໂຫຍດ
ຂອງການບັນລຸການເພີ່ມປະສິດທິພາບການໂທຫາງ. ຖ້າ C compiler ຂອງທ່ານບໍ່ປະຕິບັດການໂທຫາຫາງ
ການເພີ່ມປະສິດທິພາບຫຼັງຈາກນັ້ນທ່ານອາດຈະບໍ່ຕ້ອງການຈ່າຍຄ່າໃຊ້ຈ່າຍ. ໄດ້ -no-tail-call-optimization
ທາງເລືອກເຮັດໃຫ້ Stalin ບໍ່ເອົາສີ່ມາດຕະການຂ້າງເທິງນີ້ເພື່ອສ້າງລະຫັດ
ທີ່ gcc(1​) ຈະປະຕິບັດການເພີ່ມປະສິດທິພາບການໂທຫາງ. ເຖິງແມ່ນວ່າໃນເວລາທີ່ກໍານົດນີ້
ທາງ​ເລືອກ​, Stalin ຍັງ​ແປ​ພາ​ສາ​ໂທ​, ບ່ອນ​ທີ່​ເວັບ​ໄຊ​ໂທ​ແມ່ນ​ຢູ່​ໃນ​ເສັ້ນ​
ເປົ້າຫມາຍ, ເປັນຄໍາຖະແຫຼງ C goto. ມີສາມໂອກາດທີ່ຫາຍາກທີ່ຍັງສາມາດ foil ໄດ້
recursion ຫາງທີ່ເຫມາະສົມ. ທໍາອິດ, ຖ້າທ່ານລະບຸ -dC ທ່ານອາດຈະບັງຄັບໃຫ້ Stalin ໃຊ້ stack
ຫຼືການຈັດສັນພາກພື້ນເຖິງແມ່ນວ່າຢູ່ໃນວົງຈອນການໂທຫາງ. ທ່ານ​ສາ​ມາດ​ຫຼີກ​ເວັ້ນ​ການ​ນີ້​ໂດຍ​ບໍ່​ໄດ້​
ການລະບຸ -dC. ຄັ້ງທີສອງ, gcc(1​) ຈະບໍ່ປະຕິບັດການເພີ່ມປະສິດທິພາບການໂທຫາງໃນເວລາທີ່
ຟັງຊັນທີ່ປະກອບດ້ວຍເວັບໄຊທ໌ໂທໃຊ້ unary & ກັບຕົວແປທ້ອງຖິ່ນ. gcc(1​) ບໍ່
ບໍ່ມີການວິເຄາະການໄຫຼ. ຄໍາຮ້ອງສະຫມັກຂອງ unary & ກັບຕົວແປທ້ອງຖິ່ນໃນຟັງຊັນ
ປະກອບດ້ວຍເວັບໄຊທ໌ການໂທ, ບໍ່ວ່າຕົວຊີ້ຈະຫນີ, ຈະປິດການໃຊ້ງານຫາງ.
ການເພີ່ມປະສິດທິພາບການໂທ. Stalin ສາມາດສ້າງການນໍາໃຊ້ດັ່ງກ່າວຂອງ unary & ໃນເວລາທີ່ທ່ານກໍານົດ -from
ຫຼືບໍ່ໄດ້ລະບຸ -df. ທ່ານສາມາດຫຼີກເວັ້ນກໍລະນີດັ່ງກ່າວໂດຍການລະບຸ -df ແລະບໍ່
ການລະບຸ -fromທີ່ຢູ່ ສຸດທ້າຍ, gcc(1​) ຈະບໍ່ປະຕິບັດການເພີ່ມປະສິດທິພາບການໂທຫາງໃນເວລາທີ່
ຫນ້າ​ທີ່​ທີ່​ປະ​ກອບ​ດ້ວຍ​ການ​ໂທ​ເວັບ​ໄຊ​ທ​໌​ setjmp(3​). gcc(1​) ບໍ່ມີການວິເຄາະການໄຫຼ.
ໂທມາຫາ setjmp(3​) ໃນຫນ້າທີ່ປະກອບດ້ວຍເວັບໄຊທ໌ໂທ, ບໍ່ວ່າຈະເປັນ
ໄດ້ jmp_buf escapes, ຈະປິດການເພີ່ມປະສິດທິພາບການໂທຫາງ. Stalin ແປ
ໂທທີ່ແນ່ນອນກັບ ໂທ-ກັບ-ປະຈຸບັນ-ສືບຕໍ່ ດັ່ງທີ່ໂທຫາ setjmp(3​). ເຈົ້າ​ສາ​ມາດ
ບັງຄັບໃຫ້ Stalin ບໍ່ເຮັດແນວນັ້ນໂດຍການລະບຸ -fully-convert-to-CPS. Stalin ຈະ
ສ້າງການເຕືອນໄພໃນກໍລະນີທໍາອິດແລະທີສາມ, ຄື, ໃນເວລາທີ່ໂທຫາຫາງ
ການເພີ່ມປະສິດທິພາບແມ່ນ foiled ໂດຍການຈັດສັນພາກພື້ນ reentrant ຫຼືໂທຫາ alloca(3​) or
setjmp(3​). ດັ່ງນັ້ນທ່ານສາມາດຢຸດການກໍານົດ -fully-convert-to-CPS ຫຼືລະເວັ້ນຈາກ
ການລະບຸ -dC ຈົນກວ່າເຈົ້າຈະເຫັນຄຳເຕືອນດັ່ງກ່າວ. ຢ່າງໃດກໍຕາມ, ບໍ່ມີການເຕືອນໄພດັ່ງກ່າວຖືກສ້າງຂື້ນ.
ເມື່ອໃຊ້ unary & foil tail-call optimization. ດັ່ງນັ້ນທ່ານອາດຈະຕ້ອງການສະເຫມີ
ລະບຸ -df ແລະລະເວັ້ນຈາກການລະບຸ -from ຖ້າທ່ານຕ້ອງການໃຫ້ບັນດາໂຄງການຂອງທ່ານເປັນ
ຫາງ recursive ຢ່າງຖືກຕ້ອງ.

ຕົວເລືອກຕໍ່ໄປນີ້ຄວບຄຸມໄລຍະການລວບລວມ C:

-db ປິດການຜະລິດໄຟລ໌ຖານຂໍ້ມູນ.

-c ລະບຸວ່າ C compiler ຈະບໍ່ຖືກເອີ້ນຫຼັງຈາກສ້າງລະຫັດ C.
ໂດຍປົກກະຕິ, C compiler ຖືກເອີ້ນຫຼັງຈາກສ້າງລະຫັດ C ເພື່ອຜະລິດ
ຮູບ​ພາບ​ທີ່​ສາ​ມາດ​ປະ​ຕິ​ບັດ​ໄດ້​. ນີ້ຫມາຍຄວາມວ່າ -k.

-k ລະບຸວ່າໄຟລ໌ C ທີ່ສ້າງຂຶ້ນຈະບໍ່ຖືກລຶບ. ໂດຍປົກກະຕິ, ການຜະລິດ
ໄຟລ໌ C ຖືກລຶບຖິ້ມຫຼັງຈາກມັນຖືກລວບລວມ.

-cc ລະບຸ C compiler ທີ່ຈະໃຊ້. ຄ່າເລີ່ມຕົ້ນເປັນ gcc(1​).

-copt ລະບຸທາງເລືອກທີ່ C compiler ຈະຖືກເອີ້ນດ້ວຍ. ຕາມ​ປົກ​ກະ​ຕິ C
compiler ຖືກເອີ້ນວ່າບໍ່ມີທາງເລືອກໃດໆ. ທາງເລືອກນີ້ສາມາດຖືກຊ້ໍາອີກຄັ້ງເພື່ອອະນຸຍາດ
ຖ່າຍທອດຫຼາຍທາງເລືອກໃຫ້ກັບ C compiler.

ໃຊ້ stalin ອອນໄລນ໌ໂດຍໃຊ້ບໍລິການ onworks.net



ລ່າສຸດ Linux ແລະ Windows ໂຄງການອອນໄລນ໌