https://www.adacore.com/gems skip to main content AdaCore [ ] * Products + Overview + GNAT Pro o Overview o Assurance o Enterprise o Toolsuite + GNAT Pro for Rust + GNAT Pro for C/C++ + GNAT Dynamic Analysis Suite o GNATcoverage o GNATtest o GNATfuzz + GNAT Static Analysis Suite o Defects and Vulnerability Analysis o Coding Standard Verification o Metric Computations + SPARK Pro o Overview o Demos o Use Cases + RecordFlux + Pricing + Terms and Conditions + Languages * Services + Overview + Certification & Qualification + Mentorship + Training + Consulting * Industries + Overview + Domains o Avionics o ATM o Space o Rail o Automotive o Defense o Security o Medical + Case Studies + Standards o DO-178 o ESARR o CAP670-SWO1 o CWE o EN 50128 o FACE o ISO 26262 o IEC 61508 * Company + Overview + About AdaCore + Press Releases + Events + Executive Team + Careers + Our Customers + Partners + Contact Us + Legal + Privacy Policy + Cookie Policy * Resources + Overview + Case Studies + Books + Papers + Articles + Videos + AdaCore Blog + Learn.adacore.com * Community + Overview + Academia o Overview o Projects o Universities o Register o Login + About Ada + About SPARK + Contact * Support + Overview + GNAT Tracker + Documentation + Dev Log + Cybersecurity Center + AdaCore Digest Login to GNAT Tracker [ ] [ ] Forgot your password?[Login] [ ] GT Login Request Pricing Resources Overview Case Studies Books Papers Articles Videos AdaCore Blog Ada Gem Archive The Ada Gem of the Week is enjoying it's well earned retirement. But we hope you'll enjoy looking through the archives. * Introducing the AdaCore Blogby Jamie Ayre 1/9/2015 * Gem #161 : So long and thanks for all the memories!by Jamie Ayre 8/4/2014 * Gem #160 : Developing unit tests with GNATtestby Vasiliy Fofanov 6/23/2014 * Gem #159 : GPRinstall - Part 2by Pascal Obry 5/19/2014 * Gem #158: GPRinstall - Part 1by Pascal Obry 4/28/2014 * Gem #157: Gprbuild and Code Generation 3/3/2014 * Gem #156: Listing Control in GNATby Robert Dewar 2/4/2014 * Gem #155: Enhancing the GPRBuild Database for a New Languageby Vincent Celier 12/9/2013 * Gem #154: Multicore Maze Solving, Part 2by Pat Rogers 10/28/2013 * Gem #153: Multicore Maze Solving, Part 1by Pat Rogers 10/9/2013 * Gem #152 : Defining a New Language in a Project Fileby Vincent Celier 9/23/2013 * Gem #151 : Specifying Mathematical Properties of Programsby Yannick Moy 7/1/2013 * Gem #150: Out and Uninitializedby Robert Dewar 6/17/2013 * Gem #149 : Asserting the truth, but (possibly) not the whole truthby Yannick Moy 6/3/2013 * Gem #148 : Su(per)btypes in Ada 2012 - Part 3by Yannick Moy 5/20/ 2013 * Gem #147 : Su(per)btypes in Ada 2012 - Part 2by Yannick Moy 5/6/ 2013 * Gem #146 : Su(per)btypes in Ada 2012 - Part 1by Yannick Moy 4/22/ 2013 * Gem #145: Ada Quiz 3 - Statementsby Valentine Reboul 4/8/2013 * Gem #144: A Bit of Bytes: Characters and Encoding Schemes 3/25/ 2013 * Gem #143 : Return to the Sources 3/11/2013 * Gem #142 : Exception-ally 2/25/2013 * Gem #141 : Con-figure it out 2/11/2013 * Gem #140: Bridging the Endianness Gapby Thomas Quinot 1/28/2013 * Gem #139 : Master the Command Line - Part 2 1/14/2013 * Gem #138 : Master the Command Line - Part 1 12/10/2012 * Gem #137: Ada Quiz 2 - An Heir and a Spare?by Valentine Reboul 11 /26/2012 * Gem #136: How tall is a kilogram?by Vincent Pucci 11/12/2012 * Gem #135 : Erroneous Execution - Part 4by Bob Duff 10/29/2012 * Gem #134 : Erroneous Execution - Part 3by Bob Duff 10/15/2012 * Gem #133 : Erroneous Execution - Part 2by Bob Duff 9/24/2012 * Gem #132 : Erroneous Execution - Part 1by Bob Duff 9/10/2012 * Gem #131 : Type-Safe Database API - Part 3 8/7/2012 * Gem #130 : Type-Safe Database API - Part 2 7/23/2012 * Gem #129 : Type-Safe Database API - Part 1 7/9/2012 * Gem #128 : Iterators in Ada 2012 - Part 2 6/25/2012 * Gem #127: Iterators in Ada 2012 - Part 1 6/11/2012 * Gem #126 : Aggregate Library Projectsby Pascal Obry 5/28/2012 * Gem #125: Detecting infinite recursion with GDB's Python APIby Jerome Guitton 5/14/2012 * Gem #124 : Scripting GPS for Static Analysisby Yannick MoyNicolas Setton 4/30/2012 * Gem #123: Implicit Dereferencing in Ada 2012by Christoph Grein 4/ 17/2012 * Gem #122: Breakpoint Commands -- Part 2by Jerome Guitton 4/10/2012 * Gem #121 Breakpoint Commands -- Part 1by Jerome Guitton 3/12/2012 * Gem #120 : GDB Scripting -- Part 2by Jean-Charles Delay 3/12/2012 * Gem #119 : GDB Scripting-- Part 1by Jean-Charles Delay 2/27/2012 * Gem #118: File-System Portability Issues and GNATCOLL.VFS 2/13/ 2012 * Gem #117: Design Pattern: Overridable Class Attributes in Ada 2012 2/1/2012 * Gem #116: Ada and C++ Exceptionsby Quentin Ochem 2/1/2012 * Gem #115: Lego Mindstorms Ada Environment -- Part 2by Pat Rogers 2 /1/2012 * Gem #114: Logging with GNATCOLL.Traces 2/1/2012 * Gem #113: Visitor Pattern in Ada 11/7/2011 * Gem #112: Lego Mindstorms Ada Environment -- Part 1by Pat Rogers 10/17/2011 * Gem #111: The Distributed Systems Annex, Part 5 -- Embedded Name Serverby Thomas Quinot 10/3/2011 * Gem #110: Ada Plug-ins and Shared Libraries -- Part 2by Pascal Obry 9/21/2011 * Gem #109: Ada Plug-ins and Shared Libraries -- Part 1by Pascal Obry 9/5/2011 * Gem #108: Gprbuild and Configuration Files -- Part 2by Johannes Kanig 6/17/2011 * Gem #107: Preventing Deallocation for Reference-counted Typesby Ada Magica 6/6/2011 * Gem #106: Lady Ada Kisses Python -- Part 2 5/23/2011 * Gem #105: Lady Ada Kisses Python -- Part 1 5/9/2011 * Gem #104: Gprbuild and Configuration Files -- Part 1by Johannes Kanig 4/26/2011 * Gem #103: Code Archetypes for Real-Time Programming -- Part 5by Marco Panunzio 4/11/2011 * Gem #102: SOAP/WSDL client partby Pascal Obry 3/28/2011 * Gem #101: SOAP/WSDL server partby Pascal Obry 3/14/2011 * Gem #100: Reference Counting in Ada - Part 3: Weak References 2/ 28/2011 * Gem #99: Reference Counting in Ada - Part 2: Task Safety 2/14/ 2011 * Gem #98: High Performance Multi-core Programming - Part 2by Pat Rogers 1/31/2011 * Gem #97: Reference Counting in Ada - Part 1 1/17/2011 * Gem #96: Code Archetypes for Real-Time Programming - Part 4by Marco Panunzio 12/6/2010 * Gem #95: Dynamic Stack Analysis in GNATby Quentin Ochem 11/22/ 2010 * Gem #94: Code Archetypes for Real-Time Programming - Part 3by Marco Panunzio 11/8/2010 * Gem #93: High Performance Multi-core Programming - Part 1by Pat Rogers 10/25/2010 * Gem #92: Code Archetypes for Real-Time Programming - Part 2by Marco Panunzio 10/11/2010 * Gem #91: Smart Completion (Part 2 of 2)by Quentin Ochem 9/27/2010 * Gem #90: The Distributed Systems Annex, Part 4 -- DSA and Cby Thomas Quinot 9/14/2010 * Gem #89: Code Archetypes for Real-Time Programming - Part 1by Marco Panunzio 6/22/2010 * Gem #88: GPS - Smart Completion (Part 1 of 2)by Quentin Ochem 6/ 14/2010 * Gem #87: The Distributed Systems Annex, Part 3 -- Mailboxesby Thomas Quinot 6/2/2010 * Gem #86: Ada Quiz 1 - Basic Typesby Quentin Ochem 5/17/2010 * Gem #85:The Distributed Systems Annex 2 -- Distributed Objectsby Thomas Quinot 5/3/2010 * Gem #84: The Distributed Systems Annex 1 - Simple client/serverby Thomas Quinot 4/19/2010 * Gem #83: Type-Based Security 2: Validating the Inputby Yannick Moy 4/5/2010 * Gem #82: Type-Based Security 1: Handling Tainted Databy Yannick Moy 3/22/2010 * Gem #81: GNAT Semaphoresby Pat Rogers 3/8/2010 * Gem #80: Speedy Shift and Rotate in SPARKby Rod Chapman 2/25/2010 * Gem #79: Where did my memory go? (Part 3) 2/8/2010 * Gem #78: Where did my memory go? (Part 2) 1/25/2010 * Gem #77: Where did my memory go? (Part 1) 1/11/2010 * Gem #76: Tokeneer Discovery - Lesson 6by Dean KuoAngela Wallenburg 12/14/2009 * Gem #75: Tokeneer Discovery - Lesson 5by Dean KuoAngela Wallenburg 11/30/2009 * Gem #74: Tokeneer Discovery - Lesson 4by Dean KuoAngela Wallenburg 11/16/2009 * Gem #73: Tokeneer Discovery - Lesson 3by Dean KuoAngela Wallenburg 11/2/2009 * Gem #72: Tokeneer Discovery - Lesson 2by Dean KuoAngela Wallenburg 10/19/2009 * Gem #71: Tokeneer Discovery - Lesson 1by Dean KuoAngela Wallenburg 10/5/2009 * Gem #70: The Scope Locks Idiomby Pat Rogers 9/21/2009 * Gem #69: Let's SPARK! -- Part 2by Yannick Moy 9/7/2009 * Gem #68: Let's SPARK! -- Part 1by Yannick Moy 6/29/2009 * Gem #67: Managing the GPS Workspace 6/15/2009 * Gem #66: GPS's Key Shortcuts Editor 6/1/2009 * Gem #65: gprbuild 5/18/2009 * Gem #64: Handling Multiple-Unit Source Files 5/4/2009 * Gem #63: The Effect of Pragma Suppressby Gary Dismukes 4/21/2009 * Gem #62: C++ constructors and Ada 2005by Javier MirandaArnaud Charlet 4/6/2009 * Gem #61: Interfacing with C++ constructorsby Javier MirandaArnaud Charlet 3/23/2009 * Gem #60: Generating Ada bindings for C++ headersby Arnaud Charlet 3/9/2009 * Gem #59: Generating Ada bindings for C headersby Arnaud Charlet 2 /23/2009 * Gem #58: Ada / Java exception handlingby Quentin Ochem 2/9/2009 * Gem #57: Ada / Java cross dispatchingby Quentin Ochem 1/26/2009 * Gem #56: Creating Ada to Java calls using GNAT-AJISby Quentin Ochem 1/12/2009 * Gem #55: Introduction to Ada / Java Interfacingby Quentin Ochem 12/8/2008 * Gem #54: Scripting Capabilities in GNAT (Part 2) 11/24/2008 * Gem #53: Safe and Secure Software: Chapter 12: Conclusionby John Barnes 11/17/2008 * Gem #52: Scripting Capabilities in GNAT (Part 1) 11/10/2008 * Gem #51: Safe and Secure Software: Chapter 11, Certified Safe with SPARKby John Barnes 11/3/2008 * Gem #50: Overload Resolutionby Bob Duff 10/27/2008 * Gem #49: Safe and Secure Software: Chapter 10, Safe Concurrencyby John Barnes 10/20/2008 * Gem #48: Extending Interfaces in Ada 2005by Quentin Ochem 10/13/ 2008 * Gem #47: Safe and Secure Software : Chapter 9, Safe Communication by John Barnes 10/6/2008 * Gem #46: Incompatibilities between Ada 83 and Ada 95by Robert Dewar 9/29/2008 * Gem #45: Safe and Secure Software : Chapter 8, Safe Startupby John Barnes 9/22/2008 * Gem #44: Accessibility Checks (Part III)by Bob Duff 9/15/2008 * Gem #43: Safe and Secure Software : Chapter 7, Safe Memory Managementby John Barnes 9/8/2008 * Gem #42: Safe and Secure Software : Chapter 6, Safe Object Constructionby John Barnes 7/7/2008 * Gem #41: Accessibility Checks (Part II: Ada2005)by Ramon Fernandez 6/30/2008 * Gem #40: Safe and Secure Software : Chapter 5, Safe Object Oriented Programmingby John Barnes 6/16/2008 * Gem #39: Efficient Stream I/O for Array Typesby Pat Rogers 6/9/ 2008 * Gem #38: Safe and Secure Software : Chapter 4, Safe Architecture by John Barnes 6/2/2008 * Gem #37: Bounded Buffer package in GNAT Hierarchy (Part 2)by Pat Rogers 5/26/2008 * Gem #36: Safe and Secure Software : Chapter 3, Safe Pointersby John Barnes 5/19/2008 * Gem #35: Bounded buffer package in GNAT hierarchy (Part 1)by Pat Rogers 5/12/2008 * Gem #34: Safe and Secure Software : Chapter 2, Safe Typingby John Barnes 5/5/2008 * Gem #33: Accessibility Checks (Part I: Ada95)by Ramon Fernandez 4 /28/2008 * Gem #32: Safe and Secure Software : Chapter 1, Safe Syntaxby John Barnes 4/21/2008 * Gem #31: Preconditions/postconditionsby Robert Dewar 4/14/2008 * Gem #30: Safe and Secure Software : Introductionby John Barnes 4/ 8/2008 * Gem #29: Introduction to the Ada Web Server (AWS)by Pascal Obry 3 /31/2008 * Gem #28: Changing Data Representation (Part 2)by Robert Dewar 3/ 17/2008 * Gem #27: Changing Data Representation (Part 1)by Robert Dewar 3/3 /2008 * Gem #26: The Mod Attributeby Bob Duff 2/25/2008 * Gem #25: How to Search Text 2/11/2008 * Gem #24: Null Considered Harmful (Part 2--Efficiency)by Bob Duff 1 /28/2008 * Gem #23: Null Considered Harmfulby Bob Duff 1/14/2008 * Gem #22: Ada Speaks Many Languagesby Robert Dewar, Vasiliy Fofanov, Franco Gasperoni, Yang Zhang 12/17/2007 * Gem #21: How to parse an XML text 12/10/2007 * Gem #20: Using pragma Shared_Passive for data persistenceby Pascal Obry 12/3/2007 * Gem #19: XML streaming of Ada objectsby Pascal Obry 11/26/2007 * Gem #18: Warnings in GNATby Bob Duff 11/19/2007 * Gem #17: Pragma No_Return, Part 2 (functions)by Bob Duff 11/12/ 2007 * Gem #16: Pragma No_Returnby Bob Duff 11/5/2007 * Gem #15: Timersby Anh Vo 10/29/2007 * Gem #14: Interrupt Handling Idioms (Part 2)by Pat Rogers 10/22/ 2007 * Gem #13: Interrupt Handling Idioms (Part 1)by Pat Rogers 10/15/ 2007 * Gem #12: Limited Types in Ada 2005 -- <> Notation Part 2by Bob Duff 10/8/2007 * Gem #11: Limited Types in Ada 2005 -- Constructor Functions Part 2 by Bob Duff 10/1/2007 * Gem #10: Limited Types in Ada 2005 -- Extended Return Statementsby Bob Duff 9/24/2007 * Gem #9: Classwide Operations, Iterators, and Generic Algorithmsby Matthew Heaney 9/17/2007 * Gem #8: Factory Functionsby Matthew Heaney 9/10/2007 * Gem #7: The Beauty of Numeric Literals in Adaby Franco Gasperoni 6/25/2007 * Gem #6: The Ada95 Multiple Views Idiom vs. Ada05 Interfacesby Matthew Heaney 6/18/2007 * Gem #5: Key-Based Searching In Set Containersby Matthew Heaney 6/ 11/2007 * Gem #4: PWM Position Control for Radiocontrol Servosby Michael Gonzalez Harbour 6/4/2007 * Gem #3: Limited Types in Ada 2005 -- Constructor Functionsby Bob Duff 5/28/2007 * Gem #2: Limited Types in Ada 2005 -- <> Notation in Aggregatesby Bob Duff 5/21/2007 * Gem #1: Limited Types in Ada 2005 -- Limited Aggregatesby Bob Duff 5/14/2007 Learn Ada Today Visit our interactive platform designed to teach the Ada and SPARK languages. >> Request Pricing Help us understand your development needs and request pricing or an evaluation >> * Products * GNAT Pro * GNAT Pro for Rust * GNAT Pro for C/C++ * GNAT Dynamic Analysis Suite * GNAT Static Analysis Suite * SPARK Pro * RecordFlux * Pricing * Terms and Conditions * Languages * Services * Certification & Qualification * Mentorship * Training * Consulting * Industries * Avionics * ATM * Space * Rail * Automotive * Defense * Security * Medical * Company * About AdaCore * Press Releases * Events * Executive Team * Careers * Our Customers * Partners * Contact * Resources * Overview * Case Studies * Books * Papers * Articles * Videos * AdaCore Blog * Learn.adacore.com * Community * Getting Started * About Ada * About SPARK * Contact * Academia * Overview * Projects * Universities * GAP Registration * GAP Login * Support * GNAT Tracker * Documentation * Dev Log * Cybersecurity Center * Other AdaCore Sites * The AdaCore Blog * Learn.adacore.com * Make with Ada Twitter LinkedIn YouTube GitHub RSS Copyright (c) 2025 AdaCore. All rights reserved. Legal | Privacy Policy | Cookie Policy | Code of Conduct *