This document summarizes the history of formally verifying programming language compiler implementations from the 1960s to the 2000s. It discusses early work proving correctness of compilers for simple languages by McCarthy and Painter in the 1960s and Milner and Weyhrauch in the 1970s. It then outlines subsequent work extending these ideas to more complex languages through the 1980s-2000s using proof assistants. Recent work by Leroy and Chlipala have proved compilers for realistic languages, but questions remain around scaling to larger systems and trust in the verification tools.
Formal Verification of Programming LanguagesJason Reich
The document discusses the history of formally verifying programming language compiler implementations from the 1960s to the 2000s. It summarizes early work in the 1960s and 1970s proving correctness of compilers for simple arithmetic languages. Later work in the 1980s and 1990s proved correctness for compilers targeting more complex languages and using mechanized theorem proving. Recent work in the 2000s has formally verified compilers for realistic languages to low-level targets using proof assistants like Coq.
Rcpp provides seamless integration between R and C++. It includes the Rcpp API for wrapping R objects in C++ and converting between R and C++ types, Rcpp sugar for adding R-like syntax to C++, and Rcpp modules for exposing C++ classes and functions to R. The presentation provided examples of using the Rcpp API and sugar to write C++ functions that integrate with R. It also demonstrated how to define C++ modules to expose classes and functions to R. Benchmarks showed that Rcpp sugar can provide significant performance gains over the base R API.
Cs2303 theory of computation november december 2015appasami
This document contains an exam for a Theory of Computation course. It includes 15 multiple choice and long answer questions covering topics like non-deterministic finite automata (NFA), regular expressions, closure properties of regular languages, context-free grammars, parse trees, ambiguity, Chomsky normal form, Turing machines, recursively enumerable languages, and the Post correspondence problem (PCP). Students are instructed to answer all questions which involve tasks like constructing automata and grammars, proving languages are/aren't regular, and discussing properties and concepts related to formal languages and computability theory.
This document contains questions from a Theory of Computation exam for a Computer Science degree program. It covers topics like regular expressions, finite automata, context-free grammars, pushdown automata, Turing machines, and the halting problem. The exam has two parts - Part A contains 10 short answer questions worth 2 marks each, and Part B contains 5 longer answer questions worth 16 marks each. Questions test knowledge of concepts like nondeterministic finite automata, parsing, Greibach normal form, programming techniques for Turing machines, and undecidable problems like the Post correspondence problem and the halting problem.
Liszt los alamos national laboratory Aug 2011Ed Dodds
Liszt is a domain specific language for building portable mesh-based partial differential equation (PDE) solvers. It provides domain specific language features like mesh elements, topology functions, fields, and parallel for comprehensions to solve problems related to parallelism, data locality, and synchronization that arise when programming complex PDE solvers for parallel computers. The Liszt compiler analyzes code written in the Liszt language to extract data dependencies and generate optimized code for different hardware platforms like clusters, shared memory machines, and GPUs.
The document discusses the history and development of the Pascal programming language. Some key points:
- Pascal was designed by Niklaus Wirth in 1968-1970 to be a teaching language that was reliable, efficient, and suitable for implementing systems programming.
- It was influenced by ALGOL but had a smaller and simpler definition that focused on structured programming principles.
- Pascal included features like records, variants, pointers, procedures, functions, and control structures like for loops and case statements.
- It gained popularity for teaching and on microcomputers in the 1970s-1980s and influenced many modern languages through its extensions and derivatives.
La estudiante observó a una maestra que enseñaba de forma tradicional sin aplicar teorías, lo que resultó en que los niños no le prestaran atención e incluso mostraran conductas inadecuadas. La estudiante recomienda que la maestra aplique la teoría constructivista para captar mejor la atención de los alumnos y permitir que construyan su propio aprendizaje.
Formal Verification of Programming LanguagesJason Reich
The document discusses the history of formally verifying programming language compiler implementations from the 1960s to the 2000s. It summarizes early work in the 1960s and 1970s proving correctness of compilers for simple arithmetic languages. Later work in the 1980s and 1990s proved correctness for compilers targeting more complex languages and using mechanized theorem proving. Recent work in the 2000s has formally verified compilers for realistic languages to low-level targets using proof assistants like Coq.
Rcpp provides seamless integration between R and C++. It includes the Rcpp API for wrapping R objects in C++ and converting between R and C++ types, Rcpp sugar for adding R-like syntax to C++, and Rcpp modules for exposing C++ classes and functions to R. The presentation provided examples of using the Rcpp API and sugar to write C++ functions that integrate with R. It also demonstrated how to define C++ modules to expose classes and functions to R. Benchmarks showed that Rcpp sugar can provide significant performance gains over the base R API.
Cs2303 theory of computation november december 2015appasami
This document contains an exam for a Theory of Computation course. It includes 15 multiple choice and long answer questions covering topics like non-deterministic finite automata (NFA), regular expressions, closure properties of regular languages, context-free grammars, parse trees, ambiguity, Chomsky normal form, Turing machines, recursively enumerable languages, and the Post correspondence problem (PCP). Students are instructed to answer all questions which involve tasks like constructing automata and grammars, proving languages are/aren't regular, and discussing properties and concepts related to formal languages and computability theory.
This document contains questions from a Theory of Computation exam for a Computer Science degree program. It covers topics like regular expressions, finite automata, context-free grammars, pushdown automata, Turing machines, and the halting problem. The exam has two parts - Part A contains 10 short answer questions worth 2 marks each, and Part B contains 5 longer answer questions worth 16 marks each. Questions test knowledge of concepts like nondeterministic finite automata, parsing, Greibach normal form, programming techniques for Turing machines, and undecidable problems like the Post correspondence problem and the halting problem.
Liszt los alamos national laboratory Aug 2011Ed Dodds
Liszt is a domain specific language for building portable mesh-based partial differential equation (PDE) solvers. It provides domain specific language features like mesh elements, topology functions, fields, and parallel for comprehensions to solve problems related to parallelism, data locality, and synchronization that arise when programming complex PDE solvers for parallel computers. The Liszt compiler analyzes code written in the Liszt language to extract data dependencies and generate optimized code for different hardware platforms like clusters, shared memory machines, and GPUs.
The document discusses the history and development of the Pascal programming language. Some key points:
- Pascal was designed by Niklaus Wirth in 1968-1970 to be a teaching language that was reliable, efficient, and suitable for implementing systems programming.
- It was influenced by ALGOL but had a smaller and simpler definition that focused on structured programming principles.
- Pascal included features like records, variants, pointers, procedures, functions, and control structures like for loops and case statements.
- It gained popularity for teaching and on microcomputers in the 1970s-1980s and influenced many modern languages through its extensions and derivatives.
La estudiante observó a una maestra que enseñaba de forma tradicional sin aplicar teorías, lo que resultó en que los niños no le prestaran atención e incluso mostraran conductas inadecuadas. La estudiante recomienda que la maestra aplique la teoría constructivista para captar mejor la atención de los alumnos y permitir que construyan su propio aprendizaje.
Los nutrientes esenciales son aquellos que el cuerpo no puede producir y deben obtenerse a través de la dieta, ya que son necesarios pero no pueden sintetizarse internamente.
The first day of filming went well overall. The group found beautiful natural locations with good lighting that fit the artist's style. They were productive in scouting multiple locations despite limitations of not having a car. Test shots like close-ups of shoes at different locations went according to plan. However, when reviewing the footage, they realized the outfit worn by the artist did not match the genre of the music, so none of the footage could be used and everything would need to be refilmed. This was disappointing but an expected risk that sometimes footage will not work out and require being refilmed.
Object-Oriented Programming (OOP) is a programming technique that treats data and functions as objects. OOP uses classes to define objects that contain properties and methods. Classes act as blueprints for objects. Objects are instances of classes that inherit properties and methods from their class. Key elements of OOP include classes, objects, properties, methods, inheritance, and interfaces.
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive function. Exercise causes chemical changes in the brain that may help protect against mental illness and improve symptoms for those who already suffer from conditions like anxiety and depression.
This document discusses advanced functions in three paragraphs:
1) It explains how to set default parameter values so a function can be called without passing that argument.
2) It describes using rest parameters to represent an unknown number of arguments as an array.
3) It discusses assigning functions to variables, variable scope, and calling the function using the variable.
This document discusses exceptions and error handling in Java. It defines exceptions as abnormal conditions that arise during runtime and errors as conditions that occur during compilation. It explains how to use try, catch, throw, throws and finally to handle exceptions. Finally, it discusses Java's built-in exceptions, rethrowing exceptions, chained exceptions, and creating custom exception subclasses.
ECG merupakan ujian elektrokardiograf yang menganalisis aktiviti elektrik jantung melalui graf yang dihasilkan oleh mesin ECG. Ia terdiri daripada 12 leads yang melibatkan 6 elektrod dada dan 6 leads anggota untuk merekod irama jantung. Prosedur mengambil ECG melibatkan persediaan pesakit dan peralatan, aplikasi elektrod pada kedudukan yang betul, merekod graf ECG, dan mengenal pasti sebarang ke
La receta describe cómo hacer una tarta de manzana usando 4 manzanas, 3 huevos, 1 vaso de leche, 1 vaso de harina, 1 vaso de azúcar, 1 sobre de levadura y mermelada de manzana o melocotón. Se baten las manzanas, huevos, leche, harina y azúcar y se vierte la mezcla en un molde engrasado y enharinado, decorándola con rodajas de manzana. Se hornea a 180°C durante 20 minutos y una vez fría se unta mermelada encima.
The document summarizes the first chapter of the Bhagavad Gita. It describes how Arjuna, overcome with grief and confusion, refuses to fight on the battlefield of Kurukshetra against his relatives and teachers. King Dhritarashtra asks his advisor Sanjaya about the armies' activities. Sanjaya details how the armies are assembled and how Duryodhana, upon seeing the mighty warriors arrayed before him, goes to consult with his teacher Drona and highlights the strengths of the Pandava army.
Секция 2. Сидоренко Валерий (Агентство логистики идей "Интериум")NCCV
Корпоративное волонтерство: от волонтерства «руками» до pro-bono в российской практике
Как развить культуру корпоративного волонтерства в России? - результаты
проекта Ассоциации Менеджеров на крауд-платформе Sodea.ru
Валерий СИДОРЕНКО
генеральный директор, Агентство логистики идей "Интериум"
The document discusses various water treatment technologies. It describes the goals of water treatment as removing turbidity, chemicals, and pathogens from water sources in an affordable and timely manner. It then outlines different water sources and uses. The document details various impurities found in water and methods to remove them, such as screening, sedimentation, coagulation, filtration and sterilization. It also discusses specific technologies for treating boiler feed water and softening hard water, including internal and external treatment methods.
Este documento proporciona instrucciones en 10 pasos para realizar una manicura casera, comenzando con limar y dar forma a las uñas, seguido de pulir, ablandar las cutículas, retirar las cutículas sobrantes, hidratar con aceite, aplicar crema, remover la grasa, usar una base, aplicar dos capas de esmalte y finalizar con un brillo secante.
The document provides an overview of the Pascal programming language. It discusses [1] the early history and development of Pascal by Niklaus Wirth from 1968-1970, [2] the key features and structure of Pascal programs including the basic parts of a program and main data types, and [3] how Pascal combined features from other languages like ALGOL, COBOL and FORTRAN to create a structured and teachable language.
C programming language was developed by Dennis Ritchie at Bell Labs in 1972. It became widely popular after the publication of The C Programming Language book by Kernighan and Ritchie in 1978. C is a middle-level language that provides programmers the ability to write both low-level and high-level programs. It has various data types, operators, input/output functions and supports structured programming. A C program must be compiled by a compiler or interpreted by an interpreter to convert it into machine-readable code before it can be executed.
The document discusses compilers and their role in translating high-level programming languages into machine-readable code. It provides examples of Fortran code being compiled into Java byte code. A compiler consists of a front end that analyzes syntax and semantics and a back end that generates machine code. The front end performs lexical analysis, parsing, and generates an abstract syntax tree and symbol table. The back end then takes this intermediate representation and converts it into executable machine instructions.
Another programming language - jeszcze jeden językJarek Ratajski
This document discusses the history of programming languages through snippets of code and descriptions of various languages from the 1940s to the 1970s. It begins with machine code and assembly languages and progresses through higher-level languages like FORTRAN, COBOL, LISP, ALGOL, BASIC, Pascal, FORTH, C and others. It highlights reasons for the creation of new languages like making programming easier, preventing errors, and introducing new concepts and paradigms. Interspersed are notes about the evolving hardware landscape from punch cards to early computers.
Javascript Art for Kids - Library ProgramRino Landa
An introduction to coding by using javascript to make art. The class is designed with tweens and teens, but kids as young as six can also participate with guidance. The class takes you step-by-step in using JavaScript to "draw" a house.This class is based on a Khan Academy lesson.
Los nutrientes esenciales son aquellos que el cuerpo no puede producir y deben obtenerse a través de la dieta, ya que son necesarios pero no pueden sintetizarse internamente.
The first day of filming went well overall. The group found beautiful natural locations with good lighting that fit the artist's style. They were productive in scouting multiple locations despite limitations of not having a car. Test shots like close-ups of shoes at different locations went according to plan. However, when reviewing the footage, they realized the outfit worn by the artist did not match the genre of the music, so none of the footage could be used and everything would need to be refilmed. This was disappointing but an expected risk that sometimes footage will not work out and require being refilmed.
Object-Oriented Programming (OOP) is a programming technique that treats data and functions as objects. OOP uses classes to define objects that contain properties and methods. Classes act as blueprints for objects. Objects are instances of classes that inherit properties and methods from their class. Key elements of OOP include classes, objects, properties, methods, inheritance, and interfaces.
The document discusses the benefits of exercise for mental health. Regular physical activity can help reduce anxiety and depression and improve mood and cognitive function. Exercise causes chemical changes in the brain that may help protect against mental illness and improve symptoms for those who already suffer from conditions like anxiety and depression.
This document discusses advanced functions in three paragraphs:
1) It explains how to set default parameter values so a function can be called without passing that argument.
2) It describes using rest parameters to represent an unknown number of arguments as an array.
3) It discusses assigning functions to variables, variable scope, and calling the function using the variable.
This document discusses exceptions and error handling in Java. It defines exceptions as abnormal conditions that arise during runtime and errors as conditions that occur during compilation. It explains how to use try, catch, throw, throws and finally to handle exceptions. Finally, it discusses Java's built-in exceptions, rethrowing exceptions, chained exceptions, and creating custom exception subclasses.
ECG merupakan ujian elektrokardiograf yang menganalisis aktiviti elektrik jantung melalui graf yang dihasilkan oleh mesin ECG. Ia terdiri daripada 12 leads yang melibatkan 6 elektrod dada dan 6 leads anggota untuk merekod irama jantung. Prosedur mengambil ECG melibatkan persediaan pesakit dan peralatan, aplikasi elektrod pada kedudukan yang betul, merekod graf ECG, dan mengenal pasti sebarang ke
La receta describe cómo hacer una tarta de manzana usando 4 manzanas, 3 huevos, 1 vaso de leche, 1 vaso de harina, 1 vaso de azúcar, 1 sobre de levadura y mermelada de manzana o melocotón. Se baten las manzanas, huevos, leche, harina y azúcar y se vierte la mezcla en un molde engrasado y enharinado, decorándola con rodajas de manzana. Se hornea a 180°C durante 20 minutos y una vez fría se unta mermelada encima.
The document summarizes the first chapter of the Bhagavad Gita. It describes how Arjuna, overcome with grief and confusion, refuses to fight on the battlefield of Kurukshetra against his relatives and teachers. King Dhritarashtra asks his advisor Sanjaya about the armies' activities. Sanjaya details how the armies are assembled and how Duryodhana, upon seeing the mighty warriors arrayed before him, goes to consult with his teacher Drona and highlights the strengths of the Pandava army.
Секция 2. Сидоренко Валерий (Агентство логистики идей "Интериум")NCCV
Корпоративное волонтерство: от волонтерства «руками» до pro-bono в российской практике
Как развить культуру корпоративного волонтерства в России? - результаты
проекта Ассоциации Менеджеров на крауд-платформе Sodea.ru
Валерий СИДОРЕНКО
генеральный директор, Агентство логистики идей "Интериум"
The document discusses various water treatment technologies. It describes the goals of water treatment as removing turbidity, chemicals, and pathogens from water sources in an affordable and timely manner. It then outlines different water sources and uses. The document details various impurities found in water and methods to remove them, such as screening, sedimentation, coagulation, filtration and sterilization. It also discusses specific technologies for treating boiler feed water and softening hard water, including internal and external treatment methods.
Este documento proporciona instrucciones en 10 pasos para realizar una manicura casera, comenzando con limar y dar forma a las uñas, seguido de pulir, ablandar las cutículas, retirar las cutículas sobrantes, hidratar con aceite, aplicar crema, remover la grasa, usar una base, aplicar dos capas de esmalte y finalizar con un brillo secante.
The document provides an overview of the Pascal programming language. It discusses [1] the early history and development of Pascal by Niklaus Wirth from 1968-1970, [2] the key features and structure of Pascal programs including the basic parts of a program and main data types, and [3] how Pascal combined features from other languages like ALGOL, COBOL and FORTRAN to create a structured and teachable language.
C programming language was developed by Dennis Ritchie at Bell Labs in 1972. It became widely popular after the publication of The C Programming Language book by Kernighan and Ritchie in 1978. C is a middle-level language that provides programmers the ability to write both low-level and high-level programs. It has various data types, operators, input/output functions and supports structured programming. A C program must be compiled by a compiler or interpreted by an interpreter to convert it into machine-readable code before it can be executed.
The document discusses compilers and their role in translating high-level programming languages into machine-readable code. It provides examples of Fortran code being compiled into Java byte code. A compiler consists of a front end that analyzes syntax and semantics and a back end that generates machine code. The front end performs lexical analysis, parsing, and generates an abstract syntax tree and symbol table. The back end then takes this intermediate representation and converts it into executable machine instructions.
Another programming language - jeszcze jeden językJarek Ratajski
This document discusses the history of programming languages through snippets of code and descriptions of various languages from the 1940s to the 1970s. It begins with machine code and assembly languages and progresses through higher-level languages like FORTRAN, COBOL, LISP, ALGOL, BASIC, Pascal, FORTH, C and others. It highlights reasons for the creation of new languages like making programming easier, preventing errors, and introducing new concepts and paradigms. Interspersed are notes about the evolving hardware landscape from punch cards to early computers.
Javascript Art for Kids - Library ProgramRino Landa
An introduction to coding by using javascript to make art. The class is designed with tweens and teens, but kids as young as six can also participate with guidance. The class takes you step-by-step in using JavaScript to "draw" a house.This class is based on a Khan Academy lesson.
R is a programming language and software environment for statistical analysis and graphics. It is widely used among statisticians and data scientists. R was created by Ross Ihaka and Robert Gentleman in the early 1990s and is currently developed by the R Core Team. Key features of R include its use as a programming language, effective data handling and storage, graphical display capabilities, and large collection of statistical and machine learning packages. R is open source, has a large user community, and is often used for statistical analysis, data mining, and creating statistical graphics.
Sugar is a meta-programming language that provides a syntactic wrapper for other programming languages. It aims to have an easy to learn syntax that focuses on software architecture, readability, and expressiveness. Sugar translates code written in its syntax to commonly used languages like JavaScript, Python, and ActionScript by taking advantage of their common features while abstracting differences. It provides a full program representation through its LambdaFactory API to allow meta-programming capabilities like modifying or analyzing programs.
Lesson 1-3 Fundamentals of Programming.pptxDysRobles
Here are the conversions:
11001 - Binary to Decimal = 49
165 - Decimal to Binary = 10100001
Decimal to Octal = 251
Decimal to Hexadecimal = A5
566 - Decimal to Binary = 111000010
Decimal to Octal = 1322
Decimal to Hexadecimal = 23A
1CC2 - Hexadecimal to Decimal = 7322
Hexadecimal to Binary = 00011100010010110
Hexadecimal to Octal = 4322
The document discusses issues in code generation by a compiler. It defines code generation as converting an intermediate representation into executable machine code. The code generator accesses symbol tables and performs multiple passes over intermediate forms. Key issues addressed include the input to the code generator, generating code for the target machine, memory management, instruction selection, register allocation, and optimization techniques like reordering independent instructions to improve efficiency.
Here are some promising approaches:
1. Actor model - Each object is an isolated actor that communicates via message passing. No shared state.
2. Functional reactive programming - Model state as signals/behaviors that propagate changes. Avoids locking.
3. Transactional memory - Group updates into atomic transactions. Conflict detection enables concurrency.
4. Region-based memory management - Partition heap into isolated regions. Regions communicate safely.
The key is to eliminate or minimize shared mutable state. With the right abstractions, even complex simulations can achieve safe parallelism. More research is needed but there is hope!
ACM DBPL Keynote: The Graph Traversal Machine and LanguageMarko Rodriguez
The document summarizes the components of the Gremlin traversal machine:
- The graph is stored in memory and represents the data as vertices, edges, and properties.
- Traversers represent computational threads that traverse the graph. They track their location, path history, and program counter in the traversal program.
- Traversals are programs that manipulate traversers to query and update the graph.
- Gremlin is agnostic to the underlying graph database and can traverse graphs in various systems like TinkerGraph, Titan, Neo4j, and distributed processors.
Oplægget blev holdt ved et seminar i InfinIT-interessegruppen Højniveau sprog til indlejrede systemer den 11. november 2009.
Læs mere om interessegruppen på http://www.infinit.dk/dk/interessegrupper/hoejniveau_sprog_til_indlejrede_systemer/
R is a free software environment for statistical computing and graphics that provides a wide variety of statistical techniques and graphical methods. It includes base functions and packages, and is used through interfaces like RStudio. R represents data using objects like vectors, matrices, and data frames. Common operations include calculations, generating random variables, and visualizing data. R can be used to analyze a glass fragment dataset to visualize compositions and potentially classify an unknown fragment.
From concept to cloud a look at modern software developmentSoftware Guru
La computadora HAL 9000 es uno de los personajes centrales de "2001 Odisea del Espacio". Considerando que esta historia fue escrita en 1968, podemos decir que la tecnología ha tenido un tremendo avance desde entonces. Y nuestra habilidad para crear software también ha mejorado un poco. Pero todavía estamos muy lejos de poder construir algo como HAL 9000. En esta conferencia echaremos un vistazo a las principales tendencias en desarrollo de software hacia los próximos años.
The Next Mainstream Programming Language: A Game Developer's Perspectivekfrdbs
Keynote at POPL 2006 by Tim Sweeney, Epic Games
Abstract:
Game developers have long been early adopters of new technologies. This is so because we are largely unburdened by legacy code: With each new hardware generation, we are free to rethink our software assumptions and develop new products using new tools and even new programming languages. As a result, games are fertile ground for applying academic advances in these areas.And never has our industry been in need of such advances as it is now! The scale and scope of game development has increased more than ten-fold over the past ten years, yet the underlying limitations of the mainstream C/C++/Java/C# language family remain largely unaddressed.The talk begins with a high-level presentation of the game developer's world: the kinds of algorithms we employ on modern CPUs and GPUs, the difficulties of componentization and concurrency, and the challenges of writing very complex software with real-time performance requirements.The talk then outlines the ways that future programming languages could help us write better code, providing examples derived from experience writing games and software frameworks that support games. The major areas covered are abstraction facilities -- how we can use them to develop more extensible frameworks and components; practical opportunities for employing stronger typing to reduce run-time failures; and the need for pervasive concurrency support, both implicit and explicit, to effectively exploit the several forms of parallelism present in games and graphics.
The document discusses the structure and process of a compiler. It has two major phases - the front-end and back-end. The front-end performs analysis of the source code by recognizing legal/illegal programs, understanding semantics, and producing an intermediate representation. The back-end translates the intermediate representation into target code. The general structure includes lexical analysis, syntax analysis, semantic analysis, code generation and optimization phases.
This is a very old presentation but if you gloss over the usage of VB6 there is plenty of value. I presented this to the VBUG Annual Conference in 2003.
The document describes the structure and process of a compiler. It discusses the major phases of a compiler including scanning, parsing, semantic analysis, code generation and optimization. It also summarizes the key data structures used in a compiler like the symbol table and syntax tree. The document uses the TINY programming language and its compiler for the TM machine as an example to illustrate the compiler construction process.
This document discusses intentional software and its goal of separating domain knowledge (A) from implementation (B) to reduce complexity. It provides context on the history of software development from the 1950s to present. Key figures discussed include John von Neumann, John Backus, Grace Hopper, John McCarthy, and Peter Naur who developed early domain-specific languages and programming concepts. The founder of Intentional Software, Charles Simonyi, is also introduced for his work developing early graphical editors and research on intentional programming.
The document contains 40 multiple choice questions related to computer science class 12. It covers topics like variables, data types, operators, loops, functions, arrays and more. The questions test concepts like escape sequences, format specifiers, assignment operators, comments, input/output functions, and the difference between various loops in C programming language. It is a practice test to help students prepare for their computer science exam.
Similar to Formal Verification of Programming Languages (20)
Ivanti’s Patch Tuesday breakdown goes beyond patching your applications and brings you the intelligence and guidance needed to prioritize where to focus your attention first. Catch early analysis on our Ivanti blog, then join industry expert Chris Goettl for the Patch Tuesday Webinar Event. There we’ll do a deep dive into each of the bulletins and give guidance on the risks associated with the newly-identified vulnerabilities.
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-und-domino-lizenzkostenreduzierung-in-der-welt-von-dlau/
DLAU und die Lizenzen nach dem CCB- und CCX-Modell sind für viele in der HCL-Community seit letztem Jahr ein heißes Thema. Als Notes- oder Domino-Kunde haben Sie vielleicht mit unerwartet hohen Benutzerzahlen und Lizenzgebühren zu kämpfen. Sie fragen sich vielleicht, wie diese neue Art der Lizenzierung funktioniert und welchen Nutzen sie Ihnen bringt. Vor allem wollen Sie sicherlich Ihr Budget einhalten und Kosten sparen, wo immer möglich. Das verstehen wir und wir möchten Ihnen dabei helfen!
Wir erklären Ihnen, wie Sie häufige Konfigurationsprobleme lösen können, die dazu führen können, dass mehr Benutzer gezählt werden als nötig, und wie Sie überflüssige oder ungenutzte Konten identifizieren und entfernen können, um Geld zu sparen. Es gibt auch einige Ansätze, die zu unnötigen Ausgaben führen können, z. B. wenn ein Personendokument anstelle eines Mail-Ins für geteilte Mailboxen verwendet wird. Wir zeigen Ihnen solche Fälle und deren Lösungen. Und natürlich erklären wir Ihnen das neue Lizenzmodell.
Nehmen Sie an diesem Webinar teil, bei dem HCL-Ambassador Marc Thomas und Gastredner Franz Walder Ihnen diese neue Welt näherbringen. Es vermittelt Ihnen die Tools und das Know-how, um den Überblick zu bewahren. Sie werden in der Lage sein, Ihre Kosten durch eine optimierte Domino-Konfiguration zu reduzieren und auch in Zukunft gering zu halten.
Diese Themen werden behandelt
- Reduzierung der Lizenzkosten durch Auffinden und Beheben von Fehlkonfigurationen und überflüssigen Konten
- Wie funktionieren CCB- und CCX-Lizenzen wirklich?
- Verstehen des DLAU-Tools und wie man es am besten nutzt
- Tipps für häufige Problembereiche, wie z. B. Team-Postfächer, Funktions-/Testbenutzer usw.
- Praxisbeispiele und Best Practices zum sofortigen Umsetzen
Salesforce Integration for Bonterra Impact Management (fka Social Solutions A...Jeffrey Haguewood
Sidekick Solutions uses Bonterra Impact Management (fka Social Solutions Apricot) and automation solutions to integrate data for business workflows.
We believe integration and automation are essential to user experience and the promise of efficient work through technology. Automation is the critical ingredient to realizing that full vision. We develop integration products and services for Bonterra Case Management software to support the deployment of automations for a variety of use cases.
This video focuses on integration of Salesforce with Bonterra Impact Management.
Interested in deploying an integration with Salesforce for Bonterra Impact Management? Contact us at sales@sidekicksolutionsllc.com to discuss next steps.
Driving Business Innovation: Latest Generative AI Advancements & Success StorySafe Software
Are you ready to revolutionize how you handle data? Join us for a webinar where we’ll bring you up to speed with the latest advancements in Generative AI technology and discover how leveraging FME with tools from giants like Google Gemini, Amazon, and Microsoft OpenAI can supercharge your workflow efficiency.
During the hour, we’ll take you through:
Guest Speaker Segment with Hannah Barrington: Dive into the world of dynamic real estate marketing with Hannah, the Marketing Manager at Workspace Group. Hear firsthand how their team generates engaging descriptions for thousands of office units by integrating diverse data sources—from PDF floorplans to web pages—using FME transformers, like OpenAIVisionConnector and AnthropicVisionConnector. This use case will show you how GenAI can streamline content creation for marketing across the board.
Ollama Use Case: Learn how Scenario Specialist Dmitri Bagh has utilized Ollama within FME to input data, create custom models, and enhance security protocols. This segment will include demos to illustrate the full capabilities of FME in AI-driven processes.
Custom AI Models: Discover how to leverage FME to build personalized AI models using your data. Whether it’s populating a model with local data for added security or integrating public AI tools, find out how FME facilitates a versatile and secure approach to AI.
We’ll wrap up with a live Q&A session where you can engage with our experts on your specific use cases, and learn more about optimizing your data workflows with AI.
This webinar is ideal for professionals seeking to harness the power of AI within their data management systems while ensuring high levels of customization and security. Whether you're a novice or an expert, gain actionable insights and strategies to elevate your data processes. Join us to see how FME and AI can revolutionize how you work with data!
Monitoring and Managing Anomaly Detection on OpenShift.pdfTosin Akinosho
Monitoring and Managing Anomaly Detection on OpenShift
Overview
Dive into the world of anomaly detection on edge devices with our comprehensive hands-on tutorial. This SlideShare presentation will guide you through the entire process, from data collection and model training to edge deployment and real-time monitoring. Perfect for those looking to implement robust anomaly detection systems on resource-constrained IoT/edge devices.
Key Topics Covered
1. Introduction to Anomaly Detection
- Understand the fundamentals of anomaly detection and its importance in identifying unusual behavior or failures in systems.
2. Understanding Edge (IoT)
- Learn about edge computing and IoT, and how they enable real-time data processing and decision-making at the source.
3. What is ArgoCD?
- Discover ArgoCD, a declarative, GitOps continuous delivery tool for Kubernetes, and its role in deploying applications on edge devices.
4. Deployment Using ArgoCD for Edge Devices
- Step-by-step guide on deploying anomaly detection models on edge devices using ArgoCD.
5. Introduction to Apache Kafka and S3
- Explore Apache Kafka for real-time data streaming and Amazon S3 for scalable storage solutions.
6. Viewing Kafka Messages in the Data Lake
- Learn how to view and analyze Kafka messages stored in a data lake for better insights.
7. What is Prometheus?
- Get to know Prometheus, an open-source monitoring and alerting toolkit, and its application in monitoring edge devices.
8. Monitoring Application Metrics with Prometheus
- Detailed instructions on setting up Prometheus to monitor the performance and health of your anomaly detection system.
9. What is Camel K?
- Introduction to Camel K, a lightweight integration framework built on Apache Camel, designed for Kubernetes.
10. Configuring Camel K Integrations for Data Pipelines
- Learn how to configure Camel K for seamless data pipeline integrations in your anomaly detection workflow.
11. What is a Jupyter Notebook?
- Overview of Jupyter Notebooks, an open-source web application for creating and sharing documents with live code, equations, visualizations, and narrative text.
12. Jupyter Notebooks with Code Examples
- Hands-on examples and code snippets in Jupyter Notebooks to help you implement and test anomaly detection models.
HCL Notes and Domino License Cost Reduction in the World of DLAUpanagenda
Webinar Recording: https://www.panagenda.com/webinars/hcl-notes-and-domino-license-cost-reduction-in-the-world-of-dlau/
The introduction of DLAU and the CCB & CCX licensing model caused quite a stir in the HCL community. As a Notes and Domino customer, you may have faced challenges with unexpected user counts and license costs. You probably have questions on how this new licensing approach works and how to benefit from it. Most importantly, you likely have budget constraints and want to save money where possible. Don’t worry, we can help with all of this!
We’ll show you how to fix common misconfigurations that cause higher-than-expected user counts, and how to identify accounts which you can deactivate to save money. There are also frequent patterns that can cause unnecessary cost, like using a person document instead of a mail-in for shared mailboxes. We’ll provide examples and solutions for those as well. And naturally we’ll explain the new licensing model.
Join HCL Ambassador Marc Thomas in this webinar with a special guest appearance from Franz Walder. It will give you the tools and know-how to stay on top of what is going on with Domino licensing. You will be able lower your cost through an optimized configuration and keep it low going forward.
These topics will be covered
- Reducing license cost by finding and fixing misconfigurations and superfluous accounts
- How do CCB and CCX licenses really work?
- Understanding the DLAU tool and how to best utilize it
- Tips for common problem areas, like team mailboxes, functional/test users, etc
- Practical examples and best practices to implement right away
A Comprehensive Guide to DeFi Development Services in 2024Intelisync
DeFi represents a paradigm shift in the financial industry. Instead of relying on traditional, centralized institutions like banks, DeFi leverages blockchain technology to create a decentralized network of financial services. This means that financial transactions can occur directly between parties, without intermediaries, using smart contracts on platforms like Ethereum.
In 2024, we are witnessing an explosion of new DeFi projects and protocols, each pushing the boundaries of what’s possible in finance.
In summary, DeFi in 2024 is not just a trend; it’s a revolution that democratizes finance, enhances security and transparency, and fosters continuous innovation. As we proceed through this presentation, we'll explore the various components and services of DeFi in detail, shedding light on how they are transforming the financial landscape.
At Intelisync, we specialize in providing comprehensive DeFi development services tailored to meet the unique needs of our clients. From smart contract development to dApp creation and security audits, we ensure that your DeFi project is built with innovation, security, and scalability in mind. Trust Intelisync to guide you through the intricate landscape of decentralized finance and unlock the full potential of blockchain technology.
Ready to take your DeFi project to the next level? Partner with Intelisync for expert DeFi development services today!
Ocean lotus Threat actors project by John Sitima 2024 (1).pptxSitimaJohn
Ocean Lotus cyber threat actors represent a sophisticated, persistent, and politically motivated group that poses a significant risk to organizations and individuals in the Southeast Asian region. Their continuous evolution and adaptability underscore the need for robust cybersecurity measures and international cooperation to identify and mitigate the threats posed by such advanced persistent threat groups.
Skybuffer SAM4U tool for SAP license adoptionTatiana Kojar
Manage and optimize your license adoption and consumption with SAM4U, an SAP free customer software asset management tool.
SAM4U, an SAP complimentary software asset management tool for customers, delivers a detailed and well-structured overview of license inventory and usage with a user-friendly interface. We offer a hosted, cost-effective, and performance-optimized SAM4U setup in the Skybuffer Cloud environment. You retain ownership of the system and data, while we manage the ABAP 7.58 infrastructure, ensuring fixed Total Cost of Ownership (TCO) and exceptional services through the SAP Fiori interface.
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfMalak Abu Hammad
Discover how MongoDB Atlas and vector search technology can revolutionize your application's search capabilities. This comprehensive presentation covers:
* What is Vector Search?
* Importance and benefits of vector search
* Practical use cases across various industries
* Step-by-step implementation guide
* Live demos with code snippets
* Enhancing LLM capabilities with vector search
* Best practices and optimization strategies
Perfect for developers, AI enthusiasts, and tech leaders. Learn how to leverage MongoDB Atlas to deliver highly relevant, context-aware search results, transforming your data retrieval process. Stay ahead in tech innovation and maximize the potential of your applications.
#MongoDB #VectorSearch #AI #SemanticSearch #TechInnovation #DataScience #LLM #MachineLearning #SearchTechnology
leewayhertz.com-AI in predictive maintenance Use cases technologies benefits ...alexjohnson7307
Predictive maintenance is a proactive approach that anticipates equipment failures before they happen. At the forefront of this innovative strategy is Artificial Intelligence (AI), which brings unprecedented precision and efficiency. AI in predictive maintenance is transforming industries by reducing downtime, minimizing costs, and enhancing productivity.
Let's Integrate MuleSoft RPA, COMPOSER, APM with AWS IDP along with Slackshyamraj55
Discover the seamless integration of RPA (Robotic Process Automation), COMPOSER, and APM with AWS IDP enhanced with Slack notifications. Explore how these technologies converge to streamline workflows, optimize performance, and ensure secure access, all while leveraging the power of AWS IDP and real-time communication via Slack notifications.
This presentation provides valuable insights into effective cost-saving techniques on AWS. Learn how to optimize your AWS resources by rightsizing, increasing elasticity, picking the right storage class, and choosing the best pricing model. Additionally, discover essential governance mechanisms to ensure continuous cost efficiency. Whether you are new to AWS or an experienced user, this presentation provides clear and practical tips to help you reduce your cloud costs and get the most out of your budget.
Have you ever been confused by the myriad of choices offered by AWS for hosting a website or an API?
Lambda, Elastic Beanstalk, Lightsail, Amplify, S3 (and more!) can each host websites + APIs. But which one should we choose?
Which one is cheapest? Which one is fastest? Which one will scale to meet our needs?
Join me in this session as we dive into each AWS hosting service to determine which one is best for your scenario and explain why!
Your One-Stop Shop for Python Success: Top 10 US Python Development Providersakankshawande
Simplify your search for a reliable Python development partner! This list presents the top 10 trusted US providers offering comprehensive Python development services, ensuring your project's success from conception to completion.
Fueling AI with Great Data with Airbyte WebinarZilliz
This talk will focus on how to collect data from a variety of sources, leveraging this data for RAG and other GenAI use cases, and finally charting your course to productionalization.
Introduction of Cybersecurity with OSS at Code Europe 2024Hiroshi SHIBATA
I develop the Ruby programming language, RubyGems, and Bundler, which are package managers for Ruby. Today, I will introduce how to enhance the security of your application using open-source software (OSS) examples from Ruby and RubyGems.
The first topic is CVE (Common Vulnerabilities and Exposures). I have published CVEs many times. But what exactly is a CVE? I'll provide a basic understanding of CVEs and explain how to detect and handle vulnerabilities in OSS.
Next, let's discuss package managers. Package managers play a critical role in the OSS ecosystem. I'll explain how to manage library dependencies in your application.
I'll share insights into how the Ruby and RubyGems core team works to keep our ecosystem safe. By the end of this talk, you'll have a better understanding of how to safeguard your code.
Introduction of Cybersecurity with OSS at Code Europe 2024
Formal Verification of Programming Languages
1. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Formal Verification of Programming Language
Implementations
Ph.D. Literature Seminar
Jason S. Reich
<jason@cs.york.ac.uk>
University of York
December 8, 2009
2. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Compiling an arithmetic language
Compile from a simple arithmetic language to machine code for a
simple register machine.
Example taken from [McCart67]
3. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Compiling an arithmetic language
Compile from a simple arithmetic language to machine code for a
simple register machine.
Source language
Numeric constants
Variables
Addition
e.g. (x + 3) + (x + (y + 2))
Example taken from [McCart67]
4. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Compiling an arithmetic language
Compile from a simple arithmetic language to machine code for a
simple register machine.
Target language
Source language
Load Immediate into ac
Numeric constants LOAD into ac from
Variables address/register
Addition STOre ac value to
address/register
e.g. (x + 3) + (x + (y + 2))
ADD register value to ac
Example taken from [McCart67]
5. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Compiling an arithmetic language
Arithmetic expression compiler in Haskell
compile : : Source −> I n t −> Target
compile ( Const v ) t = [ L i v ]
compile ( Var x ) t = [ Load x ]
compile (Sum e1 e2 ) t =
c o m p i l e e1 t
++ [ Sto ( "t + " ++ show t ) ]
++ c o m p i l e e2 ( t + 1 )
++ [ Add ( "t + " ++ show t ) ]
6. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Compiling an arithmetic language
When compiled and executed, is the value in the accumulator the
result of the source arithmetic expression?
(x + 3) + (x + (y + 2)) compiled to machine code?
1 LOAD x 8 LOAD y
2 STO t 9 STO t + 2
3 LI 3 10 LI 2
4 ADD t 11 ADD t + 2
5 STO t 12 ADD t + 1
6 LOAD x 13 ADD t
7 STO t + 1
n.b. Where x and y are known memory locations and t + k are registers.
7. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Why use high-level languages?
Rapid development
Easier to understand, maintain and modify
Less likely to make mistakes
Easier to reason about and infer properties
Architecture portability
But...
8. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Can you trust your compiler?
Use a compiler to translate from a high-level language to a
low-level
Compilers are programs (generally) written by people
People make mistakes
Can silently turn “a correct program into an incorrect
executable” [Leroy09]
GHC 6.10.x is ≈ 800, 000 lines of code and has had 737 bugs
reported in the bug tracker as of 04/12/2009 [GHC]
Can we formally verify a compiler?
9. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Can you trust your compiler?
Use a compiler to translate from a high-level language to a
low-level
Compilers are programs (generally) written by people
People make mistakes
Can silently turn “a correct program into an incorrect
executable” [Leroy09]
GHC 6.10.x is ≈ 800, 000 lines of code and has had 737 bugs
reported in the bug tracker as of 04/12/2009 [GHC]
Can we formally verify a compiler?
10. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Can you trust your compiler?
Use a compiler to translate from a high-level language to a
low-level
Compilers are programs (generally) written by people
People make mistakes
Can silently turn “a correct program into an incorrect
executable” [Leroy09]
GHC 6.10.x is ≈ 800, 000 lines of code and has had 737 bugs
reported in the bug tracker as of 04/12/2009 [GHC]
Can we formally verify a compiler?
11. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
McCarthy and Painter, 1967
“Correctness of a compiler for arithmetic expressions”
[McCart67]
Describe, in first-order predicate logic;
Source language semantics
Target language semantics
A compilation process
Reason that the compiler maintains semantic equivalence
12. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
McCarthy and Painter, 1967
Semantic equivalence in [McCart67]
∀e ∈ Expressions, ∀µ : Variable Mappings •
interpret(e, µ) ≡ acValue(emulate(compile(e), mkState(µ)))
Very limited, small toy source and target language
Proof performed by hand
Logical framework and proof presented in under ten pages
Shows that proving a compiler correct is possible
13. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Milner and Weyhrauch, 1972
“Proving compiler correctness in a mechanised logic”
[Milner72]
Provide an LCF machine-checked proof of the
McCarthy-Painter example
Proceed towards mechanically proving a compiler for a more
complex language to a stack machine
Claim to have “no significant doubt that the remainder of the
proof can be done on machine” [Milner72]
14. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Morris, 1973
“Advice on structuring compilers and proving them correct”
[Morris73]
Proves by hand the correctness of a compiler for a source
language that contains assignment, conditionals, loops,
arithmetic, booleans operations and local definitions
“Essence” of the advice presented in [Morris73]
compile
Source language −−→
−− Target language
Target semantics
Source semantics
Source meanings ←−−
−− Target meanings
decode
15. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Thatcher, Wagner and Wright, 1980
Advice presented in [Thatch80]
compile
Source language −−→
−− Target language
Target semantics
Source semantics
Source meanings −−→
−− Target meanings
encode
“More on advice on structuring compilers and proving them
correct” [Thatch80]
Provides a correct compiler for a more advanced target
language than [Morris73]
Claim that mechanised theorem proving tools required further
development
16. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
The “structuring compilers” series
Discuss constructing algebras to describe languages
How to move from one algebra to another
Encode abstract state to concrete or decode to abstract?
“there is not enough information in the [abstract] state to
recover the [concrete] state completely” [Moore89]
Further paper “Even more on advice on structuring compilers
and proving them correct: changing an arrow” [Orejas81]
[Moore89] discusses this issue from a practical perspective
17. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
The “structuring compilers” series
Discuss constructing algebras to describe languages
How to move from one algebra to another
Encode abstract state to concrete or decode to abstract?
“there is not enough information in the [abstract] state to
recover the [concrete] state completely” [Moore89]
Further paper “Even more on advice on structuring compilers
and proving them correct: changing an arrow” [Orejas81]
[Moore89] discusses this issue from a practical perspective
18. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
The “structuring compilers” series
Discuss constructing algebras to describe languages
How to move from one algebra to another
Encode abstract state to concrete or decode to abstract?
“there is not enough information in the [abstract] state to
recover the [concrete] state completely” [Moore89]
Further paper “Even more on advice on structuring compilers
and proving them correct: changing an arrow” [Orejas81]
[Moore89] discusses this issue from a practical perspective
19. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Meijer, 1994
“More advice on proving a compiler correct: Improve a correct
compiler” [Meijer94]
Given a interpreter for a source language, can we transform it
into a compiler to and residual interpreter for the target
language?
A functional decomposition problem (i.e.
interpreter = emulator ◦ compiler )
Demonstrate this technique for a first-order imperative
language compiling to a three-address code machine
While quite feasible for first-order languages, becomes far
more difficult for higher-order languages
20. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Berghofer and Stecker, 2003
“Extracting a formally verified, fully executable compiler from
a proof assistant” [Bergho03]
Proves a compiler for a subset of the Java source language to
Java bytecode
Includes typechecking, abstract syntax tree annotation and
bytecode translation
Isabelle/HOL used to prove properties about an abstract
compiler
Isabelle code extraction to produce an executable compiler
21. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Dave, 2003
Papers listed against decade published
Maulik A. Dave’s
bibliography for “Compiler
Verification” [Dave03]
Ninety-nine papers listed
Ninety-one of those listed
were published after 1990
Interestingly neither the
Milner and Weyhrauch paper
nor the Meijer are included
22. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Dave, 2003
Papers listed against decade published
Maulik A. Dave’s
bibliography for “Compiler
Verification” [Dave03]
Ninety-nine papers listed
Ninety-one of those listed
were published after 1990
Interestingly neither the
Milner and Weyhrauch paper
nor the Meijer are included
23. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Dave, 2003
Papers listed against decade published
Maulik A. Dave’s
bibliography for “Compiler
Verification” [Dave03]
Ninety-nine papers listed
Ninety-one of those listed
were published after 1990
Interestingly neither the
Milner and Weyhrauch paper
nor the Meijer are included
24. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Recent work
Leroy’s “A formally verified compiler back-end” [Leroy09]
Proves a compiler for Cminor to PowerPC assembler
Chlipala’s “A verified compiler for an impure functional
language” [Chlipa10]
For a toy (but still quite feature rich) functional source
language to instructions register-based machine
Both use the Coq proof assistant and code extraction
Both decompose the problem into compilation to several
intermediate languages
Both express worries that the proof assistant itself contain
bugs that would invalidate correctness
25. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Conclusions
Compilers have been proved correct for progressively larger
source languages
Rapidly became apparent that some kind of proof assistant is
required
Decomposition of large compilers is a key factor for success
Programs are only verified when all surrounding elements are
verified
26. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
Open questions
What about compilers for larger target languages and more
advanced compilation facilities?
Are our mechanised assistants producing valid proofs?
Are there other ways to decompose the problem?
Are particular language paradigms more amenable to compiler
verification?
Why haven’t the concepts of [Meijer94] been more widely
used?
What other ways are there of decomposing the compiler
verification problem?
27. Motivation 1960s 1970s 1980s 1990s 2000s Conclusions
More information
Slides and bibliography will be made available at;
http://www-users.cs.york.ac.uk/~jason/
Jason S. Reich
<jason@cs.york.ac.uk>