首页 > 最新文献

Proceedings of the 9th International Symposium on Haskell最新文献

英文 中文
Autobahn: using genetic algorithms to infer strictness annotations Autobahn:使用遗传算法来推断严格性注释
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976009
Y. Wang, Diogenes Nunez, Kathleen Fisher
Although laziness enables beautiful code, it comes with non-trivial performance costs. The ghc compiler for Haskell has optimizations to reduce those costs, but the optimizations are not sufficient. As a result, Haskell also provides a variety of strictness annotations so that users can indicate program points where an expression should be evaluated eagerly. Skillful use of those annotations is a black art, known only to expert Haskell programmers. In this paper, we introduce AUTOBAHN, a tool that uses genetic algorithms to automatically infer strictness annotations that improve program performance on representative inputs. Users examine the suggested annotations for soundness and can instruct AUTOBAHN to automatically produce modified sources. Experiments on 60 programs from the NoFib benchmark suite show that AUTOBAHN can infer annotation sets that improve runtime performance by a geometric mean of 8.5%. Case studies show AUTOBAHN can reduce the live size of a GC simulator by 99% and infer application-specific annotations for Aeson library code. A 10-fold cross-validation study shows the AUTOBAHN -optimized GC simulator generally outperforms a version optimized by an expert.
尽管懒惰可以实现漂亮的代码,但它带来了不小的性能代价。用于Haskell的ghc编译器进行了优化以降低这些成本,但这些优化还不够。因此,Haskell还提供了各种严格性注释,以便用户可以指示应该急切求值表达式的程序点。熟练地使用这些注释是一种黑色艺术,只有专家级的Haskell程序员才知道。在本文中,我们介绍了AUTOBAHN,一个使用遗传算法自动推断严格性注释的工具,以提高程序在代表性输入上的性能。用户检查建议的注释的可靠性,并可以指示AUTOBAHN自动生成修改的源。在NoFib基准测试套件的60个程序上进行的实验表明,AUTOBAHN可以推断出注释集,从而将运行时性能提高8.5%的几何平均值。案例研究表明,AUTOBAHN可以将GC模拟器的实时大小减少99%,并为Aeson库代码推断出特定于应用程序的注释。一项10倍交叉验证研究表明,AUTOBAHN优化的GC模拟器通常优于由专家优化的版本。
{"title":"Autobahn: using genetic algorithms to infer strictness annotations","authors":"Y. Wang, Diogenes Nunez, Kathleen Fisher","doi":"10.1145/2976002.2976009","DOIUrl":"https://doi.org/10.1145/2976002.2976009","url":null,"abstract":"Although laziness enables beautiful code, it comes with non-trivial performance costs. The ghc compiler for Haskell has optimizations to reduce those costs, but the optimizations are not sufficient. As a result, Haskell also provides a variety of strictness annotations so that users can indicate program points where an expression should be evaluated eagerly. Skillful use of those annotations is a black art, known only to expert Haskell programmers. In this paper, we introduce AUTOBAHN, a tool that uses genetic algorithms to automatically infer strictness annotations that improve program performance on representative inputs. Users examine the suggested annotations for soundness and can instruct AUTOBAHN to automatically produce modified sources. Experiments on 60 programs from the NoFib benchmark suite show that AUTOBAHN can infer annotation sets that improve runtime performance by a geometric mean of 8.5%. Case studies show AUTOBAHN can reduce the live size of a GC simulator by 99% and infer application-specific annotations for Aeson library code. A 10-fold cross-validation study shows the AUTOBAHN -optimized GC simulator generally outperforms a version optimized by an expert.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"85298620","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 2
Desugaring Haskell's do-notation into applicative operations 将Haskell的do符号转换为应用操作
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976007
S. Marlow, S. Jones, Edward Kmett, A. Mokhov
Monads have taken the world by storm, and are supported by do-notation (at least in Haskell). Programmers are increasingly waking up to the usefulness and ubiquity of Applicatives, but they have so far been hampered by the absence of supporting notation. In this paper we show how to re-use the very same do-notation to work for Applicatives as well, providing efficiency benefits for some types that are both Monad and Applicative, and syntactic convenience for those that are merely Applicative. The result is fully implemented as an optional extension in GHC, and is in use at Facebook to make it easy to write highly-parallel queries in a distributed system.
单子已经席卷了整个世界,并且得到了do-notation的支持(至少在Haskell中是这样)。程序员越来越多地意识到应用程序的有用性和普遍性,但迄今为止,他们一直受到缺乏支持符号的阻碍。在本文中,我们将展示如何重用同样的do-notation来为应用程序工作,为一些既是Monad又是Applicative的类型提供效率优势,为那些仅仅是Applicative的类型提供语法便利。结果在GHC中作为可选扩展完全实现,并且在Facebook中使用,使在分布式系统中编写高度并行查询变得容易。
{"title":"Desugaring Haskell's do-notation into applicative operations","authors":"S. Marlow, S. Jones, Edward Kmett, A. Mokhov","doi":"10.1145/2976002.2976007","DOIUrl":"https://doi.org/10.1145/2976002.2976007","url":null,"abstract":"Monads have taken the world by storm, and are supported by do-notation (at least in Haskell). Programmers are increasingly waking up to the usefulness and ubiquity of Applicatives, but they have so far been hampered by the absence of supporting notation. In this paper we show how to re-use the very same do-notation to work for Applicatives as well, providing efficiency benefits for some types that are both Monad and Applicative, and syntactic convenience for those that are merely Applicative. The result is fully implemented as an optional extension in GHC, and is in use at Facebook to make it easy to write highly-parallel queries in a distributed system.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"85337662","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 27
FitSpec: refining property sets for functional testing FitSpec:细化功能测试的属性集
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976003
Rudy Matela, C. Runciman
This paper presents FitSpec, a tool providing automated assistance in the task of refining sets of test properties for Haskell functions. FitSpec tests mutant variations of functions under test against a given property set, recording any surviving mutants that pass all tests. The number of surviving mutants and any smallest survivor are presented to the user. A surviving mutant indicates incompleteness of the property set, prompting the user to amend a property or to add a new one, making the property set stronger. Based on the same test results, FitSpec also provides conjectures in the form of equivalences and implications between property subsets. These conjectures help the user to identify minimal core subsets of properties and so to reduce the cost of future property-based testing.
本文介绍了FitSpec,这是一个为Haskell函数细化测试属性集的任务提供自动化帮助的工具。FitSpec针对给定的属性集测试被测函数的突变变体,记录通过所有测试的任何存活的突变。存活的突变体数量和任何最小的存活者都会呈现给用户。幸存的突变表示属性集不完整,提示用户修改属性或添加新属性,从而使属性集更强大。基于相同的测试结果,FitSpec还以属性子集之间的等价性和含义的形式提供了推测。这些推测可以帮助用户识别属性的最小核心子集,从而减少未来基于属性的测试成本。
{"title":"FitSpec: refining property sets for functional testing","authors":"Rudy Matela, C. Runciman","doi":"10.1145/2976002.2976003","DOIUrl":"https://doi.org/10.1145/2976002.2976003","url":null,"abstract":"This paper presents FitSpec, a tool providing automated assistance in the task of refining sets of test properties for Haskell functions. FitSpec tests mutant variations of functions under test against a given property set, recording any surviving mutants that pass all tests. The number of surviving mutants and any smallest survivor are presented to the user. A surviving mutant indicates incompleteness of the property set, prompting the user to amend a property or to add a new one, making the property set stronger. Based on the same test results, FitSpec also provides conjectures in the form of equivalences and implications between property subsets. These conjectures help the user to identify minimal core subsets of properties and so to reduce the cost of future property-based testing.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"79424981","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 10
Free delivery (functional pearl) 免费送货(功能珍珠)
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976005
J. Gibbons
Remote procedure calls are computationally expensive, because network round-trips take several orders of magnitude longer than local interactions. One common technique for amortizing this cost is to batch together multiple independent requests into one compound request. Batching requests amounts to serializing the abstract syntax tree of a small program, in order to transmit it and run it remotely. The standard representation for abstract syntax is to use free monads; we show that free applicative functors are actually a better choice of representation for this scenario.
远程过程调用在计算上很昂贵,因为网络往返比本地交互要长几个数量级。分摊此成本的一种常用技术是将多个独立请求批处理为一个复合请求。批处理请求相当于序列化一个小程序的抽象语法树,以便远程传输和运行它。抽象语法的标准表示是使用自由单子;我们表明,对于这种情况,自由应用函子实际上是更好的表示选择。
{"title":"Free delivery (functional pearl)","authors":"J. Gibbons","doi":"10.1145/2976002.2976005","DOIUrl":"https://doi.org/10.1145/2976002.2976005","url":null,"abstract":"Remote procedure calls are computationally expensive, because network round-trips take several orders of magnitude longer than local interactions. One common technique for amortizing this cost is to batch together multiple independent requests into one compound request. Batching requests amounts to serializing the abstract syntax tree of a small program, in order to transmit it and run it remotely. The standard representation for abstract syntax is to use free monads; we show that free applicative functors are actually a better choice of representation for this scenario.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"79187870","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 7
Causal commutative arrows revisited 重新审视因果交换箭头
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976019
J. Yallop, Hai Liu
Causal commutative arrows (CCA) extend arrows with additional constructs and laws that make them suitable for modelling domains such as functional reactive programming, differential equations and synchronous dataflow. Earlier work has revealed that a syntactic transformation of CCA computations into normal form can result in significant performance improvements, sometimes increasing the speed of programs by orders of magnitude. In this work we reformulate the normalization as a type class instance and derive optimized observation functions via a specialization to stream transformers to demonstrate that the same dramatic improvements can be achieved without leaving the language.
因果交换箭头(CCA)用额外的构造和定律扩展了箭头,使它们适合于建模领域,如函数式响应式编程、微分方程和同步数据流。早期的研究表明,将CCA计算的语法转换为标准形式可以显著提高性能,有时可以将程序的速度提高几个数量级。在这项工作中,我们将规范化重新表述为类型类实例,并通过对流转换器的专门化获得优化的观察函数,以证明无需离开语言即可实现相同的显着改进。
{"title":"Causal commutative arrows revisited","authors":"J. Yallop, Hai Liu","doi":"10.1145/2976002.2976019","DOIUrl":"https://doi.org/10.1145/2976002.2976019","url":null,"abstract":"Causal commutative arrows (CCA) extend arrows with additional constructs and laws that make them suitable for modelling domains such as functional reactive programming, differential equations and synchronous dataflow. Earlier work has revealed that a syntactic transformation of CCA computations into normal form can result in significant performance improvements, sometimes increasing the speed of programs by orders of magnitude. In this work we reformulate the normalization as a type class instance and derive optimized observation functions via a specialization to stream transformers to demonstrate that the same dramatic improvements can be achieved without leaving the language.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"87744223","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 5
Pattern synonyms 模式的同义词
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976013
Matthew Pickering, Gergo Érdi, S. Jones, R. Eisenberg
Pattern matching has proven to be a convenient, expressive way of inspecting data. Yet this language feature, in its traditional form, is limited: patterns must be data constructors of concrete data types. No computation or abstraction is allowed. The data type in question must be concrete, with no ability to enforce any invariants. Any change in this data type requires all clients to update their code. This paper introduces pattern synonyms, which allow programmers to abstract over patterns, painting over all the shortcomings listed above. Pattern synonyms are assigned types, enabling a compiler to check the validity of a synonym independent of its definition. These types are intricate; detailing how to assign a type to a pattern synonym is a key contribution of this work. We have implemented pattern synonyms in the Glasgow Haskell Compiler, where they have enjoyed immediate popularity, but we believe this feature could easily be exported to other languages that support pattern matching.
模式匹配已被证明是一种方便、富有表现力的检查数据的方法。然而,这种语言特性在其传统形式下是有限的:模式必须是具体数据类型的数据构造器。不允许进行任何计算或抽象。所讨论的数据类型必须是具体的,不能强制执行任何不变量。此数据类型的任何更改都要求所有客户端更新其代码。本文介绍了模式同义词,它允许程序员对模式进行抽象,覆盖上面列出的所有缺点。模式同义词被分配了类型,使编译器能够独立于同义词的定义检查其有效性。这些类型是复杂的;详细说明如何将类型分配给模式同义词是这项工作的关键贡献。我们已经在格拉斯哥Haskell编译器中实现了模式同义词,它们在那里立即受到欢迎,但我们相信这个特性可以很容易地导出到支持模式匹配的其他语言中。
{"title":"Pattern synonyms","authors":"Matthew Pickering, Gergo Érdi, S. Jones, R. Eisenberg","doi":"10.1145/2976002.2976013","DOIUrl":"https://doi.org/10.1145/2976002.2976013","url":null,"abstract":"Pattern matching has proven to be a convenient, expressive way of inspecting data. Yet this language feature, in its traditional form, is limited: patterns must be data constructors of concrete data types. No computation or abstraction is allowed. The data type in question must be concrete, with no ability to enforce any invariants. Any change in this data type requires all clients to update their code. This paper introduces pattern synonyms, which allow programmers to abstract over patterns, painting over all the shortcomings listed above. Pattern synonyms are assigned types, enabling a compiler to check the validity of a synonym independent of its definition. These types are intricate; detailing how to assign a type to a pattern synonym is a key contribution of this work. We have implemented pattern synonyms in the Glasgow Haskell Compiler, where they have enjoyed immediate popularity, but we believe this feature could easily be exported to other languages that support pattern matching.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"83022425","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 35
Non-recursive make considered harmful: build systems at scale 非递归被认为是有害的:大规模构建系统
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976011
A. Mokhov, Neil Mitchell, S. Jones, S. Marlow
Most build systems start small and simple, but over time grow into hairy monsters that few dare to touch. As we demonstrate in this paper, there are a few issues that cause build systems major scalability challenges, and many pervasively used build systems (e.g. Make) do not scale well. This paper presents a solution to the challenges we identify. We use functional programming to design abstractions for build systems, and implement them on top of the Shake library, which allows us to describe build rules and dependencies. To substantiate our claims, we engineer a new build system for the Glasgow Haskell Compiler. The result is more scalable, faster, and spectacularly more maintainable than its Make-based predecessor.
大多数构建系统一开始都很小,很简单,但随着时间的推移,会发展成很少有人敢碰的毛茸茸的怪物。正如我们在本文中所演示的那样,有一些问题会导致构建系统的主要可伸缩性挑战,并且许多普遍使用的构建系统(例如Make)不能很好地伸缩。本文提出了一个解决方案,我们确定的挑战。我们使用函数式编程来设计构建系统的抽象,并在Shake库之上实现它们,它允许我们描述构建规则和依赖关系。为了证实我们的说法,我们为格拉斯哥Haskell编译器设计了一个新的构建系统。其结果是比基于make的前身具有更高的可伸缩性、更快的速度和惊人的可维护性。
{"title":"Non-recursive make considered harmful: build systems at scale","authors":"A. Mokhov, Neil Mitchell, S. Jones, S. Marlow","doi":"10.1145/2976002.2976011","DOIUrl":"https://doi.org/10.1145/2976002.2976011","url":null,"abstract":"Most build systems start small and simple, but over time grow into hairy monsters that few dare to touch. As we demonstrate in this paper, there are a few issues that cause build systems major scalability challenges, and many pervasively used build systems (e.g. Make) do not scale well. This paper presents a solution to the challenges we identify. We use functional programming to design abstractions for build systems, and implement them on top of the Shake library, which allows us to describe build rules and dependencies. To substantiate our claims, we engineer a new build system for the Glasgow Haskell Compiler. The result is more scalable, faster, and spectacularly more maintainable than its Make-based predecessor.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"77431334","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 12
Functional reactive programming, refactored 函数式响应式编程,重构
Pub Date : 2016-09-08 DOI: 10.1145/2976002.2976010
Ivan Perez, Manuel Bärenz, H. Nilsson
Functional Reactive Programming (FRP) has come to mean many things. Yet, scratch the surface of the multitude of realisations, and there is great commonality between them. This paper investigates this commonality, turning it into a mathematically coherent and practical FRP realisation that allows us to express the functionality of many existing FRP systems and beyond by providing a minimal FRP core parameterised on a monad. We give proofs for our theoretical claims and we have verified the practical side by benchmarking a set of existing, non-trivial Yampa applications running on top of our new system with very good results.
函数式响应式编程(FRP)已经有了很多含义。然而,刨开众多的认识的表面,它们之间有很大的共性。本文研究了这种共性,将其转化为数学上连贯和实用的FRP实现,使我们能够通过在单轴上提供最小FRP核心参数来表达许多现有FRP系统的功能。我们为我们的理论主张提供了证明,并通过对在我们的新系统上运行的一组现有的、重要的Yampa应用程序进行基准测试,验证了实践方面的效果,结果非常好。
{"title":"Functional reactive programming, refactored","authors":"Ivan Perez, Manuel Bärenz, H. Nilsson","doi":"10.1145/2976002.2976010","DOIUrl":"https://doi.org/10.1145/2976002.2976010","url":null,"abstract":"Functional Reactive Programming (FRP) has come to mean many things. Yet, scratch the surface of the multitude of realisations, and there is great commonality between them. This paper investigates this commonality, turning it into a mathematically coherent and practical FRP realisation that allows us to express the functionality of many existing FRP systems and beyond by providing a minimal FRP core parameterised on a monad. We give proofs for our theoretical claims and we have verified the practical side by benchmarking a set of existing, non-trivial Yampa applications running on top of our new system with very good results.","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-09-08","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"83179402","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 46
Proceedings of the 9th International Symposium on Haskell 第九届哈斯克尔国际研讨会论文集
Pub Date : 2016-01-01 DOI: 10.1145/2976002
{"title":"Proceedings of the 9th International Symposium on Haskell","authors":"","doi":"10.1145/2976002","DOIUrl":"https://doi.org/10.1145/2976002","url":null,"abstract":"","PeriodicalId":20669,"journal":{"name":"Proceedings of the 9th International Symposium on Haskell","volume":null,"pages":null},"PeriodicalIF":0.0,"publicationDate":"2016-01-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"91480321","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":0,"RegionCategory":"","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 1
期刊
Proceedings of the 9th International Symposium on Haskell
全部 Acc. Chem. Res. ACS Applied Bio Materials ACS Appl. Electron. Mater. ACS Appl. Energy Mater. ACS Appl. Mater. Interfaces ACS Appl. Nano Mater. ACS Appl. Polym. Mater. ACS BIOMATER-SCI ENG ACS Catal. ACS Cent. Sci. ACS Chem. Biol. ACS Chemical Health & Safety ACS Chem. Neurosci. ACS Comb. Sci. ACS Earth Space Chem. ACS Energy Lett. ACS Infect. Dis. ACS Macro Lett. ACS Mater. Lett. ACS Med. Chem. Lett. ACS Nano ACS Omega ACS Photonics ACS Sens. ACS Sustainable Chem. Eng. ACS Synth. Biol. Anal. Chem. BIOCHEMISTRY-US Bioconjugate Chem. BIOMACROMOLECULES Chem. Res. Toxicol. Chem. Rev. Chem. Mater. CRYST GROWTH DES ENERG FUEL Environ. Sci. Technol. Environ. Sci. Technol. Lett. Eur. J. Inorg. Chem. IND ENG CHEM RES Inorg. Chem. J. Agric. Food. Chem. J. Chem. Eng. Data J. Chem. Educ. J. Chem. Inf. Model. J. Chem. Theory Comput. J. Med. Chem. J. Nat. Prod. J PROTEOME RES J. Am. Chem. Soc. LANGMUIR MACROMOLECULES Mol. Pharmaceutics Nano Lett. Org. Lett. ORG PROCESS RES DEV ORGANOMETALLICS J. Org. Chem. J. Phys. Chem. J. Phys. Chem. A J. Phys. Chem. B J. Phys. Chem. C J. Phys. Chem. Lett. Analyst Anal. Methods Biomater. Sci. Catal. Sci. Technol. Chem. Commun. Chem. Soc. Rev. CHEM EDUC RES PRACT CRYSTENGCOMM Dalton Trans. Energy Environ. Sci. ENVIRON SCI-NANO ENVIRON SCI-PROC IMP ENVIRON SCI-WAT RES Faraday Discuss. Food Funct. Green Chem. Inorg. Chem. Front. Integr. Biol. J. Anal. At. Spectrom. J. Mater. Chem. A J. Mater. Chem. B J. Mater. Chem. C Lab Chip Mater. Chem. Front. Mater. Horiz. MEDCHEMCOMM Metallomics Mol. Biosyst. Mol. Syst. Des. Eng. Nanoscale Nanoscale Horiz. Nat. Prod. Rep. New J. Chem. Org. Biomol. Chem. Org. Chem. Front. PHOTOCH PHOTOBIO SCI PCCP Polym. Chem.
×
引用
GB/T 7714-2015
复制
MLA
复制
APA
复制
导出至
BibTeX EndNote RefMan NoteFirst NoteExpress
×
0
微信
客服QQ
Book学术公众号 扫码关注我们
反馈
×
意见反馈
请填写您的意见或建议
请填写您的手机或邮箱
×
提示
您的信息不完整,为了账户安全,请先补充。
现在去补充
×
提示
您因"违规操作"
具体请查看互助需知
我知道了
×
提示
现在去查看 取消
×
提示
确定
Book学术官方微信
Book学术文献互助
Book学术文献互助群
群 号:481959085
Book学术
文献互助 智能选刊 最新文献 互助须知 联系我们:info@booksci.cn
Book学术提供免费学术资源搜索服务,方便国内外学者检索中英文文献。致力于提供最便捷和优质的服务体验。
Copyright © 2023 Book学术 All rights reserved.
ghs 京公网安备 11010802042870号 京ICP备2023020795号-1