Optimizing SYB traversals is easy
The most widely used generic-programming system in the Haskell community, Scrap Your Boilerplate (SYB), also happens to be one of the slowest. Generic traversals in SYB are often an order of magnitude slower than equivalent handwritten, non-generic traversals. Thus while SYB allows the concise expre...
Gespeichert in:
| Veröffentlicht in: | Science of computer programming Jg. 112; S. 170 - 193 |
|---|---|
| Hauptverfasser: | , , |
| Format: | Journal Article |
| Sprache: | Englisch |
| Veröffentlicht: |
Elsevier B.V
15.11.2015
|
| Schlagworte: | |
| ISSN: | 0167-6423, 1872-7964 |
| Online-Zugang: | Volltext |
| Tags: |
Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!
|
| Abstract | The most widely used generic-programming system in the Haskell community, Scrap Your Boilerplate (SYB), also happens to be one of the slowest. Generic traversals in SYB are often an order of magnitude slower than equivalent handwritten, non-generic traversals. Thus while SYB allows the concise expression of many traversals, its use incurs a significant runtime cost. Existing techniques for optimizing other generic-programming systems are not able to eliminate this overhead.
This paper presents an optimization that eliminates this cost. Essentially, it is a partial evaluation that takes advantage of domain-specific knowledge about the structure of SYB. It optimizes SYB traversals to be as fast as handwritten, non-generic code, and benchmarks show that this optimization improves the speed of SYB traversals by an order of magnitude or more.
•We investigate the reasons behind the poor performance of SYB.•We develop an optimization for SYB using HERMIT.•Our optimization improves SYB's performance to match that of handwritten code.•We confirm these performance improvements with benchmarks.•We adapt GHC to perform our optimization without the need for HERMIT. |
|---|---|
| AbstractList | The most widely used generic-programming system in the Haskell community, Scrap Your Boilerplate (SYB), also happens to be one of the slowest. Generic traversals in SYB are often an order of magnitude slower than equivalent handwritten, non-generic traversals. Thus while SYB allows the concise expression of many traversals, its use incurs a significant runtime cost. Existing techniques for optimizing other generic-programming systems are not able to eliminate this overhead.
This paper presents an optimization that eliminates this cost. Essentially, it is a partial evaluation that takes advantage of domain-specific knowledge about the structure of SYB. It optimizes SYB traversals to be as fast as handwritten, non-generic code, and benchmarks show that this optimization improves the speed of SYB traversals by an order of magnitude or more.
•We investigate the reasons behind the poor performance of SYB.•We develop an optimization for SYB using HERMIT.•Our optimization improves SYB's performance to match that of handwritten code.•We confirm these performance improvements with benchmarks.•We adapt GHC to perform our optimization without the need for HERMIT. |
| Author | Farmer, Andrew Magalhães, José Pedro Adams, Michael D. |
| Author_xml | – sequence: 1 givenname: Michael D. surname: Adams fullname: Adams, Michael D. organization: School of Computing, University of Utah, United States – sequence: 2 givenname: Andrew surname: Farmer fullname: Farmer, Andrew email: afarmer@ittc.ku.edu organization: Information and Telecommunication Technology Center, University of Kansas, United States – sequence: 3 givenname: José Pedro surname: Magalhães fullname: Magalhães, José Pedro email: jpm@cs.ox.ac.uk organization: Department of Computer Science, University of Oxford, United Kingdom |
| BookMark | eNqFj8tOwzAQRS1UJNLCF7AJH5AwjmM7WbCAipdUqQtgwcryY4octUllR5XK1-NSVixgNbqae0ZzpmTSDz0SckmhpEDFdVdG6-1QVkB5CW0JwE5IRhtZFbIV9YRkqSULUVfsjExj7ABA1JJm5Gq5Hf3Gf_r-I395v8vHoHcYol7H3Mccddyfk9NVinjxM2fk7eH-df5ULJaPz_PbRWEZsLGwBoSobCUot1UNHGnLXcNXkmnjpECQNTWNsbZBLY1zjnJjHOcauU7rls1Ie7xrwxBjwJWyftSjH_r0k18rCurgqjr17aoOrgpalVwTy36x2-A3Ouz_oW6OFCatncdw6GBv0fmAdlRu8H_yX7hRcLI |
| CitedBy_id | crossref_primary_10_1145_3110273 crossref_primary_10_1145_3236780 |
| Cites_doi | 10.1017/S0956796802004331 10.1017/S0956796803004751 10.1145/954063.954069 10.1017/S0956796814000185 10.1145/5956.5957 |
| ContentType | Journal Article |
| Copyright | 2015 |
| Copyright_xml | – notice: 2015 |
| DBID | 6I. AAFTH AAYXX CITATION |
| DOI | 10.1016/j.scico.2015.09.003 |
| DatabaseName | ScienceDirect Open Access Titles Elsevier:ScienceDirect:Open Access CrossRef |
| DatabaseTitle | CrossRef |
| DatabaseTitleList | |
| DeliveryMethod | fulltext_linktorsrc |
| Discipline | Computer Science |
| EISSN | 1872-7964 |
| EndPage | 193 |
| ExternalDocumentID | 10_1016_j_scico_2015_09_003 S0167642315002622 |
| GroupedDBID | --K --M .DC .~1 0R~ 123 1B1 1RT 1~. 1~5 4.4 457 4G. 5VS 6I. 7-5 71M 8P~ 9JN AACTN AAEDW AAFTH AAIAV AAIKJ AAKOC AALRI AAOAW AAQFI AAXUO AAYFN ABBOA ABJNI ABMAC ABVKL ABYKQ ACDAQ ACGFS ACRLP ACZNC ADBBV ADEZE ADHUB AEBSH AEKER AENEX AEXQZ AFKWA AFTJW AGUBO AGYEJ AHHHB AHZHX AIALX AIEXJ AIKHN AITUG AJBFU AJOXV ALMA_UNASSIGNED_HOLDINGS AMFUW AMRAJ AOUOD AXJTR BKOJK BLXMC CS3 DU5 E.L EBS EFJIC EFLBG EJD EO8 EO9 EP2 EP3 FDB FEDTE FIRID FNPLU FYGXN G-Q GBLVA GBOLZ HVGLF IHE IXB J1W KOM LG9 M26 M41 MO0 N9A NCXOZ O-L O9- OAUVE OK1 OZT P-8 P-9 P2P PC. Q38 RIG ROL RPZ SDF SDG SDP SES SPC SPCBC SSV SSZ T5K TN5 XPP ZMT ~G- 9DU AAEDT AAQXK AATTM AAXKI AAYWO AAYXX ABFNM ABWVN ABXDB ACLOT ACNNM ACRPL ACVFH ADCNI ADMUD ADNMO ADVLN AEIPS AEUPX AFFNX AFJKZ AFPUW AGHFR AGQPQ AIGII AIIUN AKBMS AKRWK AKYEP ANKPU APXCP ASPBG AVWKF AZFZN CITATION EFKBS FGOYB G-2 HZ~ R2- SEW WUQ ZY4 ~HD |
| ID | FETCH-LOGICAL-c303t-cb0662c2615c2405e195d85f73abd76e0741b8bcc8ea7bddd15bbd55ae5a76e93 |
| ISICitedReferencesCount | 4 |
| ISICitedReferencesURI | http://www.webofscience.com/api/gateway?GWVersion=2&SrcApp=Summon&SrcAuth=ProQuest&DestLinkType=CitingArticles&DestApp=WOS_CPL&KeyUT=000364881700004&url=https%3A%2F%2Fcvtisr.summon.serialssolutions.com%2F%23%21%2Fsearch%3Fho%3Df%26include.ft.matches%3Dt%26l%3Dnull%26q%3D |
| ISSN | 0167-6423 |
| IngestDate | Sat Nov 29 07:21:24 EST 2025 Tue Nov 18 20:53:10 EST 2025 Fri Feb 23 02:37:17 EST 2024 |
| IsDoiOpenAccess | true |
| IsOpenAccess | true |
| IsPeerReviewed | true |
| IsScholarly | true |
| Keywords | Haskell Scrap Your Boilerplate (SYB) Partial evaluation Datatype-generic programming Optimization |
| Language | English |
| License | http://www.elsevier.com/open-access/userlicense/1.0 |
| LinkModel | OpenURL |
| MergedId | FETCHMERGED-LOGICAL-c303t-cb0662c2615c2405e195d85f73abd76e0741b8bcc8ea7bddd15bbd55ae5a76e93 |
| OpenAccessLink | https://dx.doi.org/10.1016/j.scico.2015.09.003 |
| PageCount | 24 |
| ParticipantIDs | crossref_citationtrail_10_1016_j_scico_2015_09_003 crossref_primary_10_1016_j_scico_2015_09_003 elsevier_sciencedirect_doi_10_1016_j_scico_2015_09_003 |
| PublicationCentury | 2000 |
| PublicationDate | 2015-11-15 |
| PublicationDateYYYYMMDD | 2015-11-15 |
| PublicationDate_xml | – month: 11 year: 2015 text: 2015-11-15 day: 15 |
| PublicationDecade | 2010 |
| PublicationTitle | Science of computer programming |
| PublicationYear | 2015 |
| Publisher | Elsevier B.V |
| Publisher_xml | – name: Elsevier B.V |
| References | Rodriguez, Jeuring, Jansson, Gerdes, Kiselyov, Oliveira (br0240) 2008 Turchin (br0300) Jun. 1986; 8 Augustsson (br0040) Nov. 2011 (br0130) 2013 Gill (br0110) 2009; vol. 5658 Adams, DuBuisson (br0010) 2012 Baker-Finch, Glynn, Peyton Jones (br0050) Mar. 2004; 14 Brown, Sampson (br0070) 2009 (br0100) 2013 Ma-ga-lhães, Holdermans, Jeuring, Löh (br0200) 2010 Turchin (br0290) Feb. 1979; 14 Chakravarty, Ditu, Leshchinskiy (br0080) 2009 Vytiniotis, Peyton Jones, Magalhães (br0310) 2012 Farmer, Gill, Komp, Sculthorpe (br0090) 2012 Jones (br0140) Sep. 1995; 8 Bolingbroke, Peyton Jones (br0060) 2010 Jonsson, Nordlander (br0160) 2011 Adams, Farmer, Magalhães (br0020) 2014 Peyton Jones (br0220) 2007 Rodriguez Yakushev (br0250) 2009 Alimarine, Smetsers (br0030) 2004; vol. 3125 Hinze, Löh, Oliveira (br0120) 2006; vol. 3945 Peyton Jones, Marlow (br0230) Jul. 2002; 12 Jones, Gomard, Sestof (br0150) 1993 Mitchell, Runciman (br0210) 2007 Santos (br0260) 1995 Magalhães (br0190) 2013 Sculthorpe, Frisby, Gill (br0280) Jul. 2014; 24 Sculthorpe, Farmer, Gill (br0270) 2013 Lämmel, Peyton Jones (br0180) 2004 Lämmel, Peyton Jones (br0170) 2003 Alimarine (10.1016/j.scico.2015.09.003_br0030) 2004; vol. 3125 Peyton Jones (10.1016/j.scico.2015.09.003_br0220) 2007 Jones (10.1016/j.scico.2015.09.003_br0140) 1995; 8 Sculthorpe (10.1016/j.scico.2015.09.003_br0280) 2014; 24 Magalhães (10.1016/j.scico.2015.09.003_br0190) 2013 Turchin (10.1016/j.scico.2015.09.003_br0290) 1979; 14 Vytiniotis (10.1016/j.scico.2015.09.003_br0310) 2012 Ma-ga-lhães (10.1016/j.scico.2015.09.003_br0200) 2010 Santos (10.1016/j.scico.2015.09.003_br0260) 1995 Bolingbroke (10.1016/j.scico.2015.09.003_br0060) 2010 Jones (10.1016/j.scico.2015.09.003_br0150) 1993 Farmer (10.1016/j.scico.2015.09.003_br0090) 2012 Baker-Finch (10.1016/j.scico.2015.09.003_br0050) 2004; 14 Hinze (10.1016/j.scico.2015.09.003_br0120) 2006; vol. 3945 Sculthorpe (10.1016/j.scico.2015.09.003_br0270) 2013 Jonsson (10.1016/j.scico.2015.09.003_br0160) 2011 Adams (10.1016/j.scico.2015.09.003_br0010) 2012 Gill (10.1016/j.scico.2015.09.003_br0110) 2009; vol. 5658 Peyton Jones (10.1016/j.scico.2015.09.003_br0230) 2002; 12 Adams (10.1016/j.scico.2015.09.003_br0020) 2014 Rodriguez Yakushev (10.1016/j.scico.2015.09.003_br0250) 2009 Turchin (10.1016/j.scico.2015.09.003_br0300) 1986; 8 Chakravarty (10.1016/j.scico.2015.09.003_br0080) Brown (10.1016/j.scico.2015.09.003_br0070) 2009 Rodriguez (10.1016/j.scico.2015.09.003_br0240) 2008 Augustsson (10.1016/j.scico.2015.09.003_br0040) Lämmel (10.1016/j.scico.2015.09.003_br0180) 2004 Lämmel (10.1016/j.scico.2015.09.003_br0170) 2003 Mitchell (10.1016/j.scico.2015.09.003_br0210) 2007 |
| References_xml | – volume: vol. 3945 start-page: 13 year: 2006 end-page: 29 ident: br0120 article-title: “Scrap your boilerplate” reloaded publication-title: Functional and Logic Programming – year: 1995 ident: br0260 article-title: Compilation by transformation in non-strict functional languages – volume: 14 start-page: 46 year: Feb. 1979 end-page: 54 ident: br0290 article-title: A supercompiler system based on the language REFAL publication-title: ACM SIGPLAN Not. – volume: 8 start-page: 229 year: Sep. 1995 end-page: 248 ident: br0140 article-title: Dictionary-free overloading by partial evaluation publication-title: LISP Symb. Comput. – volume: 24 start-page: 434 year: Jul. 2014 end-page: 473 ident: br0280 article-title: The Kansas University rewrite engine: a Haskell-embedded strategic programming language with custom closed universes publication-title: J. Funct. Program. – start-page: 71 year: 2014 end-page: 82 ident: br0020 article-title: Optimizing SYB is easy! publication-title: Proceedings of the ACM SIGPLAN 2014 Workshop on Partial Evaluation and Program Manipulation – volume: 12 start-page: 393 year: Jul. 2002 end-page: 434 ident: br0230 article-title: Secrets of the Glasgow Haskell Compiler inliner publication-title: J. Funct. Program. – start-page: 327 year: 2007 end-page: 337 ident: br0220 article-title: Call-pattern specialisation for Haskell programs publication-title: Proceedings of the 12th ACM SIGPLAN International Conference on Functional Programming – year: 2009 ident: br0080 article-title: Instant generics: fast and easy – start-page: 105 year: 2009 end-page: 116 ident: br0070 article-title: Alloy: fast generic transformations for Haskell publication-title: Proceedings of the 2nd ACM SIGPLAN Symposium on Haskell – start-page: 49 year: 2007 end-page: 60 ident: br0210 article-title: Uniform boilerplate and list processing publication-title: Proceedings of the ACM SIGPLAN Workshop on Haskell Workshop – start-page: 135 year: 2010 end-page: 146 ident: br0060 article-title: Supercompilation by evaluation publication-title: Proceedings of the Third ACM Haskell Symposium on Haskell – start-page: 1 year: 2012 end-page: 12 ident: br0090 article-title: The HERMIT in the machine: a plugin for the interactive transformation of GHC core language programs publication-title: Proceedings of the 2012 Haskell Symposium – volume: vol. 5658 start-page: 285 year: 2009 end-page: 309 ident: br0110 article-title: A Haskell hosted DSL for writing transformation systems publication-title: Domain-Specific Languages – year: 2009 ident: br0250 article-title: Towards getting generic programming ready for prime time – start-page: 341 year: 2012 end-page: 352 ident: br0310 article-title: Equality proofs and deferred type errors: a compiler pearl publication-title: Proceedings of the 17th ACM SIGPLAN International Conference on Functional Programming – year: 2013 ident: br0100 article-title: The glorious Glasgow Haskell compilation system user's guide – start-page: 13 year: 2012 end-page: 24 ident: br0010 article-title: Template your boilerplate: using Template Haskell for efficient generic programming publication-title: Proceedings of the 2012 Symposium on Haskell Symposium – year: 2013 ident: br0270 article-title: The HERMIT in the tree: mechanizing program transformations in the GHC core language publication-title: Implementation and Application of Functional Languages – volume: 14 start-page: 211 year: Mar. 2004 end-page: 245 ident: br0050 article-title: Constructed product result analysis for Haskell publication-title: J. Funct. Program. – volume: vol. 3125 start-page: 16 year: 2004 end-page: 31 ident: br0030 article-title: Optimizing generic functions publication-title: Mathematics of Program Construction – year: 2013 ident: br0130 article-title: Hackage: total downloads – start-page: 33 year: 2010 end-page: 42 ident: br0200 article-title: Optimizing generics is easy! publication-title: Proceedings of the 2010 ACM SIGPLAN Workshop on Partial Evaluation and Program Manipulation – year: Nov. 2011 ident: br0040 – start-page: 104 year: 2013 end-page: 121 ident: br0190 article-title: Optimisation of generic programs through inlining publication-title: Implementation and Application of Functional Languages – year: 2008 ident: br0240 article-title: Comparing libraries for generic programming in Haskell – start-page: 26 year: 2003 end-page: 37 ident: br0170 article-title: Scrap your boilerplate: a practical design pattern for generic programming publication-title: Proceedings of the 2003 ACM SIGPLAN International Workshop on Types in Languages Design and Implementation – start-page: 244 year: 2004 end-page: 255 ident: br0180 article-title: Scrap more boilerplate: reflection, zips, and generalised casts publication-title: Proceedings of the Ninth ACM SIGPLAN International Conference on Functional Programming – start-page: 33 year: 2011 end-page: 42 ident: br0160 article-title: Taming code explosion in supercompilation publication-title: Proceedings of the 20th ACM SIGPLAN Workshop on Partial Evaluation and Program Manipulation – volume: 8 start-page: 292 year: Jun. 1986 end-page: 325 ident: br0300 article-title: The concept of a supercompiler publication-title: ACM Trans. Program. Lang. Syst. – year: 1993 ident: br0150 article-title: Partial Evaluation and Automatic Program Generation publication-title: Prentice-Hall International Series in Computer Science – start-page: 26 year: 2003 ident: 10.1016/j.scico.2015.09.003_br0170 article-title: Scrap your boilerplate: a practical design pattern for generic programming – year: 2008 ident: 10.1016/j.scico.2015.09.003_br0240 – start-page: 341 year: 2012 ident: 10.1016/j.scico.2015.09.003_br0310 article-title: Equality proofs and deferred type errors: a compiler pearl – year: 2009 ident: 10.1016/j.scico.2015.09.003_br0250 – volume: vol. 3125 start-page: 16 year: 2004 ident: 10.1016/j.scico.2015.09.003_br0030 article-title: Optimizing generic functions – start-page: 71 year: 2014 ident: 10.1016/j.scico.2015.09.003_br0020 article-title: Optimizing SYB is easy! – start-page: 327 year: 2007 ident: 10.1016/j.scico.2015.09.003_br0220 article-title: Call-pattern specialisation for Haskell programs – volume: 12 start-page: 393 issue: 4–5 year: 2002 ident: 10.1016/j.scico.2015.09.003_br0230 article-title: Secrets of the Glasgow Haskell Compiler inliner publication-title: J. Funct. Program. doi: 10.1017/S0956796802004331 – volume: 14 start-page: 211 issue: 02 year: 2004 ident: 10.1016/j.scico.2015.09.003_br0050 article-title: Constructed product result analysis for Haskell publication-title: J. Funct. Program. doi: 10.1017/S0956796803004751 – start-page: 244 year: 2004 ident: 10.1016/j.scico.2015.09.003_br0180 article-title: Scrap more boilerplate: reflection, zips, and generalised casts – volume: 14 start-page: 46 issue: 2 year: 1979 ident: 10.1016/j.scico.2015.09.003_br0290 article-title: A supercompiler system based on the language REFAL publication-title: ACM SIGPLAN Not. doi: 10.1145/954063.954069 – volume: 8 start-page: 229 issue: 3 year: 1995 ident: 10.1016/j.scico.2015.09.003_br0140 article-title: Dictionary-free overloading by partial evaluation publication-title: LISP Symb. Comput. – start-page: 1 year: 2012 ident: 10.1016/j.scico.2015.09.003_br0090 article-title: The HERMIT in the machine: a plugin for the interactive transformation of GHC core language programs – ident: 10.1016/j.scico.2015.09.003_br0040 – volume: 24 start-page: 434 issue: 04 year: 2014 ident: 10.1016/j.scico.2015.09.003_br0280 article-title: The Kansas University rewrite engine: a Haskell-embedded strategic programming language with custom closed universes publication-title: J. Funct. Program. doi: 10.1017/S0956796814000185 – volume: 8 start-page: 292 issue: 3 year: 1986 ident: 10.1016/j.scico.2015.09.003_br0300 article-title: The concept of a supercompiler publication-title: ACM Trans. Program. Lang. Syst. doi: 10.1145/5956.5957 – year: 1993 ident: 10.1016/j.scico.2015.09.003_br0150 article-title: Partial Evaluation and Automatic Program Generation – volume: vol. 3945 start-page: 13 year: 2006 ident: 10.1016/j.scico.2015.09.003_br0120 article-title: “Scrap your boilerplate” reloaded – start-page: 33 year: 2011 ident: 10.1016/j.scico.2015.09.003_br0160 article-title: Taming code explosion in supercompilation – year: 1995 ident: 10.1016/j.scico.2015.09.003_br0260 – year: 2013 ident: 10.1016/j.scico.2015.09.003_br0270 article-title: The HERMIT in the tree: mechanizing program transformations in the GHC core language – start-page: 104 year: 2013 ident: 10.1016/j.scico.2015.09.003_br0190 article-title: Optimisation of generic programs through inlining – start-page: 105 year: 2009 ident: 10.1016/j.scico.2015.09.003_br0070 article-title: Alloy: fast generic transformations for Haskell – start-page: 13 year: 2012 ident: 10.1016/j.scico.2015.09.003_br0010 article-title: Template your boilerplate: using Template Haskell for efficient generic programming – start-page: 49 year: 2007 ident: 10.1016/j.scico.2015.09.003_br0210 article-title: Uniform boilerplate and list processing – start-page: 135 year: 2010 ident: 10.1016/j.scico.2015.09.003_br0060 article-title: Supercompilation by evaluation – start-page: 33 year: 2010 ident: 10.1016/j.scico.2015.09.003_br0200 article-title: Optimizing generics is easy! – ident: 10.1016/j.scico.2015.09.003_br0080 – volume: vol. 5658 start-page: 285 year: 2009 ident: 10.1016/j.scico.2015.09.003_br0110 article-title: A Haskell hosted DSL for writing transformation systems |
| SSID | ssj0006471 |
| Score | 2.0940807 |
| Snippet | The most widely used generic-programming system in the Haskell community, Scrap Your Boilerplate (SYB), also happens to be one of the slowest. Generic... |
| SourceID | crossref elsevier |
| SourceType | Enrichment Source Index Database Publisher |
| StartPage | 170 |
| SubjectTerms | Datatype-generic programming Haskell Optimization Partial evaluation Scrap Your Boilerplate (SYB) |
| Title | Optimizing SYB traversals is easy |
| URI | https://dx.doi.org/10.1016/j.scico.2015.09.003 |
| Volume | 112 |
| WOSCitedRecordID | wos000364881700004&url=https%3A%2F%2Fcvtisr.summon.serialssolutions.com%2F%23%21%2Fsearch%3Fho%3Df%26include.ft.matches%3Dt%26l%3Dnull%26q%3D |
| hasFullText | 1 |
| inHoldings | 1 |
| isFullTextHit | |
| isPrint | |
| journalDatabaseRights | – providerCode: PRVESC databaseName: Elsevier SD Freedom Collection Journals 2021 customDbUrl: eissn: 1872-7964 dateEnd: 20180131 omitProxy: false ssIdentifier: ssj0006471 issn: 0167-6423 databaseCode: AIEXJ dateStart: 19950201 isFulltext: true titleUrlDefault: https://www.sciencedirect.com providerName: Elsevier |
| link | http://cvtisr.summon.serialssolutions.com/2.0.0/link/0/eLvHCXMwtV3dT9swELemdg-88LUhvoaCxFsXlDR1Yj-WAdomxJBWUHmKbOfQWq0BNQUh_nrOX2mnThUg8WJVadw6vst9_nxHyIGgEpUQg5BzUGEHZBRK5Bwc2kmnEyVcGbT71Vl2fs76fX7hQOyVaSeQlSV7fOR370pqvIbE1kdnX0Hu-kfxAn5GouOIZMfxRYT_hUJgNHgylbavj3QPCI280FWSB1ULRPVPHte_2g5crvs7eMjWyCs1k813IRmHsm8dH9aEF2PXgGUGG2lC3Kh7_pg8fAI-2WDT8q0LKMa3s_GGmOqDd_bEpQ2CzR2EsXFJlLfoylhZBVaWsgyNd26LlNfC1oGmrbiMbdMQp3lj2ytxTqjb-MIQ3X18OTQaj5rStFEy1WE1svC3XoleCBq66F62UTs32xnlrEGa3R8n_Z-1mk6tN16v3JekMuC_ub_6v9kyY4r0Vsmy8yGCrqX9GvkA5TpZ8f05AkfTT2R_ygoBskIwZYVgUAWaFT6Ty9OT3rfvoWuJESq0NSahkrpiv0K3lyq0xSjEnBaM3mSJkEWWgjYQJZNKMRCZLIoiplIWlAqgAr_myQZplLclbJIgE5LyG5BFItJOJCMODNAaF-jiKpoy2CJt_8S5cvXidduSv7kHBg5zs0253qY84rrM7Bb5Wk-6s-VSFt-e-q3MncVnLbkcab9o4vZbJ-6QpSlT75LGZHwPX8hH9TAZVOM9xyPP4OZ23Q |
| linkProvider | Elsevier |
| openUrl | ctx_ver=Z39.88-2004&ctx_enc=info%3Aofi%2Fenc%3AUTF-8&rfr_id=info%3Asid%2Fsummon.serialssolutions.com&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=article&rft.atitle=Optimizing+SYB+traversals+is+easy&rft.jtitle=Science+of+computer+programming&rft.au=Adams%2C+Michael+D.&rft.au=Farmer%2C+Andrew&rft.au=Magalh%C3%A3es%2C+Jos%C3%A9+Pedro&rft.date=2015-11-15&rft.pub=Elsevier+B.V&rft.issn=0167-6423&rft.eissn=1872-7964&rft.volume=112&rft.spage=170&rft.epage=193&rft_id=info:doi/10.1016%2Fj.scico.2015.09.003&rft.externalDocID=S0167642315002622 |
| thumbnail_l | http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/lc.gif&issn=0167-6423&client=summon |
| thumbnail_m | http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/mc.gif&issn=0167-6423&client=summon |
| thumbnail_s | http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/sc.gif&issn=0167-6423&client=summon |