Purity analysis for JavaScript through abstract interpretation

We present a static analysis for determining whether and to what extent functions in JavaScript programs are pure. To this end, the analysis classifies functions as pure functions, observers, or procedures. A function is pure if none of its executions generate or depend upon externally observable si...

Celý popis

Uloženo v:
Podrobná bibliografie
Vydáno v:Journal of software : evolution and process Ročník 29; číslo 12
Hlavní autoři: Nicolay, Jens, Stiévenart, Quentin, De Meuter, Wolfgang, De Roover, Coen
Médium: Journal Article
Jazyk:angličtina
Vydáno: Chichester Wiley Subscription Services, Inc 01.12.2017
Témata:
ISSN:2047-7473, 2047-7481
On-line přístup:Získat plný text
Tagy: Přidat tag
Žádné tagy, Buďte první, kdo vytvoří štítek k tomuto záznamu!
Abstract We present a static analysis for determining whether and to what extent functions in JavaScript programs are pure. To this end, the analysis classifies functions as pure functions, observers, or procedures. A function is pure if none of its executions generate or depend upon externally observable side effects. A function is an observer as soon as one of its executions depends on an external side effect, but none of its executions generate observable side effects. Otherwise, the function is classified as a procedure. Function executions and associated callers are found by traversing all reachable function execution contexts on the call stack at the point where an effect occurs. Our approach is based on a flow analysis that, in addition to computing traditional control and value flow, keeps track of read and write effects. To increase the precision of our purity analysis, we combine it with an intraprocedural analysis that determines freshness of variables and objects. We formalize the core aspects of our technique and discuss its implementation and results on common JavaScript benchmarks. Results show that our approach is capable of determining function purity in the presence of higher‐order functions, dynamic property expressions, and prototypal inheritance. When compared with existing purity analyses, we find that our approach is as precise or more precise than the existing analyses. We present a static analysis for determining whether and to what extent functions in JavaScript programs are pure. Our approach is based on a flow analysis that, in addition to computing traditional control and value flow, keeps track of read and write effects. When compared to existing purity analyses, we find that our approach is as precise as or more precise than the existing analyses.
AbstractList We present a static analysis for determining whether and to what extent functions in JavaScript programs are pure. To this end, the analysis classifies functions as pure functions, observers, or procedures. A function is pure if none of its executions generate or depend upon externally observable side effects. A function is an observer as soon as one of its executions depends on an external side effect, but none of its executions generate observable side effects. Otherwise, the function is classified as a procedure. Function executions and associated callers are found by traversing all reachable function execution contexts on the call stack at the point where an effect occurs. Our approach is based on a flow analysis that, in addition to computing traditional control and value flow, keeps track of read and write effects. To increase the precision of our purity analysis, we combine it with an intraprocedural analysis that determines freshness of variables and objects. We formalize the core aspects of our technique and discuss its implementation and results on common JavaScript benchmarks. Results show that our approach is capable of determining function purity in the presence of higher-order functions, dynamic property expressions, and prototypal inheritance. When compared with existing purity analyses, we find that our approach is as precise or more precise than the existing analyses.
We present a static analysis for determining whether and to what extent functions in JavaScript programs are pure. To this end, the analysis classifies functions as pure functions, observers, or procedures. A function is pure if none of its executions generate or depend upon externally observable side effects. A function is an observer as soon as one of its executions depends on an external side effect, but none of its executions generate observable side effects. Otherwise, the function is classified as a procedure. Function executions and associated callers are found by traversing all reachable function execution contexts on the call stack at the point where an effect occurs. Our approach is based on a flow analysis that, in addition to computing traditional control and value flow, keeps track of read and write effects. To increase the precision of our purity analysis, we combine it with an intraprocedural analysis that determines freshness of variables and objects. We formalize the core aspects of our technique and discuss its implementation and results on common JavaScript benchmarks. Results show that our approach is capable of determining function purity in the presence of higher‐order functions, dynamic property expressions, and prototypal inheritance. When compared with existing purity analyses, we find that our approach is as precise or more precise than the existing analyses. We present a static analysis for determining whether and to what extent functions in JavaScript programs are pure. Our approach is based on a flow analysis that, in addition to computing traditional control and value flow, keeps track of read and write effects. When compared to existing purity analyses, we find that our approach is as precise as or more precise than the existing analyses.
Author Nicolay, Jens
De Meuter, Wolfgang
Stiévenart, Quentin
De Roover, Coen
Author_xml – sequence: 1
  givenname: Jens
  orcidid: 0000-0003-4653-5820
  surname: Nicolay
  fullname: Nicolay, Jens
  email: jnicolay@vub.ac.be
  organization: Vrije Universiteit Brussel
