GHC рдХреЗ рддрд╣рдд рд╣рд╛рд╕реНрдХреЗрд▓ рдлрд╛рд╕реНрдЯ рдкреНрд░рд┐рдВрд╕рд┐рдкрд▓реНрд╕

рдЬреАрдПрдЪрд╕реА (рдЧреНрд▓рд╛рд╕рдЧреЛ рд╣рд╛рд╕реНрдХреЗрд▓ рдХрдВрдкрд╛рдЗрд▓рд░) рдорд╛рдирдХ рд╣рд╛рд╕реНрдХреЗрд▓ рдХрдВрдкрд╛рдЗрд▓рд░ рд╣реИред рдЬреАрдПрдЪрд╕реА рджреБрдирд┐рдпрд╛ рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рд╕рдВрдХрд▓рдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ, рд▓реЗрдХрд┐рди рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЕрддрд┐рд░рд┐рдХреНрдд рдЗрд╢рд╛рд░реЛрдВ рдХреЗ рдмрд┐рдирд╛, рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд┐рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдХреА рддрд░рд╣ рд╣реИрдВ, рдЕрд░реНрдерд╛рддреН, рд╡реЗ рдмрд╣реБрдд рдзреАрдореА рдЧрддрд┐ рд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рд╕рдВрдХрд▓рдХ рдХреА рдкреВрд░реА рдХреНрд╖рдорддрд╛ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рддреЛ Haskell C рдореЗрдВ рд╕рдорд╛рди рдХреЛрдб рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЖрддрд╛ рд╣реИред

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ Yarr рдбреЗрдЯрд╛рдлреНрд▓реЛ рдлреНрд░реЗрдорд╡рд░реНрдХ рдмрдирд╛рддреЗ рд╕рдордп GHC рд╕реЗ рдЕрдзрд┐рдХрддрдо рдХреЛ рдирд┐рдЪреЛрдбрд╝рдиреЗ рдХреЗ рдЕрдиреБрднрд╡ рдХреЛ рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВред

рд▓реЗрдЦ рдореЗрдВ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдирд╣реАрдВ рдмрд▓реНрдХрд┐ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЕрд╡рд▓реЛрдХрди рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд┐рд╖рдп рдореЗрдВ рдПрдХ рдЬреНрдЮрд╛рдкрди рдпрд╛ рдПрдХ рд╢реБрд░реБрдЖрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╕реВрдЯ рдХрд░реЗрдЧрд╛ред рд╡рд░реНрдгрд┐рдд рд╕рд┐рджреНрдзрд╛рдВрдд рдЕрдиреБрднрд╡рдЬрдиреНрдп рд╣реИрдВ, рдореБрдЭреЗ GHC рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рд╕рдВрдХрд▓рдХ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреЛ рдирд╣реАрдВ рдЬрд╛рдирддрд╛, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдЖрдо рддреМрд░ рдкрд░ рд╕реНрд╡реАрдХреГрдд рд╢рд░реНрддреЗрдВ рд╣реИрдВ, рддреЛ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реБрдЭрд╛рд╡ рджреЗрдВред

рдЬреАрдПрдЪрд╕реА рдХрд╛ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕реНрдХрд░рдг 7.6.1 рд╣реИред

рдПрдХ рдЕрдВрддрд┐рдо рдиреЛрдЯ: рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, "рдбрд┐рдлрд╝реЙрд▓реНрдЯ" рдЬреАрдПрдЪрд╕реА рдХреЗ рд╕рд╛рде, рд╕рдм рдХреБрдЫ рдЙрддрдирд╛ рдмреБрд░рд╛ рдирд╣реАрдВ рд╣реИ рдЬрд┐рддрдирд╛ рдХрд┐ рдкрд╣рд▓реЗ рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИ, рдЕрдЧрд░ рдХреЗрд╡рд▓ -O2 рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред рдХрднреА-рдХрднреА рдХрдВрдкрд╛рдЗрд▓рд░ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рд╕рдВрдХреЗрдд рджрд┐рдП рдмрд┐рдирд╛ рдлрд╛рд╕реНрдЯ рдорд╢реАрди рдХреЛрдб рдмрдирд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд┐рддрд╛рд░реЛрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдкреНрд░реЛрдЧреНрд░рд╛рдо рдореЗрдВ рдПрдХ рдЕрдХреНрд╖рд░ рдХреЛ рд╕рд╣реА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ рддрд╛рдХрд┐ рдЬреАрдПрдЪрд╕реА рдЕрдЪрд╛рдирдХ рд╕рдордЭ рдЬрд╛рдП рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред



