рдХрд╛рд╢, рдореИрдВ рдЕрдкрдирд╛ рдмреНрд▓реЙрдЧ рдирд╣реАрдВ рд░рдЦрддрд╛, рдФрд░ рдореИрдВ рд╣рд╛рд▓ рд╣реА рдХреА "рдЦреЛрдЬ" рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдЖрд╡рд╢реНрдпрдХ рдиреЛрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕реЗ рд▓реЛрдЧ рд╣реЛрдВрдЧреЗ рдЬреЛ рдЗрд╕реЗ рдЙрдкрдпреЛрдЧреА рдкрд╛рдПрдВрдЧреЗред
рдЧреЛ рдореВрд▓ рдХреЛрдб рдореЗрдВ рд╕рдВрдХрд▓рд┐рдд рдПрдХ рднрд╛рд╖рд╛ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдпрд╣ рддреЗрдЬ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рд▓рд╛рдВрдХрд┐, рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдЗрд╕ рд╕рдордп рдпрд╣
рд╣рдореЗрд╢рд╛ рд╕рдЪ рд╕реЗ рдмрд╣реБрдд
рджреВрд░ рд╣реИ ред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ,
рдЧреЛ ,
PHP рд╕реЗ рд╣рд╛рд░ рдЧрдпрд╛ (рдареАрдХ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕реА рдореЗрдВ рдПрдХ PHP рдореЙрдбреНрдпреВрд▓ рд╣реИ, рд▓реЗрдХрд┐рди рдкрд░рд┐рдгрд╛рдо рдЕрднреА рднреА рдирд┐рд░рд╛рд╢рд╛рдЬрдирдХ рд╣реИ)ред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рд╡реНрд╣рд░реНрд▓рдкреВрд▓ рд╣реИрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп, рдЧреЛ 3.5-7.5 рдмрд╛рд░ рдЦреЛ рджрд┐рдпрд╛!
рдХрдИ рд╕реНрд░реЛрдд рд╕рдорд╛рди рдХрд╛рд░рдг рдмрддрд╛рддреЗ рд╣реИрдВ - "рдХрдордЬреЛрд░" рдорд╛рдирдХ рдЧреЛ рд╕рдВрдХрд▓рдХ (рдЬрд┐рд╕реЗ рдЧреЛ рдмрд┐рд▓реНрдб рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕рдЪ рд╣реИред рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рд╕рдВрдХрд▓рдХ рдХрд╛рдлреА "рдпреБрд╡рд╛" рд╣реИ рдФрд░ рдЕрдм рддрдХ рдЕрдиреБрдХреВрд▓рди рдХрд╛ рдХреЛрдИ рд╕рд╛рдорд╛рди рдирд╣реАрдВ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬреАрд╕реАрд╕реА рдХреЗ рдкрд╛рд╕ рд╣реИред
рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ - рдЧреЛ рд╕рдВрдХрд▓рдХ рдХрд╛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реИ - gccgoред
рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде gccgo рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИ:
go build -compiler gccgo -gccgoflags "-march=native -O3" main.go
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд░реНрддрдорд╛рди рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╕рднреА рдЙрдкрд▓рдмреНрдз рдЕрдиреБрдХреВрд▓рди рдФрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рдмрд╕ -O2 рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдкрд░реАрдХреНрд╖рдг рдХреЗ рдкрд░рд┐рдгрд╛рдо:
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рда# рд╕реНрдЯреИрдВрдбрдЖрд░реНрдЯ рдХрдВрдкрд╛рдЗрд▓рд░
тЮЬ рдЧреЛ рдмрд┐рд▓реНрдб ./dedup.go
тЮЬ рд╕рдордп ред/dedup> / dev / null
рдЕрд╕рд▓реА 0m4.612s
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 0m4.588s
sys 0m0.020s
# рдЕрдиреБрдХреВрд▓рди рдХреЗ рдмрд┐рдирд╛ gccgo рд╕рдВрдХрд▓рдХ
тЮЬ go build -compiler gccgo ./dedup.go
тЮЬ рд╕рдордп ред/dedup> / dev / null
рдЕрд╕рд▓реА 0m2.110s
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 0m2.084s
sys 0m0.024s
# PHP рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди
тЮЬ рд╕рдордп php hash.php> / dev / null
рдЕрд╕рд▓реА 0m0.634s
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 0m0.608s
sys 0m0.024s
# рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде gccgo
тЮЬ рдЧреЛ рдмрд┐рд▓реНрдб -a -gccgoflags "-march = native -O3" -compiler gccgo ./dedup.go
тЮЬ рд╕рдордп ред/dedup> / dev / null
рд╡рд╛рд╕реНрддрд╡рд┐рдХ 0m0.534s
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 0m0.512s
sys 0m0.020s
рдХреБрд▓ рдорд┐рд▓рд╛рдХрд░, рдЕрдиреБрдХреВрд▓рди рдХреЗ рд╕рд╛рде gccgo рджреНрд╡рд╛рд░рд╛ рд╕рдВрдХрд▓рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдо рдХрд╛ рд░рдирдЯрд╛рдЗрдо рдмрд┐рдирд╛ рдЕрдиреБрдХреВрд▓рди рдХреЗ рдирд┐рд░реНрдорд╛рдг рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 4.29.2 рдЧреБрдирд╛ рдЕрдзрд┐рдХ рддреЗрдЬ рдерд╛ред
рд╕рд╛рд░рд╛рдВрд╢ "рдкреНрд▓реЗрдЯ":
рд╡рд┐рдХрд▓реНрдк | рд╕рд╛рдкреЗрдХреНрд╖ рд╕рдордп |
gccgo рдХреЛ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ | 85% |
рдкреАрдПрдЪрдкреА | 100% |
gc v1.2.1 | 210% |
gccgo | 350% |
gc v1 | 750% |
рдЗрд╕ рдкрд░, рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ, рд╕рдм рдХреБрдЫ, рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
UPD1 : 1.2.1 рдореЗрдВ рд╕рдВрдХрд▓рдХ рдХрд╛рдлреА рдмреЗрд╣рддрд░ рдкрд░рд┐рдгрд╛рдо рджреЗрддрд╛ рд╣реИ (рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛):
рдЫрд┐рдкрд╛ рд╣реБрдЖ рдкрд╛рдатЮЬ рд╕рдордп ред/dedup> / dev / null
рд╡рд╛рд╕реНрддрд╡рд┐рдХ 0m1.550s
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 0m1.528s
sys 0m0.020s
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдореЛрдВ рдпрд╛ рд╡рд┐рднрд┐рдиреНрди рд▓рд┐рдВрдХрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХрдВрдкрд╛рдЗрд▓рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЕрдВрддрд┐рдо рдЕрд╕реЗрдВрдмрд▓реА рдореЗрдВ рдХреБрдЫ рдЕрдВрддрд░ рд╣реЛрддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдЬрд╛рдирдХрд╛рд░реА: blog.golang.org/gccgo-in-gcc-471
рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рдЕрдЧрд░ рдЖрдк g86go = = 4.7.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред x86 (32/64) рдкрд░ рдЧреЛрд▓реНрдб рд▓рд┐рдВрдХрд░ рдХреЗ рд╕рд╛рде рдЬреЛрдбрд╝рд╛ред рд╕рдорд╕реНрдпрд╛рдПрдВ, рд╢рд╛рдпрдж, рдмрд╣реБрдд рдбрд░рд╛рд╡рдиреА рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдзрд┐рдХ рд▓рдХреНрд╖реНрдп рдордВрдЪ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдКрдкрд░ рджрд┐рдП рдЧрдП рд▓рд┐рдВрдХ рдкрд░ рдкреЛрд╕реНрдЯ рдореЗрдВ рд╡рд┐рд╡рд░рдгред