Скачать презентацию Mango A General Purpose Programming Language My Скачать презентацию Mango A General Purpose Programming Language My

a025b2be4f5090f2a7f76f6f5bb9acd5.ppt

  • Количество слайдов: 117

Mango A General Purpose Programming Language Mango A General Purpose Programming Language

My Background § Early experience on Apple II § University of Illinois – Champaign My Background § Early experience on Apple II § University of Illinois – Champaign – Urbana. § Bachelor's degree in computer engineering § Three years at Neoglyphics: software § Three years at Alpha: hardware

How Mango Got Started § Frustrated with C/C++/Java § There had to be a How Mango Got Started § Frustrated with C/C++/Java § There had to be a better way § Foolishly began designing my own language § Foolishness can be a virtue § It’s been a seven year voyage

The Problem § Common computing infrastructure is written in C/C++ § C/C++ is inadequate The Problem § Common computing infrastructure is written in C/C++ § C/C++ is inadequate § Lack of higher level abstractions § Programmers must use low level constructs § Results of C/C++ use § Unsafe/unstable software § Slower development times § Higher development costs

A lack of alternatives § Java, Python, Perl, Pascal, Ada, Modula, C# § Not A lack of alternatives § Java, Python, Perl, Pascal, Ada, Modula, C# § Not viable replacements § Lack C’s virtues in performance and flexibility § Dependent on C for core tasks § Lack of widespread appeal (clumsy, i. e. Ada? ) § Not sufficiently different to switch

The Solution: Core Goals § Provide higher level abstractions § Avoid low level constructs The Solution: Core Goals § Provide higher level abstractions § Avoid low level constructs when not needed § Make programming easier, more enjoyable § Retain performance and flexibility § Allow unrestricted operations as necessary § Avoid overhead § Match machine execution model § Overall: make a better experience for programmers

Overview § High level design goals and decisions § Feature walk through § Future Overview § High level design goals and decisions § Feature walk through § Future directions

Design Goals Design Goals

Design goals § Syntax § Static Typing vs. Dynamic Typing § How Vs. What Design goals § Syntax § Static Typing vs. Dynamic Typing § How Vs. What § Large Languages Vs. Small Languages § Object Orientation: Yes or No

Goal #1: A Good Syntax § Syntax is key § It’s underrated (focus on Goal #1: A Good Syntax § Syntax is key § It’s underrated (focus on semantics) § Makes the language easier to learn § Makes it accessible to non-programmers § Makes the language self-documenting § Marketing versus engineering § Bad marketing of a good product will fail § Bad syntax around good semantics will have a harder time gaining acceptance

Static versus Dynamic Typing § Dynamic languages are very popular § Due to poor Static versus Dynamic Typing § Dynamic languages are very popular § Due to poor implementations of static languages § Advantages of static typing § Critical for performance § Types act as documentation § They catch many errors at compile time § Types allows overloading of names

How versus What § CS fantasy to forget how and focus on what § How versus What § CS fantasy to forget how and focus on what § How is a hard problem § Distinguish features that are theoretically equivalent but practically different § Everything can be a list, but it’ll be slow § Rich set of primitive and aggregate types § Side effects to use memory more effectively § Reduce copying § Manual memory management § GC is not possible for some applications § Done right beats a garbage collector

Large Vs. Small Languages § Small language § Secondary features are in a standard Large Vs. Small Languages § Small language § Secondary features are in a standard library § Advantages: easier to learn core features, make a compiler § Large language § First class treatment of secondary features § Allows specialized operations, makes programs more readable § Advantage: a smoother user experience § Ease of learning is dependent on more than language size § You still have to learn library API’s § Intangible quality: how the language corresponds to human cognition § Open source makes compilers easier to write § Open front end acts as the spec

Object-Orientation: Yes or No? § Stepanov’s criticism § programming = data structures + algorithms Object-Orientation: Yes or No? § Stepanov’s criticism § programming = data structures + algorithms § multi-sorted algebras § Object orientation has shown itself useful in certain circumstances § Offer OO as an option § Leave inheritance behind § Inheritance hierarchies are difficult to follow § Fragile base class problem requires reanalysis of class behavior

