首页 > 最新文献

ACM Transactions on Programming Languages and Systems最新文献

英文 中文
Proving Correctness of Parallel Implementations of Transition System Models 证明过渡系统模型并行实施的正确性
IF 1.3 2区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-04-20 DOI: 10.1145/3660630
Frank S. de Boer, Einar Broch Johnsen, Violet Ka I Pun, Silvia Lizeth Tapia Tarifa

This paper addresses the long-standing problem of program correctness for programs that describe systems of parallel executing processes. We propose a new method for proving correctness of parallel implementations of high-level models expressed as transition systems. The implementation language underlying the method is based on the concurrency model of actors and active objects. The method defines program correctness in terms of a simulation relation between the transition system which specifies the program semantics of the parallel program and the transition system that is described by the correctness specification. The simulation relation itself abstracts from the fine-grained interleaving of parallel processes by exploiting a global confluence property of the concurrency model of the implementation language considered in this paper. As a proof of concept, we apply our method to the correctness of a parallel simulator of multicore memory systems.

本文探讨了长期存在的描述并行执行进程系统的程序正确性问题。我们提出了一种新方法,用于证明以转换系统表示的高级模型并行实现的正确性。该方法所依据的实现语言是基于行动者和活动对象的并发模型。该方法通过指定并行程序语义的过渡系统与正确性规范所描述的过渡系统之间的模拟关系来定义程序的正确性。模拟关系本身通过利用本文所考虑的实现语言并发模型的全局汇合属性,从并行进程的细粒度交错中抽象出来。作为概念验证,我们将我们的方法应用于多核内存系统并行模拟器的正确性。
{"title":"Proving Correctness of Parallel Implementations of Transition System Models","authors":"Frank S. de Boer, Einar Broch Johnsen, Violet Ka I Pun, Silvia Lizeth Tapia Tarifa","doi":"10.1145/3660630","DOIUrl":"https://doi.org/10.1145/3660630","url":null,"abstract":"<p>This paper addresses the long-standing problem of program correctness for programs that describe systems of parallel executing processes. We propose a new method for proving correctness of parallel implementations of high-level models expressed as transition systems. The implementation language underlying the method is based on the concurrency model of actors and active objects. The method defines program correctness in terms of a simulation relation between the transition system which specifies the program semantics of the parallel program and the transition system that is described by the correctness specification. The simulation relation itself abstracts from the fine-grained interleaving of parallel processes by exploiting a global confluence property of the concurrency model of the implementation language considered in this paper. As a proof of concept, we apply our method to the correctness of a parallel simulator of multicore memory systems.</p>","PeriodicalId":50939,"journal":{"name":"ACM Transactions on Programming Languages and Systems","volume":"21 1","pages":""},"PeriodicalIF":1.3,"publicationDate":"2024-04-20","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"140625366","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":2,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
CFLOBDDs: Context-Free-Language Ordered Binary Decision Diagrams CFLOBDDs:无上下文语言有序二元判定图
IF 1.3 2区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-03-04 DOI: 10.1145/3651157
Meghana Aparna Sistla, Swarat Chaudhuri, Thomas Reps

This paper presents a new compressed representation of Boolean functions, called CFLOBDDs (for Context-Free-Language Ordered Binary Decision Diagrams). They are essentially a plug-compatible alternative to BDDs (Binary Decision Diagrams), and hence useful for representing certain classes of functions, matrices, graphs, relations, etc. in a highly compressed fashion. CFLOBDDs share many of the good properties of BDDs, but—in the best case—the CFLOBDD for a Boolean function can be exponentially smaller than any BDD for that function. Compared with the size of the decision tree for a function, a CFLOBDD—again, in the best case—can give a double-exponential reduction in size. They have the potential to permit applications to (i) execute much faster, and (ii) handle much larger problem instances than has been possible heretofore.

We applied CFLOBDDs in quantum-circuit simulation, and found that for several standard problems the improvement in scalability, compared to BDDs, is quite dramatic. With a 15-minute timeout, the number of qubits that CFLOBDDs can handle are 65,536 for GHZ, 524,288 for BV; 4,194,304 for DJ; and 4,096 for Grover’s Algorithm, besting BDDs by factors of 128 ×, 1,024 ×, 8,192 ×, and 128 ×, respectively.

本文提出了一种新的布尔函数压缩表示法,称为 CFLOBDDs(上下文自由语言有序二元判定图)。CFLOBDDs 本质上是 BDDs(二元判定图)的插件兼容替代品,因此有助于以高度压缩的方式表示某些类别的函数、矩阵、图、关系等。CFLOBDD 具有 BDD 的许多优良特性,但在最佳情况下,布尔函数的 CFLOBDD 比该函数的任何 BDD 都要小几倍。与一个函数的决策树的大小相比,CFLOBDD--同样,在最佳情况下--可以实现双倍指数级的缩减。CFLOBDD 有可能使应用程序 (i) 执行速度更快,(ii) 处理的问题实例比以前大得多。我们在量子电路仿真中应用了 CFLOBDD,发现对于一些标准问题,与 BDD 相比,CFLOBDD 在可扩展性方面的改进相当显著。在 15 分钟超时的情况下,CFLOBDDs 可处理的量子比特数分别为:GHZ 65,536 个、BV 524,288 个、DJ 4,194,304 个和 Grover 算法 4,096 个,分别比 BDDs 高出 128 ×、1,024 ×、8,192 × 和 128 × 倍。
{"title":"CFLOBDDs: Context-Free-Language Ordered Binary Decision Diagrams","authors":"Meghana Aparna Sistla, Swarat Chaudhuri, Thomas Reps","doi":"10.1145/3651157","DOIUrl":"https://doi.org/10.1145/3651157","url":null,"abstract":"<p>This paper presents a new compressed representation of Boolean functions, called CFLOBDDs (for Context-Free-Language Ordered Binary Decision Diagrams). They are essentially a plug-compatible alternative to BDDs (Binary Decision Diagrams), and hence useful for representing certain classes of functions, matrices, graphs, relations, etc. in a highly compressed fashion. CFLOBDDs share many of the good properties of BDDs, but—in the best case—the CFLOBDD for a Boolean function can be <i>exponentially smaller than any BDD for that function</i>. Compared with the size of the decision tree for a function, a CFLOBDD—again, in the best case—can give a <i>double-exponential reduction in size</i>. They have the potential to permit applications to (i) execute much faster, and (ii) handle much larger problem instances than has been possible heretofore. </p><p>We applied CFLOBDDs in quantum-circuit simulation, and found that for several standard problems the improvement in scalability, compared to BDDs, is quite dramatic. With a 15-minute timeout, the number of qubits that CFLOBDDs can handle are 65,536 for GHZ, 524,288 for BV; 4,194,304 for DJ; and 4,096 for Grover’s Algorithm, besting BDDs by factors of 128 ×, 1,024 ×, 8,192 ×, and 128 ×, respectively.</p>","PeriodicalId":50939,"journal":{"name":"ACM Transactions on Programming Languages and Systems","volume":"91 1","pages":""},"PeriodicalIF":1.3,"publicationDate":"2024-03-04","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"140034473","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":2,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Adversities in Abstract Interpretation: Accommodating Robustness by Abstract Interpretation: ACM Transactions on Programming Languages and Systems: Vol 0, No ja 抽象阐释中的逆境:通过抽象解释适应鲁棒性》:ACM 编程语言与系统论文集》:Vol 0, No ja
IF 1.3 2区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-02-24 DOI: 10.1145/3649309
Roberto Giacobazzi, Isabella Mastroeni, Elia Perantoni

Robustness is a key and desirable property of any classifying system, in particular, to avoid the ever-rising threat of adversarial attacks. Informally, a classification system is robust when the result is not affected by the perturbation of the input. This notion has been extensively studied, but little attention has been dedicated to how the perturbation affects the classification. The interference between perturbation and classification can manifest in many different ways, and its understanding is the main contribution of the present paper. Starting from a rigorous definition of a standard notion of robustness, we build a formal method for accommodating the required degree of robustness — depending on the amount of error the analyst may accept on the classification result. Our idea is to precisely model this error as an abstraction. This leads us to define weakened forms of robustness also in the context of programming languages, particularly in language-based security — e.g., information-flow policies — and in program verification. The latter is possible by moving from a quantitative (standard) model of perturbation to a novel qualitative model, given by means of the notion of abstraction. As in language-based security, we show that it is possible to confine adversities, which means to characterize the degree of perturbation (and/or the degree of class generalization) for which the classifier may be deemed adequately robust. We conclude with an experimental evaluation of our ideas, showing how weakened forms of robustness apply to state-of-the-art image classifiers.

鲁棒性是任何分类系统的关键和理想特性,尤其是为了避免不断增加的对抗性攻击威胁。非正式地讲,当结果不受输入扰动的影响时,分类系统就是稳健的。这一概念已被广泛研究,但很少有人关注扰动如何影响分类。扰动和分类之间的干扰可以通过多种不同的方式表现出来,理解这种干扰是本文的主要贡献。我们从稳健性标准概念的严格定义出发,根据分析师对分类结果可接受的误差量,建立了一种正式的方法来适应所需的稳健性程度。我们的想法是将这种误差作为抽象概念进行精确建模。这使我们在编程语言的背景下,特别是在基于语言的安全(如信息流策略)和程序验证中,也能定义鲁棒性的弱化形式。后者可以通过抽象概念,从扰动的定量(标准)模型转向新的定性模型。正如在基于语言的安全领域一样,我们证明有可能限制逆境,这意味着可以确定分类器的扰动程度(和/或类别泛化程度),并认为分类器具有足够的鲁棒性。最后,我们对我们的想法进行了实验评估,展示了弱化形式的鲁棒性如何应用于最先进的图像分类器。
{"title":"Adversities in Abstract Interpretation: Accommodating Robustness by Abstract Interpretation: ACM Transactions on Programming Languages and Systems: Vol 0, No ja","authors":"Roberto Giacobazzi, Isabella Mastroeni, Elia Perantoni","doi":"10.1145/3649309","DOIUrl":"https://doi.org/10.1145/3649309","url":null,"abstract":"<p>Robustness is a key and desirable property of any classifying system, in particular, to avoid the ever-rising threat of adversarial attacks. Informally, a classification system is robust when the result is not affected by the perturbation of the input. This notion has been extensively studied, but little attention has been dedicated to <i>how</i> the perturbation affects the classification. The interference between perturbation and classification can manifest in many different ways, and its understanding is the main contribution of the present paper. Starting from a rigorous definition of a standard notion of robustness, we build a formal method for accommodating the required degree of robustness — depending on the amount of error the analyst may accept on the classification result. Our idea is to precisely model this error as an <i>abstraction</i>. This leads us to define weakened forms of robustness also in the context of programming languages, particularly in language-based security — e.g., information-flow policies — and in program verification. The latter is possible by moving from a quantitative (standard) model of perturbation to a novel <i>qualitative</i> model, given by means of the notion of abstraction. As in language-based security, we show that it is possible to confine adversities, which means to characterize the degree of perturbation (and/or the degree of class generalization) for which the classifier may be deemed <i>adequately</i> robust. We conclude with an experimental evaluation of our ideas, showing how weakened forms of robustness apply to state-of-the-art image classifiers.</p>","PeriodicalId":50939,"journal":{"name":"ACM Transactions on Programming Languages and Systems","volume":"22 1","pages":""},"PeriodicalIF":1.3,"publicationDate":"2024-02-24","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"139951636","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":2,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Homeostasis: Design and Implementation of a Self-Stabilizing Compiler 稳态:自稳定编译器的设计与实现
IF 1.3 2区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-02-23 DOI: 10.1145/3649308
Aman Nougrahiya, V. Krishna Nandivada

Mainstream compilers perform a multitude of analyses and optimizations on the given input program. Each analysis (such as points-to analysis) may generate a program-abstraction (such as points-to graph). Each optimization is typically composed of multiple alternating phases of inspection of such program-abstractions and transformationsof the program. Upon transformation of a program, the program-abstractions generated by various analyses may become inconsistent with the modified program. Consequently, the correctness of the downstream inspection (and consequent transformation) phases cannot be ensured until the relevant program-abstractions are stabilized; that is, the program-abstractions are either invalidated or made consistent with the modified program. In general, the existing compiler frameworks do not perform automated stabilization of the program-abstractions and instead leave it to the compiler pass writers to deal with the complex task of identifying the relevant program-abstractions to be stabilized, the points where the stabilization is to be performed, and the exact procedure of stabilization. In this paper, we address these challenges by providing the design and implementation of a novel compiler-design framework called Homeostasis.

Homeostasis automatically captures all the program changes performed by each transformation phase, and later, triggers the required stabilization using the captured information, if needed. We also provide a formal description of Homeostasisand a correctness proof thereof. To assess the feasibility of using Homeostasis in compilers of parallel programs, we have implemented our proposed idea in IMOP, a compiler framework for OpenMP C programs. Further, to illustrate the benefits of using Homeostasis, we have implemented a set of standard data-flow passes, and a set of involved optimizations that are used to remove redundant barriers in OpenMP C programs. Implementations of none of these optimizations in IMOP required any additional lines of code for stabilization of the program-abstractions. We present an evaluation in the context of these optimizations and analyses, which demonstrates that Homeostasis is efficient and easy to use.

主流编译器会对给定的输入程序进行大量分析和优化。每项分析(如点到分析)都可能产生一个程序抽象(如点到图)。每次优化通常由多个交替阶段组成,即检查此类程序抽象和转换程序。程序转换时,各种分析生成的程序抽象可能会与修改后的程序不一致。因此,在相关程序抽象稳定之前,下游检查(以及随后的转换)阶段的正确性无法得到保证;也就是说,程序抽象要么失效,要么与修改后的程序保持一致。一般来说,现有的编译器框架并不自动执行程序抽象的稳定化,而是让编译器通证编写者来处理复杂的任务,即确定需要稳定化的相关程序抽象、需要执行稳定化的点以及稳定化的确切过程。在本文中,我们通过设计和实现一种名为 "Homeostasis "的新型编译器设计框架来应对这些挑战。Homeostasis 可自动捕获每个转换阶段执行的所有程序更改,并在需要时利用捕获的信息触发所需的稳定化。我们还提供了 Homeostasis 的形式描述及其正确性证明。为了评估在并行程序编译器中使用 "同态 "的可行性,我们在 IMOP 中实现了我们提出的想法,IMOP 是一个用于 OpenMP C 程序的编译器框架。此外,为了说明使用 "同态 "的好处,我们实施了一组标准数据流传递和一组用于消除 OpenMP C 程序中冗余障碍的相关优化。在 IMOP 中实现这些优化都不需要额外的代码行来稳定程序抽象。我们结合这些优化和分析进行了评估,结果表明 Homeostasis 高效且易于使用。
{"title":"Homeostasis: Design and Implementation of a Self-Stabilizing Compiler","authors":"Aman Nougrahiya, V. Krishna Nandivada","doi":"10.1145/3649308","DOIUrl":"https://doi.org/10.1145/3649308","url":null,"abstract":"<p>Mainstream compilers perform a multitude of analyses and optimizations on the given input program. Each analysis (such as points-to analysis) may generate a <i>program-abstraction</i> (such as points-to graph). Each optimization is typically composed of multiple alternating phases of <i>inspection</i> of such program-abstractions and <i>transformations</i>\u0000of the program. Upon transformation of a program, the program-abstractions generated by various analyses may become inconsistent with the modified program. Consequently, the correctness of the downstream inspection (and consequent transformation) phases cannot be ensured until the relevant program-abstractions are <i>stabilized</i>; that is, the program-abstractions are either invalidated or made consistent with the modified program. In general, the existing compiler frameworks do not perform automated stabilization of the program-abstractions and instead leave it to the compiler pass writers to deal with the complex task of identifying the relevant program-abstractions to be stabilized, the points where the stabilization is to be performed, and the exact procedure of stabilization. In this paper, we address these challenges by providing the design and implementation of a novel compiler-design framework called <i>Homeostasis</i>. </p><p><i>Homeostasis</i> automatically captures all the program changes performed by each transformation phase, and later, triggers the required stabilization using the captured information, if needed. We also provide a formal description of <i>Homeostasis</i>\u0000and a correctness proof thereof. To assess the feasibility of using <i>Homeostasis</i> in compilers of parallel programs, we have implemented our proposed idea in IMOP, a compiler framework for OpenMP C programs. Further, to illustrate the benefits of using <i>Homeostasis</i>, we have implemented a set of standard data-flow passes, and a set of involved optimizations that are used to remove redundant barriers in OpenMP C programs. Implementations of none of these optimizations in IMOP required any additional lines of code for stabilization of the program-abstractions. We present an evaluation in the context of these optimizations and analyses, which demonstrates that <i>Homeostasis</i> is efficient and easy to use.</p>","PeriodicalId":50939,"journal":{"name":"ACM Transactions on Programming Languages and Systems","volume":"31 1","pages":""},"PeriodicalIF":1.3,"publicationDate":"2024-02-23","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"139956984","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":2,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Locally Abstract, Globally Concrete Semantics of Concurrent Programming Languages 并行编程语言的局部抽象、全球具体语义学
IF 1.3 2区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-02-16 DOI: 10.1145/3648439
Crystal Chang Din, Reiner Hähnle, Ludovic Henrio, Einar Broch Johnsen, Violet Ka I Pun, S. Lizeth Tapia Tarifa

Formal, mathematically rigorous programming language semantics are the essential prerequisite for the design of logics and calculi that permit automated reasoning about concurrent programs. We propose a novel modular semantics designed to align smoothly with program logics used in deductive verification and formal specification of concurrent programs. Our semantics separates local evaluation of expressions and statements performed in an abstract, symbolic environment from their composition into global computations, at which point they are concretised. This makes incremental addition of new language concepts possible, without the need to revise the framework. The basis is a generalisation of the notion of a program trace as a sequence of evolving states that we enrich with event descriptors and trailing continuation markers. This allows to postpone scheduling constraints from the level of local evaluation to the global composition stage, where well-formedness predicates over the event structure declaratively characterise a wide range of concurrency models. We also illustrate how a sound program logic and calculus can be defined for this semantics.

正规的、数学上严谨的编程语言语义是设计逻辑和计算的基本前提,这些逻辑和计算允许对并发程序进行自动推理。我们提出了一种新颖的模块化语义,旨在与用于演绎验证和并发程序形式化规范的程序逻辑顺利接轨。我们的语义将在抽象符号环境中执行的表达式和语句的局部评估与它们组成的全局计算分离开来,在全局计算中,表达式和语句被具体化。这样就可以逐步增加新的语言概念,而无需修改框架。在此基础上,我们用事件描述符和尾部延续标记丰富了程序跟踪的概念,将其概括为一系列不断演化的状态。这样就可以将调度约束从局部评估层面推迟到全局组合阶段,在全局组合阶段,事件结构上的完备性谓词声明了各种并发模型的特征。我们还说明了如何为这种语义定义完善的程序逻辑和微积分。
{"title":"Locally Abstract, Globally Concrete Semantics of Concurrent Programming Languages","authors":"Crystal Chang Din, Reiner Hähnle, Ludovic Henrio, Einar Broch Johnsen, Violet Ka I Pun, S. Lizeth Tapia Tarifa","doi":"10.1145/3648439","DOIUrl":"https://doi.org/10.1145/3648439","url":null,"abstract":"<p>Formal, mathematically rigorous programming language semantics are the essential prerequisite for the design of logics and calculi that permit automated reasoning about concurrent programs. We propose a novel modular semantics designed to align smoothly with program logics used in deductive verification and formal specification of concurrent programs. Our semantics separates local evaluation of expressions and statements performed in an abstract, symbolic environment from their composition into global computations, at which point they are concretised. This makes incremental addition of new language concepts possible, without the need to revise the framework. The basis is a generalisation of the notion of a program trace as a sequence of evolving states that we enrich with event descriptors and trailing continuation markers. This allows to postpone scheduling constraints from the level of local evaluation to the global composition stage, where well-formedness predicates over the event structure declaratively characterise a wide range of concurrency models. We also illustrate how a sound program logic and calculus can be defined for this semantics.</p>","PeriodicalId":50939,"journal":{"name":"ACM Transactions on Programming Languages and Systems","volume":"10 1","pages":""},"PeriodicalIF":1.3,"publicationDate":"2024-02-16","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"139764652","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":2,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Interactive Abstract Interpretation with Demanded Summarization 交互式摘要解读与需求总结
IF 1.3 2区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-02-15 DOI: 10.1145/3648441
Benno Stein, Bor-Yuh Evan Chang, Manu Sridharan

We consider the problem of making expressive, interactive static analyzers compositional. Such a technique could help bring the power of server-based static analyses to integrated development environments (IDEs), updating their results live as the code is modified. Compositionality is key for this scenario, as it enables reuse of already-computed analysis results for unmodified code. Previous techniques for interactive static analysis either lack compositionality, cannot express arbitrary abstract domains, or are not from-scratch consistent.

We present demanded summarization, the first algorithm for incremental compositional analysis in arbitrary abstract domains which guarantees from-scratch consistency. Our approach analyzes individual procedures using a recent technique for demanded analysis, computing summaries on demand for procedure calls. A dynamically-updated summary dependency graph enables precise result invalidation after program edits, and the algorithm is carefully designed to guarantee from-scratch-consistent results after edits, even in the presence of recursion and in arbitrary abstract domains. We formalize our technique and prove soundness, termination, and from-scratch consistency. An experimental evaluation of a prototype implementation on synthetic and real-world program edits provides evidence for the feasibility of this theoretical framework, showing potential for major performance benefits over non-demanded compositional analyses.

我们考虑的问题是如何使富有表现力的交互式静态分析器具有可组合性。这种技术有助于将基于服务器的静态分析功能引入集成开发环境(IDE),在修改代码时实时更新分析结果。在这种情况下,组合性是关键所在,因为它可以在未修改的代码中重复使用已经计算出的分析结果。以前的交互式静态分析技术要么缺乏组合性,要么不能表达任意抽象域,要么不能从头开始保持一致。我们提出的需求总结是第一种在任意抽象域中进行增量组合分析的算法,它能保证从零开始的一致性。我们的方法使用最新的需求分析技术分析单个过程,根据过程调用的需求计算摘要。动态更新的摘要依赖图可以在程序编辑后精确地使结果失效,而且算法经过精心设计,即使在存在递归和任意抽象域的情况下,也能保证编辑后的结果从零开始的一致性。我们对技术进行了形式化,并证明了其合理性、终止性和从零开始的一致性。对原型实现在合成和真实世界程序编辑上的实验评估证明了这一理论框架的可行性,并显示了与非要求的组合分析相比,该技术在性能上的巨大潜力。
{"title":"Interactive Abstract Interpretation with Demanded Summarization","authors":"Benno Stein, Bor-Yuh Evan Chang, Manu Sridharan","doi":"10.1145/3648441","DOIUrl":"https://doi.org/10.1145/3648441","url":null,"abstract":"<p>We consider the problem of making expressive, interactive static analyzers <i>compositional</i>. Such a technique could help bring the power of server-based static analyses to integrated development environments (IDEs), updating their results live as the code is modified. Compositionality is key for this scenario, as it enables reuse of already-computed analysis results for unmodified code. Previous techniques for interactive static analysis either lack compositionality, cannot express arbitrary abstract domains, or are not from-scratch consistent. </p><p>We present demanded summarization, the first algorithm for incremental compositional analysis in arbitrary abstract domains which guarantees from-scratch consistency. Our approach analyzes individual procedures using a recent technique for demanded analysis, computing summaries on demand for procedure calls. A dynamically-updated summary dependency graph enables precise result invalidation after program edits, and the algorithm is carefully designed to guarantee from-scratch-consistent results after edits, even in the presence of recursion and in arbitrary abstract domains. We formalize our technique and prove soundness, termination, and from-scratch consistency. An experimental evaluation of a prototype implementation on synthetic and real-world program edits provides evidence for the feasibility of this theoretical framework, showing potential for major performance benefits over non-demanded compositional analyses.</p>","PeriodicalId":50939,"journal":{"name":"ACM Transactions on Programming Languages and Systems","volume":"19 1","pages":""},"PeriodicalIF":1.3,"publicationDate":"2024-02-15","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"139764637","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":2,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Decomposition-Based Synthesis for Applying Divide-and-Conquer-Like Algorithmic Paradigms 基于分解的合成,应用类似分而治之的算法范式
IF 1.3 2区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-02-14 DOI: 10.1145/3648440
Ruyi Ji, Yuwei Zhao, Yingfei Xiong, Di Wang, Lu Zhang, Zhenjiang Hu

Algorithmic paradigms such as divide-and-conquer (D&C) are proposed to guide developers in designing efficient algorithms, but it can still be difficult to apply algorithmic paradigms to practical tasks. To ease the usage of paradigms, many research efforts have been devoted to the automatic application of algorithmic paradigms. However, most existing approaches to this problem rely on syntax-based program transformations and thus put significant restrictions on the original program.

In this paper, we study the automatic application of D&C and several similar paradigms, denoted as D&C-like algorithmic paradigms, and aim to remove the restrictions from syntax-based transformations. To achieve this goal, we propose an efficient synthesizer, named AutoLifter, which does not depend on syntax-based transformations. Specifically, the main challenge of applying algorithmic paradigms is from the large scale of the synthesized programs, and AutoLifter addresses this challenge by applying two novel decomposition methods that do not depend on the syntax of the input program, component elimination and variable elimination, to soundly divide the whole problem into simpler subtasks, each synthesizing a sub-program of the final program and being tractable with existing synthesizers.

We evaluate AutoLifter on 96 programming tasks related to 6 different algorithmic paradigms. AutoLifter solves 82/96 tasks with an average time cost of 20.17 seconds, significantly outperforming existing approaches.

分而治之(D&C)等算法范式的提出,为开发人员设计高效算法提供了指导,但将算法范式应用于实际任务仍有困难。为了简化范式的使用,许多研究人员致力于算法范式的自动应用。然而,解决这一问题的大多数现有方法都依赖于基于语法的程序转换,因此对原始程序造成了很大的限制。在本文中,我们研究了 D&C 和几种类似范式(称为类 D&C 算法范式)的自动应用,旨在消除基于语法的转换所带来的限制。为了实现这一目标,我们提出了一种高效的合成器,命名为 AutoLifter,它不依赖于基于语法的转换。具体来说,应用算法范式的主要挑战来自合成程序的庞大规模,AutoLifter 通过应用两种不依赖于输入程序语法的新颖分解方法--组件消除和变量消除--来解决这一挑战,将整个问题合理地划分为更简单的子任务,每个子任务合成最终程序的一个子程序,并与现有的合成器兼容。我们在与 6 种不同算法范式相关的 96 个编程任务中对 AutoLifter 进行了评估。AutoLifter 以 20.17 秒的平均时间成本解决了 82/96 个任务,明显优于现有方法。
{"title":"Decomposition-Based Synthesis for Applying Divide-and-Conquer-Like Algorithmic Paradigms","authors":"Ruyi Ji, Yuwei Zhao, Yingfei Xiong, Di Wang, Lu Zhang, Zhenjiang Hu","doi":"10.1145/3648440","DOIUrl":"https://doi.org/10.1145/3648440","url":null,"abstract":"<p>Algorithmic paradigms such as divide-and-conquer (D&amp;C) are proposed to guide developers in designing efficient algorithms, but it can still be difficult to apply algorithmic paradigms to practical tasks. To ease the usage of paradigms, many research efforts have been devoted to the automatic application of algorithmic paradigms. However, most existing approaches to this problem rely on syntax-based program transformations and thus put significant restrictions on the original program. </p><p>In this paper, we study the automatic application of D&amp;C and several similar paradigms, denoted as D&amp;C-like algorithmic paradigms, and aim to remove the restrictions from syntax-based transformations. To achieve this goal, we propose an efficient synthesizer, named <i>AutoLifter</i>, which does not depend on syntax-based transformations. Specifically, the main challenge of applying algorithmic paradigms is from the large scale of the synthesized programs, and <i>AutoLifter</i> addresses this challenge by applying two novel decomposition methods that do not depend on the syntax of the input program, <i>component elimination</i> and <i>variable elimination</i>, to soundly divide the whole problem into simpler subtasks, each synthesizing a sub-program of the final program and being tractable with existing synthesizers. </p><p>We evaluate <i>AutoLifter</i> on 96 programming tasks related to 6 different algorithmic paradigms. <i>AutoLifter</i> solves 82/96 tasks with an average time cost of 20.17 seconds, significantly outperforming existing approaches.</p>","PeriodicalId":50939,"journal":{"name":"ACM Transactions on Programming Languages and Systems","volume":"1 1","pages":""},"PeriodicalIF":1.3,"publicationDate":"2024-02-14","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"139764870","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":2,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
LoRe: A Programming Model for Verifiably Safe Local-First Software 可验证安全的本地优先软件的编程模型
IF 1.3 2区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2023-12-01 DOI: 10.1145/3633769
Julian Haas, Ragnar Mogk, Elena Yanakieva, Annette Bieniusa, Mira Mezini

Local-first software manages and processes private data locally while still enabling collaboration between multiple parties connected via partially unreliable networks. Such software typically involves interactions with users and the execution environment (the outside world). The unpredictability of such interactions paired with their decentralized nature make reasoning about the correctness of local-first software a challenging endeavor. Yet, existing solutions to develop local-first software do not provide support for automated safety guarantees and instead expect developers to reason about concurrent interactions in an environment with unreliable network conditions.

We propose LoRe, a programming model and compiler that automatically verifies developer-supplied safety properties for local-first applications. LoRe combines the declarative data flow of reactive programming with static analysis and verification techniques to precisely determine concurrent interactions that violate safety invariants and to selectively employ strong consistency through coordination where required. We propose a formalized proof principle and demonstrate how to automate the process in a prototype implementation that outputs verified executable code. Our evaluation shows that LoRe simplifies the development of safe local-first software when compared to state-of-the-art approaches and that verification times are acceptable.

本地优先软件在本地管理和处理私有数据,同时仍然支持通过部分不可靠的网络连接的多方之间的协作。此类软件通常涉及与用户和执行环境(外部世界)的交互。这种交互的不可预测性与它们的分散性相结合,使得对本地优先软件正确性的推理成为一项具有挑战性的努力。然而,开发本地优先软件的现有解决方案不支持自动安全保证,而是期望开发人员在网络条件不可靠的环境中对并发交互进行推理。我们提出LoRe,这是一种编程模型和编译器,可以自动验证开发人员为本地优先应用程序提供的安全属性。LoRe将响应式编程的声明性数据流与静态分析和验证技术相结合,以精确地确定违反安全不变量的并发交互,并在需要的地方通过协调有选择地采用强一致性。我们提出了一个形式化的证明原则,并演示了如何在输出经过验证的可执行代码的原型实现中自动化该过程。我们的评估表明,与最先进的方法相比,LoRe简化了安全本地优先软件的开发,并且验证时间是可以接受的。
{"title":"LoRe: A Programming Model for Verifiably Safe Local-First Software","authors":"Julian Haas, Ragnar Mogk, Elena Yanakieva, Annette Bieniusa, Mira Mezini","doi":"10.1145/3633769","DOIUrl":"https://doi.org/10.1145/3633769","url":null,"abstract":"<p>Local-first software manages and processes private data locally while still enabling collaboration between multiple parties connected via partially unreliable networks. Such software typically involves interactions with users and the execution environment (the outside world). The unpredictability of such interactions paired with their decentralized nature make reasoning about the correctness of local-first software a challenging endeavor. Yet, existing solutions to develop local-first software do not provide support for automated safety guarantees and instead expect developers to reason about concurrent interactions in an environment with unreliable network conditions. </p><p>We propose <i>LoRe</i>, a programming model and compiler that automatically verifies developer-supplied safety properties for local-first applications. <i>LoRe</i> combines the declarative data flow of reactive programming with static analysis and verification techniques to precisely determine concurrent interactions that violate safety invariants and to selectively employ strong consistency through coordination where required. We propose a formalized proof principle and demonstrate how to automate the process in a prototype implementation that outputs verified executable code. Our evaluation shows that <i>LoRe</i> simplifies the development of safe local-first software when compared to state-of-the-art approaches and that verification times are acceptable.</p>","PeriodicalId":50939,"journal":{"name":"ACM Transactions on Programming Languages and Systems","volume":"261 2","pages":""},"PeriodicalIF":1.3,"publicationDate":"2023-12-01","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"138508373","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":2,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Choral: Object-Oriented Choreographic Programming 合唱:面向对象编舞编程
IF 1.3 2区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2023-11-22 DOI: 10.1145/3632398
Saverio Giallorenzo, Fabrizio Montesi, Marco Peressotti

Choreographies are coordination plans for concurrent and distributed systems, which define the roles of the involved participants and how they are supposed to work together. In the paradigm of choreographic programming, choreographies are programs that can be compiled into executable implementations.

In this article, we present Choral, the first choreographic programming language based on mainstream abstractions. The key idea in Choral is a new notion of data type, which allows for expressing that data is distributed over different roles. We use this idea to reconstruct the paradigm of choreographic programming through object-oriented abstractions. Choreographies are classes, and instances of choreographies are objects with states and behaviours implemented collaboratively by roles.

Choral comes with a compiler that, given a choreography, generates an implementation for each of its roles. These implementations are libraries in pure Java, whose types are under the control of the Choral programmer. Developers can then modularly compose these libraries in their programs, to participate correctly in choreographies. Choral is the first incarnation of choreographic programming offering such modularity, which finally connects more than a decade of research on the paradigm to practical software development.

The integration of choreographic and object-oriented programming yields other powerful advantages, where the features of one paradigm benefit the other in ways that go beyond the sum of the parts. On the one hand, the high-level abstractions and static checks from the world of choreographies can be used to write concurrent and distributed object-oriented software more concisely and correctly. On the other hand, we obtain a much more expressive choreographic language from object-oriented abstractions than in previous work. This expressivity allows for writing more reusable and flexible choreographies. For example, object passing makes Choral the first higher-order choreographic programming language, whereby choreographies can be parameterised over other choreographies without any need for central coordination. We also extend method overloading to a new dimension: specialisation based on data location. Together with subtyping and generics, this allows Choral to elegantly support user-defined communication mechanisms and middleware.

编排是并发和分布式系统的协调计划,它定义了所涉及的参与者的角色以及它们应该如何协同工作。在编排编程范例中,编排是可以编译成可执行实现的程序。在本文中,我们介绍了第一个基于主流抽象的编舞编程语言。合唱中的关键思想是数据类型的新概念,它允许表示分布在不同角色上的数据。我们使用这个思想通过面向对象的抽象来重构编排编程的范式。编排是类,编排的实例是具有由角色协作实现的状态和行为的对象。合唱自带一个编译器,给定一个编排,它会为每个角色生成一个实现。这些实现是纯Java中的库,其类型由合唱程序员控制。然后,开发人员可以在他们的程序中模块化地组合这些库,以正确地参与编排。合唱是提供这种模块化的编排编程的第一个化身,它最终将十多年来对范式的研究与实际的软件开发联系起来。编排和面向对象编程的集成产生了其他强大的优势,其中一种范式的特性以超出部分总和的方式使另一种范式受益。一方面,来自编排领域的高级抽象和静态检查可用于更简洁、更正确地编写并发和分布式面向对象软件。另一方面,与以前的工作相比,我们从面向对象的抽象中获得了更具表现力的编排语言。这种表达性允许编写更可重用和更灵活的编排。例如,对象传递使合唱成为第一个高阶编排编程语言,据此,编排可以在其他编排之上进行参数化,而不需要任何中心协调。我们还将方法重载扩展到一个新的维度:基于数据位置的专门化。再加上子类型和泛型,这使得合唱能够优雅地支持用户定义的通信机制和中间件。
{"title":"Choral: Object-Oriented Choreographic Programming","authors":"Saverio Giallorenzo, Fabrizio Montesi, Marco Peressotti","doi":"10.1145/3632398","DOIUrl":"https://doi.org/10.1145/3632398","url":null,"abstract":"<p>Choreographies are coordination plans for concurrent and distributed systems, which define the roles of the involved participants and how they are supposed to work together. In the paradigm of choreographic programming, choreographies are programs that can be compiled into executable implementations. </p><p>In this article, we present Choral, the first choreographic programming language based on mainstream abstractions. The key idea in Choral is a new notion of data type, which allows for expressing that data is distributed over different roles. We use this idea to reconstruct the paradigm of choreographic programming through object-oriented abstractions. Choreographies are classes, and instances of choreographies are objects with states and behaviours implemented collaboratively by roles. </p><p>Choral comes with a compiler that, given a choreography, generates an implementation for each of its roles. These implementations are libraries in pure Java, whose types are under the control of the Choral programmer. Developers can then modularly compose these libraries in their programs, to participate correctly in choreographies. Choral is the first incarnation of choreographic programming offering such modularity, which finally connects more than a decade of research on the paradigm to practical software development. </p><p>The integration of choreographic and object-oriented programming yields other powerful advantages, where the features of one paradigm benefit the other in ways that go beyond the sum of the parts. On the one hand, the high-level abstractions and static checks from the world of choreographies can be used to write concurrent and distributed object-oriented software more concisely and correctly. On the other hand, we obtain a much more expressive choreographic language from object-oriented abstractions than in previous work. This expressivity allows for writing more reusable and flexible choreographies. For example, object passing makes Choral the first higher-order choreographic programming language, whereby choreographies can be parameterised over other choreographies without any need for central coordination. We also extend method overloading to a new dimension: specialisation based on data location. Together with subtyping and generics, this allows Choral to elegantly support user-defined communication mechanisms and middleware.</p>","PeriodicalId":50939,"journal":{"name":"ACM Transactions on Programming Languages and Systems","volume":"261 6","pages":""},"PeriodicalIF":1.3,"publicationDate":"2023-11-22","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"138508371","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":2,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 2
Focusing on Refinement Typing 注重精细化类型
2区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2023-10-17 DOI: 10.1145/3610408
Dimitrios J. Economou, Neel Krishnaswami, Jana Dunfield
We present a logically principled foundation for systematizing, in a way that works with any computational effect and evaluation order, SMT constraint generation seen in refinement type systems for functional programming languages. By carefully combining a focalized variant of call-by-push-value, bidirectional typing, and our novel technique of value-determined indexes, our system generates solvable SMT constraints without existential (unification) variables. We design a polarized subtyping relation allowing us to prove our logically focused typing algorithm is sound, complete, and decidable. We prove type soundness of our declarative system with respect to an elementary domain-theoretic denotational semantics. Type soundness implies, relatively simply, the total correctness and logical consistency of our system. The relative ease with which we obtain both algorithmic and semantic results ultimately stems from the proof-theoretic technique of focalization.
我们提出了一个系统化的逻辑原则基础,以一种适用于任何计算效果和求值顺序的方式,在函数式编程语言的细化类型系统中看到SMT约束生成。通过仔细组合按推值调用的集中变体、双向类型和我们的值确定索引的新技术,我们的系统生成了可解决的SMT约束,而不需要存在(统一)变量。我们设计了一个极化的子类型关系,使我们能够证明我们的逻辑集中的类型算法是健全的、完整的和可确定的。我们用一个基本领域论指称语义证明了我们的陈述系统的类型稳健性。相对简单地说,类型稳健性意味着系统的全部正确性和逻辑一致性。我们获得算法和语义结果的相对容易最终源于聚焦的证明理论技术。
{"title":"Focusing on Refinement Typing","authors":"Dimitrios J. Economou, Neel Krishnaswami, Jana Dunfield","doi":"10.1145/3610408","DOIUrl":"https://doi.org/10.1145/3610408","url":null,"abstract":"We present a logically principled foundation for systematizing, in a way that works with any computational effect and evaluation order, SMT constraint generation seen in refinement type systems for functional programming languages. By carefully combining a focalized variant of call-by-push-value, bidirectional typing, and our novel technique of value-determined indexes, our system generates solvable SMT constraints without existential (unification) variables. We design a polarized subtyping relation allowing us to prove our logically focused typing algorithm is sound, complete, and decidable. We prove type soundness of our declarative system with respect to an elementary domain-theoretic denotational semantics. Type soundness implies, relatively simply, the total correctness and logical consistency of our system. The relative ease with which we obtain both algorithmic and semantic results ultimately stems from the proof-theoretic technique of focalization.","PeriodicalId":50939,"journal":{"name":"ACM Transactions on Programming Languages and Systems","volume":"70 1","pages":"0"},"PeriodicalIF":0.0,"publicationDate":"2023-10-17","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"135945210","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":2,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
期刊
ACM Transactions on Programming Languages and Systems
全部 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