Programming with Gaigen 2

Similar documents
Geometric Algebra for Computer Graphics

APPENDIX A CLIFFORD ALGEBRA

Gaigen: a Geometric Algebra Implementation Generator

Geometric Algebra enhanced Precompiler for C++ and OpenCL

Inverse Kinematics of a Humanoid Robot based on Conformal Geometric Algebra using optimized Code Generation

From Grassmann s vision to Geometric Algebra Computing

Introduction to Geometric Algebra Lecture I

Introduction to Geometric Algebra Lecture VI

Visualization of the projective line geometry for geometric algebra

ANALYSIS OF POINT CLOUDS Using Conformal Geometric Algebra

Foundations of Geometric Algebra Computing

Introduction to Computer Vision

Geometric Algebra for Computer Science

CHAPTER 1 Graphics Systems and Models 3

Geometric Algebra. 8. Conformal Geometric Algebra. Dr Chris Doran ARM Research

Optics II. Reflection and Mirrors

Advanced Geometric Approach for Graphics and Visual Guided Robot Object Manipulation

PRIMITIVES INTERSECTION WITH CONFORMAL 5D GEOMETRY

Geometry. Course Requirements

Robotics: Science and Systems I Lab 6: Motion Planning and Global Navigation Begins: 3/5/2014, 3pm Due: 3/12/2014, 3pm

Introduction to Geometric Algebra Lecture V

Assignment 6: Ray Tracing

A Geometric Algebra Implementation using Binary Tree

Dgp _ lecture 2. Curves

Interactive Graphics Using Parametric Equations (Day 2)

Geometric Hand-Eye Calibration for an Endoscopic Neurosurgery System

Inverse kinematics computation in computer graphics and robotics using conformal geometric algebra

APS Sixth Grade Math District Benchmark Assessment NM Math Standards Alignment

Ray Tracing Basics I. Computer Graphics as Virtual Photography. camera (captures light) real scene. photo. Photographic print. Photography: processing

Physics 1C Lecture 26A. Beginning of Chapter 26

Curves and Surfaces Computer Graphics I Lecture 9

7 th Grade Accelerated Learning Targets Final 5/5/14

PHY 171 Lecture 6 (January 18, 2012)

Prentice Hall Geometry 2011 Correlated to: Washington Mathematics Standards, Geometry (2008)

MATHEMATICS CONTENT STANDARDS FOR CHRISTIAN UNIFIED SCHOOLS OF SAN DIEGO. Third Grade Parent Handbook

0. Introduction: What is Computer Graphics? 1. Basics of scan conversion (line drawing) 2. Representing 2D curves

The Reflection of Light

MITOCW MIT6_172_F10_lec18_300k-mp4

Daily Warm-Ups GEOMETRY

2D Euclidean Geometric Algebra Matrix Representation

Introduction to Geometric Algebra

FPGA-Accelerated Color Edge Detection Using a Geometric-Algebra-To-Verilog Compiler

Computational Graphics: Lecture 15 SpMSpM and SpMV, or, who cares about complexity when we have a thousand processors?

1. Boolean algebra. [6] 2. Constructing a circuit. [4] 3. Number representation [4] 4. Adders [4] 5. ALU [2] 6. Software [4]

Side-by-Side Comparison of the Texas Educational Knowledge and Skills (TEKS) and Louisiana Grade Level Expectations (GLEs) MATHEMATICS: Geometry

Geometric Transformations and Image Warping

Houghton Mifflin MATHEMATICS Level 5 correlated to NCTM Standard

CS451Real-time Rendering Pipeline

Geometric Computation: Introduction

Computer Graphics (CS 543) Lecture 1 (Part 1): Introduction to Computer Graphics

PO 2. Identify irrational numbers. SE/TE: 4-8: Exploring Square Roots and Irrational Numbers, TECH: itext; PH Presentation Pro CD-ROM;

Ray Tracer I: Ray Casting Due date: 12:00pm December 3, 2001

Grade 6 Math Circles October 16 & Non-Euclidean Geometry and the Globe

CS Simple Raytracer for students new to Rendering

Geometrical Optics INTRODUCTION. Wave Fronts and Rays

CS 4620 Program 4: Ray II

TRANSFORMATION GEOMETRY? IT S JUST SLIDES, FLIPS AND TURNS, ISN T IT? WHAT S THE BIG DEAL?

