Extending Actionability in Better Code Hub Suggesting Move Module Refactorings

Total Page:16

File Type:pdf, Size:1020Kb

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 .............. 11 2.5 Construction of the Undirected weighted class dependency network (uWCDN) and Undirected feature dependency network (uFDN) ..................... 12 2.6 The Java and C# languages................................. 12 2.7 The Roslyn compiler..................................... 13 2.8 Pareto efficiency ....................................... 13 3 Motivating Examples 15 3.1 Improving refactorings.................................... 15 3.2 No change refactorings.................................... 15 3.3 Non-beneficial refactorings.................................. 16 3.4 Balance vs Independence - reflection............................ 16 4 Prototype design research method 18 4.1 Assumptions ......................................... 18 4.2 Problem analysis....................................... 19 4.2.1 SIG context...................................... 19 4.2.2 General context.................................... 19 4.3 Solution design........................................ 20 4.4 Validation........................................... 20 5 A proof-of-concept refactoring tool 22 5.1 Research context....................................... 22 5.2 Refactoring approach..................................... 22 5.2.1 High-level tool design ................................ 23 5.2.2 Java syntax vs C# syntax.............................. 23 5.2.3 Gathering code data................................. 24 5.2.4 Construction of the uFDN and uWCDN...................... 24 5.2.5 Detecting improvements in external dependencies of modules.......... 25 5.2.6 Algorithm for detecting possible move module refactorings............ 26 2 CONTENTS 5.2.7 Filtering recommendations ............................. 27 5.2.8 Ranking recommendations.............................. 27 5.3 Components mapping and their role in the context of Better Code Hub . 28 6 Evaluation 29 6.1 Validation setup ....................................... 29 6.1.1 Targeted systems................................... 29 6.1.2 Gathering dependency empirical data ....................... 30 6.1.3 Evaluation using the SIG Maintainability Model ................. 31 6.1.4 Evaluation using an expert panel.......................... 31 6.1.5 Ordering refactoring using Pareto efficiency.................... 31 6.2 Results............................................. 31 6.2.1 Initial refactoring data................................ 31 6.2.2 Empirical data regarding dependencies....................... 32 6.2.3 SIG maintainability model evaluation ....................... 32 6.2.4 Evaluation using an expert panel.......................... 34 6.2.5 Ordering refactoring using Pareto efficiency.................... 35 7 Discussion 37 7.1 Discussion per test system.................................. 37 7.2 General discussion and reflection on usefulnesses ..................... 38 7.2.1 Improvements..................................... 39 7.2.2 Limitations...................................... 39 7.3 Using a CaaS(Roslyn) - lessons learned........................... 40 7.4 Answering the research questions.............................. 41 7.4.1 RQ 1 - Can we adapt existing approaches for move module refactorings to C# projects? ....................................... 41 7.4.2 RQ 2 - How can we design a prototype tool that implements existing refactoring approaches for move module refactorings?..................... 41 7.4.3 RQ 3 - How can a CaaS be used as a basis for a code analysis tool? . 42 7.5 Threats to validity...................................... 42 7.5.1 Conclusion validity.................................. 42 7.5.2 Construct validity .................................. 42 7.5.3 External validity................................... 42 8 Related work 43 8.1 Programming language and MRRA............................. 43 8.2 Postconditions and preconditions.............................. 43 8.3 Community definition .................................... 43 8.4 Refactoring selection criteria ................................ 43 8.5 Refactoring ordering..................................... 43 8.6 Validation........................................... 44 8.7 Summary ........................................... 44 9 Conclusion and future work 45 9.1 Future work.......................................... 45 Bibliography 47 3 Acknowledgments I would like to express my sincere gratitude to both my supervisors - Ana-Maria Oprescu and Magiel Bruntink, as their constant feedback and advice was a critical factor in the success of this project. Furthermore, I would like to thank everybody else at Software Improvement Group (SIG) for providing me with the opportunity to write my thesis there and the help they offered me in every way possible. Finally, I would like to thank all my friends who helped me in the hardest of moments. Teodor Kurtev Amsterdam, The Netherlands July 2017 4 Acronyms BCH Better Code Hub.2,6{8, 11, 12, 18{20, 22, 25, 28, 41 CaaS Compiler as a Service.1,3,7, 13, 40, 42 TAR Technical Action Research. 18 uFDN Undirected feature dependency network.2,8, 12, 24{26 uWCDN Undirected weighted class dependency network.2,8, 12, 15{17, 22{26 5 Chapter 1 Introduction Refactoring is an essential part of every software project life cycle and as stated by Robert Glass - "Maintenance typically consumes 40 to 80 percent (average, 60 percent) of software costs." [1]. Therefore, it is safe to assume that any help in automating refactoring would be a great asset for software development teams. However, before we can delve into refactoring, we first need to know that there is a problem in our code. Code analysis techniques have certainly progressed far in recent years, and we could quickly build a tool that analyzes code and produces a list of problematic areas. However, a more interesting problem is how to propose fixes for these problems. In this thesis, we introduce a general approach for detecting possible move module refactorings in the context of the C# language and evaluate its practical usefulness. We define a module as a group of declaration - class, struct, enum or an interface. Additional ideas on how to group modules(assign them to components) and how to present and order our produced refactorings are discussed. To illustrate the problem in a practical environment, we chose a web tool developed by our host company - Better Code Hub (BCH)1. The core idea of the application is to grade a project maintain- ability on metrics described in the SIG Maintainability model [2] and providing a list of problematic areas in the code. However, BCH we want to extend the actionability of the tool by providing refac- torings for these problematic areas. To do that, we apply our proposed refactoring recommendation algorithm in the context of BCH and assess its effectiveness. We hope that by providing a list of actionable items, we will increase the value of BCH system for its users. Component Independence is defined as having loose coupling between top-level components. Our aim is to improve the Component Independence in BCH by proposing move module refactorings. Our rationale for choosing this metric is that code smells related to system structure are, by their nature, harder to detect and refactor. We hope that our approach will help developers by offering them a list of possible refactorings they can apply. 1.1 Problem analysis In a general context - automatic proposal of refactorings is not a new area. Significant research [3] has been done already, and at first glance, this particular problem should have excellent solutions and tooling. However, this is not the case, as we found almost no tools for the Java and .NET ecosystems(or
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]
  • Ironpython in Action
    IronPytho IN ACTION Michael J. Foord Christian Muirhead FOREWORD BY JIM HUGUNIN MANNING IronPython in Action Download at Boykma.Com Licensed to Deborah Christiansen <[email protected]> Download at Boykma.Com Licensed to Deborah Christiansen <[email protected]> IronPython in Action MICHAEL J. FOORD CHRISTIAN MUIRHEAD MANNING Greenwich (74° w. long.) Download at Boykma.Com Licensed to Deborah Christiansen <[email protected]> For online information and ordering of this and other Manning books, please visit www.manning.com. The publisher offers discounts on this book when ordered in quantity. For more information, please contact Special Sales Department Manning Publications Co. Sound View Court 3B fax: (609) 877-8256 Greenwich, CT 06830 email: [email protected] ©2009 by Manning Publications Co. All rights reserved. No part of this publication may be reproduced, stored in a retrieval system, or transmitted, in any form or by means electronic, mechanical, photocopying, or otherwise, without prior written permission of the publisher. Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in the book, and Manning Publications was aware of a trademark claim, the designations have been printed in initial caps or all caps. Recognizing the importance of preserving what has been written, it is Manning’s policy to have the books we publish printed on acid-free paper, and we exert our best efforts to that end. Recognizing also our responsibility to conserve the resources of our planet, Manning books are printed on paper that is at least 15% recycled and processed without the use of elemental chlorine.
    [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]
  • What Is Dot Net (Pdf)
    What is .NET 1 outline • .NET framework • CLR • CLI, CIL, MSIL • ADO.NET, ASP.NET, MVC, webforms, razor • Mono • .NET Core • .NET Standard 2 .NET framework • Software framework • First released early 2000’s • “consists of the common language runtime (CLR) and the .NET Framework class library (FCL)” [1] • Provides a “code execution environment” • Various runtime hosts for the CLR [2] • ASP.NET (via ISAPI filter) • Executable • Can write your own 3 CLR • The virtual machine that manages execution of .NET programs [3] • Memory • Threads • Code trust • Type checking • pinvoke • JIT compiling to execute on current hardware 4 .NET Framework and CLR • Framework and CLR are different [4] • Can technically run different framework versions within the same CLR version • E.g. Windows XP only supports framework up to 4.0, running 4.5 apps is theoretically possible (with some hex editing of the binary) as long as calls are restricted to methods that were the same in 4.0 (e.g., no extensions) [5] • Recent framework updates have been focused on • Optimization (including SIMD) • Accessories (stylus, touch screen, etc) • Security 5 CLR, CLI, CIL • Common Language Infrastructure (CLI) • Open standard that describes executable code [6] • Common Intermediate Language (CIL) [7] • Aka “IL” • Formerly MSIL • Object oriented assembly language • Platform independent • A compiler takes source code and • Converts it to CIL using the CLI specification • Adds any required metadata (type information, etc) • This is an “assembly” 6 CLR, CLI, CIL • Visual Studio tooling
    [Show full text]
  • Eagle: Tcl Implementation in C
    Eagle: Tcl Implementation in C# Joe Mistachkin <[email protected]> 1. Abstract Eagle [1], Extensible Adaptable Generalized Logic Engine, is an implementation of the Tcl [2] scripting language for the Microsoft Common Language Runtime (CLR) [3]. It is designed to be a universal scripting solution for any CLR based language, and is written completely in C# [4]. Su- perficially, it is similar to Jacl [5], but it was written from scratch based on the design and imple- mentation of Tcl 8.4 [6]. It provides most of the functionality of the Tcl 8.4 interpreter while bor- rowing selected features from Tcl 8.5 [7] and the upcoming Tcl 8.6 [8] in addition to adding en- tirely new features. This paper explains how Eagle adds value to both Tcl/Tk and CLR-based applications and how it differs from other “dynamic languages” hosted by the CLR and its cousin, the Microsoft Dy- namic Language Runtime (DLR) [9]. It then describes how to use, integrate with, and extend Ea- gle effectively. It also covers some important implementation details and the overall design phi- losophy behind them. 2. Introduction This paper presents Eagle, which is an open-source [10] implementation of Tcl for the Microsoft CLR written entirely in C#. The goal of this project was to create a dynamic scripting language that could be used to automate any host application running on the CLR. 3. Rationale and Motivation Tcl makes it relatively easy to script applications written in C [11] and/or C++ [12] and so can also script applications written in many other languages (e.g.
    [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]
  • Die C# Schnittstelle Der Referenzattributgrammatik- Gesteuerten Graphersetzungsbibliothek RACR: Übersicht, Anwendung Und Implementierung
    Fakultät Informatik - Institut für Software- und Multimediatechnik TECHNICAL REPORTS ISSN 1430-211X TUD-FI15-06 Oktober 2015 Daniel Langner, Christoff Bürger Fakultät Informatik, Lehrstuhl Softwaretechnologie Die C# Schnittstelle der Referenzattributgrammatik- gesteuerten Graphersetzungsbibliothek RACR: Übersicht, Anwendung und Implementierung Technische Universität Dresden Fakultät Informatik Institut für Software- und Multimediatechnik Lehrstuhl Softwaretechnologie 01062 Dresden Germany Technische Universität Dresden Institut für Software- und Multimediatechnik Lehrstuhl Softwaretechnologie Entwicklerhandbuch Die C# Schnittstelle der Referenzattributgrammatik-gesteuerten Graphersetzungsbibliothek RACR Übersicht, Anwendung und Implementierung Daniel Langner [email protected] Editor: Christoff Bürger RACR .NET Entwicklerhandbuch RACR Distribution und Homepage: https://github.com/christoff-buerger/racr Danksagung Ich danke Llewellyn ‘Leppie‘ Pritchard, dem Autor der Scheme-VM IronScheme, ohne welche diese Arbeit niemals hätte entstehen können. Er hatte immer ein offenes Ohr und war stets bereit, sein breites CLI-Wissen zu teilen und bei Problemen mit IronScheme weiterzuhelfen. Vorwort Dieses Entwicklerhandbuch beruht auf dem Großem Beleg von Daniel Langner, welcher unter dem Titel RAG-gesteuerte Graphersetzung in der objektorientierten Programmierung am 17. November 2015 beim Lehrstuhl Softwaretechnologie, Institut für Software- und Multimediatechnik, Technische Universität Dresden, eingereicht wurde. Der Große Beleg wurde von Dipl.-inf. Christoff Bürger und Dipl.-Inf. Johannes Mey, unter Aufsicht von Prof. Dr. rer. nat. habil. Uwe Aßmann, betreut und mit sehr gut abgeschlossen. Inhaltsverzeichnis 1. Einleitung 13 1.1. Aufgabenstellung . 14 1.2. Struktur der Arbeit . 14 2. Konzeptionelle und technische Voraussetzungen 15 2.1. Überblick der RAG-gesteuerten Graphersetzung . 15 2.2. Scheme . 16 2.3. Die RACR Scheme-Bibliothek . 17 2.4. Das .NET-Framework und die Common Language Infrastructure . 18 2.5. IronScheme .
    [Show full text]
  • Doc:Docu.Xml a File.Cs Mcs -Doc:Docu.Xml a File.Cs
    Chair of Software Engineering Java and C# in depth Carlo A. Furia, Marco Piccioni, Bertrand Meyer C#: framework overview and in-the-small features Chair of Software Engineering Java and C# in depth Carlo A. Furia, Marco Piccioni, Bertrand Meyer C#: framework overview What’s in a name Internal name of initial project: Cool (C-like Object Oriented Language) . Ruled out by the trademark lawyers Chief C# architect at Microsoft: Anders Hejlsberg . Previously on Turbo Pascal & Delphi Grounded in the .NET platform and CLI (Common Language Infrastructure) “An imitation of Java” . According to Java’s Bill Gosling Version 1.0: 2001 Latest version: 5.0 (.NET Framework 4.5) (6.2013) Java and C# in depth 3 C# platform goals (from ECMA standard) . Simple, general-purpose, object-oriented . Correct and robust . strong type checking, array bounds checking, detecting usage of uninitialized variables, automated memory management, ... Component- and reusability-oriented . Programmer-portable . easy for developers coming from C/C++ and from other .NET languages . No direct competition with C in terms of performance . Introduction of selected functional programming features . Main motivation: dealing with data conveniently Java and C# in depth 4 CLI: Common Language Infrastructure • An open specification describing the executable code and runtime environment forming the .NET framework • Implementations: MS .NET/CLR, MS .NET Compact framework (portable devices and Xbox 360), MS Silverlight (browsers), Mono (cross-platform). Java and C# in depth 5 CIL and Assemblies . C# compilation produces CIL (Common Intermediate Language) code . Instruction set similar to Java bytecode . object-oriented stack-based assembly code . richer type system, real generics vs.
    [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]