Mango walk through § § § § § Influences Syntax plus some basic examples Mango walk through § § § § § Influences Syntax plus some basic examples Module system + incremental compilation (Include requires clause, parameter and options) (platform and foundation files) Naming and overloading Literals (include string format) Primitive Types Memory model (include pointer/reference syntax) Records and Abstracts Procedures, functions, constants (pure functions? ) Statements: Control flow Statements: I/O Abstract Data Type (objects) Iterators and iteration operators Mutexes Exception Handling Strings, arrays, buffers Collection Types Global variables/External symbols/Module Constructors § § § Packet/Device types Development aids Genericity § Calling convention part of the type system

§ § § § SETL - set operations ALGOL - imperative block structure and § § § § SETL - set operations ALGOL - imperative block structure and syntax C - low level ops, low overhead ML - type inference, type syntax ADA - fine grained control over primitives PYTHON - indentation based syntax JAVA - interfaces C++ - STL, operator overloading, IO syntax CLU - iterators PASCAL - sets (bit masks) PERL - richness of expressibility COBOL - readable syntax SIMULA - objects

Syntax Syntax

Mango’s Syntax § Mango looks like pseudo code § Indentation based syntax § § Mango’s Syntax § Mango looks like pseudo code § Indentation based syntax § § § Reduces clutter and typing Allows more code to be shown on the screen Blocks can be enclosed with begin/end delimiters if desired § All directives, definitions, statements begin with a keyword § Simple style that is easy to remember § User’s symbolic names cannot conflict with reserved words § This makes the language easy to extend § There are no exclusively reserved keywords § Legacy of lex?

Modules and Naming Modules and Naming

Modules § § Module is a set of symbols Each file is a module Modules § § Module is a set of symbols Each file is a module Module name must correspond to pathname A modules symbols can be public or private § Public: symbols are visible to other modules § Private: symbols are invisible to other modules § Modules may import and include other modules § Import: foreign symbols are localized (private) § Include: foreign symbols are exported (public)

Incremental Compilation § Mango supports incremental compilation § Module has changed § A dependency Incremental Compilation § Mango supports incremental compilation § Module has changed § A dependency has changed § Major or minor revision? § Compares syntax trees § Major revision: public change § Minor revision: private change § Comparing syntax § Advantage: Eases implementation § Disadvantage: Set of major revisions is obviously larger

Naming § Naming is not hierarchical, but geometric § Symbol names exist within a Naming § Naming is not hierarchical, but geometric § Symbol names exist within a four-d grid § Namespace, keyword, extension, auxiliary § Only namespace and keyword are mandatory § Each module is part of a namespace § Public symbols use declared namespace § Private symbols use special namespace “local” § Format: § namespace: : keyword@extension$auxiliary

Shallow Overloading § Overloading occurs for every imported or included § § § module Shallow Overloading § Overloading occurs for every imported or included § § § module 4 d namespace is collapsed into 1 d namespace § Utilizing keyword or extension Other partial namespaces as well Symbol can be access using proper name or alias Ensures all overloaded symbols have a unique name As a result, all overloading is superficial or shallow Operator overloading is also supported

Memory Model Memory Model

Mango’s Memory Model § Value semantics § Put stuff on the stack, particularly primitives Mango’s Memory Model § Value semantics § Put stuff on the stack, particularly primitives § Key for performance § Offers more flexibility § Three types of memory § Static: § Compiled data, global variables § Heap items that are never deleted § Arbitrary: § Heap items that are eventually deleted § Local: § Items that live on the stack

Safe manual memory management § Static datums § Always safe to use § Arbitrary Safe manual memory management § Static datums § Always safe to use § Arbitrary datums § Need to be guarded to avoid dangling pointer references § Local datums § Compiler must enforce restrictions to avoid dangling pointer references

Sentries § Pointer guards are called sentries § Pointers to arbitrary datums are fat Sentries § Pointer guards are called sentries § Pointers to arbitrary datums are fat § One address to the datum on the heap § One address to the datum’s sentry § Sentries live on the heap too § Have a static lifetime (i. e. never deallocated) § They are very small ~= 5 bytes

Sentry Performance § When # sentries is small § Good performance on modern hardware Sentry Performance § When # sentries is small § Good performance on modern hardware § Sentries stay in the cache § Half of the processor’s time is spent waiting on memory § As # sentries increases § cache starts to overflow § We need to reduce the number of sentries

