Metaprogramming in .NET

Total Page:16

File Type:pdf, Size:1020Kb

Metaprogramming in .NET in .NET Kevin Hazzard Jason Bock FOREWORD BY Rockford Lhotka MANNING www.it-ebooks.info Metaprogramming in .NET www.it-ebooks.info www.it-ebooks.info Metaprogramming in .NET KEVIN HAZZARD JASON BOCK MANNING SHELTER ISLAND www.it-ebooks.info 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. 20 Baldwin Road PO Box 261 Shelter Island, NY 11964 Email: [email protected] ©2013 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 percent recycled and processed without the use of elemental chlorine. Manning Publications Co. Development editor: Cynthia Kane 20 Baldwin Road Copyeditor: Corbin Collins PO Box 261 Technical proofreader: Justin Chase Shelter Island, NY 11964 Proofreader: Elizabeth Martin Typesetter: Dennis Dalinnik Cover designer: Marija Tudor ISBN: 9781617290268 Printed in the United States of America 12345678910–MAL–18171615141312 www.it-ebooks.info brief contents PART 1DEMYSTIFYING METAPROGRAMMING ..............................1 1 ■ Metaprogramming concepts 3 2 ■ Exploring code and metadata with reflection 41 PART 2TECHNIQUES FOR GENERATING CODE ..........................63 3 ■ The Text Template Transformation Toolkit (T4) 65 4 ■ Generating code with the CodeDOM 101 5 ■ Generating code with Reflection.Emit 139 6 ■ Generating code with expressions 171 7 ■ Generating code with IL rewriting 199 PART 3LANGUAGES AND TOOLS ............................................221 8 ■ The Dynamic Language Runtime 223 9 ■ Languages and tools 267 10 ■ Managing the .NET Compiler 287 v www.it-ebooks.info www.it-ebooks.info contents foreword xiii preface xv acknowledgments xvii about this book xix about the cover illustration xxiii PART 1DEMYSTIFYING METAPROGRAMMING...................1 Metaprogramming concepts 3 1 1.1 Definitions of metaprogramming 6 1.2 Examples of metaprogramming 8 Metaprogramming via scripting 8 ■ Metaprogramming via reflection 11 ■ Metaprogramming via code generation 14 Metaprogramming via dynamic objects 29 1.3 Summary 39 Exploring code and metadata with reflection 41 2 2.1 The need for reflection 42 Creating extensible applications 42 ■ Manipulating code members at runtime 42 vii www.it-ebooks.info viii CONTENTS 2.2 Reading metadata and executing code 43 Obtaining the starting point 44 ■ Finding member information 46 ■ Gathering attribute data 47 Executing code 48 2.3 Impractical uses of reflection 49 Performance concerns with reflection 49 Brittleness and reflection 50 2.4 Practical uses of reflection 51 Automatically registering known types in WCF 52 Dynamic implementation of ToString 55 Invoking arbitrary methods on objects 58 Quick summary of reflection examples 61 2.5 Summary 62 PART 2TECHNIQUES FOR GENERATING CODE...............63 The Text Template Transformation Toolkit (T4) 65 3 3.1 Thinking of generics as templates 66 3.2 Introducing T4 69 T4 syntax basics 71 ■ Understanding T4’s block types 73 How T4 stitches together template blocks 74 ■ T4’s expression control block 75 ■ A brief history of T4 75 3.3 More useful T4 examples 77 Templates should be beautiful 83 3.4 T4 fundamentals 84 Directives and text blocks 84 ■ Control blocks 85 Handling indentation 88 3.5 Using T4 inside Visual Studio 93 How T4 uses the single file generator extension point 93 Creating a T4 template from Visual Studio 95 ■ More on the template directive 96 ■ Using the output directive 97 Using T4 to generate Visual Basic dynamically 98 3.6 Summary 100 Generating code with the CodeDOM 101 4 4.1 Understanding the CodeDOM 102 CodeDOM organization and types 103 ■ How statements and expressions fit together 105 www.it-ebooks.info CONTENTS ix 4.2 The code provider classes 106 Code provider instantiation 106 ■ Code generator supportable options 110 ■ Code provider services 112 4.3 Adding objects to a code graph 113 Creating a namespace with imports 113 ■ Adding a class to a namespace 115 ■ Adding a constructor to a class 116 Adding statements to a member 117 ■ Adding a property to a class 120 4.4 Metaprogramming with the CodeDOM 121 Using branching logic 121 ■ Referencing a member 124 Invoking methods 126 ■ Compiling assemblies 133 Dynamic invocation 135 4.5 Summary 137 Generating code with Reflection.Emit 139 5 5.1 Why Emitter classes? 140 Support for DSLs 140 ■ Moving reflection code into IL 141 Using .NET functionality not supported in your language 142 5.2 An overview of assembly internals 144 Transforming high-level languages 144 ■ Member layouts in assemblies and keywords 147 5.3 A lightning tour of opcodes 148 The mnemonic patterns for opcodes 148 ■ Using local variables 150 ■ Accessing fields 151 ■ Creating objects 152 Calling methods 152 ■ Controlling code flow 153 Exception handling 154 5.4 Creating dynamic assemblies 155 Building a dynamic version of ToString() 155 Adding debugging support 160 ■ Verifying results with peverify 162 ■ Using ILDasm to cheat 164 5.5 Lightweight code generation with dynamic methods 165 When creating an assembly is too much 165 ■ Creating shim methods 166 ■ Using caching for performance 167 Disadvantages of DynamicMethod 168 5.6 Summary 170 Generating code with expressions 171 6 6.1 Expression-oriented programming 172 Understanding code as data 172 ■ Expressions take metaprogramming mainstream 174 www.it-ebooks.info x CONTENTS 6.2 Making dynamic methods with LINQ Expressions 176 Understanding LINQ Expressions 176 ■ Generating expressions at runtime 178 ■ Comparison with dynamic methods 182 6.3 Using expressions effectively 184 Debugging expressions 184 ■ Mutating expression trees 187 6.4 Evolving expression trees 189 The essence of genetic programming 189 ■ Applying GAs to expressions 191 6.5 Summary 198 Generating code with IL rewriting 199 7 7.1 The case for code injection 200 Repeated implementations of coding patterns 200 Code restructuring (Code Contracts) 201 7.2 Creating an injection framework 203 What’s Cecil? 203 ■ Weaving code with Cecil 203 Creating an MSBuild task 210 7.3 Debugging injected code 212 Clearing up debugging confusion 212 ■ Loading and saving debug information 212 ■ Issues with adding debugging information 213 ■ Adding debugging information for injected code 214 7.4 Summary 218 PART 3LANGUAGES AND TOOLS.................................221 The Dynamic Language Runtime 223 8 8.1 The simplest dynamic classes 224 The ExpandoObject class 224 ■ The DynamicObject class 227 Parsing the Open Data Protocol dynamically 231 8.2 The DLR hosting model 239 Runtimes, engines, and scopes 241 ■ Adding a rules engine to your application 252 8.3 Summary 264 www.it-ebooks.info CONTENTS xi Languages and tools 267 9 9.1 A survey of languages 268 C# and expression limitations 268 ■ Boo and metaprogramming 269 ■ Nemerle and metaprogrammg 275 9.2 A survey of tools 277 What is Spring.NET? 277 ■ Intercepting property usage with Spring.NET 278 ■ What is PostSharp? 280 Intercepting object creation with PostSharp 280 Implementing Equals() and GetHashCode() 282 A quick dive into the internals of PostSharp 285 9.3 Summary 286 Managing the .NET Compiler 287 10 10.1 Opening up the compiler 288 The current state of affairs: a black box 288 ■ Limitations for metaprogramming 288 ■ What Roslyn provides: a white box 289 ■ What’s in (and not in) the CTP 290 10.2 Understanding the basics of Roslyn 291 Running code snippets with the script engine 291 Creating dynamic assemblies with Roslyn 294 ■ What is a mock? 294 ■ Generating the mock code 295 ■ Compiling the mock code 300 ■ Understanding trees 302 10.3 Interacting with code in Visual Studio 303 Creating a IsOneWay warning 303 ■ Defining the Code Issue 303 ■ Defining the OneWayOperation code actions 306 ■ Viewing the results 307 Autoarrange code 309 ■ Specifying the algorithm to reformat the code 309 ■ Defining the core parts of the refactoring project 310 ■ Creating a code action 311 Viewing the results 314 10.4 Summary 315 appendix A Metaprogramming in Windows 8 316 appendix B Usage guide 319 index 321 www.it-ebooks.info www.it-ebooks.info foreword When I think about metaprogramming I view it through three sets of experience: as a computer scientist, a business developer, and a .NET framework author. From a computer science perspective, it is clear that our industry has been largely stagnant from a language perspective for an extremely long time. The slow evolution of 3GLs (third-generation languages) from C to C++ to Java to C# has resulted in incremental improvements, but no major leaps in terms of developer productivity, maintainability of code, reduction of complexity, or other meaningful metrics. (I chose the C language progression in my example because it is perhaps the most widely known. Comparable progressions exist for BASIC, Pascal, and many other lan- guage families.) Metaprogramming offers interesting possibilities around the creation of domain- specific languages and other abstraction concepts that could eventually break us out of the 3GL world we’ve lived in for the past 20-30 years. Although this book doesn’t focus on such a long-term goal, I think you can use Metaprogramming in .NET as a start- ing point to gain valuable perspective on myriad core ideas that might inspire you to think more about the future of our industry.
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]
  • IJIRT | Volume 2 Issue 6 | ISSN: 2349-6002
    © November 2015 | IJIRT | Volume 2 Issue 6 | ISSN: 2349-6002 .Net Surbhi Bhardwaj Dronacharya College of Engineering Khentawas, Haryana INTRODUCTION as smartphones. Additionally, .NET Micro .NET Framework (pronounced dot net) is Framework is targeted at severely resource- a software framework developed by Microsoft that constrained devices. runs primarily on Microsoft Windows. It includes a large class library known as Framework Class Library (FCL) and provides language WHAT IS THE .NET FRAMEWORK? interoperability(each language can use code written The .NET Framework is a new and revolutionary in other languages) across several programming platform created by Microsoft for languages. Programs written for .NET Framework developingapplications. execute in a software environment (as contrasted to hardware environment), known as Common It is a platform for application developers. Language Runtime (CLR), an application virtual It is a Framework that supports Multiple machine that provides services such as Language and Cross language integration. security, memory management, and exception handling. FCL and CLR together constitute .NET IT has IDE (Integrated Development Framework. Environment). FCL provides user interface, data access, database Framework is a set of utilities or can say connectivity, cryptography, web building blocks of your application system. application development, numeric algorithms, .NET Framework provides GUI in a GUI and network communications. Programmers manner. produce software by combining their own source code with .NET Framework and other libraries. .NET is a platform independent but with .NET Framework is intended to be used by most new help of Mono Compilation System (MCS). applications created for the Windows platform. MCS is a middle level interface. Microsoft also produces an integrated development .NET Framework provides interoperability environment largely for .NET software called Visual between languages i.e.
    [Show full text]
  • Create Mobile Apps with HTML5, Javascript and Visual Studio
    Create mobile apps with HTML5, JavaScript and Visual Studio DevExtreme Mobile is a single page application (SPA) framework for your next Windows Phone, iOS and Android application, ready for online publication or packaged as a store-ready native app using Apache Cordova (PhoneGap). With DevExtreme, you can target today’s most popular mobile devices with a single codebase and create interactive solutions that will amaze. Get started today… ・ Leverage your existing Visual Studio expertise. ・ Build a real app, not just a web page. ・ Deliver a native UI and experience on all supported devices. ・ Use over 30 built-in touch optimized widgets. Learn more and download your free trial devexpress.com/mobile All trademarks or registered trademarks are property of their respective owners. Untitled-4 1 10/2/13 11:58 AM APPLICATIONS & DEVELOPMENT SPECIAL GOVERNMENT ISSUE INSIDE Choose a Cloud Network for Government-Compliant magazine Applications Geo-Visualization of SPECIAL GOVERNMENT ISSUE & DEVELOPMENT SPECIAL GOVERNMENT ISSUE APPLICATIONS Government Data Sources Harness Open Data with CKAN, OData and Windows Azure Engage Communities with Open311 THE DIGITAL GOVERNMENT ISSUE Inside the tools, technologies and APIs that are changing the way government interacts with citizens. PLUS SPECIAL GOVERNMENT ISSUE APPLICATIONS & DEVELOPMENT SPECIAL GOVERNMENT ISSUE & DEVELOPMENT SPECIAL GOVERNMENT ISSUE APPLICATIONS Enhance Services with Windows Phone 8 Wallet and NFC Leverage Web Assets as Data Sources for Apps APPLICATIONS & DEVELOPMENT SPECIAL GOVERNMENT ISSUE ISSUE GOVERNMENT SPECIAL DEVELOPMENT & APPLICATIONS Untitled-1 1 10/4/13 11:40 AM CONTENTS OCTOBER 2013/SPECIAL GOVERNMENT ISSUE OCTOBER 2013/SPECIAL GOVERNMENT ISSUE magazine FEATURES MOHAMMAD AL-SABT Editorial Director/[email protected] Geo-Visualization of Government KENT SHARKEY Site Manager Data Sources MICHAEL DESMOND Editor in Chief/[email protected] Malcolm Hyson ..........................................
    [Show full text]
  • Exam Ref 70-482: Advanced Windows Store App Development Using HTML5 and Javascript
    Exam Ref 70-482: Advanced Windows Store App Development Using HTML5 and JavaScript Roberto Brunetti Vanni Boncinelli Copyright © 2013 by Roberto Brunetti and Vanni Boncinelli All rights reserved. No part of the contents of this book may be reproduced or transmitted in any form or by any means without the written permission of the publisher. ISBN: 978-0-7356-7680-0 1 2 3 4 5 6 7 8 9 QG 8 7 6 5 4 3 Printed and bound in the United States of America. Microsoft Press books are available through booksellers and distributors worldwide. If you need support related to this book, email Microsoft Press Book Support at [email protected]. Please tell us what you think of this book at http://www.microsoft.com/learning/booksurvey. Microsoft and the trademarks listed at http://www.microsoft.com/about/legal/ en/us/IntellectualProperty/Trademarks/EN-US.aspx are trademarks of the Microsoft group of companies. All other marks are property of their respec- tive owners. The example companies, organizations, products, domain names, email ad- dresses, logos, people, places, and events depicted herein are fictitious. No association with any real company, organization, product, domain name, email address, logo, person, place, or event is intended or should be inferred. This book expresses the author’s views and opinions. The information con- tained in this book is provided without any express, statutory, or implied warranties. Neither the authors, Microsoft Corporation, nor its resellers, or distributors will be held liable for any damages caused or alleged to be caused either directly or indirectly by this book.
    [Show full text]
  • Interface Evolution Via Virtual Extension Methods Brian Goetz Fourth Draft, June 2011
    Interface evolution via virtual extension methods Brian Goetz Fourth draft, June 2011 1. Problem statement Once published, it is impossible to add methods to an interface without breaking existing implementations. (Specifically, adding a method to an interface is not a source- compatible change.) The longer the time since a library has been published, the more likely it is that this restriction will cause grief for its maintainers. The addition of closures to the Java language in JDK 7 place additional stress on the aging Collection interfaces; one of the most significant benefits of closures is that it enables the development of more powerful libraries. It would be disappointing to add a language feature that enables better libraries while at the same time not extending the core libraries to take advantage of that feature1. V1 of the Lambda Strawman proposed C#-style static extension methods as a means of creating the illusion of adding methods to existing classes and interfaces, but they have significant limitations – for example, they cannot be overridden by classes that implement the interface being extended, so implementations are stuck with the “one size fits all” implementation provided as an extension2, and they are not reflectively discoverable. 2. Virtual extension methods3 In this document, we outline a mechanism for adding new methods to existing interfaces, which we call virtual extension methods. Existing interfaces can be augmented without compromising backward compatibility4 by adding extension methods to the interface, whose declaration would contain instructions for finding the default implementation in the event that implementers do not provide a method body.
    [Show full text]
  • Comparative Studies of Programming Languages; Course Lecture Notes
    Comparative Studies of Programming Languages, COMP6411 Lecture Notes, Revision 1.9 Joey Paquet Serguei A. Mokhov (Eds.) August 5, 2010 arXiv:1007.2123v6 [cs.PL] 4 Aug 2010 2 Preface Lecture notes for the Comparative Studies of Programming Languages course, COMP6411, taught at the Department of Computer Science and Software Engineering, Faculty of Engineering and Computer Science, Concordia University, Montreal, QC, Canada. These notes include a compiled book of primarily related articles from the Wikipedia, the Free Encyclopedia [24], as well as Comparative Programming Languages book [7] and other resources, including our own. The original notes were compiled by Dr. Paquet [14] 3 4 Contents 1 Brief History and Genealogy of Programming Languages 7 1.1 Introduction . 7 1.1.1 Subreferences . 7 1.2 History . 7 1.2.1 Pre-computer era . 7 1.2.2 Subreferences . 8 1.2.3 Early computer era . 8 1.2.4 Subreferences . 8 1.2.5 Modern/Structured programming languages . 9 1.3 References . 19 2 Programming Paradigms 21 2.1 Introduction . 21 2.2 History . 21 2.2.1 Low-level: binary, assembly . 21 2.2.2 Procedural programming . 22 2.2.3 Object-oriented programming . 23 2.2.4 Declarative programming . 27 3 Program Evaluation 33 3.1 Program analysis and translation phases . 33 3.1.1 Front end . 33 3.1.2 Back end . 34 3.2 Compilation vs. interpretation . 34 3.2.1 Compilation . 34 3.2.2 Interpretation . 36 3.2.3 Subreferences . 37 3.3 Type System . 38 3.3.1 Type checking . 38 3.4 Memory management .
    [Show full text]
  • 1.1.2 MIT Backbonejs.Org File Bootstrap Apache
    Resource name License License reference Usage Type backbone-1.1.2 MIT backbonejs.org File bootstrap Apache 2.0 http://getbootstrap.com/javascript/ File bootstrap-datetimepicker-v2.0.1 Apache 2.0 https://github.com/Eonasdan/bootstrap-datetimepicker/blob/v2.0.1/LICENSE File cache.js MIT https://github.com/monsur/jscache FIle Common.Logging.Core.dll Apache 2.0 http://netcommon.sourceforge.net/license.html Dynamic Library Common.Logging.dll Apache 2.0 http://netcommon.sourceforge.net/license.html Dynamic Library DocumentFormat.OpenXml.dll Apache 2.0 https://github.com/OfficeDev/Open-XML-SDK/blob/master/LICENSE.txt Dynamic Library enquire.js MIT http://wicky.nillia.ms/enquire.js File globalize MIT http://github.com/jquery/globalize File handlebars MIT https://github.com/wycats/handlebars.js/blob/master/LICENSE File HTML5 Sortable MIT License http://farhadi.ir/projects/html5sortable/ File hu.js MIT https://github.com/Canop/hu.js File ICSharpCode.SharpZipLib.dll GPL with exceptions http://icsharpcode.github.io/SharpZipLib/ Dynamic Library icudt34.dll ICU License http://www-306.ibm.com/software/globalization/icu/index.jsp Dynamic Library icuin34.dll ICU License http://www-306.ibm.com/software/globalization/icu/index.jsp Dynamic Library icuuc34.dll ICU License http://www-306.ibm.com/software/globalization/icu/index.jsp Dynamic Library indexedDBshim MIT https://github.com/axemclion/IndexedDBShim File interact.js MIT https://raw.github.com/taye/interact.js/master/LICENSE File interact.js MIT https://raw.githubusercontent.com/taye/interact.js/master/LICENSE
    [Show full text]
  • Identitymodel Documentation
    IdentityModel Documentation Dominick Baier and Brock Allen May 11, 2021 IdentityModel 1 IdentityModel 3 2 IdentityModel.AspNetCore 5 3 IdentityModel.AspNetCore.OAuth2Introspection7 4 IdentityModel.OidcClient 9 5 oidc-client.js 11 5.1 Overview................................................. 11 5.2 Discovery Endpoint........................................... 12 5.3 Token Endpoint.............................................. 14 5.4 Token Introspection Endpoint...................................... 17 5.5 Token Revocation Endpoint....................................... 17 5.6 UserInfo Endpoint............................................ 18 5.7 Dynamic Client Registration....................................... 18 5.8 Device Authorization Endpoint..................................... 19 5.9 Protocol and Claim Type Constants................................... 19 5.10 Creating Request URLs (e.g. for Authorize and EndSession endpoints)................ 20 5.11 Fluent API for the X.509 Certificate Store................................ 22 5.12 Base64 URL Encoding.......................................... 22 5.13 Epoch Time Conversion......................................... 22 5.14 Time-Constant String Comparison.................................... 22 5.15 Overview................................................. 23 5.16 Worker Applications........................................... 23 5.17 Web Applications............................................ 25 5.18 Extensibility............................................... 27 5.19 Overview................................................
    [Show full text]
  • Appendix a and Appendix B
    This PDF contains 2 Appendices: Appendix A and Appendix B. Appendix A Answers to the Test Your Knowledge Questions This appendix has the answers to the questions in the Test Your Knowledge section at the end of each chapter. Chapter 1 – Hello, C#! Welcome, .NET! 1. Why can a programmer use different languages, for example, C# and F#, to write applications that run on .NET? Answer: Multiple languages are supported on .NET because each one has a compiler that translates the source code into intermediate language (IL) code. This IL code is then compiled to native CPU instructions at runtime by the CLR. 2. What do you type at the prompt to create a console app? Answer: You enter dotnet new console. 3. What do you type at the prompt to build and execute C# source code? Answer: In a folder with a ProjectName.csproj file, you enter dotnet run. 4. What is the Visual Studio Code keyboard shortcut to view Terminal? Answer: Ctrl + ` (back tick). Answers to the Test Your Knowledge Questions 5. Is Visual Studio 2019 better than Visual Studio Code? Answer: No. Each is optimized for different tasks. Visual Studio 2019 is large, heavy- weight, and can create applications with graphical user interfaces, for example, Windows Forms, WPF, UWP, and Xamarin.Forms mobile apps, but it is only available on Windows. Visual Studio Code is smaller, lighter-weight, code-focused, supports many more languages, and is available cross-platform. In 2021, with the release of .NET 6 and .NET Multi-platform App User Interface (MAUI), Visual Studio Code will get an extension that enables building user interfaces for desktop and mobile apps.
    [Show full text]
  • Diffsharp an AD Library for .NET Languages
    DiffSharp An AD Library for .NET Languages Atılım Güneş Baydin1 Barak A. Pearlmutter2 Jeffrey Mark Siskind3 1University of Oxford [email protected] 2Maynooth University [email protected] 3Purdue University [email protected] http://www.robots.ox.ac.uk/~gunes/ AD2016, September 13, 2016 The .NET “ecosystem” Languages The main .NET languages: C#, F#, VB, C++/CLI Around 30 other (somewhat obscure) languages: F*, Eiffel, A#, ClojureCLR, IronPython, Nemerle, ... https://en.wikipedia.org/wiki/List_of_CLI_languages 1/18 C# Stack Overflow Developer Survey 2015 TIOBE Index, September 2016 http://stackoverflow.com/research/developer-survey-2015 http://www.tiobe.com/tiobe-index/ 2/18 F# An OCaml-based, strongly-typed, functional language, used in computational finance, machine learning Allows us to expose AD as a higher-order API accept first class functions as arguments return derivative functions, which can be arbitrarily nested //A scalar-to-scalar function let f x = sin (sqrt x) //2nd derivative off let f’’ = diff (diff f) // Evaluatef’’ at2 let d = f’’ 2. 3/18 Runtimes Previously: .NET Framework (Windows) and Mono (Linux, Mac OS) Since 27 June 2016: .NET Core 1.0 https://dotnet.github.io/ Open-source (MIT License) Cross-platform (Linux, Mac OS, Windows) 4/18 DiffSharp DiffSharp http://diffsharp.github.io/DiffSharp Deeply-embedded, higher-order, forward and reverse AD Support for nesting, currying High-performance matrix operations (using BLAS/LAPACK/CUDA) Implemented in F#, usable by all .NET languages (helper interface for C# and other procedural
    [Show full text]
  • Deep Dive Into OS Internals with Windbg Malware and OS Internals
    2012 Deep Dive into OS Internals with Windbg Malware and OS Internals An approach towards reversing malwares, shellcodes and other malicious codes to understand the ways in which they use the OS Internals for their functionality. Sudeep Pal Singh Honeywell 1/26/2012 Page 1 Table of Contents Preface ............................................................................................................................................................................ 3 Reversing Windows Internals .......................................................................................................................................... 4 Portable Executable Anatomy ......................................................................................................................................... 5 Data Directories of Interest ............................................................................................................................................. 7 Import Directory .............................................................................................................................................................. 8 Import Address Table .................................................................................................................................................... 12 Export Directory ............................................................................................................................................................ 13 Manual Walkthrough of Export Directory ....................................................................................................................
    [Show full text]