Automatically generated type-safe GTK+ binding for Dylan

Size: px
Start display at page:

Download "Automatically generated type-safe GTK+ binding for Dylan"

Transcription

1 Automatically generated type-safe GTK+ binding for Dylan Hannes Mehnert Dylan Hackers ABSTRACT We present an automated way to get language bindings for GTK+ for Dylan [2], an object-oriented functional programming language related to Lisp. Dylan supports multiple inheritance, polymorphism, multiple dispatch, keyword arguments, pattern-based syntax extension macros, and many other features. The generated binding is type-safe, no upand downcasts are needed. 1. INTRODUCTION Dylan was mainly influenced by Scheme and Lisp and adds an object system derived from CLOS. Dylan has an ALGOLlike syntax rather than a prefix syntax. It has a clear separation between compile and runtime, the compiler is not part of the runtime. By specification it does not need to have a read-eval-print-loop. The Open Dylan IDE includes a REPL for interactive development. On current Desktop computers, Linux and other UNIX operating systems (like FreeBSD, OpenBSD, NetBSD) are getting more popular. This leads to the requirement to develop graphical user interfaces to this platform. These UNIX operating systems use the X.Org X Window System. Two major Desktop environments are KDE and Gnome. While KDE is written entirely in C++, which is hard to interface, Gnome is written in C, which can easily be interfaced with C-FFI (C foreign function interface 1 ). Developing a custom widget library is error-prone, a lot of work and will not easily have the same look and feel like a native application. Thus automatically generating a binding for an existing widget library like GTK+ is a decent solution. This paper will show how we succeeded to automatically generate a type-safe GTK+ binding for Open Dylan (former Functional Developer, DylanWorks, Harlequin Dylan). The purpose was to develop a DUIM (Dylan User 1 interop1/intero 4.htm Interface Manager 2 ) backend for UNIX operating systems. DUIM is a GUI abstraction written by Scott McKay, who previously developed CLIM (Common Lisp Interface Manager). Section 2 will introduce the GTK+ object system and what was needed to generate a binding for it. Section 3 will look at related work. Section 4 gives an overview what we achieved. 2. SOLUTION 2.1 Overview of GTK GTK+ is a highly usable, feature rich toolkit for creating graphical user interfaces which boasts cross platform compatibility and an easy to use API. 3 GTK+ consists of multiple modules; GLib, a low-level core library which forms the basis of GTK+. It provides data structure handling for C, portability wrappers and interfaces for such run-time functionality as an event loop, threads, dynamic loading and an object system 4. Pango, which lays out and renders text, and Cairo, a library for 2D graphics, among others. GLib contains an object system with single inheritance and interfaces. It also specify properties to store data in an object. There are universal getters and setters for properties. It is event driven and has the concept of signals. Whenever something changes, all connected clients get a signal. A client is a previously registered callback (a closure, each signal specifies the number of arguments the closure gets) GTK+ Type system and introspection The type system used is implemented in GLib. Each GTypeInstance (abstract), the top object of the type hierarchy (the non-abstract top is GObject), instance has a runtime type, a field in its struct. The type system provides only single inheritance, thus the type hierarchy is a tree. There are also interfaces, an abstract types used to specify an interface 5. For example a GtkTreeStorage implements the GtkTreeModel interface. Most GObject subtypes are opaque, access to member variables is wrapped into a method, which possibly does side effects, like sending 2 dguide/index.htm generic sense of term

