ນີ້ແມ່ນ 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