Arenas and Recycling § Method #1: Allocate in pools § A group of datums Arenas and Recycling § Method #1: Allocate in pools § A group of datums share a sentry § Allocated arbitrarily, but deallocated at once § Method #2: Recycling § Use static datums instead § When static datums are deleted § Initialized to zero § Stay on the heap until datum of the same type is requested § Incorrect results are possible, catastrophic failures are not § The program cannot break the type system

Literals Literals

Literals § Definition § A value which is known at compile time § Types Literals § Definition § A value which is known at compile time § Types § Immediate values § Numeric primitives and text § Literal expressions § Interpreted during compilation § Parameters § Values used to configure the compiler § Options § User supplied values to customize a build § Literals can be named

Numeric Literals § Six types § Integer, Decimal, Hex, Address, Binary, Signal § Integers Numeric Literals § Six types § Integer, Decimal, Hex, Address, Binary, Signal § Integers and decimals also include complex plane signifiers § Can be anonymous § Anonymous literals are stored as untyped strings § Converted to a real value when type is known § There are no constraints on range § Can be typed § § § Type is specified with value Converted immediately to the desire type value There are no constraints on range

Text Literals § Two types § Characters and Strings § Stored as untyped strings Text Literals § Two types § Characters and Strings § Stored as untyped strings until desired type is known § Characters enclosed with the back tick § Text string enclosed with the double quote § Literals can be inserted into characters and text strings § § § Named literals Parameters Options Character codes Character aliases

Literal Expressions § Two forms of literal expressions § Normal literals: immediate evaluation § Literal Expressions § Two forms of literal expressions § Normal literals: immediate evaluation § Macro literals: deferred evaluation § Macros are evaluated over arguments § Result value is optionally typed § Expressions can include § Condition construct § Conversion construct § Local aliasing

Parameters and Options § Changes cause recompilation of module § Part of the public Parameters and Options § Changes cause recompilation of module § Part of the public interface of the module § Checked when comparing syntax § Only options that are used included in dependency analysis § Parameters included in dependency analysis § Specified by user § Have a major impact on compilation

Core Types Core Types

Core Types § Primitives § Tuples and Unions § Addresses, Pointers, References § Polymorphic Core Types § Primitives § Tuples and Unions § Addresses, Pointers, References § Polymorphic Types § Strings, Arrays and Buffers § Collections § Records and Abstracts

Type Qualifiers § Pliancy: Immutable, Mutable § Reactivity: Volatile, Inert § Duration: Local, Static, Type Qualifiers § Pliancy: Immutable, Mutable § Reactivity: Volatile, Inert § Duration: Local, Static, Arbitrary § Memory: IO, Virtual, Physical? § Useful for embedded system with multiple memories § Undecided: means to access hardware registers directly

Primitives § Logical § Bit (2 State), Boolean (3 State), Signal (4 state) § Primitives § Logical § Bit (2 State), Boolean (3 State), Signal (4 state) § Ordinal § Range from 0 to N, where N is user specified § Character § ASCII, UTF 8, UTF 16, UTF 32, 8 Bit Data § Register § Binary register, user specified dimensions § Signal bus, user specified dimensions

Primitives (cont’d) § Cardinal § Unsigned integer, 1/2/4/8/16/32/64 bits § Subrange § Signed range, Primitives (cont’d) § Cardinal § Unsigned integer, 1/2/4/8/16/32/64 bits § Subrange § Signed range, upper/lower bound, default value § Integer § Signed integer, 8/16/32/64 bits § Rational § Signed rational, fixed or floating denominator § Decimal § Fixed point decimal number § Whole and fractional component § Number § Floating point number, specified size

Primitives (cont’d) § Complex numbers § Primitives qualified with units § Enumerations § Matrices Primitives (cont’d) § Complex numbers § Primitives qualified with units § Enumerations § Matrices § Coordinates

Primitive Modifiers § Conversion § Automatic, manual, none, universal § Evaluation § None, Fixed, Primitive Modifiers § Conversion § Automatic, manual, none, universal § Evaluation § None, Fixed, Fluid § Approximation § Round, Truncate, Conserve § Overflow § Check, Limit, Wrap § Byte Order § Big, Little, Host, Network

