首页 > 最新文献

Journal of Computer Languages最新文献

英文 中文
A new architecture reconciling refactorings and transformations 协调重构和转换的新架构
IF 2.2 3区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-05-31 DOI: 10.1016/j.cola.2024.101273
Balša Šarenac , Nicolas Anquetil , Stéphane Ducasse , Pablo Tesone

Refactorings are behavior-preserving code transformations. They are a recommended software development practice and are now a standard feature in modern IDEs. There are however many situations where developers need to perform mere transformations (non-behavior-preserving) or to mix refactorings and transformations. Little work exists on the analysis of transformations implementation, how refactorings could be composed of smaller, reusable, parts (simple transformations or other refactorings), and, conversely, how transformations could be reused in isolation or to compose new refactorings. In a previous article, we started to analyze the seminal implementation of refactorings as proposed in the Ph.D. of D. Roberts, and whose evolution is available in the Pharo IDE. We identified a dichotomy between the class hierarchy of refactorings (56 classes) and that of transformations (70 classes). We also noted that there are different kinds of preconditions for different purposes (applicability preconditions or behavior-preserving preconditions). In this article, we go further by proposing a new architecture that: (i) supports two important scenarios (interactive use or scripting, i.e., batch use); (ii) defines a clear API unifying refactorings and transformations; (iii) expresses refactorings as decorators over transformations, and; (iv) formalizes the uses of the different kinds of preconditions, thus supporting better user feedback. We are in the process of migrating the existing Pharo refactorings to this new architecture. Current results show that elementary transformations such as the Add Method transformation is reused in 24 refactorings and 11 other transformations; and the Remove Method transformation is reused in 11 refactorings and 7 other transformations.