Houghton Mifflin Math Expressions Grade 3 correlated to Illinois Mathematics Assessment Framework

Houghton Mifflin Math Expressions Grade 2 correlated to Illinois Mathematics Assessment Framework

Houghton Mifflin Math Expressions Grade 1 correlated to Illinois Mathematics Assessment Framework

Light: Geometric Optics

Basics of Computational Geometry

Ray Tracer. Spring 2017 Help Session

Physics 309 Lab 3. where the small angle approximation has been used. This pattern has maxima at. Y Max. n L /d (2)

4th Grade Math Scope & Sequence-June 2017

Geometry. Instructional Activities:

Computer Graphics CS 543 Lecture 1 (Part I) Prof Emmanuel Agu. Computer Science Dept. Worcester Polytechnic Institute (WPI)

Welcome to COMP 770 (236) Introduction. Prerequisites. Prerequisites

Kuta Software Infinite Geometry All Transformations Answers

Open GL Framework For A Computer Graphics Course

Reflection & Mirrors

A Correlation of Pearson Mathematics Geometry Common Core, 2015 To the Missouri Learning Standards for Mathematics Geometry

COMPUTER GRAPHICS USING CONFORMAL GEOMETRIC ALGEBRA

521493S Computer Graphics. Exercise 3

TEACHER CERTIFICATION STUDY GUIDE KNOWLEDGE OF MATHEMATICS THROUGH SOLVING...1

Today. Global illumination. Shading. Interactive applications. Rendering pipeline. Computergrafik. Shading Introduction Local shading models

A VERTICAL LOOK AT KEY CONCEPTS AND PROCEDURES GEOMETRY

Number and Quantity. Reporting Topic Grade Level Standards Standard Summary

The Making of a Geometric Algebra Package in Matlab Computer Science Department University of Waterloo Research Report CS-99-27

Solving Linear Equations: Prentice Hall Lesson # 1-4; 3-1,2,3; 3-6; 5-1 thru 4; 6-1, 2. Graphing Linear Equations: PH Lesson 1-4

CS 248 Assignment 2 Polygon Scan Conversion. CS248 Presented by Michael Green Stanford University October 20, 2004

EFFICIENT INVERSE KINEMATICS ALGORITHM BASED ON CONFORMAL GEOMETRIC ALGEBRA Using Reconfigurable Hardware

NFC ACADEMY COURSE OVERVIEW

Project 2: 3D transforms and Cameras

Seventh Grade Mathematics Content Standards and Objectives

CS 465 Program 5: Ray II

Humanoid Robotics. Projective Geometry, Homogeneous Coordinates. (brief introduction) Maren Bennewitz

Coordinate Free Perspective Projection of Points in the Conformal Model Using Transversions

Introduction Ray tracing basics Advanced topics (shading) Advanced topics (geometry) Graphics 2010/2011, 4th quarter. Lecture 11: Ray tracing

Integrated Math I. IM1.1.3 Understand and use the distributive, associative, and commutative properties.

MCAS/DCCAS Mathematics Correlation Chart Grade 6

Prentice Hall Mathematics: Course Correlated to: Ohio Academic Content Standards for Mathematics (Grade 7)

Today. Rendering algorithms. Rendering algorithms. Images. Images. Rendering Algorithms. Course overview Organization Introduction to ray tracing

NCTM Strands. NCTM Strands. NCTM Strands. Geometry. Number and Operations Algebra Geometry Measurement Data Analysis & Probability

Northern York County School District Curriculum

Chapter 23. Geometrical Optics: Mirrors and Lenses and other Instruments

Unit 3: Congruence & Similarity

Curves and Surfaces. Computer Graphics COMP 770 (236) Spring Instructor: Brandon Lloyd

An introduction to interpolation and splines

Light: Geometric Optics (Chapter 23)

Transcription:

Programming with Gaigen 2 p. 1/24 Programming with Gaigen 2 Programming with Gaigen 2 Daniel Fontijne University of Amsterdam fontijne@science.uva.nl

Programming with Gaigen 2 p. 2/24 Overview Part I What if I just want to program using geometric algebra?

Programming with Gaigen 2 p. 2/24 Overview Part I What if I just want to program using geometric algebra? (and want my program to be reasonably efficient?)

Programming with Gaigen 2 p. 2/24 Overview Part I What if I just want to program using geometric algebra? (and want my program to be reasonably efficient?) Part I: GA Sandbox GA Sandbox is:

Programming with Gaigen 2 p. 2/24 Overview Part I What if I just want to program using geometric algebra? (and want my program to be reasonably efficient?) Part I: GA Sandbox GA Sandbox is: C++ GA implementations generated by Gaigen 2.

Programming with Gaigen 2 p. 2/24 Overview Part I What if I just want to program using geometric algebra? (and want my program to be reasonably efficient?) Part I: GA Sandbox GA Sandbox is: C++ GA implementations generated by Gaigen 2. Extra utility code.

Programming with Gaigen 2 p. 2/24 Overview Part I What if I just want to program using geometric algebra? (and want my program to be reasonably efficient?) Part I: GA Sandbox GA Sandbox is: C++ GA implementations generated by Gaigen 2. Extra utility code. A lot of example code.

Programming with Gaigen 2 p. 2/24 Overview Part I What if I just want to program using geometric algebra? (and want my program to be reasonably efficient?) Part I: GA Sandbox GA Sandbox is: C++ GA implementations generated by Gaigen 2. Extra utility code. A lot of example code. Some exercises with solutions.

Programming with Gaigen 2 p. 2/24 Overview Part I What if I just want to program using geometric algebra? (and want my program to be reasonably efficient?) Part I: GA Sandbox GA Sandbox is: C++ GA implementations generated by Gaigen 2. Extra utility code. A lot of example code. Some exercises with solutions. (comes with a book, too).

Programming with Gaigen 2 p. 3/24 Overview Part II Part II: Gaigen 2: a Geometric Algebra Implementation Generator.

Programming with Gaigen 2 p. 3/24 Overview Part II Part II: Gaigen 2: a Geometric Algebra Implementation Generator. Ideas behind Gaigen 2.

Programming with Gaigen 2 p. 3/24 Overview Part II Part II: Gaigen 2: a Geometric Algebra Implementation Generator. Ideas behind Gaigen 2. Installing Gaigen 2.

Programming with Gaigen 2 p. 3/24 Overview Part II Part II: Gaigen 2: a Geometric Algebra Implementation Generator. Ideas behind Gaigen 2. Installing Gaigen 2. Writing a specification of an algebra.

Programming with Gaigen 2 p. 3/24 Overview Part II Part II: Gaigen 2: a Geometric Algebra Implementation Generator. Ideas behind Gaigen 2. Installing Gaigen 2. Writing a specification of an algebra. Generating the code.

Programming with Gaigen 2 p. 3/24 Overview Part II Part II: Gaigen 2: a Geometric Algebra Implementation Generator. Ideas behind Gaigen 2. Installing Gaigen 2. Writing a specification of an algebra. Generating the code. Profiling.

Programming with Gaigen 2 p. 4/24 Part I: GA Sandbox Part I: GA Sandbox

Programming with Gaigen 2 p. 5/24 GA Sandbox Overview GA Sandbox was created as a software companion to Geometric Algebra for Computer Science. You may download GA Sandbox at: http://www.geometricalgebra.net/sandbox.html or on the handout CD in directory /gasandbox

Programming with Gaigen 2 p. 6/24 GA Sandbox Examples

Programming with Gaigen 2 p. 7/24 Building the Source Code Linux: Install libraries (GLUT, ANTLR, OpenCV, FLTK). Extract GA Sandbox package../configure make

Programming with Gaigen 2 p. 7/24 Building the Source Code Linux: Install libraries (GLUT, ANTLR, OpenCV, FLTK). Extract GA Sandbox package../configure make Windows / Visual Studio: Install libraries (or extract precompiled libraries from zip). Extract GA Sandbox package. Open project and build it.

Programming with Gaigen 2 p. 8/24 GA Sandbox Contents Contents of GA Sandbox:

Programming with Gaigen 2 p. 8/24 GA Sandbox Contents Contents of GA Sandbox: libgasandbox: algebras + drawing + utility + analyzing multivectors.

Programming with Gaigen 2 p. 8/24 GA Sandbox Contents Contents of GA Sandbox: libgasandbox: algebras + drawing + utility + analyzing multivectors. libgasandboxparse: parsing multivector strings (requires ANTLR library).

Programming with Gaigen 2 p. 8/24 GA Sandbox Contents Contents of GA Sandbox: libgasandbox: algebras + drawing + utility + analyzing multivectors. libgasandboxparse: parsing multivector strings (requires ANTLR library). chapx/exy: nearly programming 50 examples.