Tuples and Unions § Anonymous type products § Fields can be labeled § Unions Tuples and Unions § Anonymous type products § Fields can be labeled § Unions § Each term of product is overlapped § Unsafe § Elaborate types decompose into tuples

Addresses, Pointers, References § Addresses have bitwise resolution § Address is 2 product tuple Addresses, Pointers, References § Addresses have bitwise resolution § Address is 2 product tuple § § Upper value: byte count Lower value: bit count § Addresses still optimal § types with byte-wise alignment will drop bit count § Pointers § Address of type where address is significant § References § Address of type where type is significant

Polymorphic Types § Sums § Superposition of multiple types § Qualified with type tag Polymorphic Types § Sums § Superposition of multiple types § Qualified with type tag to ensure safety § Handle § Anonymous pointer (points to anything) § Anything § Stores any type value

Strings, Arrays, Buffers § Arrays § Dimension type can be customized § Slices of Strings, Arrays, Buffers § Arrays § Dimension type can be customized § Slices of arrays preserve range information § Strings § Array of items from 1 to x § Dimension type can be customized § Slices of strings begin at 1 § Buffers § Fixed length string that wraps around itself § Varying start and end positions § Dimension type can be customized

Collections § Entry § a node of a linked list § Segment § a Collections § Entry § a node of a linked list § Segment § a combination of string and pointer § List § appends new data at the end § elements allocated in pages § Stack § FIFO § Can be prioritized § Sequence § inserts new data § elements allocated in pages § Queue § LIFO § Can be prioritized

Collections (cont’d) § Mask § A bit mask § Range § A numeric range Collections (cont’d) § Mask § A bit mask § Range § A numeric range with upper and lower bounds § Set § A hashed set § Doubles as a one-to-one map § Table § A hashed one-to-many mapping § Group § A special collected used for comparisons § Graph § Used for frequency tables

Records § Three visibility states § Public: accessible anywhere § Protected: accessible by modules Records § Three visibility states § Public: accessible anywhere § Protected: accessible by modules that declare access § Private: accessible within the module § Two layout types § Fixed: in order of declaration § Packed: ordered to reduce record size § Fields can be qualified to remove them from the build

Abstracts § Interface to multiple record types § Records mapped to abstracts using link Abstracts § Interface to multiple record types § Records mapped to abstracts using link directive § § Gives more flexibility in mapping abstracts Mappings can occur after declaration § i. e. library types can still be mapped to abstracts § Simplifies remapping of fields § Fields can be qualified to remove them from the build § Medley: combines abstract with a group of records

Abstract Data Types § Mango can bind any type to a class § Objects: Abstract Data Types § Mango can bind any type to a class § Objects: Classes + Record § Properties § getter/setter methods § Parameters § Properties that can only be set at instantiation § Delegates § Multiple dispatch for aspects and aggregates § Normal classes do not support inheritence

Object Construction § Constructor (prelude) § Destructor (finale) § New style constructor § Parameters Object Construction § Constructor (prelude) § Destructor (finale) § New style constructor § Parameters and properties can be set before the constructor is called § Only one constructor per class – no overloading § Constructor spans entire object. § Variable initialization at declaration

Object Interfaces § Interfaces (mixins) § Separates sub typing concerns from implementation § Interfaces Object Interfaces § Interfaces (mixins) § Separates sub typing concerns from implementation § Interfaces are purely abstract. No associated code § Uses link directive like record abstracts § Bind operator links types to interfaces automatically

Aggregates § Composition instead of hierarchical inheritance § Flattens the hierarchy: easier to understand Aggregates § Composition instead of hierarchical inheritance § Flattens the hierarchy: easier to understand maintain § Overriding of methods is explicit § Compiler can statically check for problems § All publicly accessible methods must explicitly exported

Built in I/O Devices § Mango’s built in I/O devices are typed § Six Built in I/O Devices § Mango’s built in I/O devices are typed § Six types of I/O devices § file: an operating system file § text: a line oriented text file § stream: an I/O stream § port: a connection listener § database: a database § document: a document (XML)

Procedures and Functions Procedures and Functions

Procedures § Multiple inputs and output § Call by localized reference § Compiler makes Procedures § Multiple inputs and output § Call by localized reference § Compiler makes a duplicate of a value on the stack if necessary § Nested procedures § Can reference variables within parents scope § Return values are held in a named variable § Possible to return values with assignment