– sequence: 2
  givenname: Quentin
  surname: Stiévenart
  fullname: Stiévenart, Quentin
  organization: Vrije Universiteit Brussel
– sequence: 3
  givenname: Wolfgang
  surname: De Meuter
  fullname: De Meuter, Wolfgang
  organization: Vrije Universiteit Brussel
– sequence: 4
  givenname: Coen
  surname: De Roover
  fullname: De Roover, Coen
  organization: Vrije Universiteit Brussel
BookMark eNp1kN1LwzAUxYMoOOfAP6Hgiy-dSdt89EWQ4ScTxelzuIuJy-iamqRK_3s7Kz6I3pd7OfzO5XAO0G7tao3QEcFTgnF2GjZ-SoQod9AowwVPeSHI7s_N8300CWGN-2EZpgUdobOH1tvYJVBD1QUbEuN8cgvvsFDeNjGJK-_a11UCyxA9qJjYOmrfeB0hWlcfoj0DVdCT7z1Gz5cXT7PrdH5_dTM7n6cqK_MyVYJylhHKhFYEA2R0aRgYkoleMoIXrFRcEeC6BM2YEcsXRYEyTQuNtYZ8jI6Hv413b60OUa5d6_vMQZKSs5zyEvOemg6U8i4Er41UdsjZZ7eVJFhua5J9TXJbU284-WVovN2A7_5C0wH9sJXu_uXk4u7xi_8EiBt5DQ
CitedBy_id crossref_primary_10_1016_j_jss_2018_10_001
crossref_primary_10_1007_s13198_025_02823_3
Cites_doi 10.1145/3088515.3088521
10.1007/978-3-642-24276-2_9
10.1109/SP.2012.10
10.1109/SCAM.2011.13
10.1145/2635868.2635904
10.1145/41625.41654
10.1145/2489804.2489808
10.1109/ASE.2015.9
10.1145/1159803.1159807
10.1145/604131.604133
10.1145/1925844.1926405
10.1145/2837614.2837631
10.1007/978-3-540-30579-8_14
10.1007/BF00277387
10.1007/978-3-642-23702-7_6
10.1007/978-3-642-03237-0_17
10.1007/978-3-642-20398-5_4
10.1007/978-3-642-11957-6_30
10.1145/1321631.1321649
10.1002/(SICI)1096-9128(199711)9:11<1031::AID-CPE354>3.0.CO;2-O
10.1145/512950.512973
10.1145/2384616.2384680
10.1145/1932681.1863553
10.1007/BF01808954
10.1007/978-3-642-19861-8_7
10.1145/1455770.1455793
10.1109/SCAM.2015.7335406
10.1145/966049.777395
10.1145/319838.319848
10.1007/11766155_23
ContentType Journal Article
Copyright Copyright © 2017 John Wiley & Sons, Ltd.
Copyright_xml – notice: Copyright © 2017 John Wiley & Sons, Ltd.
DBID AAYXX
CITATION
7SC
8FD
JQ2
L7M
L~C
L~D
DOI 10.1002/smr.1889
DatabaseName CrossRef
Computer and Information Systems Abstracts
Technology Research Database
ProQuest Computer Science Collection
Advanced Technologies Database with Aerospace
Computer and Information Systems Abstracts – Academic
Computer and Information Systems Abstracts Professional
DatabaseTitle CrossRef
Computer and Information Systems Abstracts
Technology Research Database
Computer and Information Systems Abstracts – Academic
Advanced Technologies Database with Aerospace
ProQuest Computer Science Collection
Computer and Information Systems Abstracts Professional
DatabaseTitleList Computer and Information Systems Abstracts
CrossRef