Programming with Gaigen 2 p. 8/24 GA Sandbox Contents Contents of GA Sandbox: libgasandbox: algebras + drawing + utility + analyzing multivectors. libgasandboxparse: parsing multivector strings (requires ANTLR library). chapx/exy: nearly programming 50 examples. (library QHull for computing convex hulls).

Programming with Gaigen 2 p. 9/24 libgasandbox 1/2 libgasandbox contains 5 algebra implementations: e2ga, e3ga, h3ga, c2ga, c3ga.

Programming with Gaigen 2 p. 9/24 libgasandbox 1/2 libgasandbox contains 5 algebra implementations: e2ga, e3ga, h3ga, c2ga, c3ga. Algebra implementations are in xxga.cpp and xxga.h: generated by Gaigen 2 from xxga.gs2 files. The xxga.cpp and xxga.h files provide:

Programming with Gaigen 2 p. 9/24 libgasandbox 1/2 libgasandbox contains 5 algebra implementations: e2ga, e3ga, h3ga, c2ga, c3ga. Algebra implementations are in xxga.cpp and xxga.h: generated by Gaigen 2 from xxga.gs2 files. The xxga.cpp and xxga.h files provide: - General multivector class mv.

Programming with Gaigen 2 p. 9/24 libgasandbox 1/2 libgasandbox contains 5 algebra implementations: e2ga, e3ga, h3ga, c2ga, c3ga. Algebra implementations are in xxga.cpp and xxga.h: generated by Gaigen 2 from xxga.gs2 files. The xxga.cpp and xxga.h files provide: - General multivector class mv. - Specialized classes like vector, bivector, rotor.

Programming with Gaigen 2 p. 9/24 libgasandbox 1/2 libgasandbox contains 5 algebra implementations: e2ga, e3ga, h3ga, c2ga, c3ga. Algebra implementations are in xxga.cpp and xxga.h: generated by Gaigen 2 from xxga.gs2 files. The xxga.cpp and xxga.h files provide: - General multivector class mv. - Specialized classes like vector, bivector, rotor. - Basis vectors, like e1, e2, e3.

Programming with Gaigen 2 p. 9/24 libgasandbox 1/2 libgasandbox contains 5 algebra implementations: e2ga, e3ga, h3ga, c2ga, c3ga. Algebra implementations are in xxga.cpp and xxga.h: generated by Gaigen 2 from xxga.gs2 files. The xxga.cpp and xxga.h files provide: - General multivector class mv. - Specialized classes like vector, bivector, rotor. - Basis vectors, like e1, e2, e3. - Other constants, like I.

Programming with Gaigen 2 p. 9/24 libgasandbox 1/2 libgasandbox contains 5 algebra implementations: e2ga, e3ga, h3ga, c2ga, c3ga. Algebra implementations are in xxga.cpp and xxga.h: generated by Gaigen 2 from xxga.gs2 files. The xxga.cpp and xxga.h files provide: - General multivector class mv. - Specialized classes like vector, bivector, rotor. - Basis vectors, like e1, e2, e3. - Other constants, like I. - Basic functions: products, inversion, dualization,...

Programming with Gaigen 2 p. 9/24 libgasandbox 1/2 libgasandbox contains 5 algebra implementations: e2ga, e3ga, h3ga, c2ga, c3ga. Algebra implementations are in xxga.cpp and xxga.h: generated by Gaigen 2 from xxga.gs2 files. The xxga.cpp and xxga.h files provide: - General multivector class mv. - Specialized classes like vector, bivector, rotor. - Basis vectors, like e1, e2, e3. - Other constants, like I. - Basic functions: products, inversion, dualization,... - Operators: outer product: geometric product: * left contraction (an inner product): <<

Programming with Gaigen 2 p. 10/24 libgasandbox 2/2 Other files in libgasandbox: xxga_util.cpp: utility functions. xxga_draw.cpp: OpenGL drawing functions. mv_analyze_xxga.cpp: multivector analysis functions.

Programming with Gaigen 2 p. 11/24 Chapter 1 Example Code

Programming with Gaigen 2 p. 12/24 Optical Motion Capture Example Code

Programming with Gaigen 2 p. 13/24 Translation / Rotation Interpolation Code

Programming with Gaigen 2 p. 14/24 Part II: Gaigen 2 Part II: Gaigen 2