Functions and Constants § Real functions § Essentially a single expression § Extended with Functions and Constants § Real functions § Essentially a single expression § Extended with two case constructs § Condition and conversion § Constants § Similar format to functions § Evaluated only once, result is cached § AKA Eiffel once function § Clean way to instantiate global variables

Procedures and Functions (cont’d) § Mango supports function/procedure pointers § Both global and local Procedures and Functions (cont’d) § Mango supports function/procedure pointers § Both global and local procedures § Invokation through expressions or statements § Statement invokations automatically infer return types § Labeled arguments possible

Method Pointers § Method pointers § combine class state with class method § When Method Pointers § Method pointers § combine class state with class method § When a method is selected from a class § Result is a method pointer § Special attribute and receptor pointers § Automatically evaluated § Method pointers are a supertype of function pointers § Will absorb function pointers

Expressions Expressions

Arithmetic § Addition, Subtraction, Negation, Identity § Multiplication, Division (Truncate) § Remainder, Division (Conserve) Arithmetic § Addition, Subtraction, Negation, Identity § Multiplication, Division (Truncate) § Remainder, Division (Conserve) § Apply (Exponent), Absolute Value § Shift Left, Shift Right

Comparison/Logical § Equal, Not Equal § Less, Less Equal, Greater Equal § Test, Not, Comparison/Logical § Equal, Not Equal § Less, Less Equal, Greater Equal § Test, Not, And, Or, Exclusive Or, Reduce

Casting § Static casting § Type is specified § Dynamic casting § Type is Casting § Static casting § Type is specified § Dynamic casting § Type is infered § Cast is specified with dynamic cast operator § Implicit casting § From subtype to supertype § Class to interface, Function to method, etc § Polymorphic types

Membership § in, not_in § String, array, buffer, entry, segment § List, stack, queue, Membership § in, not_in § String, array, buffer, entry, segment § List, stack, queue, sequence § Mask, range, set, table, graph § is, is_not § Evaluates left value with right function § Returns boolean § like, not_like § Tests left value is equivalent to right hand type