2 a signal, etc. Direct member access should not be used by developers. The single inheritance type hierarchy can be introspected with the GObject method GType g type parent(gtype type), providing supertypes of a given type. Also, implemented interfaces can be extracted for a given type by the GObject method GType* g type interfaces(gtype type, guint* n interfaces). Since Dylan provides a type system with multiple inheritance, we modeled interfaces as mixin classes, resulting in a graph class hierarchy (in contrast to the tree of GTK+). gobject2-tool, a small tool written in C using GLib extracts from all GTK+ types their superclasses and interfaces. This generates an input file for generating C-FFI definitions. Whenever a runtime GTK+ object enters the Dylan world, the GTK+ introspection features are used to lookup which actual type this pointer has. Then the respective Dylan class is instantiated. Thus, when gtk button new returns a pointer of GtkWidget in the GTK+ documentation, the real introspected type is a GtkButton, so a Dylan object of type <GtkButton> is instantiated. This is done in the following Dylan method define method make (type :: subclass(<gtypeinstance>), #rest args, #key address, #all-keys) => (result :: <GTypeInstance>) if(address) let instance = next-method(<gtypeinstance>, address: address); if (~ null-pointer?(instance)) let g-type = g-type-from-instance(instance); let dylan-type = find-gtype(g-type); unless (dylan-type) error("unknown GType %= encountered.", as(<byte-string>, g-type-name(g-type))); let result = next-method(dylan-type, address: address); g-object-ref-sink(result); finalize-when-unreachable(result); result; else next-method(); end else error("can t instantiate GTypeInstance %=", type.debug-name); end if; end method make; First an object of type <GTypeInstance>, named instance, is created. The only purpose of this object is to lookup the real type of the given pointer with g-type-from-instance, a call of the C-macro G TYPE FROM INSTANCE provided by GTK+. find-gtype translates the given GTK+ g-type to a Dylan type, searching through all subclasses of <GTypeInstance>, comparing its name with the g-type name. Once found, the mapping from g-type to the respective Dylan type is cached in a hashtable. To not leak memory, g-object-ref-sink is called and once the object is unreachable, it is cleaned up by the finalizer by calling g-object-unref. Since the GTK+ type hierarchy is integrated into the Dylan type system, there is no need for upcasts. The compiler knows that a GtkButton is a superclass of a GtkWindow, and when gtk widget show is called on a GtkButton, that this is a proper argument for the method GTK public interface Melange, a C interface generator, initially developed for Gwydion Dylan, was extended with a C-FFI backend for Open Dylan. Melange is able to parse C code and generating Dylan interface definitions for the given code. The previously generated type hierarchy is used as input for melange, as well as gtk/gtk.h. Melange parses gtk/gtk.h and all included header files. For each constant, method and struct a foreign function definition is generated. When a type definition is encountered, the generated type hierarchy is used to output a proper Dylan type definition (using define C-subtype) with supertypes and implemented interfaces. The GTK+ binding consists of more than 6500 function, 550 C-struct, 200 subtype and 4300 constant definitions. This is all done automatically, no manual intervention is needed. GTK+ has been interfaced by several programming languages. Since interfacing of methods with variable number of arguments in C is not easy, GTK+ contains for all methods with variable number of arguments always methods with a static number of arguments. So we don t have to interface the methods with varargs, which currently can t be expressed in Dylans C-FFI Properties GLib introduces properties for nearly all data slots of their objects. Those properties are set via the function, void g object set property(gobject* object, const gchar* property name, const GValue* value). The function g object get property (same signature as set) is provided by the GTK+ API to get a property. To access the properties in Dylan, we extended our previously developed gobject2-tool. It now also generates lists of properties of all types in a simple syntax, for example define property-getter logo :: <GdkPixbuf> on <GtkAboutDialog>, which is a call to the following Dylan macro: define macro property-getter-definer define property-getter?:name ::?type:name on?class:name end => define method "@" ##?name (object ::?class)

3 => (res) with-stack-structure (foo :: <GValue>) g-object-get-property(object,?"name", foo); g-value-to-dylan(foo); This is the macro definition. The left-hand side (surrounded by curly braces) matches the caller, and binds?name to logo, type to <GdkPixbuf> and?class to <GtkAboutDialog>. The right-hand side (after =>, also surrounded with curly braces) is the macro expansion. A method is defined (## is the splicing operation), which first calls g-object-get-property (? variable is conversion to a string of the given variable). Afterwards g-value-to-dylan is called, which translates the boxed GValue to a Dylan object (removing the boxing) with the value of the GValue and the type of the GValue. For setting properties, a similar macro property-setter-definer is used. We as a magic symbol to differentiate from normal functions and GTK+ properties. Thus, gtkaboutdialog.@logo gets the logo property of the gtkaboutdialog, gtkaboutdialog.@logo := mylogo sets the logo property to mylogo Callbacks for signals GLib is event driven and has the concept of signals. Each time something changes, a signal is produced and sent to all connected callbacks of the specific signal at the instance. A callback is a closure which gets a specific set of arguments, different from signal to signal. To interoperate with this structure, we needed a way to register Dylan methods as callback for GTK+ signals. The major problem is marshalling and unmarshalling of Dylan objects to C. Section showed the conversion of C pointers to Dylan objects. To work with callbacks, the other way, converting Dylan objects to C, is also needed. Each time a signal is connected, a GClosure object is instantiated, and its meta marshaller is set to dylan-meta-marshaller, a custom marshaller which loops over the parameter list and instantiates proper Dylan objects from the C pointers. define function dylan-meta-marshaller (closure :: <GClosure>, return-value :: <GValue>, n-param-values :: <integer>, param-values :: <GValue>, invocation-hint :: <gpointer>, marshal-data :: <gpointer>) let values = #(); for(i from 0 below n-param-values) let value = make-c-pointer (<GValue>, primitive-machine-word-add (primitive-cast-pointer-as-raw (primitive-unwrap-c-pointer(param-values)), integer-as-raw (i * sizeof-gvalue())), #[]); values := pair(g-value-to-dylan(value), values); end for; values := reverse!(values); *holding-gdk-lock* := *holding-gdk-lock* + 1; let res = apply(import-c-dylan-object (c-type-cast(<c-dylan-object>, marshal-data)), values); *holding-gdk-lock* := *holding-gdk-lock* - 1; if(return-value ~= null-pointer(<gvalue>)) select(g-value-type(return-value)) $G-TYPE-BOOLEAN => g-value-set-boolean (return-value, if(res) 1 else 0 end); $G-TYPE-NONE, $G-TYPE-INVALID => ; otherwise => error("unsupported GType: %=.", g-value-type(return-value)); end select; end if; This is the most unsafe code of our binding. Since we can t iterate over a collection of C GValues, we do it manually with pointer arithmetic, instantiating C-pointer of type GValue. Each parameter passed is translated by g-value-to-dylan to a Dylan object (first code block). And afterwards the given Dylan closure marshal-data is called with the Dylan arguments (second code block). Afterwards the result value is marshalled back into a C object (last code block). To call the dylan-meta-marshaller from C, a C entry point for this method has to be defined. This is done by using C- callable-wrapper, which is part of Dylans C-FFI. define C-callable-wrapper _dylan-meta-marshaller of dylan-meta-marshaller parameter closure :: <GClosure>; parameter return-value :: <GValue>; parameter n-param-values :: <guint>; parameter param-values :: <GValue>; parameter invocation-hint :: <gpointer>; parameter marshal-data :: <gpointer>; c-name: "foo"; To connect a signal to a <GObject> using a callback, g-signal-connect is used. This uses

4 dylan-meta-marshaller to marshal the arguments of the callback. The callback is passed as user-data C-pointer (export-c-dylan-object) to the meta-marshaller, which translates it back to a Dylan method and applies the given arguments to the method (see above). define function g-signal-connect (instance :: <GObject>, signal :: <string>, function :: <function>, #key run-after? :: <boolean>) register-c-dylan-object(function); let closure = g-closure-new-simple (sizeof-gclosure(), null-pointer(<gpointer>)); g-closure-set-meta-marshal (closure, export-c-dylan-object(function), _dylan-meta-marshaller); g-signal-connect-closure (instance, signal, closure, if(run-after?) 1 else 0 end) end function g-signal-connect; Multithreading GTK+ should only be called from one thread, all GTK+ API calls should be surrounded by a call to gdk-threads-enter and gdk-threads-leave. There must be no nested calls to gdk-threads-enter. We defined a macro, with-gdk-lock, which calls gdk-threads-enter at the beginning and gdk-threads-leave in the cleanup block, increments and decrements a variable *holding-gdk-lock* for the number of nested invocations of that macro. Thus, a developer does not need to care about gdk-threads-enter, but can simply use the around-macro. define macro with-gdk-lock with-gdk-lock?:body end => block() *holding-gdk-lock* > 0 gdk-threads-enter(); *holding-gdk-lock* := *holding-gdk-lock* + 1;?body cleanup *holding-gdk-lock* := *holding-gdk-lock* - 1; *holding-gdk-lock* > 0 gdk-threads-leave(); end When a callback of a signal is invoked, there is no need to call gdk-threads-enter, because GTK+ already takes care of it. This is the reason why we simply increment *holdinggdk-lock* in the dylan-meta-marshaller before we call the Dylan closure, and decrement it afterwards. 2.2 Toolchain To summarize, the following tools were developed for the GTK+ binding: Figure 1: Interaction of tools, box on the right: the GTK+ binding gobject2-tool: C/GLib, introspects GLib for properties, supertypes and interfaces of GTK+ types melange: Dylan, parses gtk/gtk.h and generates FFI definitions, respecting type hierarchy gtk-glue: Dylan, defines properties of GTK+ types, make and meta-marshaller trampoline, initialize-gtk 2.3 GTK+ hello-world A GTK+ hello-world application written in C is shown. G OBJECT, G CALLBACK, GTK CONTAINER are macros which cast the type. static void on_destroy (GtkWidget* widget, gpointer data) gtk_main_quit(); static void on_click (GtkButton* button, gpointer data) gtk_button_set_label(button, "Hi"); int main (int argc, char* argv[]) GtkWidget* window; GtkWidget* button; gtk_init(&argc, &argv); window = gtk_window_new(gtk_window_toplevel); g_signal_connect(g_object (window), "destroy", G_CALLBACK (on_destroy), NULL); button = gtk_button_new_with_label("hello, World"); g_signal_connect(g_object (button), "clicked", G_CALLBACK (on_click), NULL); gtk_container_add(gtk_container (window), button); gtk_widget_show(button); gtk_widget_show(window); gtk_main(); return 0;

5 This displays a widget with a button, which label is Hello, World, and once clicked changed to Hi. The same functionality implemented with our Dylan GTK+ binding is shown in the following fragment. define method gtk-hello-world () => () initialize-gtk(); let window = gtk-window-new($gtk-window-toplevel); let button = gtk-button-new-with-label("hello, world!"); gtk-container-add(window, button); g-signal-connect(button, "clicked", method(#rest args) button.@label := "Hi"; end); g-signal-connect(window, "destroy", method(#rest args) gtk-main-quit() end); gtk-widget-show(button); gtk-widget-show(window); gtk-main(); end method main; binding was successfully tested on Linux, Windows and FreeBSD. The full source code is available at The code was developed with Andreas Bogk. Also thanks to Sven Neumann for deep knowledge of GTK+. 5. REFERENCES [1] Mehnert, H., and Bogk, A. A domain-specific language for manipulation of binary data in dylan. [2] Shalit, A. The Dylan Reference Manual. Apple Press, This code is more concise for two reasons: anonymous methods and no need for type casts. 2.4 DUIM GTK+ backend DUIM has a working Windows backend, as well as unfinished/non-working Motif and GTK-1 backends. After we developed a type-safe GTK+ interface, we started working on a GTK+ backend for DUIM, starting from the GTK-1 backend (which used a GTK interface which didn t reflect the type hierarchy and thus needed pointer casts). This is currently not feature-complete, pixmaps, colors, etc. are missing. It currently consists of 8000 lines of code, but a big part are currently dead code. Simple DUIM applications run without problems, the Open Dylan IDE has not yet been ported to the GTK+ backend. Network night vision [1], a graphical network sniffer written in Dylan, is working with DUIM using the GTK+ backend. Screenshot at: 3. RELATED WORK GTK+ has bindings for multiple programming languages (Perl, Python, Ruby, Java, Lisp, etc.), some are automatically generated, some are hand-written and need a big amount of work when updating to a newer version. Several bindings also treat a GTK+ object as a raw pointer, not allowing the automated type checks we have implemented. 4. CONCLUSION We succeeded in automatically generating a type-safe GTK+ binding for Dylan. Thus, we won t pass invalid pointers to GTK+. It is also multi-threaded safe, as long as the developer uses with-gdk-lock. And the binding does not leak memory or interfere with our garbage collector. Upgrading to a new GTK+ version takes little time, only running the complete chain of tools once. The GTK+

C SCI The X Window System Stewart Weiss

C SCI The X Window System Stewart Weiss The X Window System The X Window System is a networking and display protocol which provides windowing on bitmapped displays. X provides the basic framework for building GUI environments, such as drawing

More information

COMP 2400 UNIX Tools

COMP 2400 UNIX Tools COMP 2400 UNIX Tools Christian Grothoff christian@grothoff.org http://grothoff.org/christian/ 1 GTK+ GTK+ = Gimp Tool Kit, Manipulation Program GIMP = GNU Image Basis for Gnome Written in C, bindings for

More information

Introduction to Programming Using Java (98-388)

Introduction to Programming Using Java (98-388) Introduction to Programming Using Java (98-388) Understand Java fundamentals Describe the use of main in a Java application Signature of main, why it is static; how to consume an instance of your own class;

More information

Weiss Chapter 1 terminology (parenthesized numbers are page numbers)

Weiss Chapter 1 terminology (parenthesized numbers are page numbers) Weiss Chapter 1 terminology (parenthesized numbers are page numbers) assignment operators In Java, used to alter the value of a variable. These operators include =, +=, -=, *=, and /=. (9) autoincrement

More information

Outline. Java Models for variables Types and type checking, type safety Interpretation vs. compilation. Reasoning about code. CSCI 2600 Spring

Outline. Java Models for variables Types and type checking, type safety Interpretation vs. compilation. Reasoning about code. CSCI 2600 Spring Java Outline Java Models for variables Types and type checking, type safety Interpretation vs. compilation Reasoning about code CSCI 2600 Spring 2017 2 Java Java is a successor to a number of languages,

More information

Cake: a tool for adaptation of object code

Cake: a tool for adaptation of object code Cake: a tool for adaptation of object code Stephen Kell Stephen.Kell@cl.cam.ac.uk Computer Laboratory University of Cambridge Cake... p.1/32 Some familiar problems Software is expensive to develop expensive

More information

Contents. Figures. Tables. Examples. Foreword. Preface. 1 Basics of Java Programming 1. xix. xxi. xxiii. xxvii. xxix

Contents. Figures. Tables. Examples. Foreword. Preface. 1 Basics of Java Programming 1. xix. xxi. xxiii. xxvii. xxix PGJC4_JSE8_OCA.book Page ix Monday, June 20, 2016 2:31 PM Contents Figures Tables Examples Foreword Preface xix xxi xxiii xxvii xxix 1 Basics of Java Programming 1 1.1 Introduction 2 1.2 Classes 2 Declaring

More information

Introduce C# as Object Oriented programming language. Explain, tokens,

Introduce C# as Object Oriented programming language. Explain, tokens, Module 2 98 Assignment 1 Introduce C# as Object Oriented programming language. Explain, tokens, lexicals and control flow constructs. 99 The C# Family Tree C Platform Independence C++ Object Orientation

More information

Creating GNOME Applications with Glade. Part I: Introduction

Creating GNOME Applications with Glade. Part I: Introduction Creating GNOME Applications with Glade Part I: Introduction Glade 3 Glade 3 is a tool to enable quick and easy development of Uis for the GTK+ toolkit and GNOME desktop environment. User interfaces designed

More information

1 Shyam sir JAVA Notes

1 Shyam sir JAVA Notes 1 Shyam sir JAVA Notes 1. What is the most important feature of Java? Java is a platform independent language. 2. What do you mean by platform independence? Platform independence means that we can write

More information

Structure of Programming Languages Lecture 10

Structure of Programming Languages Lecture 10 Structure of Programming Languages Lecture 10 CS 6636 4536 Spring 2017 CS 6636 4536 Lecture 10: Classes... 1/23 Spring 2017 1 / 23 Outline 1 1. Types Type Coercion and Conversion Type Classes, Generics,

More information

Java: introduction to object-oriented features

Java: introduction to object-oriented features Chair of Software Engineering Carlo A. Furia, Marco Piccioni, Bertrand Meyer Java: introduction to object-oriented features Chair of Software Engineering Carlo A. Furia, Marco Piccioni, Bertrand Meyer

More information

Background Information About GTK+ and Related Libraries

Background Information About GTK+ and Related Libraries Background Information About GTK+ and Related Libraries The X Window System The X Window System is a networking and display protocol which provides windowing on bitmapped displays. X provides the basic

More information

Lecture 3. GUI Programming part 1: GTK

Lecture 3. GUI Programming part 1: GTK INTRODUCTION TO DESIGN AUTOMATION Lecture 3. GUI Programming part 1: GTK Guoyong Shi, PhD shiguoyong@ic.sjtu.edu.cn School of Microelectronics Shanghai Jiao Tong University Fall 2010 2010-9-15 Slide 1

More information

Java Overview An introduction to the Java Programming Language

Java Overview An introduction to the Java Programming Language Java Overview An introduction to the Java Programming Language Produced by: Eamonn de Leastar (edeleastar@wit.ie) Dr. Siobhan Drohan (sdrohan@wit.ie) Department of Computing and Mathematics http://www.wit.ie/

More information

Index COPYRIGHTED MATERIAL

Index COPYRIGHTED MATERIAL Index COPYRIGHTED MATERIAL Note to the Reader: Throughout this index boldfaced page numbers indicate primary discussions of a topic. Italicized page numbers indicate illustrations. A abstract classes

More information

Phasing out UNIX before

Phasing out UNIX before Phasing out UNIX before 2038-01-19 UNIX and C are obsolete Andreas Bogk and Hannes Mehnert What The Hack, 29.7.2005 Overview problems with C requirements for a replacement master plan for phasing out UNIX

More information

Guile-GNOME: Atk. version , updated 9 December Bill Haneman Marc Mulcahy Padraig O Briain

Guile-GNOME: Atk. version , updated 9 December Bill Haneman Marc Mulcahy Padraig O Briain Guile-GNOME: Atk version 2.16.2, updated 9 December 2011 Bill Haneman Marc Mulcahy Padraig O Briain This manual is for (gnome atk) (version 2.16.2, updated 9 December 2011) Copyright 2001-2007 Bill Haneman,

More information

CS107 Handout 37 Spring 2007 May 25, 2007 Introduction to Inheritance

CS107 Handout 37 Spring 2007 May 25, 2007 Introduction to Inheritance CS107 Handout 37 Spring 2007 May 25, 2007 Introduction to Inheritance Handout written by Julie Zelenski, updated by Jerry. Inheritance is a language property most gracefully supported by the object-oriented

More information

C++\CLI. Jim Fawcett CSE687-OnLine Object Oriented Design Summer 2017

C++\CLI. Jim Fawcett CSE687-OnLine Object Oriented Design Summer 2017 C++\CLI Jim Fawcett CSE687-OnLine Object Oriented Design Summer 2017 Comparison of Object Models Standard C++ Object Model All objects share a rich memory model: Static, stack, and heap Rich object life-time

More information

GUI in C++ PV264 Advanced Programming in C++ Nikola Beneš Jan Mrázek Vladimír Štill. Faculty of Informatics, Masaryk University.

GUI in C++ PV264 Advanced Programming in C++ Nikola Beneš Jan Mrázek Vladimír Štill. Faculty of Informatics, Masaryk University. GUI in C++ PV264 Advanced Programming in C++ Nikola Beneš Jan Mrázek Vladimír Štill Faculty of Informatics, Masaryk University Spring 2017 PV264: GUI in C++ Spring 2017 1 / 23 Organisation Lectures this

More information

Design Issues. Subroutines and Control Abstraction. Subroutines and Control Abstraction. CSC 4101: Programming Languages 1. Textbook, Chapter 8

Design Issues. Subroutines and Control Abstraction. Subroutines and Control Abstraction. CSC 4101: Programming Languages 1. Textbook, Chapter 8 Subroutines and Control Abstraction Textbook, Chapter 8 1 Subroutines and Control Abstraction Mechanisms for process abstraction Single entry (except FORTRAN, PL/I) Caller is suspended Control returns

More information

Java 8 Programming for OO Experienced Developers

Java 8 Programming for OO Experienced Developers www.peaklearningllc.com Java 8 Programming for OO Experienced Developers (5 Days) This course is geared for developers who have prior working knowledge of object-oriented programming languages such as

More information

Java Object Oriented Design. CSC207 Fall 2014

Java Object Oriented Design. CSC207 Fall 2014 Java Object Oriented Design CSC207 Fall 2014 Design Problem Design an application where the user can draw different shapes Lines Circles Rectangles Just high level design, don t write any detailed code

More information

JavaScript: Sort of a Big Deal,

JavaScript: Sort of a Big Deal, : Sort of a Big Deal, But Sort of Quirky... March 20, 2017 Lisp in C s Clothing (Crockford, 2001) Dynamically Typed: no static type annotations or type checks. C-Like Syntax: curly-braces, for, semicolons,

More information

Short Notes of CS201

Short Notes of CS201 #includes: Short Notes of CS201 The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with < and > if the file is a system

More information

CPS 506 Comparative Programming Languages. Programming Language

CPS 506 Comparative Programming Languages. Programming Language CPS 506 Comparative Programming Languages Object-Oriented Oriented Programming Language Paradigm Introduction Topics Object-Oriented Programming Design Issues for Object-Oriented Oriented Languages Support

More information

CS201 - Introduction to Programming Glossary By

CS201 - Introduction to Programming Glossary By CS201 - Introduction to Programming Glossary By #include : The #include directive instructs the preprocessor to read and include a file into a source code file. The file name is typically enclosed with

More information

Ch. 12: Operator Overloading

Ch. 12: Operator Overloading Ch. 12: Operator Overloading Operator overloading is just syntactic sugar, i.e. another way to make a function call: shift_left(42, 3); 42

More information

About Codefrux While the current trends around the world are based on the internet, mobile and its applications, we try to make the most out of it. As for us, we are a well established IT professionals

More information

plisp: A Friendly Lisp IDE for Beginners Rajesh Jayaprakash Tata Consultancy Services Chennai, India

plisp: A Friendly Lisp IDE for Beginners Rajesh Jayaprakash Tata Consultancy Services Chennai, India plisp: A Friendly Lisp IDE for Beginners Rajesh Jayaprakash Tata Consultancy Services Chennai, India Overview Basics What is plisp? Motivation Features Internals Language Object Model Compiler/Debugger

More information

A brief introduction to C programming for Java programmers

A brief introduction to C programming for Java programmers A brief introduction to C programming for Java programmers Sven Gestegård Robertz September 2017 There are many similarities between Java and C. The syntax in Java is basically

More information

15CS45 : OBJECT ORIENTED CONCEPTS

15CS45 : OBJECT ORIENTED CONCEPTS 15CS45 : OBJECT ORIENTED CONCEPTS QUESTION BANK: What do you know about Java? What are the supported platforms by Java Programming Language? List any five features of Java? Why is Java Architectural Neutral?

More information

Reinventing the Enlightenment Object System

Reinventing the Enlightenment Object System Reinventing the Enlightenment Object System Tom Hacohen Samsung Electronics Open Source Group tom.hacohen@samsung.com @TomHacohen FOSDEM 2015 Main Goals Unify Code Main Goals Unify Code Many different

More information

This manual is for Libffi, a portable foreign-function interface library. Copyright c 2008, 2010, 2011 Red Hat, Inc. Permission is granted to copy,

This manual is for Libffi, a portable foreign-function interface library. Copyright c 2008, 2010, 2011 Red Hat, Inc. Permission is granted to copy, Libffi This manual is for Libffi, a portable foreign-function interface library. Copyright c 2008, 2010, 2011 Red Hat, Inc. Permission is granted to copy, distribute and/or modify this document under the

More information

Fast Track to Core Java 8 Programming for OO Developers (TT2101-J8) Day(s): 3. Course Code: GK1965. Overview

Fast Track to Core Java 8 Programming for OO Developers (TT2101-J8) Day(s): 3. Course Code: GK1965. Overview Fast Track to Core Java 8 Programming for OO Developers (TT2101-J8) Day(s): 3 Course Code: GK1965 Overview Java 8 Essentials for OO Developers is a three-day, fast-paced, quick start to Java 8 training

More information

Hierarchical inheritance: Contains one base class and multiple derived classes of the same base class.

Hierarchical inheritance: Contains one base class and multiple derived classes of the same base class. 1. What is C#? C# (pronounced "C sharp") is a simple, modern, object oriented, and type safe programming language. It will immediately be familiar to C and C++ programmers. C# combines the high productivity

More information

Operators and Expressions

Operators and Expressions Operators and Expressions Conversions. Widening and Narrowing Primitive Conversions Widening and Narrowing Reference Conversions Conversions up the type hierarchy are called widening reference conversions

More information

Compiler Errors. Flash CS4 Professional ActionScript 3.0 Language Reference. 1 of 18 9/6/2010 9:40 PM

Compiler Errors. Flash CS4 Professional ActionScript 3.0 Language Reference. 1 of 18 9/6/2010 9:40 PM 1 of 18 9/6/2010 9:40 PM Flash CS4 Professional ActionScript 3.0 Language Reference Language Reference only Compiler Errors Home All Packages All Classes Language Elements Index Appendixes Conventions

More information

Contents. I. Classes, Superclasses, and Subclasses. Topic 04 - Inheritance

Contents. I. Classes, Superclasses, and Subclasses. Topic 04 - Inheritance Contents Topic 04 - Inheritance I. Classes, Superclasses, and Subclasses - Inheritance Hierarchies Controlling Access to Members (public, no modifier, private, protected) Calling constructors of superclass

More information

Java Primer 1: Types, Classes and Operators

Java Primer 1: Types, Classes and Operators Java Primer 1 3/18/14 Presentation for use with the textbook Data Structures and Algorithms in Java, 6th edition, by M. T. Goodrich, R. Tamassia, and M. H. Goldwasser, Wiley, 2014 Java Primer 1: Types,

More information

Vala Reference Manual

Vala Reference Manual Vala Reference Manual Vala is a high level programming language that produces binaries for the native platform. The binaries maintain the C Application Binary Interface (ABI) and can be built as either

More information

Dynamic Dispatch and Duck Typing. L25: Modern Compiler Design

Dynamic Dispatch and Duck Typing. L25: Modern Compiler Design Dynamic Dispatch and Duck Typing L25: Modern Compiler Design Late Binding Static dispatch (e.g. C function calls) are jumps to specific addresses Object-oriented languages decouple method name from method

More information

C++ Important Questions with Answers

C++ Important Questions with Answers 1. Name the operators that cannot be overloaded. sizeof,.,.*,.->, ::,? 2. What is inheritance? Inheritance is property such that a parent (or super) class passes the characteristics of itself to children

More information

Names, Scopes, and Bindings. CSE 307 Principles of Programming Languages Stony Brook University

Names, Scopes, and Bindings. CSE 307 Principles of Programming Languages Stony Brook University Names, Scopes, and Bindings CSE 307 Principles of Programming Languages Stony Brook University http://www.cs.stonybrook.edu/~cse307 1 Names, Scopes, and Bindings Names are identifiers (mnemonic character

More information

Compaq Interview Questions And Answers

Compaq Interview Questions And Answers Part A: Q1. What are the difference between java and C++? Java adopts byte code whereas C++ does not C++ supports destructor whereas java does not support. Multiple inheritance possible in C++ but not

More information

Gobject Gobject 2.26.zip

Gobject Gobject 2.26.zip Gobject 2.26 Gobject 2.26.zip and GTK+. gobject-html-2.28.7.tar.gz gobject-html-2.26.1.tar.gz. Note the APIInstallation ============ libgit2-glib requires libgit2-0.26.x, glib 2.44.x, gio 2.26Description.

More information

Guile-GNOME: Atk. version , updated 2 September Bill Haneman Marc Mulcahy Padraig O Briain

Guile-GNOME: Atk. version , updated 2 September Bill Haneman Marc Mulcahy Padraig O Briain Guile-GNOME: Atk version 2.15.93, updated 2 September 2007 Bill Haneman Marc Mulcahy Padraig O Briain This manual is for (gnome atk) (version 2.15.93, updated 2 September 2007) Copyright 2001-2007 Bill

More information

Names, Scopes, and Bindings. CSE 307 Principles of Programming Languages Stony Brook University

Names, Scopes, and Bindings. CSE 307 Principles of Programming Languages Stony Brook University Names, Scopes, and Bindings CSE 307 Principles of Programming Languages Stony Brook University http://www.cs.stonybrook.edu/~cse307 1 Names, Scopes, and Bindings Names are identifiers (mnemonic character

More information

Contents. Chapter 1 Overview of the JavaScript C Engine...1. Chapter 2 JavaScript API Reference...23

Contents. Chapter 1 Overview of the JavaScript C Engine...1. Chapter 2 JavaScript API Reference...23 Contents Chapter 1 Overview of the JavaScript C Engine...1 Supported Versions of JavaScript...1 How Do You Use the Engine?...2 How Does the Engine Relate to Applications?...2 Building the Engine...6 What

More information

Chapter 6 Introduction to Defining Classes

Chapter 6 Introduction to Defining Classes Introduction to Defining Classes Fundamentals of Java: AP Computer Science Essentials, 4th Edition 1 Objectives Design and implement a simple class from user requirements. Organize a program in terms of

More information

C#.Net. Course Contents. Course contents VT BizTalk. No exam, but laborations

C#.Net. Course Contents. Course contents VT BizTalk. No exam, but laborations , 1 C#.Net VT 2009 Course Contents C# 6 hp approx. BizTalk 1,5 hp approx. No exam, but laborations Course contents Architecture Visual Studio Syntax Classes Forms Class Libraries Inheritance Other C# essentials

More information

Sample Copy. Not for Distribution.

Sample Copy. Not for Distribution. A Practical Approach to Learn JAVA i EDUCREATION PUBLISHING RZ 94, Sector - 6, Dwarka, New Delhi - 110075 Shubham Vihar, Mangla, Bilaspur, Chhattisgarh - 495001 Website: www.educreation.in Copyright, 2018,

More information

Principles of Programming Languages. Objective-C. Joris Kluivers

Principles of Programming Languages. Objective-C. Joris Kluivers Principles of Programming Languages Objective-C Joris Kluivers joris.kluivers@gmail.com History... 3 NeXT... 3 Language Syntax... 4 Defining a new class... 4 Object identifiers... 5 Sending messages...

More information

CS201 Some Important Definitions

CS201 Some Important Definitions CS201 Some Important Definitions For Viva Preparation 1. What is a program? A program is a precise sequence of steps to solve a particular problem. 2. What is a class? We write a C++ program using data

More information

Grade Weights. Language Design and Overview of COOL. CS143 Lecture 2. Programming Language Economics 101. Lecture Outline

Grade Weights. Language Design and Overview of COOL. CS143 Lecture 2. Programming Language Economics 101. Lecture Outline Grade Weights Language Design and Overview of COOL CS143 Lecture 2 Project 0% I, II 10% each III, IV 1% each Midterm 1% Final 2% Written Assignments 10% 2.% each Prof. Aiken CS 143 Lecture 2 1 Prof. Aiken

More information

C Language Programming

C Language Programming Experiment 2 C Language Programming During the infancy years of microprocessor based systems, programs were developed using assemblers and fused into the EPROMs. There used to be no mechanism to find what

More information

STRUCTURING OF PROGRAM

STRUCTURING OF PROGRAM Unit III MULTIPLE CHOICE QUESTIONS 1. Which of the following is the functionality of Data Abstraction? (a) Reduce Complexity (c) Parallelism Unit III 3.1 (b) Binds together code and data (d) None of the

More information

CMSC 330: Organization of Programming Languages

CMSC 330: Organization of Programming Languages CMSC 330: Organization of Programming Languages Type Systems, Names and Binding CMSC 330 - Spring 2013 1 Topics Covered Thus Far! Programming languages Ruby OCaml! Syntax specification Regular expressions

More information

Data Structures (list, dictionary, tuples, sets, strings)

Data Structures (list, dictionary, tuples, sets, strings) Data Structures (list, dictionary, tuples, sets, strings) Lists are enclosed in brackets: l = [1, 2, "a"] (access by index, is mutable sequence) Tuples are enclosed in parentheses: t = (1, 2, "a") (access

More information

CS260 Intro to Java & Android 03.Java Language Basics

CS260 Intro to Java & Android 03.Java Language Basics 03.Java Language Basics http://www.tutorialspoint.com/java/index.htm CS260 - Intro to Java & Android 1 What is the distinction between fields and variables? Java has the following kinds of variables: Instance

More information

Exception Namespaces C Interoperability Templates. More C++ David Chisnall. March 17, 2011

Exception Namespaces C Interoperability Templates. More C++ David Chisnall. March 17, 2011 More C++ David Chisnall March 17, 2011 Exceptions A more fashionable goto Provides a second way of sending an error condition up the stack until it can be handled Lets intervening stack frames ignore errors

More information

CH. 2 OBJECT-ORIENTED PROGRAMMING

CH. 2 OBJECT-ORIENTED PROGRAMMING CH. 2 OBJECT-ORIENTED PROGRAMMING ACKNOWLEDGEMENT: THESE SLIDES ARE ADAPTED FROM SLIDES PROVIDED WITH DATA STRUCTURES AND ALGORITHMS IN JAVA, GOODRICH, TAMASSIA AND GOLDWASSER (WILEY 2016) OBJECT-ORIENTED

More information

Lesson 2: GTK+ Basics

Lesson 2: GTK+ Basics 1 A First GTK+ Program We will begin with a very simple GTK+ program in order to demonstrate some of the key tasks that every GTK+ main program must perform. The program, hello_world.c, is found in many

More information

C++ Programming: Polymorphism

C++ Programming: Polymorphism C++ Programming: Polymorphism 2018 년도 2 학기 Instructor: Young-guk Ha Dept. of Computer Science & Engineering Contents Run-time binding in C++ Abstract base classes Run-time type identification 2 Function

More information

Overview of OOP. Dr. Zhang COSC 1436 Summer, /18/2017

Overview of OOP. Dr. Zhang COSC 1436 Summer, /18/2017 Overview of OOP Dr. Zhang COSC 1436 Summer, 2017 7/18/2017 Review Data Structures (list, dictionary, tuples, sets, strings) Lists are enclosed in square brackets: l = [1, 2, "a"] (access by index, is mutable

More information

What s different about Factor?

What s different about Factor? Harshal Lehri What s different about Factor? Factor is a concatenative programming language - A program can be viewed as a series of functions applied on data Factor is a stack oriented program - Data

More information

G Programming Languages - Fall 2012

G Programming Languages - Fall 2012 G22.2110-003 Programming Languages - Fall 2012 Lecture 2 Thomas Wies New York University Review Last week Programming Languages Overview Syntax and Semantics Grammars and Regular Expressions High-level

More information

C Review. MaxMSP Developers Workshop Summer 2009 CNMAT

C Review. MaxMSP Developers Workshop Summer 2009 CNMAT C Review MaxMSP Developers Workshop Summer 2009 CNMAT C Syntax Program control (loops, branches): Function calls Math: +, -, *, /, ++, -- Variables, types, structures, assignment Pointers and memory (***

More information

Topics Covered Thus Far CMSC 330: Organization of Programming Languages

Topics Covered Thus Far CMSC 330: Organization of Programming Languages Topics Covered Thus Far CMSC 330: Organization of Programming Languages Names & Binding, Type Systems Programming languages Ruby Ocaml Lambda calculus Syntax specification Regular expressions Context free

More information

CCured. One-Slide Summary. Lecture Outline. Type-Safe Retrofitting of C Programs

CCured. One-Slide Summary. Lecture Outline. Type-Safe Retrofitting of C Programs CCured Type-Safe Retrofitting of C Programs [Necula, McPeak,, Weimer, Condit, Harren] #1 One-Slide Summary CCured enforces memory safety and type safety in legacy C programs. CCured analyzes how you use

More information

Topics Covered Thus Far. CMSC 330: Organization of Programming Languages. Language Features Covered Thus Far. Programming Languages Revisited

Topics Covered Thus Far. CMSC 330: Organization of Programming Languages. Language Features Covered Thus Far. Programming Languages Revisited CMSC 330: Organization of Programming Languages Type Systems, Names & Binding Topics Covered Thus Far Programming languages Syntax specification Regular expressions Context free grammars Implementation

More information

AP COMPUTER SCIENCE JAVA CONCEPTS IV: RESERVED WORDS

AP COMPUTER SCIENCE JAVA CONCEPTS IV: RESERVED WORDS AP COMPUTER SCIENCE JAVA CONCEPTS IV: RESERVED WORDS PAUL L. BAILEY Abstract. This documents amalgamates various descriptions found on the internet, mostly from Oracle or Wikipedia. Very little of this

More information

SERIOUS ABOUT SOFTWARE. Qt Core features. Timo Strömmer, May 26,

SERIOUS ABOUT SOFTWARE. Qt Core features. Timo Strömmer, May 26, SERIOUS ABOUT SOFTWARE Qt Core features Timo Strömmer, May 26, 2010 1 Contents C++ refresher Core features Object model Signals & slots Event loop Shared data Strings Containers Private implementation

More information

G52CPP C++ Programming Lecture 9

G52CPP C++ Programming Lecture 9 G52CPP C++ Programming Lecture 9 Dr Jason Atkin http://www.cs.nott.ac.uk/~jaa/cpp/ g52cpp.html 1 Last lecture const Constants, including pointers The C pre-processor And macros Compiling and linking And

More information

Binghamton University. CS-211 Fall Syntax. What the Compiler needs to understand your program

Binghamton University. CS-211 Fall Syntax. What the Compiler needs to understand your program Syntax What the Compiler needs to understand your program 1 Pre-Processing Any line that starts with # is a pre-processor directive Pre-processor consumes that entire line Possibly replacing it with other

More information

Index. Index. More information. block statements 66 y 107 Boolean 107 break 55, 68 built-in types 107

Index. Index. More information. block statements 66 y 107 Boolean 107 break 55, 68 built-in types 107 A abbreviations 17 abstract class 105 abstract data types 105 abstract method 105 abstract types 105 abstraction 92, 105 access level 37 package 114 private 115 protected 115 public 115 accessors 24, 105

More information

1 Epic Test Review 2 Epic Test Review 3 Epic Test Review 4. Epic Test Review 5 Epic Test Review 6 Epic Test Review 7 Epic Test Review 8

1 Epic Test Review 2 Epic Test Review 3 Epic Test Review 4. Epic Test Review 5 Epic Test Review 6 Epic Test Review 7 Epic Test Review 8 Epic Test Review 1 Epic Test Review 2 Epic Test Review 3 Epic Test Review 4 Write a line of code that outputs the phase Hello World to the console without creating a new line character. System.out.print(

More information

Chapter 1 Getting Started

Chapter 1 Getting Started Chapter 1 Getting Started The C# class Just like all object oriented programming languages, C# supports the concept of a class. A class is a little like a data structure in that it aggregates different

More information

A Short Summary of Javali

A Short Summary of Javali A Short Summary of Javali October 15, 2015 1 Introduction Javali is a simple language based on ideas found in languages like C++ or Java. Its purpose is to serve as the source language for a simple compiler

More information

Microsoft. Microsoft Visual C# Step by Step. John Sharp

Microsoft. Microsoft Visual C# Step by Step. John Sharp Microsoft Microsoft Visual C#- 2010 Step by Step John Sharp Table of Contents Acknowledgments Introduction xvii xix Part I Introducing Microsoft Visual C# and Microsoft Visual Studio 2010 1 Welcome to

More information

Syllabus & Curriculum for Certificate Course in Java. CALL: , for Queries

Syllabus & Curriculum for Certificate Course in Java. CALL: , for Queries 1 CONTENTS 1. Introduction to Java 2. Holding Data 3. Controllin g the f l o w 4. Object Oriented Programming Concepts 5. Inheritance & Packaging 6. Handling Error/Exceptions 7. Handling Strings 8. Threads

More information

code://rubinius/technical

code://rubinius/technical code://rubinius/technical /GC, /cpu, /organization, /compiler weeee!! Rubinius New, custom VM for running ruby code Small VM written in not ruby Kernel and everything else in ruby http://rubini.us git://rubini.us/code

More information

Object-oriented programming in...

Object-oriented programming in... Programming Languages Week 12 Object-oriented programming in... College of Information Science and Engineering Ritsumeikan University plan this week intro to Java advantages and disadvantages language

More information

CS506 Web Programming and Development Solved Subjective Questions With Reference For Final Term Lecture No 1

CS506 Web Programming and Development Solved Subjective Questions With Reference For Final Term Lecture No 1 P a g e 1 CS506 Web Programming and Development Solved Subjective Questions With Reference For Final Term Lecture No 1 Q1 Describe some Characteristics/Advantages of Java Language? (P#12, 13, 14) 1. Java

More information

Instantiation of Template class

Instantiation of Template class Class Templates Templates are like advanced macros. They are useful for building new classes that depend on already existing user defined classes or built-in types. Example: stack of int or stack of double

More information

Casting -Allows a narrowing assignment by asking the Java compiler to "trust us"

Casting -Allows a narrowing assignment by asking the Java compiler to trust us Primitives Integral types: int, short, long, char, byte Floating point types: double, float Boolean types: boolean -passed by value (copied when returned or passed as actual parameters) Arithmetic Operators:

More information

Winter Compiler Construction Who. Mailing list and forum

Winter Compiler Construction Who. Mailing list and forum Winter 2006-2007 Compiler Construction 0368-3133 Mooly Sagiv and Roman Manevich School of Computer Science Tel-Aviv University Who Roman Manevich Schreiber Open-space (basement) Tel: 640-5358 rumster@post.tau.ac.il

More information

Administrivia. Java Review. Objects and Variables. Demo. Example. Example: Assignments

Administrivia. Java Review. Objects and Variables. Demo. Example. Example: Assignments CMSC433, Spring 2004 Programming Language Technology and Paradigms Java Review Jeff Foster Feburary 3, 2004 Administrivia Reading: Liskov, ch 4, optional Eckel, ch 8, 9 Project 1 posted Part 2 was revised

More information

just a ((somewhat) safer) dialect.

just a ((somewhat) safer) dialect. Intro_to_C Page 1 Intro to C Tuesday, September 07, 2004 5:30 PM C was developed specifically for writing operating systems Low level of abstraction. "Just above machine language." Direct access to the

More information

Simple Dynamic Compilation with GOO. Jonathan Bachrach. MIT AI Lab 01MAR02 GOO 1

Simple Dynamic Compilation with GOO. Jonathan Bachrach. MIT AI Lab 01MAR02 GOO 1 Simple Dynamic Compilation with GOO Jonathan Bachrach MIT AI Lab 01MAR02 GOO 1 GOO Talk Preliminary work Introduce challenge Present GOO Introduce language Sketch implementation Report status Request Quick

More information

Question No: 1 ( Marks: 1 ) - Please choose one One difference LISP and PROLOG is. AI Puzzle Game All f the given

Question No: 1 ( Marks: 1 ) - Please choose one One difference LISP and PROLOG is. AI Puzzle Game All f the given MUHAMMAD FAISAL MIT 4 th Semester Al-Barq Campus (VGJW01) Gujranwala faisalgrw123@gmail.com MEGA File Solved MCQ s For Final TERM EXAMS CS508- Modern Programming Languages Question No: 1 ( Marks: 1 ) -

More information

Binghamton University. CS-120 Summer Introduction to C. Text: Introduction to Computer Systems : Chapters 11, 12, 14, 13

Binghamton University. CS-120 Summer Introduction to C. Text: Introduction to Computer Systems : Chapters 11, 12, 14, 13 Introduction to C Text: Introduction to Computer Systems : Chapters 11, 12, 14, 13 Problem: Too Many Details For example: Lab 7 Bubble Sort Needed to keep track of too many details! Outer Loop When do

More information

Object-Oriented Programming

Object-Oriented Programming Object-Oriented Programming 1. What is object-oriented programming (OOP)? OOP is a technique to develop logical modules, such as classes that contain properties, methods, fields, and events. An object

More information

Java: framework overview and in-the-small features

Java: framework overview and in-the-small features Chair of Software Engineering Carlo A. Furia, Marco Piccioni, Bertrand Meyer Java: framework overview and in-the-small features Chair of Software Engineering Carlo A. Furia, Marco Piccioni, Bertrand Meyer

More information

Classes and Methods לאוניד ברנבוים המחלקה למדעי המחשב אוניברסיטת בן-גוריון

Classes and Methods לאוניד ברנבוים המחלקה למדעי המחשב אוניברסיטת בן-גוריון Classes and Methods לאוניד ברנבוים המחלקה למדעי המחשב אוניברסיטת בן-גוריון 22 Roadmap Lectures 4 and 5 present two sides of OOP: Lecture 4 discusses the static, compile time representation of object-oriented

More information

The role of semantic analysis in a compiler

The role of semantic analysis in a compiler Semantic Analysis Outline The role of semantic analysis in a compiler A laundry list of tasks Scope Static vs. Dynamic scoping Implementation: symbol tables Types Static analyses that detect type errors

More information

CSE 413 Languages & Implementation. Hal Perkins Winter 2019 Structs, Implementing Languages (credits: Dan Grossman, CSE 341)

CSE 413 Languages & Implementation. Hal Perkins Winter 2019 Structs, Implementing Languages (credits: Dan Grossman, CSE 341) CSE 413 Languages & Implementation Hal Perkins Winter 2019 Structs, Implementing Languages (credits: Dan Grossman, CSE 341) 1 Goals Representing programs as data Racket structs as a better way to represent

More information

Core object model EO / EFL++

Core object model EO / EFL++ Core object model EO / EFL++ Carsten Haitzler Samsung Electronics Principal Engineer Enlightenment/EFL Founder c.haitzler@samsung.com EFL + Elementary 2 A toolkit somwhere between GTK+ and Qt in breadth

More information

C++11 and Compiler Update

C++11 and Compiler Update C++11 and Compiler Update John JT Thomas Sr. Director Application Developer Products About this Session A Brief History Features of C++11 you should be using now Questions 2 Bjarne Stroustrup C with Objects

More information