Programming with Gaigen 2 p. 15/24 Gaigen 2 Overview 1/2 Gaigen 2 is a code generator.

Programming with Gaigen 2 p. 15/24 Gaigen 2 Overview 1/2 Gaigen 2 is a code generator. Input: specification of a geometric algebra + optional profile.

Programming with Gaigen 2 p. 15/24 Gaigen 2 Overview 1/2 Gaigen 2 is a code generator. Input: specification of a geometric algebra + optional profile. Output: efficient C++ or Java source code.

Programming with Gaigen 2 p. 15/24 Gaigen 2 Overview 1/2 Gaigen 2 is a code generator. Input: specification of a geometric algebra + optional profile. Output: efficient C++ or Java source code. Input file Algebra Specification DSL Input file Functions Function instantiation & optimization Function Instantiation High-Level Optimization Gaigen 2 Profilling server Profiling data Input/Output file Profile Network connection (optional) Linked & running Application Write out on Basis Low-Level Optimization Code generation back-end Boiler plate code generation AST conversion & pretty printing Output file(s) Generated Source Code User Application Source Code

Programming with Gaigen 2 p. 16/24 Gaigen 2 Overview 2/2 A word of caution: Gaigen 2 is not a well-polished tool. Easiest way to start using it is GA Sandbox.

Programming with Gaigen 2 p. 16/24 Gaigen 2 Overview 2/2 A word of caution: Gaigen 2 is not a well-polished tool. Easiest way to start using it is GA Sandbox. But: personally I used it successfully for several larger projects: Set of simple ray tracers. GA Sandbox. Optical motion capture system.

Programming with Gaigen 2 p. 17/24 Gaigen 2 used for Motion Capture

Programming with Gaigen 2 p. 18/24 Ray tracer benchmarks model implementation rendering time 3D LA standard 1.00 4D LA standard 1.22 3D GA Gaigen 2 0.98 4D GA Gaigen 2 1.2 5D GA Gaigen 2 1.26 3D GA Gaigen 1 2.56 4D GA Gaigen 1 2.97 5D GA Gaigen 1 5.71 3D GA CLU 78 5D GA CLU 178

Programming with Gaigen 2 p. 19/24 Multivectors Representation in Gaigen 2 Like many other GA implementations, Gaigen 2 represents multivectors as a sum of basis blades.

Programming with Gaigen 2 p. 19/24 Multivectors Representation in Gaigen 2 Like many other GA implementations, Gaigen 2 represents multivectors as a sum of basis blades. Example of basis for 3-D space: { 1, e }{{} 1,e 2,e }{{} 3 grade 0 grade 1, e 1 e 2, e 2 e 3, e 1 e 3 }{{} grade 2, e 1 e 2 e }{{} 3 }. grade 3

Programming with Gaigen 2 p. 19/24 Multivectors Representation in Gaigen 2 Like many other GA implementations, Gaigen 2 represents multivectors as a sum of basis blades. Example of basis for 3-D space: { 1, e }{{} 1,e 2,e }{{} 3 grade 0 grade 1, e 1 e 2, e 2 e 3, e 1 e 3 }{{} grade 2, e 1 e 2 e }{{} 3 }. grade 3 For example, a 3D-rotor: R = 0.30 0.04e 2 e 3 + 0.86e 3 e 1 0.68e 1 e 2

Programming with Gaigen 2 p. 19/24 Multivectors Representation in Gaigen 2 Like many other GA implementations, Gaigen 2 represents multivectors as a sum of basis blades. Example of basis for 3-D space: { 1, e }{{} 1,e 2,e }{{} 3 grade 0 grade 1, e 1 e 2, e 2 e 3, e 1 e 3 }{{} grade 2, e 1 e 2 e }{{} 3 }. grade 3 For example, a 3D-rotor: R = 0.30 0.04e 2 e 3 + 0.86e 3 e 1 0.68e 1 e 2 In general: n-dimensional geometric algebra 2 n multivector coordinates. But in real-world usage, many of those coordinates are zero!

Programming with Gaigen 2 p. 20/24 Ideas behind Gaigen 2 Observation in 2001: GA implementations are slow.

Programming with Gaigen 2 p. 20/24 Ideas behind Gaigen 2 Observation in 2001: GA implementations are slow. Reasons: The multivector is too general. - Wastes memory / processing time. - Solution: specialized multivector types. - A compromise between mathematical elegance and computational efficiency.

