首页 > 最新文献

Proceedings of the 6th ACM SIGPLAN Symposium on Scala最新文献

英文 中文
Sound reasoning about integral data types with a reusable SMT solver interface 用可重用的SMT求解器接口对整型数据类型进行合理的推理
Pub Date : 2015-06-13 DOI: 10.1145/2774975.2774980
Régis Blanc, Viktor Kunčak
We extend the Leon verification system for Scala with support for bit-vector reasoning, thus addressing one of its fundamental soundness limitation with respect to the treatment of integers primitives. We leverage significant progresses recently achieved in SMT solving by developing a solver-independent interface to easily configure the back-end of Leon. Our interface is based on the emerging SMT-LIB standard for SMT solvers, and we release a Scala library offering full support for the latest version of the standard. We use the standard BigInt Scala library to represent mathematical integers, whereas we correctly model Int as 32-bit integers. We ensure safety of arithmetic by checking for division by zero and correctly modeling division and modulo. We conclude with a performance comparison between the sound representation of Ints and the cleaner abstract representation using mathematical integers, and discuss the trade-off involved.
我们扩展了Scala的Leon验证系统,支持位向量推理,从而解决了它在处理整数原语方面的一个基本可靠性限制。我们利用最近在SMT求解方面取得的重大进展,开发了一个独立于求解器的接口来轻松配置Leon的后端。我们的接口基于用于SMT求解器的新兴SMT- lib标准,并且我们发布了一个Scala库,为该标准的最新版本提供全面支持。我们使用标准的BigInt Scala库来表示数学整数,而我们正确地将Int建模为32位整数。通过除零的检验和除法与模的正确建模,保证了算法的安全性。最后,我们比较了整数的声音表示和使用数学整数的更清晰的抽象表示之间的性能,并讨论了所涉及的权衡。
{"title":"Sound reasoning about integral data types with a reusable SMT solver interface","authors":"Régis Blanc, Viktor Kunčak","doi":"10.1145/2774975.2774980","DOIUrl":"https://doi.org/10.1145/2774975.2774980","url":null,"abstract":"We extend the Leon verification system for Scala with support for bit-vector reasoning, thus addressing one of its fundamental soundness limitation with respect to the treatment of integers primitives. We leverage significant progresses recently achieved in SMT solving by developing a solver-independent interface to easily configure the back-end of Leon. Our interface is based on the emerging SMT-LIB standard for SMT solvers, and we release a Scala library offering full support for the latest version of the standard. We use the standard BigInt Scala library to represent mathematical integers, whereas we correctly model Int as 32-bit integers. We ensure safety of arithmetic by checking for division by zero and correctly modeling division and modulo. We conclude with a performance comparison between the sound representation of Ints and the cleaner abstract representation using mathematical integers, and discuss the trade-off involved.","PeriodicalId":308206,"journal":{"name":"Proceedings of the 6th ACM SIGPLAN Symposium on Scala","volume":"58 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-06-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"115163548","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}
引用次数: 4
SnapQueue: lock-free queue with constant time snapshots SnapQueue:固定时间快照的无锁队列
Pub Date : 2015-06-13 DOI: 10.1145/2774975.2774976
Aleksandar Prokopec
We introduce SnapQueues - concurrent, lock-free queues with a linearizable, lock-free global-state transition operation. This transition operation can atomically switch between arbitrary SnapQueue states, and is used by enqueue, dequeue, snapshot and concatenation operations. We show that implementing these operations efficiently depends on the persistent data structure at the core of the SnapQueue. This immutable support data structure is an interchangeable kernel of the SnapQueue, and drives its performance characteristics. The design allows reasoning about concurrent operation running time in a functional way, absent from concurrency considerations. We present a support data structure that enables O(1) queue operations, O(1) snapshot and O(log n) atomic concurrent concatenation. We show that the SnapQueue enqueue operation achieves up to 25% higher performance, while the dequeue operation has performance identical to standard lock-free concurrent queues.
我们引入SnapQueues——具有线性化、无锁的全局状态转换操作的并发、无锁队列。此转换操作可以在任意SnapQueue状态之间自动切换,并用于排队、脱队列、快照和连接操作。我们展示了有效地实现这些操作依赖于SnapQueue核心的持久数据结构。这种不可变的支持数据结构是SnapQueue的可互换内核,并驱动其性能特征。该设计允许以功能方式对并发操作运行时间进行推理,而不需要考虑并发性。我们提出了一种支持O(1)个队列操作、O(1)个快照和O(log n)个原子并发连接的数据结构。我们展示了SnapQueue入列操作实现了高达25%的性能提升,而出列操作具有与标准无锁并发队列相同的性能。
{"title":"SnapQueue: lock-free queue with constant time snapshots","authors":"Aleksandar Prokopec","doi":"10.1145/2774975.2774976","DOIUrl":"https://doi.org/10.1145/2774975.2774976","url":null,"abstract":"We introduce SnapQueues - concurrent, lock-free queues with a linearizable, lock-free global-state transition operation. This transition operation can atomically switch between arbitrary SnapQueue states, and is used by enqueue, dequeue, snapshot and concatenation operations. We show that implementing these operations efficiently depends on the persistent data structure at the core of the SnapQueue. This immutable support data structure is an interchangeable kernel of the SnapQueue, and drives its performance characteristics. The design allows reasoning about concurrent operation running time in a functional way, absent from concurrency considerations. We present a support data structure that enables O(1) queue operations, O(1) snapshot and O(log n) atomic concurrent concatenation. We show that the SnapQueue enqueue operation achieves up to 25% higher performance, while the dequeue operation has performance identical to standard lock-free concurrent queues.","PeriodicalId":308206,"journal":{"name":"Proceedings of the 6th ACM SIGPLAN Symposium on Scala","volume":"33 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-06-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129763578","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}
引用次数: 17
Fold-based fusion as a library: a generative programming pearl 基于折叠的融合库:生成式编程的明珠
Pub Date : 2015-06-13 DOI: 10.1145/2774975.2774981
Manohar Jonnalagedda, Sandro Stucki
Fusion is a program optimisation technique commonly implemented using special-purpose compiler support. In this paper, we present an alternative approach, implementing fold-based fusion as a standalone library. We use staging to compose operations on folds; the operations are partially evaluated away, yielding code that does not construct unnecessary intermediate data structures. The technique extends to partitioning and grouping of collections.
融合是一种程序优化技术,通常使用特殊用途的编译器支持来实现。在本文中,我们提出了一种替代方法,将基于折叠的融合作为独立库实现。我们使用staging在折叠上组合操作;这些操作被部分求值,生成的代码不会构造不必要的中间数据结构。该技术扩展到对集合进行分区和分组。
{"title":"Fold-based fusion as a library: a generative programming pearl","authors":"Manohar Jonnalagedda, Sandro Stucki","doi":"10.1145/2774975.2774981","DOIUrl":"https://doi.org/10.1145/2774975.2774981","url":null,"abstract":"Fusion is a program optimisation technique commonly implemented using special-purpose compiler support. In this paper, we present an alternative approach, implementing fold-based fusion as a standalone library. We use staging to compose operations on folds; the operations are partially evaluated away, yielding code that does not construct unnecessary intermediate data structures. The technique extends to partitioning and grouping of collections.","PeriodicalId":308206,"journal":{"name":"Proceedings of the 6th ACM SIGPLAN Symposium on Scala","volume":"51 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-06-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"131913957","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}
引用次数: 13
Referential integrity with Scala types Scala类型的引用完整性
Pub Date : 2015-06-13 DOI: 10.1145/2774975.2774979
Patrick Prémont
Referential integrity constraints are critical elements of relational data models, and have found widespread use in industry. However, their benefits in terms of data integrity do not fully extend to program correctness. Constraint violations are identified at run-time and must then be handled appropriately by programs. We show how Scala can be used to build data models and programs where referential integrity is enforced at compile-time. Scala’s type system, with its variance annotations and path-dependent types, is especially suited to express these constraints and proofs in a natural manner. We also explore potential compiler improvements that could enhance support for type-checked referential integrity.
参考完整性约束是关系数据模型的关键元素,在工业中得到了广泛的应用。然而,它们在数据完整性方面的好处并没有完全扩展到程序的正确性。约束违反是在运行时确定的,然后必须由程序适当地处理。我们将展示如何使用Scala构建数据模型和程序,其中在编译时强制执行引用完整性。Scala的类型系统,其方差注释和路径依赖类型,特别适合以自然的方式表达这些约束和证明。我们还探讨了编译器的潜在改进,这些改进可以增强对类型检查引用完整性的支持。
{"title":"Referential integrity with Scala types","authors":"Patrick Prémont","doi":"10.1145/2774975.2774979","DOIUrl":"https://doi.org/10.1145/2774975.2774979","url":null,"abstract":"Referential integrity constraints are critical elements of relational data models, and have found widespread use in industry. However, their benefits in terms of data integrity do not fully extend to program correctness. Constraint violations are identified at run-time and must then be handled appropriately by programs. We show how Scala can be used to build data models and programs where referential integrity is enforced at compile-time. Scala’s type system, with its variance annotations and path-dependent types, is especially suited to express these constraints and proofs in a natural manner. We also explore potential compiler improvements that could enhance support for type-checked referential integrity.","PeriodicalId":308206,"journal":{"name":"Proceedings of the 6th ACM SIGPLAN Symposium on Scala","volume":"75 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-06-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"124736388","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}
引用次数: 0
ESPeciaL: an embedded systems programming language special:一种嵌入式系统编程语言
Pub Date : 2015-06-13 DOI: 10.1145/2774975.2774982
Christopher Métrailler, Pierre-André Mudry
The advent of off-the-shelf programmable embedded systems such as Arduino enables people with little programming skills to interact with the real-world using sensors and actuators. In this paper, we propose a novel approach aimed at simplifying the programming of embedded systems based on the dataflow paradigm. Named ESPeciaL, this programming framework removes the need of low-level programming in C/C++, as the application is written by connecting blocks that produce and consume data. Thus, an embedded application can be described in terms of ready-to-use blocks that correspond to the various micro-controller peripherals and to program function (multiplexers, logic gates, etc.). The user application itself is written as an embedded Scala DSL. From that code, the ESPeciaL compiler then generates the corresponding C++ code which can be tailored - using different back-ends - to match different embedded systems or a QEMU-based simulation environment. To demonstrate the validity of the approach, we present a typical embedded systems application implemented using ESPeciaL
现成的可编程嵌入式系统(如Arduino)的出现使几乎没有编程技能的人能够使用传感器和执行器与现实世界进行交互。在本文中,我们提出了一种新的方法,旨在简化基于数据流范式的嵌入式系统编程。这个名为special的编程框架消除了在C/ c++中进行低级编程的需要,因为应用程序是通过连接产生和使用数据的块来编写的。因此,嵌入式应用程序可以用对应于各种微控制器外设和编程功能(多路复用器、逻辑门等)的即用块来描述。用户应用程序本身是作为嵌入式Scala DSL编写的。从这些代码中,special编译器生成相应的c++代码,这些代码可以使用不同的后端进行定制,以匹配不同的嵌入式系统或基于qemu的仿真环境。为了证明该方法的有效性,我们给出了一个使用special实现的典型嵌入式系统应用
{"title":"ESPeciaL: an embedded systems programming language","authors":"Christopher Métrailler, Pierre-André Mudry","doi":"10.1145/2774975.2774982","DOIUrl":"https://doi.org/10.1145/2774975.2774982","url":null,"abstract":"The advent of off-the-shelf programmable embedded systems such as Arduino enables people with little programming skills to interact with the real-world using sensors and actuators. In this paper, we propose a novel approach aimed at simplifying the programming of embedded systems based on the dataflow paradigm. Named ESPeciaL, this programming framework removes the need of low-level programming in C/C++, as the application is written by connecting blocks that produce and consume data. Thus, an embedded application can be described in terms of ready-to-use blocks that correspond to the various micro-controller peripherals and to program function (multiplexers, logic gates, etc.). The user application itself is written as an embedded Scala DSL. From that code, the ESPeciaL compiler then generates the corresponding C++ code which can be tailored - using different back-ends - to match different embedded systems or a QEMU-based simulation environment. To demonstrate the validity of the approach, we present a typical embedded systems application implemented using ESPeciaL","PeriodicalId":308206,"journal":{"name":"Proceedings of the 6th ACM SIGPLAN Symposium on Scala","volume":"28 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-06-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"125476882","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
Counter-example complete verification for higher-order functions 反例完成验证的高阶函数
Pub Date : 2015-06-13 DOI: 10.1145/2774975.2774978
Nicolas Voirol, Etienne Kneuss, Viktor Kunčak
We present a verification procedure for pure higher-order functional Scala programs with parametric types. We show that our procedure is sound for proofs, as well as sound and complete for counter-examples. The procedure reduces the analysis of higher-order programs to checking satisfiability of a sequence of quantifier-free formulas over theories such as algebraic data types, integer linear arithmetic, and uninterpreted function symbols, thus enabling the use of efficient satisfiability modulo theory (SMT) solvers. Our solution supports arbitrary function types and arbitrarily nested anonymous functions (which can be stored in data structures, passed as arguments, returned, and applied). Among the contributions of this work is supporting even those cases when anonymous functions cannot be statically traced back to their definition, ensuring completeness of the approach for finding counter-examples. We provide a proof of soundness and counter-example completeness for our system as well as initial evaluation in the Leon verifier.
我们提出了一个具有参数类型的纯高阶函数Scala程序的验证过程。我们表明,我们的过程是健全的证明,以及健全和完整的反例。该程序减少了对高阶程序的分析,以检查在诸如代数数据类型、整数线性算法和未解释函数符号等理论上的无量词公式序列的可满足性,从而能够使用有效的可满足性模理论(SMT)求解器。我们的解决方案支持任意函数类型和任意嵌套的匿名函数(它们可以存储在数据结构中,作为参数传递、返回和应用)。这项工作的贡献之一是支持即使在匿名函数不能静态地追溯到其定义的情况下,确保查找反例方法的完整性。我们为我们的系统提供了健全性和反例完备性的证明,并在Leon验证器中进行了初步评估。
{"title":"Counter-example complete verification for higher-order functions","authors":"Nicolas Voirol, Etienne Kneuss, Viktor Kunčak","doi":"10.1145/2774975.2774978","DOIUrl":"https://doi.org/10.1145/2774975.2774978","url":null,"abstract":"We present a verification procedure for pure higher-order functional Scala programs with parametric types. We show that our procedure is sound for proofs, as well as sound and complete for counter-examples. The procedure reduces the analysis of higher-order programs to checking satisfiability of a sequence of quantifier-free formulas over theories such as algebraic data types, integer linear arithmetic, and uninterpreted function symbols, thus enabling the use of efficient satisfiability modulo theory (SMT) solvers. Our solution supports arbitrary function types and arbitrarily nested anonymous functions (which can be stored in data structures, passed as arguments, returned, and applied). Among the contributions of this work is supporting even those cases when anonymous functions cannot be statically traced back to their definition, ensuring completeness of the approach for finding counter-examples. We provide a proof of soundness and counter-example completeness for our system as well as initial evaluation in the Leon verifier.","PeriodicalId":308206,"journal":{"name":"Proceedings of the 6th ACM SIGPLAN Symposium on Scala","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-06-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"129872758","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}
引用次数: 20
Proceedings of the 6th ACM SIGPLAN Symposium on Scala 第六届ACM SIGPLAN Scala研讨会论文集
Pub Date : 2015-06-13 DOI: 10.1145/2774975
Philipp Haller, Heather Miller
{"title":"Proceedings of the 6th ACM SIGPLAN Symposium on Scala","authors":"Philipp Haller, Heather Miller","doi":"10.1145/2774975","DOIUrl":"https://doi.org/10.1145/2774975","url":null,"abstract":"","PeriodicalId":308206,"journal":{"name":"Proceedings of the 6th ACM SIGPLAN Symposium on Scala","volume":"1 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-06-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"130556255","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}
引用次数: 0
Distributed programming in Scala with APGAS 使用APGAS在Scala中进行分布式编程
Pub Date : 2015-06-13 DOI: 10.1145/2774975.2774977
Philippe Suter, O. Tardieu, Josh Milthorpe
APGAS (Asynchronous Partitioned Global Address Space) is a model for concurrent and distributed programming, known primarily as the foundation of the X10 programming language. In this paper, we present an implementation of this model as an embedded domain-specific language for Scala. We illustrate common usage patterns and contrast with alternative approaches available to Scala programmers. In particular, using two distributed algorithms as examples, we illustrate how APGAS-style programs compare to idiomatic Akka implementations. We demonstrate the use of APGAS places and tasks, distributed termination, and distributed objects.
APGAS(异步分区全局地址空间)是用于并发和分布式编程的模型,主要作为X10编程语言的基础而闻名。在本文中,我们将该模型的实现作为Scala的嵌入式领域特定语言。我们将说明常见的使用模式,并与Scala程序员可用的替代方法进行对比。特别是,我们将使用两个分布式算法作为示例,说明apgas风格的程序如何与惯用的Akka实现进行比较。我们将演示APGAS位置和任务、分布式终止和分布式对象的使用。
{"title":"Distributed programming in Scala with APGAS","authors":"Philippe Suter, O. Tardieu, Josh Milthorpe","doi":"10.1145/2774975.2774977","DOIUrl":"https://doi.org/10.1145/2774975.2774977","url":null,"abstract":"APGAS (Asynchronous Partitioned Global Address Space) is a model for concurrent and distributed programming, known primarily as the foundation of the X10 programming language. In this paper, we present an implementation of this model as an embedded domain-specific language for Scala. We illustrate common usage patterns and contrast with alternative approaches available to Scala programmers. In particular, using two distributed algorithms as examples, we illustrate how APGAS-style programs compare to idiomatic Akka implementations. We demonstrate the use of APGAS places and tasks, distributed termination, and distributed objects.","PeriodicalId":308206,"journal":{"name":"Proceedings of the 6th ACM SIGPLAN Symposium on Scala","volume":"46 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2015-06-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"132119457","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
期刊
Proceedings of the 6th ACM SIGPLAN Symposium on Scala
全部 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