DeliveryMethod fulltext_linktorsrc
Discipline Computer Science
EISSN 2047-7481
EndPage n/a
ExternalDocumentID 10_1002_smr_1889
SMR1889
Genre article
GrantInformation_xml – fundername: IWT Vlaanderen
– fundername: Fonds Wetenschappelijk Onderzoek
– fundername: Innoviris
GroupedDBID .3N
.4S
.GA
.Y3
05W
0R~
10A
1OC
31~
33P
3SF
50Z
52O
52U
8-0
8-1
8-3
8-4
8-5
930
A03
AAESR
AAEVG
AAHHS
AAHQN
AAMNL
AANHP
AANLZ
AAONW
AASGY
AAXRX
AAYCA
AAZKR
ABCUV
ABPVW
ACAHQ
ACBWZ
ACCFJ
ACCZN
ACPOU
ACRPL
ACXBN
ACXQS
ACYXJ
ADBBV
ADEOM
ADIZJ
ADKYN
ADMGS
ADNMO
ADOZA
ADXAS
ADZMN
AEEZP
AEIGN
AEIMD
AEQDE
AEUQT
AEUYR
AFBPY
AFFPM
AFGKR
AFPWT
AFWVQ
AFZJQ
AHBTC
AITYG
AIURR
AIWBW
AJBDE
AJXKR
ALMA_UNASSIGNED_HOLDINGS
ALUQN
ALVPJ
AMBMR
AMYDB
ARCSS
ATUGU
AUFTA
AZBYB
AZFZN
BAFTC
BDRZF
BHBCM
BMNLL
BMXJE
BRXPI
BY8
D-E
D-F
DCZOG
DPXWK
DR2
DRFUL
DRSTM
EBS
EDO
EJD
F00
F01
F04
G-S
G.N
GODZA
HGLYW
HZ~
I-F
LATKE
LEEKS
LH4
LITHE
LOXES
LUTES
LW6
LYRES
MEWTI
MRFUL
MRSTM
MSFUL
MSSTM
MXFUL
MXSTM
N04
N05
O66
O9-
P2W
P2X
PQQKQ
Q.N
Q11
QB0
R.K
ROL
SUPJJ
TUS
W8V
W99
WBKPD
WIH
WIK
WOHZO
WXSBR
WYISQ
WZISG
~WT
AAYXX
ADMLS
AEYWJ
AGHNM
AGQPQ
AGYGG
CITATION
O8X
7SC
8FD
JQ2
L7M
L~C
L~D
ID FETCH-LOGICAL-c2939-c857621568ec10aa25bf6af128568f87469c7c1a7e9ae66f8bdc5a56e54e0eea3
IEDL.DBID DRFUL
ISICitedReferencesCount 7
ISICitedReferencesURI http://www.webofscience.com/api/gateway?GWVersion=2&SrcApp=Summon&SrcAuth=ProQuest&DestLinkType=CitingArticles&DestApp=WOS_CPL&KeyUT=000418091000003&url=https%3A%2F%2Fcvtisr.summon.serialssolutions.com%2F%23%21%2Fsearch%3Fho%3Df%26include.ft.matches%3Dt%26l%3Dnull%26q%3D
ISSN 2047-7473
IngestDate Sun Nov 30 04:07:17 EST 2025
Tue Nov 18 19:53:49 EST 2025
Sat Nov 29 03:00:21 EST 2025
Wed Jan 22 16:40:14 EST 2025
IsPeerReviewed true
IsScholarly true
Issue 12
Language English
License http://onlinelibrary.wiley.com/termsAndConditions#vor
LinkModel DirectLink
MergedId FETCHMERGED-LOGICAL-c2939-c857621568ec10aa25bf6af128568f87469c7c1a7e9ae66f8bdc5a56e54e0eea3
Notes ObjectType-Article-1
SourceType-Scholarly Journals-1
ObjectType-Feature-2
content type line 14
ORCID 0000-0003-4653-5820
PQID 1976357907
PQPubID 2034650
PageCount 34
ParticipantIDs proquest_journals_1976357907
crossref_citationtrail_10_1002_smr_1889
crossref_primary_10_1002_smr_1889
wiley_primary_10_1002_smr_1889_SMR1889
PublicationCentury 2000
PublicationDate December 2017
2017-12-00
20171201
PublicationDateYYYYMMDD 2017-12-01
PublicationDate_xml – month: 12
  year: 2017
  text: December 2017