Programming with Gaigen 2 p. 20/24 Ideas behind Gaigen 2 Observation in 2001: GA implementations are slow. Reasons: The multivector is too general. - Wastes memory / processing time. - Solution: specialized multivector types. - A compromise between mathematical elegance and computational efficiency. Functions over multivectors are slow. - Custom functions for each type of argument.

Programming with Gaigen 2 p. 21/24 Specialized multivectors Gaigen 2 generates classes for specialized multivectors.

Programming with Gaigen 2 p. 21/24 Specialized multivectors Gaigen 2 generates classes for specialized multivectors. Examples of specialized multivector specifications: specialization: vectore3ga(e1, e2, e3);

Programming with Gaigen 2 p. 21/24 Specialized multivectors Gaigen 2 generates classes for specialized multivectors. Examples of specialized multivector specifications: specialization: vectore3ga(e1, e2, e3); specialization: line(e1^e2^einf, e1^e3^einf, e2^e3^einf, e1^e0^einf, e2^e0^einf, e3^e0^einf);

Programming with Gaigen 2 p. 21/24 Specialized multivectors Gaigen 2 generates classes for specialized multivectors. Examples of specialized multivector specifications: specialization: vectore3ga(e1, e2, e3); specialization: line(e1^e2^einf, e1^e3^einf, e2^e3^einf, e1^e0^einf, e2^e0^einf, e3^e0^einf); specialization: normalizedpoint(e0 = 1, e1, e2, e3, einf);

Programming with Gaigen 2 p. 21/24 Specialized multivectors Gaigen 2 generates classes for specialized multivectors. Examples of specialized multivector specifications: specialization: vectore3ga(e1, e2, e3); specialization: line(e1^e2^einf, e1^e3^einf, e2^e3^einf, e1^e0^einf, e2^e0^einf, e3^e0^einf); specialization: normalizedpoint(e0 = 1, e1, e2, e3, einf); All basis blades which are not listed in the specification are assumed to be constant 0. Memory is only allocated for non-constant coordinates.

Programming with Gaigen 2 p. 22/24 Specializing Functions Example of generated code: equation P = C S.

Programming with Gaigen 2 p. 22/24 Specializing Functions Example of generated code: equation P = C S. inline pointpair innerproduct(const dualcircle& C, const sphere& S) { return pointpair( -C.c[2] * S.c[2] + C.c[4] * S.c[4] - C.c[1] * S.c[1], C.c[0] * S.c[1] - C.c[2] * S.c[3] + C.c[5] * S.c[4], C.c[1] * S.c[3] + C.c[0] * S.c[2] + C.c[3] * S.c[4], C.c[9] * S.c[1] + C.c[8] * S.c[4] - C.c[2] * S.c[0], C.c[6] * S.c[4] + C.c[9] * S.c[3] - C.c[0] * S.c[0], -C.c[1] * S.c[0] - C.c[9] * S.c[2] + C.c[7] * S.c[4], -C.c[4] * S.c[0] + C.c[8] * S.c[2] + C.c[7] * S.c[1], -C.c[6] * S.c[1] - C.c[5] * S.c[0] + C.c[8] * S.c[3], -C.c[6] * S.c[2] - C.c[3] * S.c[0] - C.c[7] * S.c[3], C.c[5] * S.c[2] - C.c[4] * S.c[3] - C.c[3] * S.c[1]); }

Programming with Gaigen 2 p. 23/24 Gaigen 2 Demo Installing. Writing a specification for an algebra. Generating the code. Walkthrough of default generated code. Profiling. The profile. Walkthrough of optimized code.

Programming with Gaigen 2 p. 24/24 Conclusion / Discussion Gaigen 2: efficient, usable for big projects, but a bit rough on the edges.

Programming with Gaigen 2 p. 24/24 Conclusion / Discussion Gaigen 2: efficient, usable for big projects, but a bit rough on the edges. Possibly will develop Gaigen 2.5: simpler, cleaner, more pragmatic.

Programming with Gaigen 2 p. 24/24 Conclusion / Discussion Gaigen 2: efficient, usable for big projects, but a bit rough on the edges. Possibly will develop Gaigen 2.5: simpler, cleaner, more pragmatic. Is code generation always required for maximum efficiency? (Dietmar Hildenbrand is also moving in that direction)