重构是一种行为保留代码转换。重构是一种推荐的软件开发实践,现在已成为现代集成开发环境的标准功能。然而,在许多情况下,开发人员需要执行单纯的转换(非行为保护),或将重构与转换混合使用。在分析转换实现、如何将重构由更小的、可重用的部分(简单转换或其他重构)组成,以及反过来,如何将转换单独重用或组成新的重构方面,目前还鲜有研究。在前一篇文章中,我们开始分析罗伯茨博士(D. Roberts)在其博士论文中提出的重构的开创性实现,Pharo集成开发环境也提供了该实现的演进。我们发现重构的类层次结构(56 个类)与转换的类层次结构(70 个类)之间存在二分法。我们还注意到,不同的目的有不同类型的前提条件(适用性前提条件或行为保留前提条件)。在本文中,我们进一步提出了一种新的架构,它可以(i) 支持两种重要场景(交互式使用或脚本,即批量使用);(ii) 定义了统一重构和转换的清晰 API;(iii) 将重构表达为转换的装饰器;(iv) 将不同类型前提条件的用途正规化,从而支持更好的用户反馈。我们正在将现有的 Pharo 重构移植到这个新架构中。目前的研究结果表明,基本变换(如添加方法变换)在 24 次重构和 11 次其他变换中被重复使用;删除方法变换在 11 次重构和 7 次其他变换中被重复使用。
{"title":"A new architecture reconciling refactorings and transformations","authors":"Balša Šarenac ,&nbsp;Nicolas Anquetil ,&nbsp;Stéphane Ducasse ,&nbsp;Pablo Tesone","doi":"10.1016/j.cola.2024.101273","DOIUrl":"https://doi.org/10.1016/j.cola.2024.101273","url":null,"abstract":"<div><p><em>Refactorings</em> are behavior-preserving code transformations. They are a recommended software development practice and are now a standard feature in modern IDEs. There are however many situations where developers need to perform mere <em>transformations</em> (non-behavior-preserving) or to mix refactorings and transformations. Little work exists on the analysis of transformations <em>implementation</em>, how refactorings could be composed of smaller, reusable, parts (simple transformations or other refactorings), and, conversely, how transformations could be <em>reused</em> in isolation or to compose new refactorings. In a previous article, we started to analyze the seminal implementation of refactorings as proposed in the Ph.D. of D. Roberts, and whose evolution is available in the Pharo IDE. We identified a dichotomy between the class hierarchy of <em>refactorings</em> (56 classes) and that of <em>transformations</em> (70 classes). We also noted that there are different kinds of preconditions for different purposes (applicability preconditions or behavior-preserving preconditions). In this article, we go further by proposing a new architecture that: (i) supports two important scenarios (interactive use or scripting, <em><em>i.e.,</em></em> batch use); (ii) defines a clear API unifying refactorings and transformations; (iii) expresses refactorings as decorators over transformations, and; (iv) formalizes the uses of the different kinds of preconditions, thus supporting better user feedback. We are in the process of migrating the existing Pharo refactorings to this new architecture. Current results show that elementary transformations such as the <span>Add Method</span> transformation is reused in 24 refactorings and 11 other transformations; and the <span>Remove Method</span> transformation is reused in 11 refactorings and 7 other transformations.</p></div>","PeriodicalId":48552,"journal":{"name":"Journal of Computer Languages","volume":"80 ","pages":"Article 101273"},"PeriodicalIF":2.2,"publicationDate":"2024-05-31","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"141312955","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":3,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Towards a Dynabook for verified VM construction 开发用于验证虚拟机构建的 Dynabook
IF 2.2 3区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-05-23 DOI: 10.1016/j.cola.2024.101275
Boris Shingarov , Jan Vraný

We present Smalltalk-25, a scientific Programm of research towards the synthesis of Smalltalk VMs by formal methods. We approach this through a Dynabook-style implementation of Hilbert’s “manipulating proofs as mathematical objects”. We begin by implementing an automated-reasoning engine based on refinement types. Having that foundation laid, we build a program logics for a simple “model” language; a framework for reasoning about a real intermediate language by translating into the model language; an ahead-of-time bootstrapper; and a framework for debugging thus-constructed VMs.

Our Programm is an ongoing research effort; this paper provides a report of its current status. Every part of our system is implemented in Smalltalk and available from GitHub under the MIT license.

我们介绍了Smalltalk-25,这是一项通过形式化方法合成Smalltalk虚拟机的科学研究计划。我们通过Dynabook式实现希尔伯特的 "将证明作为数学对象进行操作 "来实现这一目标。我们首先实现了一个基于细化类型的自动推理引擎。在此基础上,我们为简单的 "模型 "语言构建了一个程序逻辑;一个通过翻译成模型语言来推理真实中间语言的框架;一个超前引导器;以及一个用于调试由此构建的虚拟机的框架。我们系统的每一部分都是用 Smalltalk 实现的,可在 GitHub 上以 MIT 许可的方式获取。
{"title":"Towards a Dynabook for verified VM construction","authors":"Boris Shingarov ,&nbsp;Jan Vraný","doi":"10.1016/j.cola.2024.101275","DOIUrl":"10.1016/j.cola.2024.101275","url":null,"abstract":"<div><p>We present <em>Smalltalk-25</em>, a scientific <em>Programm</em> of research towards the synthesis of Smalltalk VMs by formal methods. We approach this through a Dynabook-style implementation of Hilbert’s “manipulating proofs as mathematical objects”. We begin by implementing an automated-reasoning engine based on refinement types. Having that foundation laid, we build a program logics for a simple “model” language; a framework for reasoning about a real intermediate language by translating into the model language; an ahead-of-time bootstrapper; and a framework for debugging thus-constructed VMs.</p><p>Our <em>Programm</em> is an ongoing research effort; this paper provides a report of its current status. Every part of our system is implemented in Smalltalk and available from GitHub under the MIT license.</p></div>","PeriodicalId":48552,"journal":{"name":"Journal of Computer Languages","volume":"80 ","pages":"Article 101275"},"PeriodicalIF":2.2,"publicationDate":"2024-05-23","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"141140750","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":3,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Pharo: A reflective language—Analyzing the reflective API and its internal dependencies Pharo:一种反思性语言--分析反思性应用程序接口及其内部依赖关系
IF 2.2 3区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-05-18 DOI: 10.1016/j.cola.2024.101274
Iona Thomas, Stéphane Ducasse, Pablo Tesone, Guillermo Polito

Reflective operations are powerful APIs (Application Programming Interface) that let developers build advanced tools and architectures. Reflective operations are used for implementing tools and development environments (e.g., compilers, debuggers, inspectors) or language features (e.g., distributed systems, exceptions, proxies, aspect-oriented programming). In addition, languages are evolving, introducing better concepts, and revising practices and APIs. Since 2008 Pharo has evolved from Squeak and its reflective API has evolved accordingly, diverging consequently from the original Smalltalk reflective API. With more than 500 reflective methods identified, Pharo has one of the largest reflective feature sets ranging from structural reflection to on-demand stack reification. Those operations are often built on top of the other, creating different layers of reflective operations, from low-level to high-level ones.

There is a need to understand the current reflective APIs to understand their underlying use, potential dependencies, and whether some reflective features can be scoped and optional. Such an analysis is challenged by new metaobjects organically introduced in the system, such as first-class instance variables, and their mixture with the base-level API of objects and classes.

In this article, we analyze the reflective operations used in Pharo 12 and their interdependencies. We propose a classification based on their semantics and we identify a set of issues of the current implementation. Such an analysis of reflective operations in Pharo is important to support the revision of the reflective layer and its potential redesign.

反射操作是一种功能强大的应用程序接口(API),可让开发人员构建先进的工具和架构。反射操作可用于实现工具和开发环境(如编译器、调试器、检查器)或语言特性(如分布式系统、异常、代理、面向方面的编程)。此外,语言也在不断发展,引入了更好的概念,并修改了实践和 API。自2008年以来,Pharo从Squeak发展而来,其反射式应用程序接口也随之演变,与最初的Smalltalk反射式应用程序接口大相径庭。Pharo拥有500多种反射方法,是反射功能最齐全的公司之一,包括结构反射和按需堆栈重化。这些操作通常建立在其他操作之上,形成了从低级到高级的不同层次的反射操作。我们有必要了解当前的反射API,以了解它们的基本用途、潜在的依赖性,以及某些反射功能是否可以被范围化和可选。系统中有机引入的新元对象(如一流的实例变量)以及它们与对象和类的底层 API 的混合给这种分析带来了挑战。本文将分析 Pharo 12 中使用的反射操作及其相互依存关系,并根据其语义提出一种分类方法,同时指出当前实现中存在的一系列问题。对 Pharo 中的反射操作进行这样的分析对于支持反射层的修订及其潜在的重新设计非常重要。
{"title":"Pharo: A reflective language—Analyzing the reflective API and its internal dependencies","authors":"Iona Thomas,&nbsp;Stéphane Ducasse,&nbsp;Pablo Tesone,&nbsp;Guillermo Polito","doi":"10.1016/j.cola.2024.101274","DOIUrl":"10.1016/j.cola.2024.101274","url":null,"abstract":"<div><p>Reflective operations are powerful APIs (Application Programming Interface) that let developers build advanced tools and architectures. Reflective operations are used for implementing tools and development environments (<em>e.g.,</em> compilers, debuggers, inspectors) or language features (<em>e.g.,</em> distributed systems, exceptions, proxies, aspect-oriented programming). In addition, languages are evolving, introducing better concepts, and revising practices and APIs. Since 2008 Pharo has evolved from Squeak and its reflective API has evolved accordingly, diverging consequently from the original Smalltalk reflective API. With more than 500 reflective methods identified, Pharo has one of the largest reflective feature sets ranging from structural reflection to on-demand stack reification. Those operations are often built on top of the other, creating different layers of reflective operations, from low-level to high-level ones.</p><p>There is a need to understand the current reflective APIs to understand their underlying use, potential dependencies, and whether some reflective features can be scoped and optional. Such an analysis is challenged by new metaobjects organically introduced in the system, such as first-class instance variables, and their mixture with the base-level API of objects and classes.</p><p>In this article, we analyze the reflective operations used in Pharo 12 and their interdependencies. We propose a classification based on their semantics and we identify a set of issues of the current implementation. Such an analysis of reflective operations in Pharo is important to support the revision of the reflective layer and its potential redesign.</p></div>","PeriodicalId":48552,"journal":{"name":"Journal of Computer Languages","volume":"80 ","pages":"Article 101274"},"PeriodicalIF":2.2,"publicationDate":"2024-05-18","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"141130163","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":3,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Explanations for combinatorial optimization problems 组合优化问题的解释
IF 2.2 3区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-05-03 DOI: 10.1016/j.cola.2024.101272
Martin Erwig, Prashant Kumar

We introduce a representation for generating explanations for the outcomes of combinatorial optimization algorithms. The two key ideas are (A) to maintain fine-grained representations of the values manipulated by these algorithms and (B) to derive explanations from these representations through merge, filter, and aggregation operations. An explanation in our model presents essentially a high-level comparison of the solution to a problem with a hypothesized alternative, illuminating why the solution is better than the alternative. Our value representation results in explanations smaller than other dynamic program representations, such as traces. Based on a measure for the conciseness of explanations we demonstrate through a number of experiments that the explanations produced by our approach are small and scale well with problem size across a number of different applications.

我们介绍了一种为组合优化算法的结果生成解释的表示方法。其中的两个关键思想是:(A)维护这些算法所处理值的细粒度表示法;(B)通过合并、过滤和聚合操作,从这些表示法中得出解释。在我们的模型中,解释实质上是将问题的解决方案与假设的替代方案进行高层次比较,阐明解决方案优于替代方案的原因。与其他动态程序表示法(如轨迹)相比,我们的值表示法所产生的解释更小。基于对解释简洁性的衡量标准,我们通过大量实验证明,我们的方法所产生的解释较小,并能很好地随着问题规模的扩大而扩展,适用于许多不同的应用。
{"title":"Explanations for combinatorial optimization problems","authors":"Martin Erwig,&nbsp;Prashant Kumar","doi":"10.1016/j.cola.2024.101272","DOIUrl":"https://doi.org/10.1016/j.cola.2024.101272","url":null,"abstract":"<div><p>We introduce a representation for generating explanations for the outcomes of combinatorial optimization algorithms. The two key ideas are (A) to maintain fine-grained representations of the values manipulated by these algorithms and (B) to derive explanations from these representations through merge, filter, and aggregation operations. An explanation in our model presents essentially a high-level comparison of the solution to a problem with a hypothesized alternative, illuminating why the solution is better than the alternative. Our value representation results in explanations smaller than other dynamic program representations, such as traces. Based on a measure for the conciseness of explanations we demonstrate through a number of experiments that the explanations produced by our approach are small and scale well with problem size across a number of different applications.</p></div>","PeriodicalId":48552,"journal":{"name":"Journal of Computer Languages","volume":"79 ","pages":"Article 101272"},"PeriodicalIF":2.2,"publicationDate":"2024-05-03","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"140880436","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":3,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
A fresh look on semantics of Concurrent State Based Language (ConStaBL) 基于并发状态的语言(ConStaBL)语义的全新视角
IF 2.2 3区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-05-03 DOI: 10.1016/j.cola.2024.101270
Karthika Venkatesan , Sujit Kumar Chakrabarti

Statechart is a visual modelling language for systems. Our variant of the statechart has local variables, which interact significantly with the remainder of the language semantics. It allows arbitrary interleaving of concurrently executing action code, which allows more precise modelling of systems and upstream analysis of the same. We also establish the criteria based on our semantics for defining conflicting transitions and valid simulations. Our semantics do not allow transition conflicts in simulations and are stricter than most other available semantics of statecharts in that sense. In this paper, we extend the work on modular statecharts and present updated operational semantics with concurrency. We present the operational semantics in the form of the simulation algorithm. Our executable semantics can be used to simulate statechart models and verify their correctness. We present a preliminary setup to carry out fuzz testing of statechart models, an idea that does not have precedent in the literature to the best of our knowledge. We have used our simulator in conjunction with a well-known fuzzer to do fuzz testing of statechart models of non-trivial sizes and have found issues in them that would have been hard to find through inspection.

状态图是一种可视化的系统建模语言。我们的状态图变体具有局部变量,可与语言语义的其余部分产生重要交互。它允许任意交错并发执行的动作代码,这使得系统建模和上游分析更加精确。我们还根据我们的语义建立了定义冲突转换和有效模拟的标准。我们的语义不允许在模拟中出现转换冲突,在这个意义上比其他大多数可用的状态图语义更加严格。在本文中,我们扩展了模块化状态图方面的工作,并提出了具有并发性的最新操作语义。我们以模拟算法的形式提出了操作语义。我们的可执行语义可用于模拟状态图模型并验证其正确性。我们介绍了对状态图模型进行模糊测试的初步设置,据我们所知,这种想法在文献中还没有先例。我们将我们的模拟器与一个著名的模糊器结合使用,对非小规模的状态图模型进行了模糊测试,发现了一些通过检查很难发现的问题。
{"title":"A fresh look on semantics of Concurrent State Based Language (ConStaBL)","authors":"Karthika Venkatesan ,&nbsp;Sujit Kumar Chakrabarti","doi":"10.1016/j.cola.2024.101270","DOIUrl":"https://doi.org/10.1016/j.cola.2024.101270","url":null,"abstract":"<div><p>Statechart is a visual modelling language for systems. Our variant of the statechart has local variables, which interact significantly with the remainder of the language semantics. It allows arbitrary interleaving of concurrently executing action code, which allows more precise modelling of systems and upstream analysis of the same. We also establish the criteria based on our semantics for defining conflicting transitions and valid simulations. Our semantics do not allow transition conflicts in simulations and are stricter than most other available semantics of statecharts in that sense. In this paper, we extend the work on modular statecharts and present updated operational semantics with concurrency. We present the operational semantics in the form of the simulation algorithm. Our executable semantics can be used to simulate statechart models and verify their correctness. We present a preliminary setup to carry out fuzz testing of statechart models, an idea that does not have precedent in the literature to the best of our knowledge. We have used our simulator in conjunction with a well-known fuzzer to do fuzz testing of statechart models of non-trivial sizes and have found issues in them that would have been hard to find through inspection.</p></div>","PeriodicalId":48552,"journal":{"name":"Journal of Computer Languages","volume":"79 ","pages":"Article 101270"},"PeriodicalIF":2.2,"publicationDate":"2024-05-03","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"140880437","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":3,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
On the use of statistical machine translation for suggesting variable names for decompiled code: The Pharo case 关于使用统计机器翻译为反编译代码建议变量名:Pharo 案例
IF 2.2 3区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-04-19 DOI: 10.1016/j.cola.2024.101271
Juan Pablo Sandoval Alcocer , Harold Camacho-Jaimes , Geraldine Galindo-Gutierrez , Andrés Neyem , Alexandre Bergel , Stéphane Ducasse

Adequately selecting variable names is a difficult activity for practitioners. In 2018, Jaffe et al. proposed the use of statistical machine translation (SMT) to suggest descriptive variable names for decompiled code. A large corpus of decompiled C code was used to train the SMT model. Our paper presents the results of a partial replication of Jaffe’s experiment. We apply the same technique and methodology to a dataset made of code written in the Pharo programming language. We selected Pharo since its syntax is simple – it fits on half of a postcard – and because the optimizations performed by the compiler are limited to method scope. Our results indicate that SMT may recover between 8.9% and 69.88% of the variable names depending on the training set. Our replication concludes that: (i) the accuracy depends on the code similarity between the training and testing sets; (ii) the simplicity of the Pharo syntax and the satisfactory decompiled code alignment have a positive impact on predicting variable names; and (iii) a relatively small code corpus is sufficient to train the SMT model, which shows the applicability of the approach to less popular programming languages. Additionally, to assess SMT’s potential in improving original variable names, ten Pharo developers reviewed 400 SMT name suggestions, with four reviews per variable. Only 15 suggestions (3.75%) were unanimously viewed as improvements, while 45 (11.25%) were perceived as improvements by at least two reviewers, highlighting SMT’s limitations in providing suitable alternatives.

对于从业者来说,适当选择变量名是一项困难的活动。2018 年,Jaffe 等人提出使用统计机器翻译(SMT)为反编译代码建议描述性变量名。他们使用了大量反编译 C 代码语料库来训练 SMT 模型。我们的论文介绍了部分复制 Jaffe 实验的结果。我们将相同的技术和方法应用于一个由 Pharo 编程语言编写的代码组成的数据集。我们选择 Pharo 是因为它的语法很简单--只需半张明信片就能写完,而且编译器的优化仅限于方法范围。我们的结果表明,根据训练集的不同,SMT 可以恢复 8.9% 到 69.88% 的变量名。我们的复制结论是(i) 准确性取决于训练集和测试集之间的代码相似性;(ii) Pharo 语法的简洁性和令人满意的反编译代码对齐方式对预测变量名有积极影响;(iii) 相对较小的代码语料足以训练 SMT 模型,这表明该方法适用于不太流行的编程语言。此外,为了评估 SMT 在改进原始变量名方面的潜力,十名 Pharo 开发人员审查了 400 个 SMT 名称建议,每个变量审查四次。只有 15 项建议(3.75%)被一致认为是改进,而 45 项建议(11.25%)被至少两名评审者认为是改进,这突出表明了 SMT 在提供合适替代方案方面的局限性。
{"title":"On the use of statistical machine translation for suggesting variable names for decompiled code: The Pharo case","authors":"Juan Pablo Sandoval Alcocer ,&nbsp;Harold Camacho-Jaimes ,&nbsp;Geraldine Galindo-Gutierrez ,&nbsp;Andrés Neyem ,&nbsp;Alexandre Bergel ,&nbsp;Stéphane Ducasse","doi":"10.1016/j.cola.2024.101271","DOIUrl":"https://doi.org/10.1016/j.cola.2024.101271","url":null,"abstract":"<div><p>Adequately selecting variable names is a difficult activity for practitioners. In 2018, Jaffe et al. proposed the use of statistical machine translation (SMT) to suggest descriptive variable names for decompiled code. A large corpus of decompiled C code was used to train the SMT model. Our paper presents the results of a partial replication of Jaffe’s experiment. We apply the same technique and methodology to a dataset made of code written in the Pharo programming language. We selected Pharo since its syntax is simple – it fits on half of a postcard – and because the optimizations performed by the compiler are limited to method scope. Our results indicate that SMT may recover between 8.9% and 69.88% of the variable names depending on the training set. Our replication concludes that: (i) the accuracy depends on the code similarity between the training and testing sets; (ii) the simplicity of the Pharo syntax and the satisfactory decompiled code alignment have a positive impact on predicting variable names; and (iii) a relatively small code corpus is sufficient to train the SMT model, which shows the applicability of the approach to less popular programming languages. Additionally, to assess SMT’s potential in improving original variable names, ten Pharo developers reviewed 400 SMT name suggestions, with four reviews per variable. Only 15 suggestions (3.75%) were unanimously viewed as improvements, while 45 (11.25%) were perceived as improvements by at least two reviewers, highlighting SMT’s limitations in providing suitable alternatives.</p></div>","PeriodicalId":48552,"journal":{"name":"Journal of Computer Languages","volume":"79 ","pages":"Article 101271"},"PeriodicalIF":2.2,"publicationDate":"2024-04-19","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"140643845","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":3,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
An empirical approach to understand the role of emotions in code comprehension 以实证方法理解情感在代码理解中的作用
IF 2.2 3区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-03-02 DOI: 10.1016/j.cola.2024.101269
Divjot Singh, Ashutosh Mishra, Ashutosh Aggarwal

Programming and cognitive skills are two pivotal abilities of programmers to maintain software products. First, this study included a systematic literature review on code comprehension, emotions, cognitive psychology, and belief-desire-intention domains to analyse various code comprehension monitoring techniques, performance metrics, and computational methodologies. Second, a case study is conducted to examine the influence of various emotional stages on programmers’ programming and cognitive skills while comprehending the software code. The categorization of the participants is done empirically based on their expertism level, and the same results are verified using various machine learning models and performance metrics.

编程和认知技能是程序员维护软件产品的两种关键能力。首先,本研究对代码理解、情绪、认知心理学和信念-愿望-意图领域进行了系统的文献综述,分析了各种代码理解监测技术、性能指标和计算方法。其次,通过案例研究,考察程序员在理解软件代码时,不同情绪阶段对其编程和认知能力的影响。根据专家水平对参与者进行了经验性分类,并使用各种机器学习模型和性能指标验证了相同的结果。
{"title":"An empirical approach to understand the role of emotions in code comprehension","authors":"Divjot Singh,&nbsp;Ashutosh Mishra,&nbsp;Ashutosh Aggarwal","doi":"10.1016/j.cola.2024.101269","DOIUrl":"https://doi.org/10.1016/j.cola.2024.101269","url":null,"abstract":"<div><p>Programming and cognitive skills are two pivotal abilities of programmers to maintain software products. First, this study included a systematic literature review on code comprehension, emotions, cognitive psychology, and belief-desire-intention domains to analyse various code comprehension monitoring techniques, performance metrics, and computational methodologies. Second, a case study is conducted to examine the influence of various emotional stages on programmers’ programming and cognitive skills while comprehending the software code. The categorization of the participants is done empirically based on their expertism level, and the same results are verified using various machine learning models and performance metrics.</p></div>","PeriodicalId":48552,"journal":{"name":"Journal of Computer Languages","volume":"79 ","pages":"Article 101269"},"PeriodicalIF":2.2,"publicationDate":"2024-03-02","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"140052825","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":3,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
WARDuino: An embedded WebAssembly virtual machine WARDuino:嵌入式 WebAssembly 虚拟机
IF 2.2 3区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-02-13 DOI: 10.1016/j.cola.2024.101268
Tom Lauwaerts, Robbert Gurdeep Singh , Christophe Scholliers

Creating IoT programs for resource-constrained microcontrollers differs significantly from conventional computer programming. Microcontrollers are traditionally programmed using low-level programming languages with poor debugging facilities. By contrast, general-purpose systems can be programmed with high-level languages, which make programming easier by providing many useful tools such as advanced debuggers, strong type systems, and/or automatic memory management. Most existing solutions for programming microcontrollers with high-level languages are strongly tied to a specific microcontroller architecture, which makes porting code difficult or impossible. In addition, compiling and flashing software onto a microcontroller is time-consuming, slowing down development.

To solve these problems we present WARDuino, a WebAssembly virtual machine that runs on microcontrollers and provides WebAssembly primitives to control embedded hardware and IoT functionality. WARDuino runs programs written in a plethora of high-level languages that compile to WebAssembly. We give a general approach for language integration libraries to expose the peripherals and networking capabilities of the device following the idioms of the host language.

To ease development, we extend WebAssembly with support for remote debugging and over-the-air reprogramming. WARDuino can remotely instruct a microcontroller to pause, to step, or to dump its state, and to replace local variables, functions or even the entire running program. We use the remote debugger of the virtual machine to create a visual debugging environment in VS Code for WARDuino, that can debug WebAssembly and AssemblyScript. Aside from these important tools, we provide a novel mechanism to handle asynchronous interrupts in WebAssembly, a fundamental building block for responsive embedded applications. Our extensions are implemented in the WARDuino virtual machine and presented as formal extensions to the WebAssembly operational semantics. We use the formalization to proof observational equivalence for the core debugger semantics.

We compared the computational performance and memory size with native C code, Espruino, and WASM3 which compiles WebAssembly ahead-of-time. The comparison shows that WARDuino’s performance is acceptable. Although WARDuino is on average 425.93 times slower than native code and 37.96 times slower than WASM3, it outperforms the popular Espruino runtime by a factor of 11.66. Additionally, we show that WARDuino is fast enough to program traditional IoT applications that handle network and device interrupts with a classic smart lamp application written in AssemblyScript.

为资源有限的微控制器创建物联网程序与传统的计算机编程有很大不同。微控制器传统上使用低级编程语言进行编程,调试功能较差。相比之下,通用系统可以使用高级语言编程,高级语言提供了许多有用的工具,如高级调试器、强大的类型系统和/或自动内存管理,从而使编程变得更加容易。大多数现有的使用高级语言对微控制器进行编程的解决方案都与特定的微控制器架构紧密相关,这使得代码移植变得困难或不可能。为了解决这些问题,我们推出了 WARDuino,它是一个可在微控制器上运行的 WebAssembly 虚拟机,提供了控制嵌入式硬件和物联网功能的 WebAssembly 基元。WARDuino 可运行以大量高级语言编写并编译为 WebAssembly 的程序。为了简化开发,我们扩展了 WebAssembly,支持远程调试和空中重新编程。WARDuino 可以远程指示微控制器暂停、步进或转储其状态,并替换局部变量、函数甚至整个运行程序。我们使用虚拟机的远程调试器在 VS Code 中为 WARDuino 创建了一个可视化调试环境,可以调试 WebAssembly 和 AssemblyScript。除了这些重要工具外,我们还提供了一种新颖的机制来处理 WebAssembly 中的异步中断,这是响应式嵌入式应用程序的基本构件。我们的扩展在 WARDuino 虚拟机中实现,并作为 WebAssembly 操作语义的形式化扩展呈现。我们将计算性能和内存大小与本地 C 代码、Espruino 和提前编译 WebAssembly 的 WASM3 进行了比较。比较结果表明,WARDuino 的性能是可以接受的。虽然 WARDuino 平均比本地代码慢 425.93 倍,比 WASM3 慢 37.96 倍,但比流行的 Espruino 运行时要高出 11.66 倍。此外,我们还展示了 WARDuino 的速度足以对传统的物联网应用进行编程,这些应用通过用 AssemblyScript 编写的经典智能灯应用来处理网络和设备中断。
{"title":"WARDuino: An embedded WebAssembly virtual machine","authors":"Tom Lauwaerts,&nbsp;Robbert Gurdeep Singh ,&nbsp;Christophe Scholliers","doi":"10.1016/j.cola.2024.101268","DOIUrl":"10.1016/j.cola.2024.101268","url":null,"abstract":"<div><p>Creating IoT programs for resource-constrained microcontrollers differs significantly from conventional computer programming. Microcontrollers are traditionally programmed using low-level programming languages with poor debugging facilities. By contrast, general-purpose systems can be programmed with high-level languages, which make programming easier by providing many useful tools such as advanced debuggers, strong type systems, and/or automatic memory management. Most existing solutions for programming microcontrollers with high-level languages are strongly tied to a specific microcontroller architecture, which makes porting code difficult or impossible. In addition, compiling and flashing software onto a microcontroller is time-consuming, slowing down development.</p><p>To solve these problems we present WARDuino, a WebAssembly virtual machine that runs on microcontrollers and provides WebAssembly primitives to control embedded hardware and IoT functionality. WARDuino runs programs written in a plethora of high-level languages that compile to WebAssembly. We give a general approach for language integration libraries to expose the peripherals and networking capabilities of the device following the idioms of the host language.</p><p>To ease development, we extend WebAssembly with support for remote debugging and over-the-air reprogramming. WARDuino can remotely instruct a microcontroller to pause, to step, or to dump its state, and to replace local variables, functions or even the entire running program. We use the remote debugger of the virtual machine to create a visual debugging environment in VS Code for WARDuino, that can debug WebAssembly and AssemblyScript. Aside from these important tools, we provide a novel mechanism to handle asynchronous interrupts in WebAssembly, a fundamental building block for responsive embedded applications. Our extensions are implemented in the WARDuino virtual machine and presented as formal extensions to the WebAssembly operational semantics. We use the formalization to proof observational equivalence for the core debugger semantics.</p><p>We compared the computational performance and memory size with native C code, Espruino, and WASM3 which compiles WebAssembly ahead-of-time. The comparison shows that WARDuino’s performance is acceptable. Although WARDuino is on average 425.93 times slower than native code and 37.96 times slower than WASM3, it outperforms the popular Espruino runtime by a factor of 11.66. Additionally, we show that WARDuino is fast enough to program traditional IoT applications that handle network and device interrupts with a classic smart lamp application written in AssemblyScript.</p></div>","PeriodicalId":48552,"journal":{"name":"Journal of Computer Languages","volume":"79 ","pages":"Article 101268"},"PeriodicalIF":2.2,"publicationDate":"2024-02-13","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"139891428","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":3,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
Developers’ information seeking in Question & Answer websites through a gender lens 从性别视角看开发人员在问答网站上的信息搜索行为
IF 2.2 3区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-02-03 DOI: 10.1016/j.cola.2024.101267
Abim Sedhain , Vaishvi Diwanji , Helen Solomon , Shahnewaz Leon , Sandeep Kaur Kuttal

Question & Answer websites for developers, such as Stack Overflow, contain enormous programming knowledge which can be redundant and cost substantial time and cognitive effort. We investigated the information seeking behavior of developers on Stack Overflow using Information Foraging Theory. To understand the influence of gender on foraging patterns, we conducted a gender-balanced think-aloud lab study with 12 participants, followed by retrospective interviews. The participants performed two debugging tasks: (1) understand foraging between question variants and (2) understand foraging between answer variants, on Stack Overflow. Various cues and strategies were utilized by the participants to find relevant question and optimal answer on Stack Overflow. The effect of gender on their foraging pattern was observed as male participants used 19.7% more cues and spent 55% more time than female participants. We also categorized various cues in terms of cost-value proposition and reported a debugging foraging model for Stack Overflow. Our study has implications for Question and Answer websites as well as Information Foraging Theory.

面向开发人员的问答网站(如 Stack Overflow)包含大量编程知识,这些知识可能是多余的,而且会耗费大量时间和认知精力。我们利用信息觅食理论研究了开发人员在 Stack Overflow 上的信息觅食行为。为了了解性别对觅食模式的影响,我们对 12 名参与者进行了性别均衡的思考-朗读实验室研究,随后进行了回顾性访谈。参与者在 Stack Overflow 上完成了两项调试任务:(1)理解问题变体之间的觅食;(2)理解答案变体之间的觅食。参与者利用各种线索和策略在 Stack Overflow 上寻找相关问题和最佳答案。我们观察到性别对觅答模式的影响,男性参与者比女性参与者多使用 19.7% 的线索,多花费 55% 的时间。我们还根据成本-价值主张对各种线索进行了分类,并报告了 Stack Overflow 的调试觅食模型。我们的研究对问答网站和信息觅寻理论都有启发意义。
{"title":"Developers’ information seeking in Question & Answer websites through a gender lens","authors":"Abim Sedhain ,&nbsp;Vaishvi Diwanji ,&nbsp;Helen Solomon ,&nbsp;Shahnewaz Leon ,&nbsp;Sandeep Kaur Kuttal","doi":"10.1016/j.cola.2024.101267","DOIUrl":"10.1016/j.cola.2024.101267","url":null,"abstract":"<div><p>Question &amp; Answer websites for developers, such as Stack Overflow, contain enormous programming knowledge which can be redundant and cost substantial time and cognitive effort. We investigated the information seeking behavior of developers on Stack Overflow using Information Foraging Theory. To understand the influence of gender on foraging patterns, we conducted a gender-balanced think-aloud lab study with 12 participants, followed by retrospective interviews. The participants performed two debugging tasks: (1) understand foraging between question variants and (2) understand foraging between answer variants, on Stack Overflow. Various cues and strategies were utilized by the participants to find relevant question and optimal answer on Stack Overflow. The effect of gender on their foraging pattern was observed as male participants used 19.7% more cues and spent 55% more time than female participants. We also categorized various cues in terms of cost-value proposition and reported a debugging foraging model for Stack Overflow. Our study has implications for Question and Answer websites as well as Information Foraging Theory.</p></div>","PeriodicalId":48552,"journal":{"name":"Journal of Computer Languages","volume":"79 ","pages":"Article 101267"},"PeriodicalIF":2.2,"publicationDate":"2024-02-03","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"139688544","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":3,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
τJUpdate: An update language for time-varying JSON data τJUpdate:时变 JSON 数据的更新语言
IF 2.2 3区 计算机科学 Q3 COMPUTER SCIENCE, SOFTWARE ENGINEERING Pub Date : 2024-01-11 DOI: 10.1016/j.cola.2024.101258
Zouhaier Brahmia , Fabio Grandi , Safa Brahmia , Rafik Bouaziz

Time-varying JSON data are being used and exchanged in various today’s application frameworks like IoT platforms, Web services, cloud computing, online social networks, and mobile systems. However, in the state-of-the-art of JSON data management, there is neither a consensual nor a standard language for updating (i.e., inserting, modifying, and deleting) temporal JSON data, like the TSQL2 or SQL:2016 languages for temporal relational data. Moreover, existing JSON-based NoSQL DBMSs (e.g., MongoDB, Couchbase, CouchDB, OrientDB, and Riak) and both commercial relational DBMSs (e.g., IBM DB2 12, Oracle 19c, and MS SQL Server 2019) and open-source ones (e.g., PostgreSQL 15, and MySQL 8.0) supporting JSON documents do not provide any facility for maintaining temporal JSON data. Also in our previously proposed temporal JSON framework, called τJSchema, there was no feature for temporal JSON instance updates. For these reasons, we propose in this article a temporal update language, named τJUpdate (Temporal JUpdate), for JSON data in the τJSchema environment. We define it as a temporal extension of our previously introduced non-temporal JSON update language, named JUpdate (JSON Update). Both the syntax and the operational semantics of the data modification operations of JUpdate have been extended to support temporal aspects. τJUpdate allows to specify temporal JSON updates in an expressive and user-friendly manner, and to efficiently execute them in the τJSchema environment.

时变 JSON 数据正在物联网平台、网络服务、云计算、在线社交网络和移动系统等当今各种应用框架中使用和交换。然而,在最先进的 JSON 数据管理中,还没有一种用于更新(即插入、修改和删除)时变 JSON 数据的共识或标准语言,就像用于时变关系数据的 TSQL2 或 SQL:2016 语言一样。此外,现有的基于 JSON 的 NoSQL DBMS(如 MongoDB、Couchbase、CouchDB、OrientDB 和 Riak)以及支持 JSON 文档的商业关系 DBMS(如 IBM DB2 12、Oracle 19c 和 MS SQL Server 2019)和开源 DBMS(如 PostgreSQL 15 和 MySQL 8.0)都没有提供任何维护时态 JSON 数据的设施。此外,在我们之前提出的名为 τJSchema 的时态 JSON 框架中,也没有时态 JSON 实例更新功能。基于这些原因,我们在本文中提出了一种时态更新语言,命名为 τJUpdate(时态 JUpdate),用于 τJSchema 环境中的 JSON 数据。我们将其定义为之前推出的非时态 JSON 更新语言的时态扩展,命名为 JUpdate(JSON 更新)。JUpdate 的语法和数据修改操作的操作语义都得到了扩展,以支持时态方面。τJUpdate 允许以一种富有表现力和用户友好的方式指定时态 JSON 更新,并在 τJSchema 环境中高效地执行这些更新。
{"title":"τJUpdate: An update language for time-varying JSON data","authors":"Zouhaier Brahmia ,&nbsp;Fabio Grandi ,&nbsp;Safa Brahmia ,&nbsp;Rafik Bouaziz","doi":"10.1016/j.cola.2024.101258","DOIUrl":"10.1016/j.cola.2024.101258","url":null,"abstract":"<div><p><span>Time-varying JSON data are being used and exchanged in various today’s application frameworks like IoT<span><span> platforms, Web services, cloud computing, </span>online social networks<span><span><span>, and mobile systems. However, in the state-of-the-art of JSON data management, there is neither a consensual nor a standard language for updating (i.e., inserting, modifying, and deleting) temporal JSON data, like the TSQL2 or SQL:2016 languages for temporal </span>relational data. Moreover, existing JSON-based NoSQL </span>DBMSs<span><span> (e.g., MongoDB, Couchbase, CouchDB, OrientDB, and Riak) and both commercial relational DBMSs (e.g., IBM DB2 12, Oracle 19c, and MS SQL Server 2019) and open-source ones (e.g., </span>PostgreSQL 15, and MySQL 8.0) supporting JSON documents do not provide any facility for maintaining temporal JSON data. Also in our previously proposed temporal JSON framework, called </span></span></span></span><span><math><mi>τ</mi></math></span>JSchema, there was no feature for temporal JSON instance updates. For these reasons, we propose in this article a temporal update language, named <span><math><mi>τ</mi></math></span>JUpdate (Temporal JUpdate), for JSON data in the <span><math><mi>τ</mi></math></span><span>JSchema environment. We define it as a temporal extension<span> of our previously introduced non-temporal JSON update language, named JUpdate (JSON Update). Both the syntax and the operational semantics of the data modification operations of JUpdate have been extended to support temporal aspects. </span></span><span><math><mi>τ</mi></math></span>JUpdate allows to specify temporal JSON updates in an expressive and user-friendly manner, and to efficiently execute them in the <span><math><mi>τ</mi></math></span>JSchema environment.</p></div>","PeriodicalId":48552,"journal":{"name":"Journal of Computer Languages","volume":"79 ","pages":"Article 101258"},"PeriodicalIF":2.2,"publicationDate":"2024-01-11","publicationTypes":"Journal Article","fieldsOfStudy":null,"isOpenAccess":false,"openAccessPdf":"","citationCount":null,"resultStr":null,"platform":"Semanticscholar","paperid":"139460031","PeriodicalName":null,"FirstCategoryId":null,"ListUrlMain":null,"RegionNum":3,"RegionCategory":"计算机科学","ArticlePicture":[],"TitleCN":null,"AbstractTextCN":null,"PMCID":"","EPubDate":null,"PubModel":null,"JCR":null,"JCRName":null,"Score":null,"Total":0}
引用次数: 0
期刊
Journal of Computer Languages
全部 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