PublicationDecade 2010
PublicationPlace Chichester
PublicationPlace_xml – name: Chichester
PublicationTitle Journal of software : evolution and process
PublicationYear 2017
Publisher Wiley Subscription Services, Inc
Publisher_xml – name: Wiley Subscription Services, Inc
References 1989; 2
2012
2011
1990; 27
2010
2009
1987
2008
1986
2007
2006
2017
2005
2016
2004
2015
2014
2003
1991
2013
1997; 9
1977
e_1_2_13_25_1
e_1_2_13_24_1
e_1_2_13_27_1
e_1_2_13_26_1
e_1_2_13_21_1
e_1_2_13_20_1
e_1_2_13_23_1
e_1_2_13_22_1
e_1_2_13_9_1
e_1_2_13_8_1
e_1_2_13_7_1
e_1_2_13_6_1
e_1_2_13_17_1
e_1_2_13_18_1
e_1_2_13_19_1
e_1_2_13_13_1
e_1_2_13_36_1
e_1_2_13_14_1
e_1_2_13_35_1
e_1_2_13_15_1
e_1_2_13_38_1
e_1_2_13_16_1
e_1_2_13_37_1
e_1_2_13_32_1
e_1_2_13_10_1
e_1_2_13_31_1
e_1_2_13_11_1
e_1_2_13_34_1
e_1_2_13_12_1
e_1_2_13_33_1
e_1_2_13_30_1
e_1_2_13_5_1
e_1_2_13_4_1
e_1_2_13_3_1
e_1_2_13_2_1
e_1_2_13_29_1
e_1_2_13_28_1
References_xml – year: 2011
– start-page: 199
  year: 2005
  end-page: 215
– start-page: 31
  year: 2017
  end-page: 36
– start-page: 104
  year: 2007
  end-page: 113
– start-page: 321
  year: 2006
  end-page: 336
– year: 2009
– start-page: 137
  year: 2011
  end-page: 152
– start-page: 570
  year: 2010
  end-page: 589
– year: 1987
– start-page: 3
  year: 2012
  end-page: 17
– year: 2003
– start-page: 691
  year: 2016
  end-page: 704
– volume: 27
  start-page: 505
  issue: 6
  year: 1990
  end-page: 517
  article-title: Referential transparency, definiteness and unfoldability
  publication-title: Acta Inform
– year: 1977
– year: 2014
– year: 2010
– year: 2012
– start-page: 11
  year: 2004
  end-page: 19
– year: 1986
– start-page: 41
  year: 2011
  end-page: 55
– start-page: 7
  year: 2011
  end-page: 24
– year: 2008
– year: 2006
– start-page: 104
  year: 2011
  end-page: 123
– volume: 9
  start-page: 1031
  issue: 11
  year: 1997
  end-page: 1045
  article-title: A java bytecode optimizer using side effect analysis
  publication-title: Concurr Pract Exper
– volume: 2
  start-page: 179
  issue: 3‐4
  year: 1989
  end-page: 396
  article-title: The interprocedural analysis and automatic parallelization of scheme programs
  publication-title: LISP Symbol Comput
– year: 1991
– year: 2017
– start-page: 10
  year: 2009
  end-page: 22
– year: 2015
– year: 2013
– ident: e_1_2_13_31_1
  doi: 10.1145/3088515.3088521
– ident: e_1_2_13_25_1
  doi: 10.1007/978-3-642-24276-2_9
– ident: e_1_2_13_2_1
– ident: e_1_2_13_7_1
  doi: 10.1109/SP.2012.10
– ident: e_1_2_13_38_1
  doi: 10.1109/SCAM.2011.13
– ident: e_1_2_13_28_1
  doi: 10.1145/2635868.2635904
– ident: e_1_2_13_17_1
  doi: 10.1145/41625.41654
– ident: e_1_2_13_24_1
  doi: 10.1145/2489804.2489808
– ident: e_1_2_13_35_1
  doi: 10.1109/ASE.2015.9
– ident: e_1_2_13_16_1
– ident: e_1_2_13_30_1
  doi: 10.1145/1159803.1159807
– ident: e_1_2_13_37_1
  doi: 10.1145/604131.604133
