A Framework for the Checking and Refactoring of Crosscutting Concepts

Total Page:16

File Type:pdf, Size:1020Kb

A Framework for the Checking and Refactoring of Crosscutting Concepts UC San Diego UC San Diego Electronic Theses and Dissertations Title A framework for the checking and refactoring of crosscutting concepts Permalink https://escholarship.org/uc/item/9vb0z5x8 Author Shonle, Macneil Charles Publication Date 2009 Peer reviewed|Thesis/dissertation eScholarship.org Powered by the California Digital Library University of California UNIVERSITY OF CALIFORNIA, SAN DIEGO A Framework for the Checking and Refactoring of Crosscutting Concepts A dissertation submitted in partial satisfaction of the requirements for the degree Doctor of Philosophy in Computer Science by Macneil Charles Shonle Committee in charge: Professor William G. Griswold, Co-Chair Professor Sorin L. Lerner, Co-Chair Professor James D. Hollan Professor Ingolf Krueger Professor Jens Palsberg 2009 Copyright c Macneil Charles Shonle, 2009 All rights reserved. The dissertation of Macneil Charles Shonle is approved, and it is acceptable in quality and form for publication on microfilm and electronically: Co-Chair Co-Chair University of California, San Diego 2009 iii DEDICATION With love to my parents, my wife Anna, and my son Ansel. And in loving memory to Steven John Metsker, Arthur W. Chou, and Joseph Amadee Goguen. iv EPIGRAPH Yes we can. —Barack Obama The secret of genius is to carry the spirit of the child into old age, which means never losing your enthusiasm. —Aldous Huxley v TABLE OF CONTENTS Signature Page ................................... iii Dedication ...................................... iv Epigraph ....................................... v Table of Contents .................................. vi List of Figures .................................... ix List of Tables .................................... x Acknowledgements ................................. xi Vita and Publications ................................ xiii Abstract of the Dissertation ............................. xiv Chapter 1 Introduction ............................. 1 1.1 Solutions for Crosscutting .................. 2 1.1.1 Language-Based Solutions .............. 2 1.1.2 Tool-Based Solutions ................. 6 1.2 Overview of the Arcum Approach .............. 8 1.3 Outline ............................ 11 Chapter 2 The Arcum Approach ........................ 12 2.1 Refactoring using Eclipse ................... 13 2.2 Refactoring using Arcum ................... 15 2.3 The Arcum Language ..................... 19 2.3.1 The Concept Construct ................ 19 2.3.2 The Interface Declaration ............... 22 2.3.3 The Option Declaration ................ 23 2.3.4 Mappings ....................... 25 2.4 The Arcum Development Process .............. 26 Chapter 3 Arcum’s Design and Implementation ................ 28 3.1 Monotonic Fixed-Point Solver ................ 29 3.2 Transformation Algorithm .................. 33 3.2.1 Pattern Matching ................... 34 3.2.2 Node Generation ................... 34 vi Chapter 4 Case Study of Arcum ........................ 37 4.1 Comparisons to Eclipse and AspectJ ............. 38 4.1.1 Task 1: Application of AttributeConcept ....... 38 4.1.2 Task 2: Message Log Redirection .......... 39 4.1.3 Task 3: Remove Control Coupling .......... 40 4.2 Class Library Migration .................... 41 4.2.1 Canonicalization ................... 43 4.2.2 Removing Puns: De-Canonicalization ........ 43 4.3 Debuggability ......................... 44 4.4 User-Defined Semantics ................... 45 4.4.1 When Simple Solutions are too General ....... 46 4.4.2 Checking Uses of Reflection ............. 46 4.4.3 Detecting Library-Specific Errors .......... 49 4.4.4 Java Metadata Annotations .............. 50 4.5 Software Architectural Design Enforcement ......... 52 4.5.1 Finer-Grained Access Control ............ 52 4.5.2 Detecting Common Errors .............. 53 4.6 Extended Example: The Visitor Pattern ........... 54 4.6.1 Visitor Arcum Option Implementation ........ 56 4.6.2 Variant: Cycle Risks ................. 59 4.6.3 Variant: Reflection using the DJ Library ....... 59 4.6.4 Refactoring Special Cases .............. 61 4.6.5 Discussion of the Development Process ....... 63 Chapter 5 User Study of Arcum ........................ 65 5.1 Study Description ....................... 67 5.1.1 Study Participants .................. 68 5.1.2 Study Tasks ...................... 69 5.1.3 Performance of the Tasks ............... 71 5.1.4 Threats to Validity .................. 73 5.2 Reasoning About Crosscutting ................ 73 5.2.1 Using Build Errors as a Guide ............ 74 5.2.2 Making Direct Queries with Arcum ......... 75 5.2.3 Confusing Definition with Reference ........ 77 5.2.4 Using Reference Materials .............. 79 5.3 Abstractions of Crosscutting ................. 81 5.3.1 A Decompositional Model .............. 81 5.3.2 An Overloading Model ................ 83 5.3.3 Patterns as Abstractions ............... 83 5.3.4 Other Metaphors Observed .............. 84 5.4 Development Styles ...................... 84 5.4.1 Reuse of Uses ..................... 85 5.4.2 Incremental Exploration ............... 87 vii 5.4.3 Improving Arcum Development Style ........ 89 5.5 Reasoning about Several Possibilities ............ 90 5.5.1 Thinking of Before and After ............ 90 5.5.2 Thinking of Correct and Incorrect .......... 91 5.6 Related Studies ........................ 94 5.7 Design Recommendations .................. 95 Chapter 6 Future Work ............................. 96 6.1 Future Applications ...................... 96 6.2 Extensions to the Arcum Language .............. 97 6.3 New Operations for the Environment ............. 98 Chapter 7 Conclusion ............................. 100 7.1 Contributions ......................... 101 Appendix A Syntax, Types and Built-in Predicates ............... 103 A.1 Syntax ............................. 103 A.2 Types and Built-In Predicates ................. 106 Appendix B Visitor Concept Implementation .................. 109 Appendix C User Study Materials ........................ 112 Bibliography .................................... 126 viii LIST OF FIGURES Figure 2.1: A simple internal field implementation of the altText attribute . 13 Figure 2.2: Static Map implementation of the altText attribute ......... 14 Figure 2.3: Refactoring in Arcum for Eclipse .................. 15 Figure 2.4: Mapping for the original InternalField implementation ....... 16 Figure 2.5: Overview of how Arcum transforms code .............. 18 Figure 3.1: The hasA relation ........................... 29 Figure 3.2: A broken specification for the doesNotPrint predicate ........ 31 Figure 3.3: A correct specification for the doesNotPrint predicate ........ 32 Figure 4.1: The ImplicitBoxing option ...................... 42 Figure 4.2: An example restricted use of reflection ............... 47 Figure 4.3: An accessor method, getIdentifier, usable as a Function object . 48 Figure 4.4: A static solution for Figure 4.3 that doesn’t require reflection. 48 Figure 4.5: Two descriptions of a lookup table .................. 50 Figure 4.6: The classGraph and traversalGraph relations ............ 55 Figure 4.7: Code listing for a Visitor Pattern Arcum interface .......... 57 Figure 4.8: Code listing for GoFVisitor ..................... 58 Figure 4.9: Code listing for DJVisitor ...................... 60 Figure 4.10: A single implementation can be “factored” in different ways .... 62 Figure 5.1: Arcum’s Fragments View ....................... 76 Figure 5.2: A direct example of the Reuse of Uses by group B. ......... 86 Figure 5.3: Implementations for checkInit .................... 92 Figure C.1: Language examples document provided to users .......... 113 Figure C.2: Language Reference ......................... 114 Figure C.3: Arcum User Study Instructions — Day One, page 1 ......... 115 Figure C.4: Arcum User Study Instructions — Day One, page 2 ......... 116 Figure C.5: Arcum User Study Instructions — Day One, page 3 ......... 117 Figure C.6: Arcum User Study Instructions — Day One, page 4 ......... 118 Figure C.7: Arcum User Study Instructions — Day One, page 5 ......... 119 Figure C.8: Arcum User Study Instructions — Day One, page 6 ......... 120 Figure C.9: Arcum User Study Instructions — Day One, page 7 ......... 121 Figure C.10: Arcum User Study Instructions — Day Two, page 1 ........ 122 Figure C.11: Arcum User Study Instructions — Day Two, page 2 ........ 123 Figure C.12: Participant Pre-Questionnaire — page 1 ............... 124 Figure C.13: Participant Pre-Questionnaire — page 2 ............... 125 ix LIST OF TABLES Table 2.1: Example built-in predicates. ...................... 21 Table 5.1: Participant demographics ....................... 68 Table 5.2: How each group performed the tasks over the two sessions ..... 72 Table A.1: Arcum Types .............................. 107 Table A.2: Built-In Arcum Predicates ....................... 108 x ACKNOWLEDGEMENTS Thanks first go to my wife, Anna, because she gave me the idea for this work when I asked her what “deconstructive programming” would be like. She was also the most important catalyst in my transition into becoming a full time Ph.D. student. I am also grateful that I had the opportunity to work with both Bill Griswold and Sorin Lerner. I can still remember the research meeting at Bill’s house when the ideas behind this dissertation really came together. The results were impressive enough for us to rope Sorin into joining the team. I look forward to working with you both again. And also thanks go to Karl Lieberherr, at Northeastern University, for helping me publish my first conference paper. I’d
Recommended publications
  • Refactoring of Acceptance Tests in Visual Studio
    Refactoring of Acceptance Tests in Visual Studio Denis Elbert Diplomarbeit Studiengang Informatik (Technik) Fakultät für Informatik Hochschule Mannheim Autor: Denis Elbert Matrikelnummer: 510243 Zeitraum: 16.11.2009 – 16.03.2010 Erstgutachterin: Prof. Dr. Astrid Schmücker-Schend Zweitgutachterin Prof. Dr. Miriam Föller-Nord Praktischer Teil angefertigt bei: Prof. Dr. Frank Maurer Agile Software Engineering Group University of Calgary Department of Computer Science 2500 University Dr NW Calgary, Alberta T2N 1N4 Canada Refactoring of Acceptance Tests in Visual Studio STATUTORY DECLARATION (GERMAN) Ich versichere, dass ich die vorliegende Arbeit selbstständig und ohne Benutzung anderer als der angegebenen Hilfsmittel angefertigt habe. Alle Stellen, die wörtlich oder sinngemäß aus veröffentlichten und nicht veröffentlichten Schriften entnommen wurden, sind als solche kenntlich gemacht. Die Arbeit hat in dieser oder ähnlicher Form keiner anderen Prüfungsbehörde vorgelegen. Mannheim, 16.03.2010 ________________________ Unterschrift I Refactoring of Acceptance Tests in Visual Studio ABSTRACT Executable Acceptance Test Driven Development (EATDD) is an extension of Test Driven Development (TDD). TDD requires that unit tests are written before any code. EATDD pushes this TDD paradigm to the customer level by using Acceptance Tests to specify the requirements and features of a system. The Acceptance Tests are mapped to a Fixture that permits the automated execution of the tests. With ongoing development the requirements of the system can change. Thus, the Acceptance Tests must be adjusted in order to reflect the new requirements. Since the tests and the corresponding Fixtures must remain consistent, the manual modification of these tests is time consuming and error-prone. Hence comes the need for Acceptance Test refactoring.
    [Show full text]
  • G22.2110-003 Programming Languages - Fall 2012 Week 14 - Part 1
    G22.2110-003 Programming Languages - Fall 2012 Week 14 - Part 1 Thomas Wies New York University Review Last lecture I Exceptions Outline Today: I Generic Programming Sources for today's lecture: I PLP, ch. 8.4 I Programming in Scala, ch. 19, 20.6 Generic programming Subroutines provide a way to abstract over values. Generic programming lets us abstract over types. Examples: I A sorting algorithm has the same structure, regardless of the types being sorted I Stack primitives have the same semantics, regardless of the objects stored on the stack. One common use: I algorithms on containers: updating, iteration, search Language models: I C: macros (textual substitution) or unsafe casts I Ada: generic units and instantiations I C++, Java, C#, Scala: generics (also called templates) I ML: parametric polymorphism, functors Parameterizing software components Construct Parameter(s): array bounds, element type subprogram values (arguments) Ada generic package values, types, packages Ada generic subprogram values, types C++ class template values, types C++ function template values, types Java generic classes Scala generic types (and implicit values) ML function values (including other functions) ML type constructor types ML functor values, types, structures Templates in C++ template <typename T> class Array { public : explicit Array (size_t); // constructor T& operator[] (size_t); // subscript operator ... // other operations private : ... // a size and a pointer to an array }; Array<int> V1(100); // instantiation Array<int> V2; // use default constructor
    [Show full text]
  • Advanced-Java.Pdf
    Advanced java i Advanced java Advanced java ii Contents 1 How to create and destroy objects 1 1.1 Introduction......................................................1 1.2 Instance Construction.................................................1 1.2.1 Implicit (Generated) Constructor.......................................1 1.2.2 Constructors without Arguments.......................................1 1.2.3 Constructors with Arguments........................................2 1.2.4 Initialization Blocks.............................................2 1.2.5 Construction guarantee............................................3 1.2.6 Visibility...................................................4 1.2.7 Garbage collection..............................................4 1.2.8 Finalizers...................................................5 1.3 Static initialization..................................................5 1.4 Construction Patterns.................................................5 1.4.1 Singleton...................................................6 1.4.2 Utility/Helper Class.............................................7 1.4.3 Factory....................................................7 1.4.4 Dependency Injection............................................8 1.5 Download the Source Code..............................................9 1.6 What’s next......................................................9 2 Using methods common to all objects 10 2.1 Introduction...................................................... 10 2.2 Methods equals and hashCode...........................................
    [Show full text]
  • Improving Tools for Javascript Programmers
    Improving Tools for JavaScript Programmers (Position Paper) Esben Andreasen Asger Feldthaus Simon Holm Jensen Aarhus University Aarhus University Aarhus University [email protected] [email protected] [email protected] Casper S. Jensen Peter A. Jonsson Magnus Madsen Aarhus University Aarhus University Aarhus University [email protected] [email protected] [email protected] Anders Møller Aarhus University [email protected] ABSTRACT 2. FINDING ERRORS WITH We present an overview of three research projects that all DATAFLOW ANALYSIS aim to provide better tools for JavaScript web application 1 The TAJS analysis tool infers an abstract state for each programmers : TAJS, which infers static type information program point in a given JavaScript web application. Such for JavaScript applications using dataflow analysis; JSRefac- an abstract state soundly models the possible states that tor, which enables sound code refactorings; and Artemis, may appear at runtime and can be used for detecting type- which provides high-coverage automated testing. related errors and dead code. These errors often arise from wrong function parameters, misunderstandings of the run- time type coercion rules, or simple typos that can be tedious to find using testing. 1. JAVASCRIPT PROGRAMMERS NEED We have approached the development of TAJS in stages. BETTER TOOLS First, our focus has been on the abstract domain and dataflow JavaScript contains many dynamic features that allegedly constraints that are required for a sound and reasonably ease the task of programming modern web applications. Most precise modeling of the basic operations of the JavaScript importantly, it has a flexible notion of objects: properties are language itself and the native objects that are specified in added dynamically, the names of the properties are dynam- the ECMAScript standard [3].
    [Show full text]
  • Pyref: a Refactoring Detection Tool for Python Projects
    Università Software della Institute Svizzera italiana PYREF:AREFACTORING DETECTION TOOL FOR PYTHON PROJECTS Hassan Atwi June 2021 Supervised by Prof. Dr. Michele Lanza Co-Supervised by Dr. Bin Lin SOFTWARE &DATA ENGINEERING MASTER THESIS iii Abstract Refactoring, the process of improving internal code structure of a software system without altering its external behav- iors, is widely applied during software development. Understanding how developers refactor source code can help us gain better understandings of the software development process and the relationship between various versions of software systems. Currently, many refactoring detection tools (e.g., REFACTORINGMINER and REF-FINDER) have been proposed and have received considerable attention. However, most of these tools focus on Java program, and are not able to detect refactorings applied throughout the history of a Python project, although the popularity of Python is rapidly magnifying. Developing a refactoring detection tool for Python projects would fill this gap and help extend the language boundary of the analysis in variant software engineering tasks. In this work, we present PYREF, a tool that automatically detect 11 different types of refactoring operations in Python projects. Our tool is inspired by REFACTORING MINER, the state-of-the-art refactoring detection tool for Java projects. With that said, while our core algorithms and heuristics largely inherit those of REFACTORING MINER, considerable changes are made due to the different language characteristics between Python and Java. PYREF is evaluated against oracles collected from various online resources. Meanwhile, we also examine the reliability of PYREF by manually inspecting the detected refactorings from real Python projects. Our results indi- cate that PYREF can achieve satisfactory precision.
    [Show full text]
  • Java Generics Adoption: How New Features Are Introduced, Championed, Or Ignored
    Java Generics Adoption: How New Features are Introduced, Championed, or Ignored Chris Parnin Christian Bird Emerson Murphy-Hill College of Computing Microsoft Research Dept. of Computer Science Georgia Institute of Redmond, Washington North Carolina State Technology [email protected] University Atlanta, Georgia Raleigh, North Carolina [email protected] [email protected] Far too often, greatly heralded claims and visions of new language features fail to hold or persist in practice. Discus- ABSTRACT sions of the costs and benefits of language features can easily devolve into a religious war with both sides armed with little Support for generic programming was added to the Java more than anecdotes [13]. Empirical evidence about the language in 2004, representing perhaps the most significant adoption and use of past language features should inform change to one of the most widely used programming lan- and encourage a more rational discussion when designing guages today. Researchers and language designers antici- language features and considering how they should be de- pated this addition would relieve many long-standing prob- ployed. Collecting this evidence is not just sensible but a lems plaguing developers, but surprisingly, no one has yet responsibility of our community. measured whether generics actually provide such relief. In In this paper, we examine the adoption and use of generics, this paper, we report on the first empirical investigation into which were introduced into the Java language in 2004. When how Java generics have been integrated into open source Sun introduced generics, they claimed that the language software by automatically mining the history of 20 popular feature was \a long-awaited enhancement to the type system" open source Java programs, traversing more than 500 million that \eliminates the drudgery of casting." Sun recommended lines of code in the process.
    [Show full text]
  • Addressing Common Crosscutting Problems with Arcum∗
    Addressing Common Crosscutting Problems with Arcum∗ Macneil Shonle William G. Griswold Sorin Lerner Computer Science & Engineering, UC San Diego La Jolla, CA 92093-0404 {mshonle, wgg, lerner}@cs.ucsd.edu ABSTRACT 1. INTRODUCTION Crosscutting is an inherent part of software development and can Arcum is a framework for declaring and performing user-defined typically be managed through modularization: A module’s stable program checks and transformations, with the goal of increasing properties are defined in an interface while its likely-to-change automated refactoring opportunities for the user [21]. By using Ar- properties are encapsulated within the module [19]. The cross- cum, a programmer can view the implementation of a crosscutting cutting of the stable properties, such as class and method names, design idiom as a form of module. Arcum uses a declarative lan- can be mitigated with automated refactoring tools that allow, for guage to describe the idiom’s implementation, where descriptions example, the interface’s elements to be renamed [9, 18]. However, are composed of Arcum interface and Arcum option constructs. An often the crosscutting from design idioms (such as design patterns option describes one possible implementation of a crosscutting de- and coding styles) are so specific to the program’s domain that sign idiom, and a set of options are related to each other when they their crosscutting would not likely have been anticipated by the all implement the same Arcum interface. developers of an automated refactoring system. Arcum’s declarative language uses a Java-like syntax for first- The Arcum plug-in for Eclipse enables programmers to describe order logic predicate statements, including a special pattern nota- the implementation of a crosscutting design idiom as a set of syn- tion for expressing Java code.
    [Show full text]
  • REVERSE GENERICS Parametrization After the Fact
    REVERSE GENERICS Parametrization after the Fact Alexandre Bergel PLEIAD Laboratory, Computer Science Department (DCC), University of Chile, Santiago, Chile Lorenzo Bettini Dipartimento di Informatica, Universit`adi Torino, Italy Keywords: Generic programming, Java generics, C++ templates. Abstract: By abstracting over types, generic programming enables one to write code that is independent from specific data type implementation. This style is supported by most mainstream languages, including C++ with tem- plates and Java with generics. If some code is not designed in a generic way from the start, a major effort is required to convert this code to use generic types. This conversion is manually realized which is known to be tedious and error-prone. We propose Reverse Generics, a general linguistic mechanism to define a generic class from a non-generic class. For a given set of types, a generic is formed by unbinding static dependencies contained in these types. This generalization and generic type instantiation may be done incrementally. This paper studies the possible application of this linguistic mechanism to C++ and Java and, in particular, it reviews limitations of Java generics against our proposal. 1 INTRODUCTION more than 100 down-casts and up-casts and 70 uses of instanceof. This examination reveals that in many The concept of generic programming (Dos Reis and places the amount of up-casting subsequent down- J¨arvi, 2005), which has characterized functional pro- casting that is used almost makes the programs be- gramming for several decades, appeared in main- have like dynamically typed code. stream programming object-oriented languages such Note, that the need to make existing code generic as C++, only in the late 80s, where it motivated from may arise also in languages where generic types were the beginning the design of the Standard Template Li- already available.
    [Show full text]
  • C DEFINES and C++ TEMPLATES Professor Ken Birman
    Professor Ken Birman C DEFINES AND C++ TEMPLATES CS4414 Lecture 10 CORNELL CS4414 - FALL 2020. 1 COMPILE TIME “COMPUTING” In lecture 9 we learned about const, constexpr and saw that C++ really depends heavily on these Ken’s solution to homework 2 runs about 10% faster with extensive use of these annotations Constexpr underlies the “auto” keyword and can sometimes eliminate entire functions by precomputing their results at compile time. Parallel C++ code would look ugly without normal code structuring. Const and constexpr allow the compiler to see “beyond” that and recognize parallelizable code paths. CORNELL CS4414 - FALL 2020. 2 … BUT HOW FAR CAN WE TAKE THIS IDEA? Today we will look at the concept of programming the compiler using the templating layer of C++ We will see that it is a powerful tool! There are also programmable aspects of Linux, and of the modern hardware we use. By controlling the whole system, we gain speed and predictability while writing elegant, clean code. CORNELL CS4414 - FALL 2020. 3 IDEA MAP FOR TODAY History of generics: #define in C Templates are easy to create, if you stick to basics The big benefit compared to Java is that a template We have seen a number of parameterized is a compile-time construct, whereas in Java a generic types in C++, like std::vector and std::map is a run-time construct. The template language is Turing-complete, but computes These are examples of “templates”. only on types, not data from the program (even when They are like generics in Java constants are provided).
    [Show full text]
  • How Does Object-Oriented Code Refactoring Influence
    How does Object-Oriented Code Refactoring Influence Software Quality? Research Landscape and Challenges Satnam Kaur *1, Paramvir Singh2 1Department of Computer Science and Engineering Dr B R Ambedkar National Institute of Technology, Jalandhar 144011, Punjab, India 2 School of Computer Science University of Auckland, Auckland 1142, New Zealand ABSTRACT Context: Software refactoring aims to improve software quality and developer productivity. Numerous empirical studies investigating the impact of refactoring activities on software quality have been conducted over the last two decades. Objective: This study aims to perform a comprehensive systematic mapping study of existing empirical studies on evaluation of the effect of object-oriented code refactoring activities on software quality attributes. Method: We followed a multi-stage scrutinizing process to select 142 primary studies published till December 2017. The selected primary studies were further classified based on several aspects to answer the research questions defined for this work. In addition, we applied vote-counting approach to combine the empirical results and their analysis reported in primary studies. Results: The findings indicate that studies conducted in academic settings found more positive impact of refactoring on software quality than studies performed in industries. In general, refactoring activities caused all quality attributes to improve or degrade except for cohesion, complexity, inheritance, fault-proneness and power consumption attributes. Furthermore, individual refactoring activities have variable effects on most quality attributes explored in primary studies, indicating that refactoring does not always improve all quality attributes. Conclusions: This study points out several open issues which require further investigation, e.g., lack of industrial validation, lesser coverage of refactoring activities, limited tool support, etc.
    [Show full text]
  • Java (Software Platform) from Wikipedia, the Free Encyclopedia Not to Be Confused with Javascript
    Java (software platform) From Wikipedia, the free encyclopedia Not to be confused with JavaScript. This article may require copy editing for grammar, style, cohesion, tone , or spelling. You can assist by editing it. (February 2016) Java (software platform) Dukesource125.gif The Java technology logo Original author(s) James Gosling, Sun Microsystems Developer(s) Oracle Corporation Initial release 23 January 1996; 20 years ago[1][2] Stable release 8 Update 73 (1.8.0_73) (February 5, 2016; 34 days ago) [±][3] Preview release 9 Build b90 (November 2, 2015; 4 months ago) [±][4] Written in Java, C++[5] Operating system Windows, Solaris, Linux, OS X[6] Platform Cross-platform Available in 30+ languages List of languages [show] Type Software platform License Freeware, mostly open-source,[8] with a few proprietary[9] compo nents[10] Website www.java.com Java is a set of computer software and specifications developed by Sun Microsyst ems, later acquired by Oracle Corporation, that provides a system for developing application software and deploying it in a cross-platform computing environment . Java is used in a wide variety of computing platforms from embedded devices an d mobile phones to enterprise servers and supercomputers. While less common, Jav a applets run in secure, sandboxed environments to provide many features of nati ve applications and can be embedded in HTML pages. Writing in the Java programming language is the primary way to produce code that will be deployed as byte code in a Java Virtual Machine (JVM); byte code compil ers are also available for other languages, including Ada, JavaScript, Python, a nd Ruby.
    [Show full text]
  • Visual Studio Code
    Visual Studio Code Tips & Tricks Vol. 1 1st Edition – March 2016, Revision 1 (April 2016) © Microsoft 2016 All rights reserved. This document is for informational purposes only. Microsoft Deutschland GmbH · Konrad-Zuse-Str. 1 · D-85716 Unterschleißheim Tel. +49 (0)89 31760 · www.microsoft.com · www.techwiese.de Authors: Tobias Kahlert and Kay Giza · Microsoft Germany Editor: Mathias Schiffer Localization: textoso · www.textoso.com Page 1 of 26 This book expresses the authors’ views and opinions. This document always up-to-date at: http://aka.ms/VSCodeTipsTricks Contents Visual Studio Code? ................................................................................................................................. 4 Preface ..................................................................................................................................................... 5 What is Visual Studio Code? .................................................................................................................... 6 Tip 1 – Getting the Latest and Greatest as a VS Code Insider ................................................................. 6 Tip 2 – Multiple Cursors .......................................................................................................................... 8 Tip 3 – Using the Command Palette to Control VS Code ........................................................................ 8 Tip 4 – Selecting a Language for a File ...................................................................................................
    [Show full text]