рдЬреАрдПрдЪрд╕реА рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрдиреБрдХреВрд▓рди рдХреЗ 2 рдореБрдЦреНрдп рдХреНрд╖реЗрддреНрд░ рд╣реИрдВ:

рд╡реЗ рдПрдХ рджреВрд╕рд░реЗ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рдЕрд░реНрдерд╛рдд, рдпрджрд┐ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдПрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВ, рддреЛ рдлрд╝рдВрдХреНрд╢рди рдмрджрддрд░ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрддред рдЗрд╕рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдпреБрдХреНрддрд┐рдпреЛрдВ рдХреЗ рдХреЗрд╡рд▓ рдПрдХ рдЬреЛрдбрд╝реЗ рдХрд╛ рдкрд╛рд▓рди рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ, рд▓рдЧрднрдЧ рдХреЛрдИ рдкрд░рд┐рдгрд╛рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░


рдХрдИ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ рд╕реЗ рдмрдЪреЗрдВ

рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдпрд╛ рддреЛ рдФрд░ рд╕реВрдЪрд┐рдпреЛрдВ рд╕рд╣рд┐рдд, рдХреЛрдИ рдлрд░реНрдХ рдирд╣реАрдВ рдкрдбрд╝рддрд╛ рдХрд┐ рд╡реЗ "рдорд╛рдирдХ" рдХреИрд╕реЗ рд╣реИрдВред рдХрд╛рд░рдг рд╕реНрдкрд╖реНрдЯ рд╣реИ - рдРрд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╡рд┐рдШрдЯрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЙрдирдХреА рд╕рдВрд░рдЪрдирд╛ рдХреНрдпрд╛ рд╣реИред

рдПрдХрдорд╛рддреНрд░ рдЕрдкрд╡рд╛рдж рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХрдИ рдирд┐рд░реНрдорд╛рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдЧрдгрдирд╛ рдкреНрд░рдХрд╛рд░ рд╣реИ: Bool , Ordering , рдЖрджрд┐ред

рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рд╛рд╕реНрдХреЗрд▓ рдореЗрдВ рд╕реВрдЪрд┐рдпрд╛рдВ рдмрд╕ рдЬреБрдбрд╝реА рд╣реБрдИ рд╣реИрдВ, рдЬреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЙрдирдХреЗ рд╕реБрд╕реНрддреА рдХреЗ рдХрд╛рд░рдг рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХреА рдЬрд╛рддреА рд╣реИрдВред рддреЛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЙрдирдХреЗ рдмрдЬрд╛рдп рд╣рд╕реНрдХреЗрд▓ рдореЗрдВ рд╡реИрдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдорд╛рдирдХ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдмрдЬрд╛рдп - рдмрд╛рдЗрдЯрд╕реНрдЯреНрд░рд┐рдВрдЧ ), рдЬреЛ рд╕реБрд╡рд┐рдзрд╛ рдФрд░ рдХреНрд╖рдорддрд╛рдУрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рд╕реВрдЪрд┐рдпреЛрдВ рд╕реЗ рд╢рд╛рдпрдж рд╣реА рдЕрд╡рд░ рд╣реИрдВред рдХрдИ рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдЫреЛрдЯреА рд╕реВрдЪрд┐рдпреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ рдЬреНрдЮрд╛рдд рд▓рдВрдмрд╛рдИ рдХреЗ рд╡реИрдХреНрдЯрд░ рдФрд░ рднреА рдмреЗрд╣рддрд░ рд╣реИрдВред

рдЗрдиреНрд╣реЗрдВ рднреА рджреЗрдЦреЗрдВ: HaskellWiki - рдкреНрд░рджрд░реНрд╢рди / рдбреЗрдЯрд╛ рдкреНрд░рдХрд╛рд░ ред

рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЛ рдХрдареЛрд░ рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реАрд▓реНрдб рдШреЛрд╖рд┐рдд рдХрд░реЗрдВ рдЬрдм рддрдХ рдХрд┐ рдЖрдкрдХреЛ рдпрд╣ рдкрддрд╛ рди рд╣реЛ рдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЖрд▓рд╕реА рдХреНрдпреЛрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдПрдХ рдирд┐рдпрдорд┐рдд, рдЖрд▓рд╕реА рдХреНрд╖реЗрддреНрд░ рдПрдХ рдмрдВрдж рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИ рдЬреЛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рдореВрд▓реНрдп рдХреЛ рд▓реМрдЯрд╛рдПрдЧрд╛ред рд╕рдЦреНрдд рдлрд╝реАрд▓реНрдб - рдлрд╝реАрд▓реНрдб рдорд╛рди рдХрд╛ рд╕рдВрджрд░реНрднред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд (рдЕрдирдмреЙрдХреНрд╕) рдлрд╝реАрд▓реНрдб рд╕реНрд╡рдпрдВ рдореВрд▓реНрдп рд╣реИ (рдпрджрд┐ рдпрд╣ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рднреА рд╣реИ, рддреЛ рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╣реИ)ред рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝реАрд▓реНрдб рдХреЛ рд╕рдЦреНрдд рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдирд┐рд░реНрджреЗрд╢ {-# UNPACK #-} рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

1 рд╡рд┐рдХрд▓реНрдк рдХреЗ рдмрд┐рдирд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЬреАрдиреЗ рдореЗрдВ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдорд▓реЗ рдореЗрдВ, 2 рдпрд╛ 3 рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рд╕реВрдЪрд┐рдд рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдПрдВред рд╕рдВрджрд░реНрдн рджреНрд╡рд╛рд░рд╛ рдлрд╝реАрд▓реНрдб рдХрднреА-рдХрднреА рдЕрдзрд┐рдХ рдореЗрдореЛрд░реА рдХреБрд╢рд▓ рд╣реЛрддреА рд╣реИрдВ, рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рддреЗ рд╕рдордп, рд╕рдорд╛рдирддрд╛ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪред рдкрдврд╝рддреЗ рд╕рдордп рдмрд┐рд▓реНрдЯ-рдЗрди рдлрд╝реАрд▓реНрдб рддреЗрдЬрд╝ рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдкрдХреЛ рдЕрдХреНрд╕рд░ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдлрд╝реАрд▓реНрдб (рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд╡рдирд╛) рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ -funbox-strict-fields рдзреНрд╡рдЬ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рд┐рдд рдХрд░реЗрдВ рдФрд░ " {-# NOUNPACK #-} " {-# NOUNPACK #-} рдирд┐рд░реНрджреЗрд╢ рдХреЛ "рд╕рдВрджрд░реНрдн" рдлрд╝реАрд▓реНрдб рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред

рдЗрд╕реЗ рднреА рджреЗрдЦреЗрдВ: рд╣рд╛рд╕реНрдХреЗрд▓ рд╕реНрдЯрд╛рдЗрд▓ рдЧрд╛рдЗрдб / рдЖрд▓рд╕ рд╕реЗ рдирд┐рдкрдЯрдирд╛

рдкреБрди: рдЙрдкрдпреЛрдЧ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ

рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╡реЗрдХреНрдЯрд░ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╕рдВрд░рдЪрдирд╛ t рдХрдИ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
 import Data.Vector as V ... data T = T !Int !Int fSum (T xy) = x + y ... -- t :: T V.map (+ (fSum t)) longVectorOfInts 

GHC "рд▓реВрдк" рд╕реЗ рд╕рдВрд░рдЪрдирд╛ рдЧрдгрдирд╛ рдирд╣реАрдВ рд▓реЗрддрд╛ рд╣реИ:
 --   GHC    V.map (\x -> case t of (T yz) -> x + y + z) longVectorOfInts 

рдорд╢реАрди рдХреЛрдб рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдкрд░, рд╣рдо рд▓рд┐рдВрдХ рдХрд╛ рдЕрдиреБрд╕рд░рдг рдХрд░реЗрдВрдЧреЗ рдФрд░ рд╕рдорд╛рди рдлрд╝реАрд▓реНрдб рдкрдврд╝реЗрдВрдЧреЗред

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрджрд┐ рдЖрдк рд▓реВрдк рдХреЗ рдмрд╛рд╣рд░ рд╕рдВрдХрд▓рдХ рдХреЛ "рдмрддрд╛" рджреЗрддреЗ рд╣реИрдВ, рддреЛ рд╡рд╣ ASD (рдЕрдореВрд░реНрдд рд╕рд┐рдВрдЯреИрдХреНрд╕ рдЯреНрд░реА) рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдХрд╣реАрдВ рдКрдкрд░ рдХреА рдЧрдИ рдЧрдгрдирд╛рдУрдВ рдХреЛ рдирд╣реАрдВ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ:
 case t of (T xy) -> V.map (+ (fSum t)) longVectorOfInts -- GHC  : case t of (T xy) -> let s = x + y in V.map (\x -> x + s) longVectorOfInts 

рдорд╛рдорд▓реЛрдВ рдХреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдЖрдк рдбреАрдкрд╕реАрдХ рдкреИрдХреЗрдЬ рд╕реЗ рдЬреЗрдиреЗрд░рд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рдкреНрд░рд╡рд╛рд╣ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рд╕рдлрд▓ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ t рд╕рдВрд░рдЪрдирд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдПрдХ рдмрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдк рдмрд╕ fSum t рдХреЛ рдПрдХ рдЪрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рддрдХрдиреАрдХ рдХрд╛ рд╕рд╛рд░ рд╕реНрдкрд╖реНрдЯ рд╣реИред

рдХрд╛рд░реНрдпреЛрдВ


рдирд┐рдпрдо рдирдВрдмрд░ 1: INLINE рдирд┐рд░реНрджреЗрд╢ рдХреЛ рд╕рднреА рдЫреЛрдЯреЗ, рдЕрдХреНрд╕рд░ (рд░рдирдЯрд╛рдЗрдо рдкрд░) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ SDA рдореВрд▓ рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдпрджрд┐ рдлрд╝рдВрдХреНрд╢рди рдПрдореНрдмреЗрдбреЗрдб рдирд╣реАрдВ рд╣реИрдВ, рддреЛ рдЗрд╕ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рджрд┐рдП рдЧрдП рд╕реБрдЭрд╛рд╡ рд╣рд╛рдирд┐рдХрд╛рд░рдХ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВред

рдЕрдзрд┐рдХ рдХрд╛рд░реНрдп, рд▓рдВрдмреЛрджрд░, рдХрд░реА!

рдпрд╛ рдЗрд╕реЗ рд╕реНрдорд╛рд░реНрдЯ рддрд░реАрдХреЗ рд╕реЗ рд░рдЦреЗрдВ, рдирд┐рд░рдВрддрд░рддрд╛ рдЧреБрдЬрд░ рд╢реИрд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛рдУрдВ рдкрд░ рдмрдВрдж рд╣реЛрдиреЗ рдХрд╛ рд▓рд╛рдн рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдпреЛрдЬрди рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреАрдПрдЪрд╕реА рдХреЛ рдЕрдзрд┐рдХ рд╕рдХрд╛рд░рд╛рддреНрдордХ рд░реВрдк рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, Yarr рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ, рдореИрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕рдВрд░рдЪрдирд╛рдУрдВ рдХреЗ рдмрдЬрд╛рдп рдЧрдгрдирд╛рдУрдВ рдХреЛ рдорд╛рдирдХреАрдХреГрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝рдВрдХреНрд╢рди рдХреА рдПрдХ рдкреВрд░реА рдкреНрд░рдгрд╛рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЖрд░реЗрдЦ рдлрд╝рдВрдХреНрд╢рди рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рдкрджрд╛рдиреБрдХреНрд░рдо рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ, рддреАрд░ "рдП тЖТ рдмреА" рдХрд╛ рдЕрд░реНрде рд╣реИ "рдмреА рдХреЛ рдП рд╕реЗ рдЖрдВрд╢рд┐рдХ рдЖрд╡реЗрджрди рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ", рддрд░реНрдХ рдмрд░рдЧрдВрдбреА рдХреЗ рд╕рд╛рде рд╣рд╛рдЗрд▓рд╛рдЗрдЯ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ рднреА рдХрд╛рд░реНрдп рд╣реИрдВ:


рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ рд▓рд╛рдЧреВ рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реЛрдЧрд╛, рдкрд░рд┐рднрд╛рд╖рд╛ рдореЗрдВ рд▓рдВрдмреЛрджрд░ рдХреЗ рд╕рд╛рде рддрд░реНрдХреЛрдВ рдХреЛ рддреЛрдбрд╝реЗрдВ:
 f :: A -> B -> C {-# INLINE f #-} fab = ... -- body where ... -- declarations --> fa \b -> let ... -- declarations in ... -- body 

рдпрд╣ рдЯреНрд░рд┐рдХ GHC рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди рдХреЗ INLINE рдкреНрд░рд╛рдЧреНрдорд╛ рд╕реЗрдХреНрд╢рди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╣реИред

рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рд╕реЗ рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ

рдПрдХ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдлрд╝рдВрдХреНрд╢рди (рдЕрдирд┐рд╡рд╛рд░реНрдп рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдПрдХ рд▓рд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдмрд╣реБрд░реВрдкрддрд╛) рдХреА рдХреЙрд▓ рдкрд░рд┐рднрд╛рд╖рд╛ рджреНрд╡рд╛рд░рд╛ рдЗрдирд▓рд╛рдЗрди рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдРрд╕реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдХреЙрд▓ рдХреЗ рд╕реНрдерд╛рди рдкрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдЬреАрдПрдЪрд╕реА рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддрд░реНрдХ рдХреЗ рдкреНрд░рдХрд╛рд░ рдХреЛ рдЬрд╛рдирддрд╛ рд╣реИ рдФрд░ рдЬреЗрдиреЗрд░рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рд╕реНрд╡рдпрдВ INLINE рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИред рдЬрдм рд╕рд╛рдорд╛рдиреНрдпреАрдХрд░рдг рдХреЛ рдХрдИ рд╕реНрддрд░реЛрдВ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рд╡рд┐рд╢реЗрд╖рдЬреНрдЮ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИред

рдЖрдк рдЬреЛ рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЙрд╕реЗ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЗ рд╕реНрддрд░ рдкрд░ рд▓реЗ рдЬрд╛рдПрдВ

рдпрджрд┐ рд▓рдХреНрд╖реНрдп рдПрдХ рдЙрддреНрдкрд╛рджрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдирд╛ рдмреЗрд╣рддрд░ рд╣реИред рд╣рд╛рд╕реНрдХреЗрд▓ рдХреЗ рдкрд╛рд╕ рд╕рдВрдХрд▓рди рдЪрд░рдг рдореЗрдВ рдХрдореНрдкреНрдпреВрдЯреЗрд╢рди рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рддрдВрддреНрд░ рд╣реИрдВ ред

рдпреЗрд░ рдореЗрдВ, рдореИрдВрдиреЗ рд╕реНрдерд┐рд░ рджреЛрд╣рд░реА рдкреНрд░реЗрд╖рдг , рд╕реНрдерд┐рд░ рдЕрдВрдХрдЧрдгрд┐рдд ( рдЯрд╛рдЗрдк-рд╕реНрддрд░реАрдп рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рддреИрдпрд╛рд░ рдЕрдВрдХрдЧрдгрд┐рдд рдФрд░ рддрд░реНрдХ рдХреЗ рд▓рд┐рдП) рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП рдорд╛рд░реНрдХрд░ рдЗрдВрдбреЗрдХреНрд╕ рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рд╕рдВрдХрд▓рди рдХреЗ рдЭрдВрдбреЗ


-O2 - рд╣рдореЗрд╢рд╛ред

рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ -funbox-strict-fields рдКрдкрд░ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВред

рджреБрд░реНрд▓рдн рдорд╛рдорд▓реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░, рддреЗрдЬ рдорд╢реАрди рдХреЛрдб рдЕрдм LLVM -fllvm -optlo-O3 рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ: -fllvm -optlo-O3 ред

рдЗрд╕рд▓рд┐рдП рдХрд┐ рдЬреАрдПрдЪрд╕реА рдХреЙрдлреА рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рднрд╛рдЧреНрдпрд╡рддреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╡реЗ рдЬреЛ рдХреБрдЫ рднреА рдХрд╣рддреЗ рд╣реИрдВ рдЙрд╕рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╣реИрдВ, рдмреЗрди рд▓рд┐рдкреНрдореАрдпрд░ рдиреЗ -funfolding-use-threshold1000 -funfolding-keeness-factor1000 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдХреА рд╣реИ ред

Source: https://habr.com/ru/post/In171425/


All Articles