– ident: e_1_2_13_18_1
– ident: e_1_2_13_11_1
  doi: 10.1145/1925844.1926405
– ident: e_1_2_13_32_1
  doi: 10.1145/2837614.2837631
– ident: e_1_2_13_4_1
  doi: 10.1007/978-3-540-30579-8_14
– ident: e_1_2_13_29_1
– ident: e_1_2_13_36_1
  doi: 10.1007/BF00277387
– ident: e_1_2_13_20_1
– ident: e_1_2_13_22_1
  doi: 10.1007/978-3-642-23702-7_6
– ident: e_1_2_13_27_1
  doi: 10.1007/978-3-642-03237-0_17
– ident: e_1_2_13_8_1
– ident: e_1_2_13_9_1
  doi: 10.1007/978-3-642-20398-5_4
– ident: e_1_2_13_15_1
  doi: 10.1007/978-3-642-11957-6_30
– ident: e_1_2_13_5_1
  doi: 10.1145/1321631.1321649
– ident: e_1_2_13_10_1
  doi: 10.1002/(SICI)1096-9128(199711)9:11<1031::AID-CPE354>3.0.CO;2-O
– ident: e_1_2_13_13_1
  doi: 10.1145/512950.512973
– ident: e_1_2_13_23_1
  doi: 10.1145/2384616.2384680
– ident: e_1_2_13_19_1
  doi: 10.1145/1932681.1863553
– ident: e_1_2_13_12_1
  doi: 10.1007/BF01808954
– ident: e_1_2_13_21_1
  doi: 10.1007/978-3-642-19861-8_7
– ident: e_1_2_13_33_1
– ident: e_1_2_13_3_1
  doi: 10.1145/1455770.1455793
– ident: e_1_2_13_14_1
  doi: 10.1109/SCAM.2015.7335406
– ident: e_1_2_13_34_1
  doi: 10.1145/966049.777395
– ident: e_1_2_13_26_1
  doi: 10.1145/319838.319848
– ident: e_1_2_13_6_1
  doi: 10.1007/11766155_23
SSID ssj0000620545
Score 2.0805273
Snippet We present a static analysis for determining whether and to what extent functions in JavaScript programs are pure. To this end, the analysis classifies...
SourceID proquest
crossref
wiley
SourceType Aggregation Database
Enrichment Source
Index Database
Publisher
SubjectTerms abstract interpretation
Freshness
freshness analysis
Java
JavaScript
Purity
purity analysis
side effect analysis
Side effects
Static code analysis
Title Purity analysis for JavaScript through abstract interpretation
URI https://onlinelibrary.wiley.com/doi/abs/10.1002%2Fsmr.1889
https://www.proquest.com/docview/1976357907
Volume 29
WOSCitedRecordID wos000418091000003&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: PRVWIB
  databaseName: Wiley Online Library Full Collection 2020
  customDbUrl:
  eissn: 2047-7481
  dateEnd: 99991231
  omitProxy: false
  ssIdentifier: ssj0000620545
  issn: 2047-7473
  databaseCode: DRFUL
  dateStart: 20120101
  isFulltext: true
  titleUrlDefault: https://onlinelibrary.wiley.com
  providerName: Wiley-Blackwell
