56
© VHS/VHS-AM Team Integrating Integrating Haskell Haskell with with Visual Studio Assignment Visual Studio Assignment Manager Manager André Santos & VHS/VHS-AM Team [email protected]

Integrating Haskell with Visual Studio Assignment Manager

  • Upload
    ataret

  • View
    35

  • Download
    1

Embed Size (px)

DESCRIPTION

Integrating Haskell with Visual Studio Assignment Manager. André Santos & VHS/VHS-AM Team [email protected]. Haskell. Pure functional programming language Strenghts... High level of abstraction Concise code (4x to 10x smaller) Strong Mathematical foundation Modules, Abstract Data Types - PowerPoint PPT Presentation

Citation preview

Page 1: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

IntegratingIntegrating Haskell Haskell withwith Visual Visual Studio Assignment ManagerStudio Assignment Manager

André Santos & VHS/VHS-AM [email protected]

Page 2: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

HaskellHaskell• Pure functional programming languagePure functional programming language• Strenghts...Strenghts...

– High level of abstractionHigh level of abstraction– Concise code (4x to 10x smaller)Concise code (4x to 10x smaller)– Strong Mathematical foundationStrong Mathematical foundation– Modules, Abstract Data TypesModules, Abstract Data Types– Polymorphism, high order functions, Strong typingPolymorphism, high order functions, Strong typing– higher productivity, easier maintenance, higher higher productivity, easier maintenance, higher

code reusecode reuse– Lazy Semantics Lazy Semantics infinite data structures infinite data structures

• But weaknesses too...But weaknesses too...– Limited Integration with other technologiesLimited Integration with other technologies– No powerful IDEsNo powerful IDEs

Page 3: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Project HistoryProject History• Haskell + VS.NET Integration Haskell + VS.NET Integration VHS VHS

ProjectProject– Personal initiative/interest: Personal initiative/interest:

André and Simon Marlow (MSR)André and Simon Marlow (MSR)– started by mid-2003started by mid-2003

Assignment Manager extensions RFPAssignment Manager extensions RFP– RFP for extending Assignment Manager RFP for extending Assignment Manager

(end of 2003)(end of 2003)– MS Shared Source tool for submitting and MS Shared Source tool for submitting and

evaluating student assignmentsevaluating student assignments The VHS-AM ProjectThe VHS-AM Project

Page 4: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Combined ObjectivesCombined Objectives

• Allow the use of Assignment Manager for Allow the use of Assignment Manager for teaching Haskell by extending Assignment teaching Haskell by extending Assignment Manager and/or Visual Studio .NETManager and/or Visual Studio .NET

• Have a full IDE for HaskellHave a full IDE for Haskell

VHS-AM ProjectProjectVHS ProjectVHS Project

Page 5: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

This presentationThis presentation

•MS Assignment Manager•VHS (Visual Haskell) and VSIP program•Demo•Conclusions and Future Work

Page 6: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Assignment ManagerAssignment Manager

• Faculty (teaching) Faculty (teaching) ToolsTools

• Student ToolsStudent Tools• Assignment ManagerAssignment Manager

Page 7: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Faculty ToolsFaculty Tools• Set of tools for managing the Set of tools for managing the

publishing of courses and course taskspublishing of courses and course tasks• Two main parts:Two main parts:

– Assignment Publishing ToolsAssignment Publishing Tools– Code ExtractionCode Extraction

Page 8: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Assignment Publishing Assignment Publishing ToolsTools• Allows the publishing of courses and Allows the publishing of courses and

taskstasks• Students access the course Students access the course

