汎用体パッケージの仕様部generic   Max_Size : Natural; -- 汎用体仮オブジェクトの例   type Element_Type is private; -- 汎用体仮データ型の例;  この例では制限型でなければ任意のデータ型が該当package Stacks is   type Size_Type is range 0 .. Max_Size;   type Stack is limited private;   procedure Create (S : out Stack;                     Initial_Size : in Size_Type := Max_Size);   procedure Push (Into : in out Stack; Element : in Element_Type);   procedure Pop (From : in out Stack; Element : out Element_Type);   Overflow : exception;   Underflow : exception;private   subtype Index_Type is Size_Type range 1 .. Max_Size;   type Vector is array (Index_Type range <>) of Element_Type;   type Stack (Allocated_Size : Size_Type := 0) is record      Top : Index_Type;      Storage : Vector (1 .. Allocated_Size);   end record;end Stacks;汎用体パッケージのインスタンス化type Bookmark_Type is new Natural;-- 編集中のテキストドキュメント内の場所を記録するpackage Bookmark_Stacks is new Stacks (Max_Size => 20,                                       Element_Type => Bookmark_Type);-- ドキュメント中の記録された場所にユーザがジャンプできるようにする汎用体パッケージインスタンスの利用type Document_Type is record   Contents : Ada.Strings.Unbounded.Unbounded_String;   Bookmarks : Bookmark_Stacks.Stack;end record;procedure Edit (Document_Name : in String) is   Document : Document_Type;begin   -- ブックマークのスタックを初期化   Bookmark_Stacks.Create (S => Document.Bookmarks, Initial_Size => 10);   -- この時点でDocument_Nameファイルを開いたり、読み込んだりが可能end Edit;
Adaには1977年-1980年の設計当初から汎用体 (generics) が存在する。標準ライブラリでも多くのサービスを実装するために汎用体を用いている。Ada2005では1998年に規格化されたC++のStandard Template Library (STL) の影響を受けた広範な汎用コンテナが標準ライブラリとして追加された。汎用体 (generic unit) とは、0または複数の汎用体仮パラメータ (generic formal parameters) を採るプログラム単位（パッケージまたは副プログラム）である。汎用体仮パラメータとしては、オブジェクト（変数・定数）、データ型、副プログラム、パッケージ，さらには他の汎用体のインスタンスさえ指定することができる。汎用体仮パラメータのデータ型としては、離散 (discrete) 型、浮動小数点数型、固定小数点数型、アクセス（ポインタ）型などを用いることができる。汎用体をインスタンス化する際、プログラマは全ての仮パラメータに対応する実パラメータを指定する必要があるが、プログラマが明示的に全ての実パラメータを指定しなくても済むよう，仮パラメータにはデフォルトを指定することもできる。インスタンス化してしまえば，汎用体のインスタンスは、汎用体ではない通常のプログラム単位であるかのように振舞う。インスタンス化は実行時、例えばループの中などで行うことも可能である。
ジェネリックプログラミングはデータ型でコードをインスタンス化するのか、あるいはデータ型をパラメータとして渡すかということにかかわらず、同じソースコードを利用できる。ジェネリックプログラミングは言語により異なる形で実装されている。ジェネリックプログラミングの機能は1970年代にCLUやAdaのような言語に搭載され、次にBETA、C++、D、Eiffel、Java、その後DECのTrellis/Owl言語などの数多くのオブジェクトベース (object-based) およびオブジェクト指向 (object-oriented) 言語に採用された。1995年の書籍デザインパターンの共著者は（Ada、Eiffel、Java、C#の）ジェネリクスや、（C++の）テンプレートとしても知られるパラメータ化された型 (parameterized types) としてジェネリクスについて触れている。これらは、型を指定することなく、型を定義できるようにする（型は使用する時点で引数として与えられる）。このテクニック（特にデリゲーションを組み合わせるとき）は非常に強力である。
2009年になってアイルランド、ドイツ、アメリカ合衆国におけるカトリック聖職者による児童性的虐待事件が報道されるようになった。このスキャンダルに関してカトリック教会およびベネディクト16世への批判が高まり教会への不信は戦後最悪ともされる状態にまで陥り、教皇の辞任を求めるデモも発生していた。アイルランドにおける事例については2009年末にアイルランド政府が公表した報告書が騒動のきっかけとなった。この中では1930年から80年代にかけて、教会の運営する施設において数百人の聖職者が少なくとも2500人の少年少女に性的虐待を加えたと述べられており、さらに組織的な隠ぺいがあったと結論している。ベネディクト16世は事件のもみ消しを図ったショーン・ブレイディー枢機卿の処罰を行っていないことが批判された。300人以上もの被害者が報告されているドイツにおける事件では、教皇が大司教であった1980年の南部ミュンヘン教区においても被害者が存在すること、教皇の実兄が指揮者を務めたレーゲンスブルク聖歌隊においても虐待があったこと、さらに性的虐待に関与した神父の教会施設受け入れを認めたと報道されている。アメリカ合衆国における事例では、ある神父が1950年から1974年にかけて聴覚障害を持つ児童200人に対して性的虐待を行ったとの報告が1996年に教理省に届けられたにもかかわらず、当時長官であった現教皇はこれに何の回答も行わなかったと報道されている。これらのカトリック教会への批判に対して、教皇は3月の日曜礼拝において「つまらないゴシップにおびえることはない」と述べ隠蔽への関与を否定した。教皇に近い司教らは、報告されている聖職者による性的虐待は「一部の者の過ち」に過ぎず、「性的虐待はカトリックだけの問題ではない」「何者かの陰謀だ」などと反論している。ベネディクト16世の説教師を務めるカプチン会のRaniero Cantalamessaは、“教会への批判は反ユダヤ主義に基づくユダヤ人迫害に似ている”と述べ、不適切な発言であると再度批判を受けた。2013年2月11日、ベネディクト16世の退位の発表に対し、これら性的虐待被害者の団体は、「性的虐待をするという恐怖の状態を終わらせるのにほとんど何も手を尽くさなかった」として退位を歓迎している。