Learning to Represent Edits

Total Page:16

File Type:pdf, Size:1020Kb

Learning to Represent Edits Published as a conference paper at ICLR 2019 LEARNING TO REPRESENT EDITS Pengcheng Yin,∗ Graham Neubig Language Technology Institute Carnegie Mellon University Pittsburgh, PA 15213, USA fpcyin,[email protected] Miltiadis Allamanis, Marc Brockschmidt, Alexander L. Gaunt Microsoft Research Cambridge, CB1 2FB, United Kingdom fmiallama,mabrocks,[email protected] ABSTRACT We introduce the problem of learning distributed representations of edits. By com- bining a “neural editor” with an “edit encoder”, our models learn to represent the salient information of an edit and can be used to apply edits to new inputs. We experiment on natural language and source code edit data. Our evaluation yields promising results that suggest that our neural network models learn to capture the structure and semantics of edits. We hope that this interesting task and data source will inspire other researchers to work further on this problem. 1 INTRODUCTION One great advantage of electronic storage of documents is the ease with which we can edit them, and edits are performed in a wide variety of contents. For example, right before a conference deadline, papers worldwide are finalized and polished, often involving common fixes for grammar, clarity and style. Would it be possible to automatically extract rules from these common edits? Similarly, program source code is constantly changed to implement new features, follow best practices and fix bugs. With the widespread deployment of (implicit) version control systems, these edits are quickly archived, creating a major data stream that we can learn from. In this work, we study the problem of learning distributed representations of edits. We only look at small edits with simple semantics that are more likely to appear often and do not consider larger edits; i.e., we consider “add definite articles” rather than “rewrite act 2, scene 3.” Concretely, we focus on two questions: i) Can we group semantically equivalent edits together, so that we can automatically recognize common edit patterns? ii) Can we automatically transfer edits from one context to another? A solution to the first question would yield a practical tool for copy editors and programmers alike, arXiv:1810.13337v2 [cs.LG] 22 Feb 2019 automatically identifying the most common changes. By leveraging tools from program synthesis, such groups of edits could be turned into interpretable rules and scripts (Rolim et al., 2017). When there is no simple hard rule explaining how to apply an edit, an answer to the second question would be of great use, e.g., to automatically rewrite natural language following some stylistic rule. We propose to handle edit data in an autoencoder-style framework, in which an “edit encoder” f∆ is trained to compute a representation of an edit x− ! x+, and a “neural editor” α is trained to construct x+ from the edit representation and x−. This framework ensures that the edit representation is semantically meaningful, and a sufficiently strong neural editor allows this representation to not be specific to the changed element. We experiment with various neural architectures that can learn to represent and apply edits and hope to direct the attention of the research community to this new and interesting data source, leading to better datasets and stronger models. Briefly, the contributions of our paper are: (a) in Sect. 2, we present a new and impor- tant machine learning task on learning representations of edits (b) we present a family of ∗Work done as an intern in Microsoft Research, Cambridge, UK. 1 Published as a conference paper at ICLR 2019 x−: var greenList = trivia==null ? null : trivia.Select(t=> t.UnderlyingNode); Edit 1 Edit Representation x+: var greenList = trivia?.Select(t=> t.UnderlyingNode); n f∆(x−; x+) 2 R 0 x−: me = ((ue!=null) ? ue.Operand : null) Neural Editor 0 as MemberExpression; α(x−; f∆(x−; x+)) Edit 2 0 x+: me = ue?.Operand as MemberExpression; Figure 1: Given an edit (Edit 1) of x− to x+, f∆ computes an edit representation vector. Using that 0 representation vector the neural editor α applies the same edit to a new x−. The code snippets shown here are real code change examples from the roslyn open-source compiler project. models that capture the structure of edits and compute efficient representations in Sect. 3 (c) we create a new source code edit dataset, and release the data extraction code at https://github.com/Microsoft/msrc-dpu-learning-to-represent-edits and the data at http://www.cs.cmu.edu/˜pengchey/githubedits.zip. (d) we perform a set of experiments on the learned edit representations in Sect. 4 for natural language text and source code and present promising empirical evidence that our models succeed in capturing the semantics of edits. 2 TASK In this work, we are interested in learning to represent and apply edits on discrete sequential or structured data, such as text or source code parse trees1. Figure 1 gives a graphical overview of the task, described precisely below. (i) (i) N (i) Edit Representation Given a dataset of edits fx− ! x+ gi=1; where x− is the original version (i) of some object and x+ its edited form (see upper half of Figure 1 for an example), our goal is to learn a representation function f∆ that maps an edit operation x− ! x+ to a real-valued edit represen- n tation f∆(x−; x+) 2 R : A desired quality of f∆ is for the computed edit representations to have the property that semantically similar edits have nearby representations in Rn. Having distributed representations also allows other interesting downstream tasks, e.g., unsupervised clustering and visualization of similar edits from large-scale data (e.g. the GitHub commit stream), which would be useful for developing human-assistance toolkits for discovering and extracting emerging edit patterns (e.g. new bug fixes or emerging “best practices” of coding). Neural Editor Given an edit representation function f∆, we want to learn to apply edits in a new context. This can be achieved by learning a neural editor α that accepts an edit representation 0 0 2 f∆(x−; x+) and a new input x− and generates x+. This is illustrated in the lower half of Figure 1. 3 MODEL We cast the edit representation problem as an autoencoding task, where we aim to minimize the reconstruction error of α for the edited version x+ given the edit representation f∆(x−; x+) and the original version x−. By limiting the capacity of f∆’s output and allowing the model to freely use information about x−, we are introducing a “bottleneck” that forces the overall framework to not simply treat f∆(x−; x+) as an encoder of x+. The main difference from traditional autoencoders is that in our setup, an optimal solution requires to re-use as much information as possible from x− 1Existing editing systems, e.g. the grammar checker in text editors and code refactoring module in IDEs, are powered by domain-specific, manually crafted rules, while we aim for a data-driven, domain-agnostic approach. 2 0 We leave the problem of identifying which edit representation f∆(x−; x+) to apply to x− as interesting future work. 2 Published as a conference paper at ICLR 2019 AssignStmt AST Child h1 root ! Expr h EXPANDR action Next Token h GENTERM action Expr h2 Expr ! Expr Op Expr h TREECP action Action Flow u = x + x h3 TREECP Expr h4 Op ! − h5 Expr ! IntLit Parent Feed Copied h6 IntLit ! 23 (a) (b) Figure 2: (a) Graph representation of statement u = x + x. Rectangular (resp. rounded) nodes denote tokens (resp. non-terminals). (b) Sequence of tree decoding steps yielding x + x - 23, where x + x is copied (using the TREECP action) from the context graph in (a). to make the most of the capacity of f∆. Formally, given a probabilistic editor function Pα such as a (i) (i) N neural network and a dataset fx− ! x+ gi=1; we seek to minimize the negative likelihood loss 1 X L = − log P (x j x ; f (x ; x )): N α + − ∆ − + i Note that this loss function can be interpreted in two ways: (1) as a conditional autoencoder that encodes the salient information of an edit, given x− and (2) as an encoder-decoder model that encodes x− and decodes x+ conditioned on the edit representation f∆(x−; x+). In the rest of this section, we discuss our methods to model Pα and f∆ as neural networks. 3.1 NEURAL EDITOR As discussed above, α should use as much information as possible from x−, and hence, an encoder- decoder architecture with the ability to copy from the input is most appropriate. As we are primarily interested in edits on text and source code in this work, we explored two architectures: a sequence- to-sequence model for text, and a graph-to-tree model for source code, whose known semantics we can leverage both on the encoder as well as on the decoder side. Other classes of edits, for example, image manipulation, would most likely be better served by convolutional neural models. Sequence-to-Sequence Neural Editor First, we consider a standard sequence-to-sequence model with attention (over the tokens of x−). The architecture of our sequence-to-sequence model is similar to that of Luong et al. (2015), with the difference that we use a bidirectional LSTM in the encoder and a token-level copying mechanism (Vinyals et al., 2015) that directly copies tokens into the decoded sequence. Whereas in standard sequence-to-sequence models the decoder is initialized with the representation computed by the encoder, we initialize it with the concatenation of encoder output and the edit representation. We also feed the edit representation as input to the decoder LSTM at each decoding time step.
Recommended publications
  • Building Openjfx
    Building OpenJFX Building a UI toolkit for many different platforms is a complex and challenging endeavor. It requires platform specific tools such as C compilers as well as portable tools like Gradle and the JDK. Which tools must be installed differs from platform to platform. While the OpenJFX build system was designed to remove as many build hurdles as possible, it is necessary to build native code and have the requisite compilers and toolchains installed. On Mac and Linux this is fairly easy, but setting up Windows is more difficult. If you are looking for instructions to build FX for JDK 8uNNN, they have been archived here. Before you start Platform Prerequisites Windows Missing paths issue Mac Linux Ubuntu 18.04 Ubuntu 20.04 Oracle Enterprise Linux 7 and Fedora 21 CentOS 8 Common Prerequisites OpenJDK Git Gradle Ant Environment Variables Getting the Sources Using Gradle on The Command Line Build and Test Platform Builds NOTE: cross-build support is currently untested in the mainline jfx-dev/rt repo Customizing the Build Testing Running system tests with Robot Testing with JDK 9 or JDK 10 Integration with OpenJDK Understanding a JDK Modular world in our developer build Adding new packages in a modular world First Step - development Second Step - cleanup Before you start Do you really want to build OpenJFX? We would like you to, but the latest stable build is already available on the JavaFX website, and JavaFX 8 is bundled by default in Oracle JDK 8 (9 and 10 also included JavaFX, but were superseded by 11, which does not).
    [Show full text]
  • SME: a High Productivity FPGA Tool for Software Programmers
    1 SME: A High Productivity FPGA Tool for Software Programmers Carl-Johannes Johnsen∗, Alberte Thegler∗, Kenneth Skovhede∗, and Brian Vinter† {∗Niels Bohr Institute, University of Copenhagen, † Faculty of Technical Sciences, Aarhus University} Abstract—For several decades, the CPU has been the standard model to use in the majority of computing. While the CPU does excel in some areas, heterogeneous computing, such as reconfigurable hardware, is showing increasing potential in areas like parallelization, performance, and power usage. This is especially prominent in problems favoring deep pipelining or tight latency requirements. However, due to the nature of these problems, they can be hard to program, at least for software developers. Synchronous Message Exchange (SME) is a runtime environment that allows development, testing and verification of hardware designs for FPGA devices in C#, with access to modern debugging and code features. The goal is to create a framework for software developers to easily implement systems for FPGA devices without having to obtain heavy hardware programming knowledge. This article presents a short introduction to the SME model as well as new updates to SME. Lastly, a selection of student projects and examples will be presented in order to show how it is possible to create quite complex structures in SME, even by students with no hardware experience. Index Terms—Reconfigurable hardware, Modeling techniques, Simulation, Verification, Hardware description languages, Computers and Education ✦ 1 INTRODUCTION The use of CPUs for programming is an incredibly flexi- simpler than other methods [4] and initial results also show ble approach that allows the same hardware to be deployed that the SME model allows students familiar with sequential in many different scenarios, and also enables seamless up- programming to pick up the parallelism [5].
    [Show full text]
  • ASP.NET 5, .NET 4.6, and Visual Studio 2015
    ASP.NET 5, .NET 4.6, and Visual Studio 2015 Nate McMaster @natemcmaster Overview Application! ! Framework! Tooling Runtime! Overview Application! ! Framework! Tooling Runtime! What is .NET? • Introduced in 2002 • It provides – Core class libraries – Complier – Runtime (execution layer) – Support for CLI languages (C#, VB, plus more) Application! ! Framework! Tooling Runtime! Application! Entity Framework! ! Identity! SignalR! Tooling MVC / WebAPI! Roslyn! Runtime! Frameworks Roslyn What is Roslyn? • Code Analysis APIs • .NET Core What is Roslyn? • Code Analysis APIs • .NET Core • “Introduction to Roslyn” at 2:40pm today Entity Framework Entity Framework • Data access framework db.Animals.Where(i=>i.Name == “penguin”).Take(4) SELECT * FROM animals WHERE name=“penguin” LIMIT 4 Entity Framework 6 • MSSQL and MySQL • Primarily ASP.NET What’s New in EF 7 • Azure Table Storage, Redis • SQLite • Complete rewrite • New APIs (similar to v6) • CLI tools What’s new in v7 • Cloud optimized • Runs on .NET Core MVC MVC • The .NET web framework What’s new in v6 MVC 5 WebAPI Web Forms MVC 6 • Host agnostic • Built-in dependency injection • config.json What’s new in v6 • Cloud optimized • Runs on .NET Core Identity Identity • User authentication framework • OAuth providers and two- factor auth What’s new in v6 • Cloud optimized • Runs on .NET Core SignalR SignalR • Real-time web functionality • Server and client components Not yet • Not cloud optimized • Does not run on .NET Core What is .NET Core? What is “cloud optimized”? Application! ! Framework! Tooling
    [Show full text]
  • Extending Actionability in Better Code Hub Suggesting Move Module Refactorings
    Extending Actionability in Better Code Hub Suggesting move module refactorings Teodor Kurtev [email protected] July 14, 2017, 48 pages Supervisor: dr. Ana-Maria Oprescu, [email protected] Host supervisor: dr. Magiel Bruntink, [email protected] Host organisation: Software Improvement Group, Inc., https://www.sig.eu Universiteit van Amsterdam Faculteit der Natuurwetenschappen, Wiskunde en Informatica Master Software Engineering http://www.software-engineering-amsterdam.nl Abstract Undoubtedly, refactoring can have a positive effect on overall system quality, and it is a critical part of the work cycle of every developer. However, finding the right refactoring opportunities can be a difficult task. This is particularly the case for refactorings related to overall system structure. One of the best ways to address such issues is to apply the move module refactoring. In this thesis, we propose a way of automatically detecting refactoring opportunities for move module refactorings in the context of the C# language using a Compiler as a Service (CaaS) - Roslyn. We evaluate our approach using seven open source projects and an expert panel. The results from these validation experiments showed our approach as promising - the group of experts found more than half of the proposed refactorings useful. 1 Contents Abstract 1 Acronyms 5 1 Introduction 6 1.1 Problem analysis....................................... 6 1.2 Research questions...................................... 7 1.3 Solution outline........................................ 8 1.4 Definitions........................................... 8 1.5 Outline ............................................ 8 2 Background 10 2.1 Refactoring .......................................... 10 2.2 Code smells.......................................... 10 2.3 Move module refactoring................................... 11 2.4 Better Code Hub (BCH) and the SIG Maintainability Model .............
    [Show full text]
  • Software Evolution Analysis for Team Foundation Server
    Software evolution analysis for Team Foundation Server Bachelor thesis University of Groningen July 2013 Author: Joost Koehoorn Primary supervisor: Prof. dr. Alexandru C. Telea Secondary supervisor: Prof. dr. Gerard R. Renardel de Lavalette Abstract To understand how software evolves, visualizing its history is a valuable approach to get an in-depth view of a software project. SolidTA, a software evolution visualization application, has been made to obtain these insights by extracting data from version control systems such as SVN and Git. Companies with large, proprietary codebases are often required to use an all-in-one solution such as Microsoft’s Team Foundation Server. During this project I have been looking into ways of extending SolidTA with the ability to import history from TFS. This has been achieved by utilizing the TFS SDK in order to import all necessary history information into SolidTA’s data domain. Another key part in understanding software evolution are source metrics, such as lines of code and McCabe’s complexity measure. The primary language of TFS projects is C# for which an analyzer was not available in SolidTA, so I have researched existing analyzers and then decided to implement an analyzer myself for greater control over the available metrics, based on an existing C# parser. This has become a fast tool that provides extensive per-file-metrics, for which SolidTA has been extended in order to visualize them. The TFS integration and C# analyzation have been field-tested on a codebase of RDW ("Rijksdienst van Wegverkeer"), which spans a history of circa six years. This test has shown that the implemented solutions are fast and reliable.
    [Show full text]
  • NET Core Succinctly by Giancarlo Lelli Foreword by Daniel Jebaraj
    1 .NET Core Succinctly By Giancarlo Lelli Foreword by Daniel Jebaraj 2 Copyright © 2016 by Syncfusion, Inc. 2501 Aerial Center Parkway Suite 200 Morrisville, NC 27560 USA All rights reserved. Important licensing information. Please read. This book is available for free download from www.syncfusion.com on completion of a registration form. If you obtained this book from any other source, please register and download a free copy from www.syncfusion.com. This book is licensed for reading only if obtained from www.syncfusion.com. This book is licensed strictly for personal or educational use. Redistribution in any form is prohibited. The authors and copyright holders provide absolutely no warranty for any information provided. The authors and copyright holders shall not be liable for any claim, damages, or any other liability arising from, out of, or in connection with the information in this book. Please do not use this book if the listed terms are unacceptable. Use shall constitute acceptance of the terms listed. SYNCFUSION, SUCCINCTLY, DELIVER INNOVATION WITH EASE, ESSENTIAL, and .NET ESSENTIALS are the registered trademarks of Syncfusion, Inc. Technical Reviewer: Gavin Lanata Copy Editor: Courtney Wright Acquisitions Coordinator: Hillary Bowling, online marketing manager, Syncfusion, Inc. Proofreader: Tres Watkins, content development manager, Syncfusion, Inc. 3 Table of Contents Preface ...................................................................................................................................... 8 Introduction
    [Show full text]
  • Optimizing Runtime Performance of Dynamically Typed Code
    Optimizing Runtime Performance of Dynamically Typed Code Jose Quiroga Alvarez PhD Supervisor Dr. Francisco Ortin Soler Department of Computer Science University of Oviedo A thesis submitted for the degree of Doctor of Philosophy Oviedo, Spain June 2016 Acknowledgements This work has been partially funded by the Spanish Department of Science and Technology, under the National Program for Research, Development and Innovation. The main project was Obtaining Adapt- able, Robust and Efficient Software by including Structural Reflection to Statically Typed Programming Languages (TIN2011-25978). The work is also part of the project entitled Improving Performance and Robustness of Dynamic Languages to develop Efficient, Scalable and Reliable Software (TIN2008-00276). I was awarded a FPI grant by the Spanish Department of Science and Technology. The objective of these grants is to support gradu- ate students wishing to pursue a PhD degree associated to a specific research project. This PhD dissertation is associated to the project TIN2011-25978 (previous paragraph). This work has also been funded by Microsoft Research, under the project entitled Extending dynamic features of the SSCLI, awarded in the Phoenix and SSCLI, Compilation and Managed Execution Request for Proposals. Part of the research discussed in this dissertation has also been funded by the European Union, through the European Regional Development Funds (ERDF); and the Principality of Asturias, through its Science, Innovation Plan (grant GRUPIN14-100). Abstract Dynamic languages are widely used for different kinds of applications including rapid prototyping, Web development and programs that require a high level of runtime adaptiveness. However, the lack of compile-time type information involves fewer opportunities for com- piler optimizations, and no detection of type errors at compile time.
    [Show full text]
  • Three Ways Roslyn Will Change Your Life •
    Title slide to be used at the start of a Kathleen Dollard - CodeRapid module. @kathleendollard kathleendollard [email protected] Blog: http://blogs.msmvps.com/kathleen http://www.pluralsight.com/author/kathleen -dollard Three Ways Roslyn Will Change Your Life • • • • • • • • • • • • • • • • • • • • • • • • • • Language History Version CLR Date .NET Framework Visual Studio C# 1.0 / VB 7 1.0 January 2002 .NET Framework 1.0 Visual Studio .NET 2002 C# 1.2 / VB 7.1 1.1 April 2003 .NET Framework 1.1 Visual Studio .NET 2003 C# 2.0 / VB 8 2.0 November 2005 .NET Framework 2.0 Visual Studio 2005 .NET Framework 2.0 2.0 Visual Studio 2008 C# 3.0 /VB 9 November 2007 .NET Framework 3.0 ] 2.0 SP1 Visual Studio 2010 .NET Framework 3.5 C# 4.0 / VB 10 4.0 April 2010 .NET Framework 4 Visual Studio 2010 Visual Studio 2012 C# 5.0 / VB 11 4.5 August 2012 .NET Framework 4.5 Visual Studio 2013 C# and VB Vnext VNext 2015?? VNext VNext From www.Wikipedia.org public void HelloWorld() { Console.WriteLine("Hello World"); } “Console” System.Console Mine.Console Compiler Pipeline Compiler Compiler API Pipeline Compiler Language Compiler API Service Pipeline • • • • • • • • • • • • • • • • • • • • • • • • • • • I was at her • talk yesterday • • • • • • • • • I was not at her • talk yesterday • Let’s build an analyzer with code fix!!! Analyzers and code fixes let you define rules for your projects, and define guidelines for libraries • • • • • • • • • • • • • • • • • • • • • • • • • • What have people already done with Roslyn? Quick look at OzCode, CodeConnect and ScriptCS
    [Show full text]
  • Language Integrated STM in C# Using the Roslyn Compiler
    class Account { public atomic long Balance { get; set; } { static void Main() { var salary = new Account(1000); new Account(-50000); var studentLoan = TransferMoney(1000, salary, studentLoan); Laurberg Kasper Breinholt Pørtner Karlsen Andreas UgleholdtHansen Tobias toLocking - AnAlternative Using theRoslynCompiler Language IntegratedSTMinC# } public Account(long balance) { Balance = balance; } public static void TransferMoney(long amount, Account from, Account to) { atomic { from.Subtract(amount); to.Add(amount); } } public void Add(long amount) { atomic { Balance += amount; } } public void Subtract(long amount) { atomic { if (Balance - amount >= 0) { Balance -= amount; } else { throw new Exception(”Insuffcient funds!”); } } } } Department of Computer Science Selma Lagerløfs Vej 300 DK-9220 Aalborg Ø http://www.cs.aau.dk Title: Abstract: Language Integrated STM in C# Us- ing the Roslyn Compiler - An Alter- This master thesis investigates native to Locking. whether language integrated STM is a valid alternative to locking in C# Project Period: in terms of usability, and provides ad- Spring Semester 2015 ditional benefits compared to library- based STM. To do so, an extension Project Group: of C# called AC# was implemented. dpt109f15 AC# provides integrated support for STM, including conditional synchro- Participants: nization using the retry and orelse Tobias Ugleholdt Hansen constructs, and nesting of transac- Andreas Pørtner Karlsen tions. AC# was implemented by ex- Kasper Breinholt Laurberg tending the open source Roslyn C# compiler. To power AC# a library- based STM system, based on the Supervisor: TLII algorithm, was implemented. Lone Leth Thomsen The extended compiler transforms AC# source code to regular C# code Page Numbers: 120 + 4 appendices which utilizes the STM library. For each concurrency approach: AC#, Date of Completion: library-based STM and locking in June 8, 2015 C#, four di↵erent concurrency prob- lems, representing di↵erent aspects of concurrency, were implemented.
    [Show full text]
  • The Tao of .Net and Powershell Malware Analysis Pontiroli & Martinez
    THE TAO OF .NET AND POWERSHELL MALWARE ANALYSIS PONTIROLI & MARTINEZ THE TAO OF .NET AND adopted proven practices from agile software development and business administration that focus on maximizing profi ts while POWERSHELL MALWARE minimizing the development time and maintenance cost of ANALYSIS these dreadful concoctions. Santiago M. Pontiroli In 2002, Microsoft released a game-changing framework that Kaspersky Lab, Argentina revolutionized the software development industry and unwittingly provided malware writers with an unimaginable F. Roberto Martinez arsenal of weapons. While ‘script kiddies’ resorted to builders and automated environments to cobble together variations of Kaspersky Lab, Mexico already-available malware samples, seasoned malware writers now had access to forums with approachable lessons on how Email {santiago.pontiroli; roberto.martinez}@ to write fresh pieces of malicious code, all with an eye to the kaspersky.com most desirable feature of all: avoiding anti-virus detection for as long as possible. Intended to compete directly with Oracle’s JAVA platform, the .NET framework provided not only a ABSTRACT comprehensive library of built-in functions but also an accompanying development environment capable of With the ubiquitous adoption of Microsoft’s .NET and supporting several high-level programming languages PowerShell frameworks, an ever increasing number of including Microsoft’s soon-to-be-fl agship C# and the evolution software development and IT ninjas are joining a nascent of Visual Basic, dubbed VB .NET. tradition of professionals leveraging these powerful environments for added effi cacy in their everyday jobs. With a Available by default in most Windows installations, the .NET wide array of libraries and cmdlets at their fi ngertips, the need framework has become the de facto standard for software to reinvent the wheel is long forgotten.
    [Show full text]
  • Copyrighted Material
    PART I ➤ CHAPTER 1 : .NET Application Architectures ➤ CHAPTER 2 : Core C# ➤ CHAPTER 3 : Objects and Types ➤ CHAPTER 4 : Inheritance ➤ CHAPTER 5 : Managed and Unmanaged Resources ➤ CHAPTER 6 : Generics ➤ CHAPTER 7 : Arrays and Tuples ➤ CHAPTER 8 : Operators and Casts ➤ CHAPTER 9 : Delegates, Lambdas, and Events ➤ CHAPTER 10 : Strings and Regular Expressions ➤ CHAPTERCOPYRIGHTED 11 : Collections MATERIAL ➤ CHAPTER 12 : Special Collections ➤ CHAPTER 13 : Language Integrated Query ➤ CHAPTER 14 : Errors and Exceptions ➤ CHAPTER 15 : Asynchronous Programming ➤ CHAPTER 16 : Refl ection, Metadata, and Dynamic Programming 1 WHAT’S IN THIS CHAPTER? ➤ Reviewing the history of .NET ➤ Understanding differences between .NET Framework 4.6 and .NET Core 1.0 ➤ Assemblies and NuGet Packages ➤ The Common Language Runtime ➤ Features of the Windows Runtime ➤ Programming Hello, World! ➤ Universal Windows Platform ➤ Technologies for creating Windows Apps ➤ Technologies for creating Web Apps WROX.COM CODE DOWNLOADS FOR THIS CHAPTER The wrox.com code downloads for this chapter are found at www.wrox.com/go/professionalcsharp6 on the Download Code tab. The code for this chapter is divided into the following major examples: ➤ DotnetHelloWorld ➤ HelloWorldApp (.NET Core) CHOOSING YOUR TECHNOLOGIES In recent years, .NET has become a huge ecosystem for creating any kind of applications on the Windows platform. With .NET you can create Windows apps, web services, web applications, and apps for the Microsoft Phone. The newest release of .NET is a big change from the last version—maybe the biggest change to .NET since its invention. Much of the .NET code has become open-source code, and you can create applications for other platforms as well. The new version of .NET (.NET Core) and NuGet packages allow Microsoft to provide faster update cycles for delivering new features.
    [Show full text]
  • Assessment of Roslyn Analyzers for Visual Studio
    ASSESSMENT OF ROSLYN ANALYZERS FOR VISUAL STUDIO Jurgen¨ Sundstrom¨ Bachelor esis, 15 credits Bachelor Of Science Programme in Computing Science 2019 Abstract Soware security is an ever growing subject that is geing more important as we implement more soware into our daily lives. We want to protect our personal information and keep our privacy intact. Since our soware systems are geing more complex as well, soware developers need support in the form of tools that can help them to keep the soware free from vulnerabilities. ere are many such tools available but the focus of this study is investigating the performance of the fairly new Roslyn analyzers for security that can be embedded into Visual Studio. Since Roslyn analyzers for security are, in the time of writing (June 2019), not subject in any released studies the goal is to lay a foundation for future work regarding these types of tools. erefore three Roslyn analyzers for security are being compared, on source code in the C# programming language provided by the SAMATE project, both with each other but also against classic static analysis tools. Four vulnerability categories from the SAMATE test suite for C# are used to in- vestigate the analyzers, namely OS command injection (CWE-078), SQL Injection (CWE-089), XML Injection (CWE-091) and Cryptography algorithms (CWE-327). e performance of the analyzers is measured with the metrics recall, precision and F-measure which are commonly used in other similar studies and makes it possible to compare the results obtained within this study with the results of other studies within the eld.
    [Show full text]