site/materials therough:site/materials therough:– webweb serverserver (http:// ...) (http:// ...)– network share (\\Server\folder)network share (\\Server\folder)– ftp server (ftp:// ...)ftp server (ftp:// ...)

Page 9: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Adding a new courseAdding a new course

Page 10: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Page 11: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Page 12: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Submitting a new taskSubmitting a new task

Page 13: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Disponibilizando Disponibilizando uma tarefa ...uma tarefa ...

Page 14: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Code ExtractorCode Extractor• Allows teacher to hide parts of the Allows teacher to hide parts of the

source code of a projectsource code of a project• Tells the students where to write their Tells the students where to write their

own codeown code• ““Template” projectsTemplate” projects

Page 15: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Hiding code...Hiding code...

Page 16: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Page 17: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Page 18: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Student perspective...Student perspective...

Page 19: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Student ToolsStudent Tools• Allow the students to see the courses’ Allow the students to see the courses’

sitessites

Page 20: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Page 21: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Page 22: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

After joining a course After joining a course the student can see the student can see what tasks are what tasks are available...available...

Page 23: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Assignment ManagerAssignment Manager• Improved version of the Improved version of the Assignment Assignment

Publishing ToolsPublishing Tools• Web application, that requires:Web application, that requires:

– ASP.NETASP.NET– SQLServer or SQLServer or Microsoft Data EngineMicrosoft Data Engine– Internet Information ServicesInternet Information Services (IIS) (IIS)– Microsoft Message QueuingMicrosoft Message Queuing (MSMQ) (MSMQ)

Page 24: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

A.M.A.M. Architecture Architecture

Assignment Assignment Manager ServerManager Server

Faculty Clients

Student Clients Student Clients

Creation of a

Creation of a coursecourse

Publishes ta

sks and marks

Publishes ta

sks and marks

Access to available ta

sks

Access to available ta

sks

Solution submissionSolution submission

Access to marks

Access to marks

Page 25: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

A.M.A.M. – Communication – Communication

• Lecturers can contact students Lecturers can contact students through:through:– E-mailE-mail– Internal message systemInternal message system

Page 26: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Page 27: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

A.M.A.M. – Publishing tasks – Publishing tasks

• Auto-build Auto-build andand auto-check auto-check • Extra files (e.g. I/O)Extra files (e.g. I/O)• Messages:Messages:

– Send ReminderSend Reminder, , Send Past Due NoticeSend Past Due Notice, , New Project NoticeNew Project Notice, , Updated Project Updated Project NoticeNotice

Page 28: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

A.M.A.M. – publishing tasks – publishing tasks

• After student submissions teacher can After student submissions teacher can assign marksassign marks

• Marks are available to studentsMarks are available to students

Page 29: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Page 30: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Page 31: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Page 32: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Page 33: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Page 34: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

•Project History & Objectives•MS Assignment Manager•VHS (Visual Haskell) and VSIP program•Demo•Conclusions and Future Work

Page 35: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Existing Haskell IDEsExisting Haskell IDEs

• Some tools have some Haskell support:Some tools have some Haskell support:– syntax colouringsyntax colouring– indentation (hard in Haskell!)indentation (hard in Haskell!)– jump to errorsjump to errors– menu of top-level declarationsmenu of top-level declarations– jump to definitionjump to definition– interactive compilation/evaluationinteractive compilation/evaluation– display type of an identifierdisplay type of an identifier

• Some tools: emacs, vi(m), WinHugs, Eclipse Some tools: emacs, vi(m), WinHugs, Eclipse plugin plugin

Page 36: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

ProblemsProblems

• Language support tends to be unreliable, Language support tends to be unreliable, because these environments are not because these environments are not using a real Haskell front-endusing a real Haskell front-end. . eg. eg. Colouring support in Emacs is really badColouring support in Emacs is really bad

• Different language flavours: Different language flavours: Haskell98+FFI, hierarchical modules, Haskell98+FFI, hierarchical modules, CPP, literateCPP, literate

• Jumping to an error often misses Jumping to an error often misses (compilers don’t have good source loc (compilers don’t have good source loc info)info)

• No real compilation supportNo real compilation support• Many, many, many more things an IDE Many, many, many more things an IDE

can do…can do…

Page 37: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

VHS Project ObjectivesVHS Project Objectives

• Integrate GHC with Visual Studio to Integrate GHC with Visual Studio to make a decent Haskell IDEmake a decent Haskell IDE

• Specify a programatic interface to Specify a programatic interface to GHC so that it can be re-used in other GHC so that it can be re-used in other IDE-like contexts.IDE-like contexts.

Page 38: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Background: Visual Background: Visual StudioStudio

• Development shell, with several language plugins: Development shell, with several language plugins: VC++, VC#, VJ#, VBVC++, VC#, VJ#, VB

• Very rich feature setVery rich feature set– Lots of support for language integrationLots of support for language integration– Projects: multi-file applications/librariesProjects: multi-file applications/libraries– Solutions: multiple projectsSolutions: multiple projects– DebuggingDebugging– Integrated documentation, context-sensitive help etc.Integrated documentation, context-sensitive help etc.– Lots of support for automation/extension/customisationLots of support for automation/extension/customisation

• ““free” access to the integration APIs: free” access to the integration APIs: VSIPVSIP• Windows onlyWindows only

Page 39: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

VSIPVSIP• VVisual isual SStudio tudio IIndustry ndustry PPartnersartners

– set of COM APIs for integrating new set of COM APIs for integrating new functionality into VS:functionality into VS:• Language support in the editorLanguage support in the editor• ProjectProject• ToolsTools

– ““freely available” SDKfreely available” SDK– APIs are highly detailed, flexible & HUGEAPIs are highly detailed, flexible & HUGE– Babel (Daan Leijen) provides a simpler Babel (Daan Leijen) provides a simpler

abstraction layer for integrating simple abstraction layer for integrating simple language supportlanguage support

– http://http://www.vsipdev.comwww.vsipdev.com

Page 40: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

VS.NET IDE Itself

-Basic level of automation/extension

- customization of the IDE and creation of new components for VS.NET programming.

VS.NET Macros

- Widely supported by the IDE: Macros Explorer, VSMacros IDE, supports recording, debugging, etc.

- Can’t create GUIs, tool windows, etc.

VS.NET Add-Ins

- Higher integration: creation of new applications embeddded in VS.NET, including GUI

- Ideal for medium complexity extensions

- can’t be used to define new languages

VS.NET Wizards

- Takes the programmer step-by-step on the execution of a task

Extending VS.NETExtending VS.NET• VS.NET Extension Mechanisms:VS.NET Extension Mechanisms:

VSIP

- More powerful and much more complex

- The only way of supporting new programming languages and new project types

- Current version supports using managed code

- Used to implement most of our use cases

Page 41: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Using VSIPUsing VSIP

Visual Studio

Babel

VSIP COM interfaces

Parser, type

checker,etc.

C/C++

Babel COM interfaces

Compiler

Direct to VSIP for project

support

Lex/Yacc parser or

Implementation of Babel Interfaces

Page 42: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

VHS ProjectVHS Project

Visual Studio

Babel

VSIP COM interfaces

HaskellService

C/C++ Haskell

Babel COM interfaces

GHC

Direct to VSIP for project

support

Page 43: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Status of the VHS Status of the VHS ProjectProject

• We have:We have:– Syntax colouringSyntax colouring– accurate indication of erroneous accurate indication of erroneous

subexpressionssubexpressions– Parsing/renaming/type-checking as you type Parsing/renaming/type-checking as you type

(in a separate thread)(in a separate thread)– Brace matchingBrace matching– (Partial) (Partial) Project support including A.M. Project support including A.M.

supportsupport– Prototype of quick info supportPrototype of quick info support– Prototype of method tips supportPrototype of method tips support– Prototype of autocompletionPrototype of autocompletion

Page 44: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

ScreenshotsScreenshots

Page 45: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

ScreenshotsScreenshots

Page 46: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

ScreenshotsScreenshots

Page 47: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

ScreenshotsScreenshots

Page 48: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

DemosDemos

Method tip

Quick info + pop-up list

Taskbar errors

Brace Matching

Page 49: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Features we wantFeatures we want• Extend Brace matching (e.g. let/in)Extend Brace matching (e.g. let/in)• Drop-down menu of top-level declsDrop-down menu of top-level decls• OutliningOutlining• Jump to definition (or docs for library fns)Jump to definition (or docs for library fns)• Easy access to documentationEasy access to documentation• Code model (programatic access to the source code)Code model (programatic access to the source code)• Inferred types tooltipsInferred types tooltips• Type of subexpressionType of subexpression• Further Project support:Further Project support:

– Multi-module support (automatically discover Multi-module support (automatically discover dependencies, etc.)dependencies, etc.)

– Library-infrastructure support (import/export Library-infrastructure support (import/export library infrastructure metadata gives a nice way library infrastructure metadata gives a nice way to package & ship a project)to package & ship a project)

Page 50: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

More ambitious More ambitious featuresfeatures

• Integrated FFI toolsIntegrated FFI tools• .NET integration.NET integration• DebuggingDebugging• GUI BuilderGUI Builder

Page 51: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Current StatusCurrent Status

• Simon:Simon:– Use H/Direct for accessing COM APIs Use H/Direct for accessing COM APIs – Multi-threading support in GHC’s RTS Multi-threading support in GHC’s RTS

(parsing & colouring run in separate OS (parsing & colouring run in separate OS threads)threads)

– Syntax ColoringSyntax Coloring– Accurate source location info in GHC’s Accurate source location info in GHC’s

internal abstract syntaxinternal abstract syntax– Support in GHC to build GHC as a packageSupport in GHC to build GHC as a package– Error messages in Error messages in taskbartaskbar

Page 52: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Current StatusCurrent Status

• VHS-AM Team:VHS-AM Team:– Assignment Manager integrationAssignment Manager integration through through

Basic project support and Basic project support and compile/build/run cyclecompile/build/run cycle

– Brace matchingBrace matching– Prototypes of method tips (a.k.a. Prototypes of method tips (a.k.a.

“function” tips), quick info, complete-“function” tips), quick info, complete-wordword

– GHCi Integration (in the works)GHCi Integration (in the works)

• Krasimir: full project support (in the works)Krasimir: full project support (in the works)

Page 53: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

ResultsResults

• Working Integration of Haskell to Working Integration of Haskell to Assignment ManagerAssignment Manager

• (Partial) Integration of Haskell to (Partial) Integration of Haskell to VS.NETVS.NET

• VS plugin available soonVS plugin available soon

Page 54: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Future WorkFuture Work

• Extend Integration of Haskell to Extend Integration of Haskell to VS.NET, through Better Project VS.NET, through Better Project support, Help, Module Browser etc.support, Help, Module Browser etc.

• design decisions on how to design decisions on how to integrate/expose existing compiler as integrate/expose existing compiler as an APIan API

• design decisions on how to integrate design decisions on how to integrate VS hooks into GHC parserVS hooks into GHC parser

• Haskell compilation and interop with Haskell compilation and interop with CLR/VS.NET: CLR/VS.NET: Integrating Haskell to .NET using RotorIntegrating Haskell to .NET using Rotor

Page 55: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Project MembersProject Members• VHS-AM TeamVHS-AM Team

– André SantosAndré Santos– André FurtadoAndré Furtado– Mauro AraújoMauro Araújo– Marden MenezesMarden Menezes

• VHS ProjectVHS Project– Simon Marlow, MSRSimon Marlow, MSR– Krasimir AngelovKrasimir Angelov– The VHS-AM TeamThe VHS-AM Team

Page 56: Integrating  Haskell  with  Visual Studio Assignment Manager

© VHS/VHS-AM Team

Integrating Haskell with Visual Integrating Haskell with Visual Studio Assignment ManagerStudio Assignment Manager

Questions?Questions?

www.cin.ufpe.br/~haskell/vhs-amwww.cin.ufpe.br/~haskell/vhs-am