link http://cvtisr.summon.serialssolutions.com/2.0.0/link/0/eLvHCXMwpV3fS8MwED5088EX50-cTokg-lTXH2mTvAiiDpE5xuZkbyW9pTDQKevc32_SppsDBcGnQrnQktzl-y5cvgM4ZzJIKROeE0iaOBSpdAS6zEHB0VeMU5orMb20WafDh0PRtVWV5i5MoQ-xOHAzkZHv1ybAZZI1l6Kh2dv0yuNcrEPV125LK1C967UG7cUJixv5mo-YGkbfyBFo3hyU6rOu3yyHr-LRkmR-p6o51rRq__nLbdiyDJPcFC6xA2tqsgu1snsDscG8B9fdvHEdkVaWhGj6Sh7lXPbzjYTYDj5Ef2lmrlKR8Up94j4MWvfPtw-O7abgoIZ04SDXqYUG-Igr9Fwp_TBJI5lqfNKvUs50nowMPcmUkCqKUp6MMJRhpEKqXKVkcACVyftEHQJBQUNGTYsyI9imUo6UJjykI8SRpjdYh8tyTmO0UuOm48VrXIgk-7GelthMSx3OFpYfhbzGDzaNclliG2BZ7IlcSU-n9nW4yBfg1_Fx_6lnnkd_NTyGTd-Ad1600oDKbPqpTmAD57NxNj21bvYFagbW6A
linkProvider Wiley-Blackwell
linkToHtml http://cvtisr.summon.serialssolutions.com/2.0.0/link/0/eLvHCXMwpV1tS8MwED7mFPSL8xWnUyOIfqrrS9okCIKoY-o2xl5k30p6S2GgU7a532_StZsDBcFPhXKBcrnL89yRPgdwzqQXUyYcy5M0sihSaQm0mYWCo6sYpzRRYnqpsUaD93qimYPr7F-YmT7EvOFmMiM5r02Cm4Z0eaEaOn4bXTmcixVYpTqK_Dys3rcq3dq8xWIHriYk5hKja_QINHH2MvlZ2y1ny5cBacEyv3PVBGwqhX995hZsphyT3M6CYhtyargDhWx-A0nTeRdumsnoOiJTYRKiCSx5klPZTo4Sks7wITIy_RCckMHSDcU96FYeOndVK52nYKEGdWEh18WFhviAK3RsKV0_igMZa4TSr2LOdKWMDB3JlJAqCGIe9dGXfqB8qmylpLcP-eH7UB0AQUF9Rs2QMiPZpmKOlEbcp33EviY4WITLzKkhpmLjZubFaziTSXZD7ZbQuKUIZ3PLj5nAxg82pWxfwjTFxqEjEi09XdwX4SLZgV_Xh-16yzwP_2p4CuvVTr0W1h4bz0ew4RooT66wlCA_GX2qY1jD6WQwHp2kMfcFSrPa2A
linkToPdf http://cvtisr.summon.serialssolutions.com/2.0.0/link/0/eLvHCXMwpV3fS8MwED7mJuKL8ydOp0YQfapru7RJEARxDn_MMTYneyvpNYWBzrHN_f0mXbs5UBB8KpQLlEsu33fH9TuAMyarMWXCsaqShhZFKi2BNrNQcHQV45QmSkyvDdZs8l5PtHJwlf0LM9OHmBfcTGQk97UJcDWM4spCNXT8Prp0OBcrUKCe8HVUFmrtercxL7HYvqsJiWlidI0egSbO1Ux-1nYr2fJlQFqwzO9cNQGbevFfn7kJGynHJDezQ7EFOTXYhmI2v4Gk4bwD161kdB2RqTAJ0QSWPMqp7CRXCUln-BAZmnoITkh_qUNxF7r1u5fbeyudp2ChBnVhIdfJhYZ4nyt0bCldL4x9GWuE0q9iznSmjAwdyZSQyvdjHkboSc9XHlW2UrK6B_nBx0DtA0FBPUbNkDIj2aZijpSG3KMRYqQJDpbgInNqgKnYuJl58RbMZJLdQLslMG4pwenccjgT2PjBppztS5CG2DhwRKKlp5P7EpwnO_Dr-qDz3DbPg78ansBaq1YPGg_Np0NYdw2SJx0sZchPRp_qCFZxOumPR8fpkfsCDU7aUw
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=Purity+analysis+for+JavaScript+through+abstract+interpretation&rft.jtitle=Journal+of+software+%3A+evolution+and+process&rft.au=Nicolay%2C+Jens&rft.au=Stievenart%2C+Quentin&rft.au=De+Meuter%2C+Wolfgang&rft.au=De+Roover%2C+Coen&rft.date=2017-12-01&rft.pub=Wiley+Subscription+Services%2C+Inc&rft.eissn=2047-7481&rft.volume=29&rft.issue=12&rft_id=info:doi/10.1002%2Fsmr.1889&rft.externalDBID=NO_FULL_TEXT
thumbnail_l http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/lc.gif&issn=2047-7473&client=summon
thumbnail_m http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/mc.gif&issn=2047-7473&client=summon
thumbnail_s http://covers-cdn.summon.serialssolutions.com/index.aspx?isbn=/sc.gif&issn=2047-7473&client=summon