Selections § Selection of record fields/class methods § By name § By number (access Selections § Selection of record fields/class methods § By name § By number (access to anonymous fields) § Class fields § Special attribute operator § Dynamic method operator § Looks for class that can operate on target type, with named method

Array § A[x] to index an array § Slice operator § Before and after Array § A[x] to index an array § Slice operator § Before and after some position § Within a range § ~=, /= for string comparisons § Size operator returns size (# elements) § Domain operator returns dimensions

Production § Create and initialize data types § Local stack, static heap, dynamic heap Production § Create and initialize data types § Local stack, static heap, dynamic heap § Production arguments § Where clause § Initialize class properties/record fields § With clause § Class constructor arguments § Aggregate members § Within/upto § Dynamic string/array dimensions § From § Target arena

Sequence Operators § Generate sequence § Pick: select one value § Every: select group Sequence Operators § Generate sequence § Pick: select one value § Every: select group values § Test sequence § Some: one term in set matches § All: all terms in set match § Compute sequence § Product: product of terms § Sum: sum of terms

General Iteration Form [a of t] in x at h using u over p General Iteration Form [a of t] in x at h using u over p where z while q a in x at h using u over p where z while q in x at h using u over p where z while q

Iterations § Iterator targets § String, array, buffer, entry, segment § List, stack, queue, Iterations § Iterator targets § String, array, buffer, entry, segment § List, stack, queue, sequence § Mask, range, set, table, graph § File, text, stream, database, document § Iterator construct

Statements Statements

Statements Overview § Sequence of statements § Nested block delimitation § Begin/end pair § Statements Overview § Sequence of statements § Nested block delimitation § Begin/end pair § Indentation § Each statement begins with keyword § Possible to group statements under a single keyword § Delimited with indentation or begin/end pair

Overview (cont’d) § Variables can be named anywhere § Renaming can occur § In Overview (cont’d) § Variables can be named anywhere § Renaming can occur § In current block § In nested blocks § No goto’s § Blocks can be labeled § Blocks can be exited § Block labels can be used to exit multiple levels

Overview: Cont’d § Conditional predication § For many statements § Often with alternate evaluation Overview: Cont’d § Conditional predication § For many statements § Often with alternate evaluation

Basic Blocks § Execute: nested block § Exit: exit blocks § Return: exit procedure Basic Blocks § Execute: nested block § Exit: exit blocks § Return: exit procedure and set results § Repeat: repeating block § Continue: repeat loop

Production § Declare: declare local variable § Allocate: make temporary § Deallocated when leaving Production § Declare: declare local variable § Allocate: make temporary § Deallocated when leaving block § Get: declare static type § New: declare dynamic type § Delete: recycle or delete heap type § Trash: delete static heap type

Placement § Overlay: place a type over another type § Create: create a type Placement § Overlay: place a type over another type § Create: create a type from string § Place: place a type at an address § Map: map a device type § Open: open an I/O type § Close: close an I/O type

Assignment § Assign: copy value § Optional declared result with inferred type § Swap: Assignment § Assign: copy value § Optional declared result with inferred type § Swap: swap two values § Let: reference alias of value § Refine: update multiple fields of a record § Touch: Mark variable as used § Nothing: Do nothing

Arithmetic § Reset: reset value to default § Set: set value to 1 § Arithmetic § Reset: reset value to default § Set: set value to 1 § Incr: Increment by target, else 1 § Decr: Decrement by target, else 1 § Magnify: Multiply by target § Reduce: Reduce by target

Invokations § Call: call function with arguments § Optional declared result with inferred type Invokations § Call: call function with arguments § Optional declared result with inferred type § Eval: evaluate arguments with function § Optional declared result with inferred type § Initialize: initialize object with arguments § Finalize: finalize object § Function: local function § Procedure: local procedure

Conditional Blocks § If: If-then-else § Select: Multiple conditions § When: Defers compilation § Conditional Blocks § If: If-then-else § Select: Multiple conditions § When: Defers compilation § During: Conditional debug block § Compiler option removes them § While: Loop on pre-condition § Until: Loop on post-condition

Case Constructs § Where: case of values § Handles multiple matched terms § Case Case Constructs § Where: case of values § Handles multiple matched terms § Case values can include ranges and groups § Character strings have contents compared § Wild cards: Case value can be ignored § Convert: covert one value into another § Case values can include ranges and groups § Character strings have contents compared

Specialized Blocks § Given: Reduces polymorphic type § Handles multiple matched terms § Wild Specialized Blocks § Given: Reduces polymorphic type § Handles multiple matched terms § Wild cards: Case value can be ignored § Cast: Cast value, Execute Block § Foreach: Iterate and execute block § Acquire: Acquire mutex and execute block

Collection Operators § Add: add item into set § Replace: exchange item with another Collection Operators § Add: add item into set § Replace: exchange item with another § Remove: remove items from set § Take: take (arbitrary) item from set § Trim: reduce set y by set x § Filter: intersect set y by set x

Collection Iterators § Find: Return item § Option to insert and return new item Collection Iterators § Find: Return item § Option to insert and return new item § Extract: Remove and return item § Fill: Populate collection with iterator § Compute: Arithmetic sum over iteration § Copy: Copy from one set to another § Modify: Update items within collection

I/O § Write: write terms to I/O device § Read: read term from I/O I/O § Write: write terms to I/O device § Read: read term from I/O device § Strings, Buffers, Lists read series of terms § Continue/Stop masks for character devices § Print: write to standard out § Log: Atomic write to I/O device § Accept: accept stream from listener § Monitor: monitor group of listeners

Error Handling § Activate: active exception handler § Try: trap exceptions with block § Error Handling § Activate: active exception handler § Try: trap exceptions with block § Throw: throw exception § Require: assertion statement § Quit: quit program § Raise: rethrow exception

Iterators Iterators

Iterators § Procedures to iterate over type § Consists of operand result type § Iterators § Procedures to iterate over type § Consists of operand result type § Iterator activation: § By name § By type (operand and/or result) § Iteration deactivation § Result is § Result type is tagged

Iterators (cont’d) § Iterator sections § State: local state while iterator active § Prelude: Iterators (cont’d) § Iterator sections § State: local state while iterator active § Prelude: initialization segment § Query: compute result or signal stop § Finale: finalization segment § Local state is pushed on stack

Exceptions Exceptions

Activated Handler Style § Exception event code contained in global handler object § Handler Activated Handler Style § Exception event code contained in global handler object § Handler object pushed onto activation stack § On exception, handlers are processed until exception is handled § Exception handling is immediate, before stack is unwound

Exceptions (cont’d) § Four exception flavors: § Fatal: Quit program without unwinding stack § Exceptions (cont’d) § Four exception flavors: § Fatal: Quit program without unwinding stack § Severe: Quit program but unwind stack § Normal: Unwind stack to last trap § Soft: Program can continue

Advantages § Exception is processed before unwinding § No side effects before exception handling Advantages § Exception is processed before unwinding § No side effects before exception handling § Exception code can be pushed into libraries § Still possible to localize with arguments passed during activation § Reduces clutter § No need for try-catch blocks § No need for ‘throws’ clauses

Global variables Global variables

Global Variables § Variable: global value § Dataset: string of values § Symbol: external Global Variables § Variable: global value § Dataset: string of values § Symbol: external (linked) value § External: external (linked) function

Global Constructors § Global Initialization/Finalization code § Executed before and after program § Contents: Global Constructors § Global Initialization/Finalization code § Executed before and after program § Contents: § Local state § Prelude procedure § Finale procedure § Priority value sorts contructors

Misc Misc

Mutexes § Formal means of acquiring locks § Mutex object + Acquire statement § Mutexes § Formal means of acquiring locks § Mutex object + Acquire statement § Object selected by name or by type

Mutex Components § State: local state § Prelude: initialization § Acquire: acquire lock § Mutex Components § State: local state § Prelude: initialization § Acquire: acquire lock § Retry: reacquire flag § Release: release lock § Finale: finalization

Packets § Specialized record § Header § Payload of variable size § Footer § Packets § Specialized record § Header § Payload of variable size § Footer § Packet type is polymorphic pointer § Point to packet of any size

Devices § Used to define set of hardware registers § Record of records § Devices § Used to define set of hardware registers § Record of records § Register placement: § In sequence § At specified offset

Package § Used to define group of related functions § Elements of packages pushed Package § Used to define group of related functions § Elements of packages pushed into extended namespace § Particularly useful for operators § Means of reducing namespace clutter § Means of grouping related generic operators

Genericity Genericity

Genericity Genericity

Builds Builds

Builds § Assemblies, Platforms, and Prologues Builds § Assemblies, Platforms, and Prologues

Module Suffixes § Runtime type identification § Requests types that are used § Therefore Module Suffixes § Runtime type identification § Requests types that are used § Therefore not all types need to be instantiated

Future Directions Future Directions

Future Directions § Finish the compiler § Mango is the first in a family Future Directions § Finish the compiler § Mango is the first in a family of languages § Sharing type system and syntax § Targeting a virtual machine

Application Language § In the spirit of C# or Java § Reference semantics § Application Language § In the spirit of C# or Java § Reference semantics § i. e. no user defined pointers § Automated memory management § With user intervention § Less complicated type system § More accessible language

Functional Language § Functional/Dataflow semantics § Strong focus on doing distributed computations § Gateway Functional Language § Functional/Dataflow semantics § Strong focus on doing distributed computations § Gateway to bring functional programming to the masses § Accessible because of shared syntax and types

Record Processing Language § Basically a replacement for COBOL § “The use of COBOL Record Processing Language § Basically a replacement for COBOL § “The use of COBOL cripples the mind” § “working within the limitations of the original COBOL programming model can make for robust and maintainable code” § Overlooked area by language designers

Command Language § Cross between TCL and LISP § Can be used as OS Command Language § Cross between TCL and LISP § Can be used as OS shell § Eliza – MIT LL 4 conference § Classification of Functions into 4 Types: Generator Concentrator Transformer Filter § Connected with pipes (aka unix shells)

Miscellaneous § Standard Development Environment § Text Editor, Debugger, Static Analysis, Etc. § Programming Miscellaneous § Standard Development Environment § Text Editor, Debugger, Static Analysis, Etc. § Programming is about community § Programmers Organization § Builds community § Standards body § Funds open source projects § Earns revenue by supplying directory services

The End Thanks for listening The End Thanks for listening