XL (プログラミング言語)

XL
パラダイム マルチパラダイム, コンセプト指向, 命令型, 関数型
登場時期 2000
設計者 クリストフ・ド・ディネシャン (en:Christophe de Dinechin)
開発者 クリストフ・ド・ディネシャン
最新リリース 0.1/ 2010年2月 (14年前) (2010-02)
型付け 強い型付け
影響を受けた言語 Ada, C++
プラットフォーム Unix系
ライセンス GPLv2
ウェブサイト xlr.sf.net
テンプレートを表示

XLeXtensible Language(拡張可能言語)を表しており、コンセプトプログラミングに則り設計された、2016年時点で唯一のプログラミング言語である[1]

XLはプログラマによって再構成可能な構文と意味論を持つことを特徴としている。コンパイラプラグインを使って言語に新しい機能を追加できる。あるプラグインの基本セットは比較的標準的な命令型プログラミング言語を実装している。プログラマは独自のプラグインを書くことで、記号微分のように個々の応用に則した記法を実装し、組み込みの言語機能と同様に使用できる。

言語

XLは4つの異なるレベルで定義されている:

  • XL0: 入力文字列を構文木に変換する方法を定義する。
  • XL1: C++に相当する機能を備えた基本言語を定義する。
  • XL2: 基本データ型と演算子を含む標準ライブラリを定義する。
  • XLR: XL0を基にしたXLの動的ランタイムを定義する。

XLにはプリミティブ型予約語がない。整数や加算演算子といった、有用なデータ型と演算子は、すべて標準ライブラリ(XL2)で定義されている。XL1は異なる実行環境間で移植可能である。一方でXL2にはそのような保証はなく、もしCPUが浮動小数点数の乗算を実装していなければ、それに対応した演算子の定義は標準ライブラリから欠落しているかもしれず、また、浮動小数点数の乗算はコンパイル時エラーとなるかもしれない。

XLで書かれたHello Worldは次のようになる。

 use XL.TEXT_IO
 WriteLn "Hello World"

より大規模なプログラムにふさわしいスタイルで書かれた別のプログラムは次のようになる。

 import IO = XL.TEXT_IO
 IO.WriteLn "Hello World"

XLRでの階乗の再帰的な実装は次のようになる。

 0! -> 1
 N! -> N * (N-1)!

構文

構文はXL0レベルで定義されている。コンパイラのXL0フェーズは、テキストの内部表現や演算子の優先順位といったプロパティが定義されている構文記述ファイルによって設定可能である。基本構文ファイルは、加算の+といった、一般的な数学の記法を、普段用いられる演算子の優先順位で定義している。

構文木は7種のノードから成る。4種の葉ノード(整数・実数・テキスト・シンボル)と、3種の内部ノード(中置・前置・ブロック)が存在する。

  • 整数ノードは、2のような整数リテラルを表現する。#記号を、基数に10以外を指定するために使うことができる。(2進数の1001は2#1001。)アンダースコアを読みやすくするための区切りとして使うことができる。(例: 1_000_000
  • 実数ノードは2.5のような整数でない数を表現する。整数ノードと同様に、基数の記法や区切り記号を使うことができる。たとえば、16#F.FFF#E-10は正しい実数リテラルである。
  • テキストノードはテキストを表現する。普通はシングルクォートかダブルクォートで囲まれる。(例: "Hello", 'a')しかし、構文記述ファイルで定義することで、他の区切り記号を用いることや複数行のテキストを含めることも可能である。
  • シンボルノードは名前や演算子を表現する。名前はアルファベットから始まる英数字の並びである。(例: Hello)XL0は大文字・小文字を区別するが、XL1は大文字・小文字とアンダースコアを無視するため、JohnDoejohn_doeは同じ名前である。演算子は非英数字の並びである。(例: *, =/=
  • 中置ノードは中置シンボルに関係する2つのノードを表現する。(例: A+1, 2 and 3)とりわけ、行を区切るために、「改行」シンボルの中置ノードが使われる。
  • 前置ノードは2つの連続したノードを表現する。(例: Write "Hello")これは前置記法だけではなく、後置記法にも用いられる。(例: 3!, Open?
  • ブロックノードはグループ化シンボルに囲まれたノードを表現する。(例: (A), [Index])また、インデントは内部的にはブロックノードとして表現される。

デフォルトの構文記述ファイルでは、意味論に関わらず、次のものはXL0による正しい記述とされる。

A = B + "Hello"

これは、次のように構文解析される。

infix("=",
      symbol("A"),
      infix("+",
            symbol("B"), text("Hello")))

XL1の意味論

XL1フェーズはXL0構文木に対しての一連の操作として定義されている。操作は様々なコンパイラプラグインとして提供され、それぞれ構文木の形に従って呼び出される。

あるプラグインによって、他のプラグインを楽に記述できるようにするためにtranslatetranslationという特別な構造が提供されている。quote構造は構文木を生成する。これらの構造を用いて、ZeroRemovalという意味のないゼロ加算とゼロ乗算を計算するプラグインを、以下に示す。

translation ZeroRemoval
  when
    'X' + 0
  then
    return X
  when
    'X' * 0
  then
    return parse_tree(0)

プラグインはコマンドラインを使ってファイル全体に適用させることができる。また、以下のようにpragma表記を使って、ソースコード内だけで完結させることができる。

X := {Differentiate} d(sin(omega * T) * exp(-T/T0)) / dT

XL1フェーズはXLSemanticsに代表されるような、沢山のプラグインを持ち、それらはプログラミングでの主な概念であるサブルーチンデータ型変数宣言定義に加えて、基本的な構造化プログラミングに使う条件分岐や繰り返しを提供する。

型システム

XL1の型システムは静的型付けだが、ジェネリックプログラミングの方式がAbaやC++などの言語とは異なる。配列やポインタなどは、C++ではプリミティブ型であるが、XLではライブラリで定義される。以下に一次元配列の定義を例示する。

generic [Item : type; Size : integer] type array

有効なジェネリック型(validated generic type)とは、その型がどのように使われるかを自身で表せる型であり、このような型にはジェネリック引数が必要ない。例として、不等号を含むときに型をorderedと宣言するものを示す。

// A type is ordered if it has a less-than relationship
generic type ordered if
  A, B : ordered
  Test : boolean := A < B

これによって、ordered自身がジェネリックとなるから、潜在的にジェネリックとなる関数を定義することが可能となる。

// Generic function for the minimum of one item
function Min(X : ordered) return ordered is
  ... compute Y of type ordered ... 
  return Y

さらに、arrayのようなパラメータを持つジェネリック型にも適用できる。任意の配列(array)の和を計算する関数を以下に示す。

function Sum(A : array) return array.Item is
  for I in 0..array.Size-1 loop
    result += A[I]

型安全な引数リスト

関数は多重定義できる。関数は宣言時の引数リストに...を使うことで、可変引数を扱うことができる(当初はothetがこの目的で使われていた)。この際、...を使ってサブルーチンにそのまま引数を渡すことができる。これを可変引数テンプレートと呼ぶ。

// Generic function for the minimum of N item
function Min(X : ordered; ...) return ordered is
  result := Min(...)
  if X < result then
    result := X

このような関数が呼び出されたとき、コンパイラは引数リストに合うように再帰的に関数を作る。

// Examples of use of the Min just declared
X : real := Min(1.3, 2.56, 7.21)
Y : integer := Min(1, 3, 6, 7, 1, 2)

演算子オーバーロード

演算子は関数宣言のうちのwritten形式を使って定義することができる。以下に整数の足し算を定義するコードを示す。

function Add(X, Y: integer) return integer written X+Y

writtenを使った定義には三つ以上の引数を取ることができる。例として線型変換の行列を示す。

function Linear(A, B, C : matrix) return matrix written A+B*C

writtenは定数も扱える。これによってより特殊な演算子を定義できる。

function Equal(A, B : matrix) return boolean written A=B
function IsNull(A : matrix) return boolean written A=0
function IsUnity(A : matrix) return boolean written A=1

基本的な演算子はすべてこのメカニズムで実装される。式はwrittenを用いた関数呼び出しに集約される。よってこのメカニズムは関数オーバーロードというよりも、式削減(expressin reduction)に近い。

イテレータ

XLイテレータはジェネレータイテレータの両方を扱える。

import IO = XL.UI.CONSOLE

iterator IntegerIterator (var out Counter : integer; Low, High : integer) written Counter in Low..High is
    Counter := Low
    while Counter <= High loop
        yield
        Counter += 1

// Note that I needs not be declared, because declared 'var out' in the iterator
// An implicit declaration of I as an integer is therefore made here
for I in 1..5 loop
    IO.WriteLn "I=", I

開発状況と経緯

XLは1992年頃から長い時間をかけて開発された。最初のバージョンはクリストフ・ド・ディネシャン (en:Christophe de Dinechin)が設計し、発表した。

XLのコンパイラは最初はC++で書かれていて、上に示すような機能のほとんどは正しく実装されていた。しかし、C++自身は拡張的でないため、プラグインを書くのは難しく、translateのような構造の実装は不可能であった。構文木はさらに複雑で、他のプログラミング言語でも扱えるようにするために非常に多くの木構造を実装する必要があった。Mokaは同様の仕組みを使ったJava-to-Javaの拡張可能なコンパイラである。

他プログラミング言語対応と複雑な構文木構造を諦めて、2003年にコンパイラの再開発が始まった。構文木は七つのタイプに大幅に簡略化された。2004年にXL自身で書かれたコンパイラが完成し、それ以降の開発はすべてXLで完結している。新たなコンパイラもXL1の実装がまだ不十分であるが、すでにいくつかの点でC++を上回っている。

影響を受けた言語

XL1は多くのプログラミング言語から影響を受けている。

  • Adaは、例外処理、タスク処理などを含めた広範囲の部分に影響を与えた。
  • BASICの行番号や構造化プログラミングの考えは、プログラミング言語がいかに簡潔にできるかの指標を示した。
  • C言語はランタイムや機械語などの分野の基準であり、XLを動かすのに仮想マシンを用意する必要をなくした。
  • C++Standard Template Libraryは、(Abaにはない)ジェネリック型の暗黙の具体化などのジェネリック型に関するサポートの素晴らしさを示した。
  • Fortranは数値計算の分野ではCやC++をしのぐパフォーマンスを持っており、最適化に有効な言語構造とは何かを示した。
  • Javaはライブラリのポータブルサポートの重要性を示した。Javaのコンテナは、ジェネリックプログラミングを使わない場合の限界も示した。Javaのコード体系からも影響を受けた。
  • Lispの拡張性は今日に至るまで重要視されている。Lispは最初にオブジェクト指向の考えを標準化した。ただしLispの歴史はさらに古い。
  • Prologは異なるプログラミングモデルの利用が、時として便利で生産的であることを示した。XLのプラグインはPrologスタイルで書くこともできる。
  • Visual Basicは構造木表現がビジュアル化された表現とは切り離して考えられることを示した。VBの編集を逐語的にする人は少ない。XLも直接的に構文木を扱うことで、同様の能力を持つ可能性をもっている。

XLRの意味論

XLRは動的言語だが、元々はXL Runtimeの略でXL1コンパイラのバックエンドとして存在した。XLRはXL0の文法をXL1と共有しているが、動作はむしろ関数言語に近い。逆にXL1は命令型言語に近い。XLRは実質的には"->"という一つのオペレータのみを持ち、その役割は書き換えである。左側の記述が右側の記述に変化させられる。

このメカニズムを使って、標準的な式を実装する。

 if true then TrueBody else FalseBody -> TrueBody
 if false then TrueBody else FalseBody -> FalseBody

脚注

  1. ^ Manchester, Phil (2008年1月16日). “Dip into Concept Programming”. The Register. http://www.theregister.co.uk/2008/01/16/concept_programming 2010年2月3日閲覧。 

外部リンク

Read other articles:

Harry Siddons MowbrayLahir(1858-08-05)5 Agustus 1858AlexandriaMeninggal1928Washington, ConnecticutKebangsaanAmerikaPendidikanAlfred C. Howland, Léon BonnatGerakan politikOrientalisme Idle Hours, 1895, at the Smithsonian American Art Museum[1] Rose Harvest, 1887, Mint Museum of Art, Charlotte NC. Harry Siddons Mowbray (5 Agustus 1858 – 1 Januari 1928) adalah seorang seniman asal Amerika. Dia mengeksekusi berbagai komisi lukisan untuk J.P. Morgan, F.W. Vanderbilt, dan ...

 

 

Artikel ini berisi tentang novel. Untuk film, lihat The Hunger Games: Mockingjay - Part 1 dan The Hunger Games: Mockingjay - Part 2 Mockingjay PengarangSuzanne CollinsPenerjemahHetih RusliNegaraAmerika SerikatBahasaInggris (Original)GenreFiksi ilmiah Fiksi remaja PetualanganDistopiaAksiPenerbitScholastic (AS) Gramedia Pustaka Utama (Indonesia)Tanggal terbit24 Agustus 2010 (AS), Januari 2012 (Indonesia)Halaman390 (AS), 432 (Indonesia)Didahului olehCatching Fire  Mockingjay adala...

 

 

Oldies radio station in San Antonio KONOSan Antonio, TexasBroadcast areaSan Antonio metropolitan areaFrequency860 kHzBranding86 KONOProgrammingLanguage(s)EnglishFormatOldiesOwnershipOwnerCox Media Group(CMG NY/Texas Radio, LLC)Sister stationsKCYYKISS-FMKKYXKONO-FMKSMGKTKXHistoryFirst air dateJanuary 17, 1927 (1927-01-17)Former call signsKGRC (1927-1930)Technical information[1]Licensing authorityFCCFacility ID50029ClassBPower5,000 watts day900 watts nightTransm...

German actor This article includes a list of general references, but it lacks sufficient corresponding inline citations. Please help to improve this article by introducing more precise citations. (March 2013) (Learn how and when to remove this template message) Matthias HabichMatthias Habich in April 2018Born (1940-01-12) 12 January 1940 (age 84)Danzig, Nazi Germany (present-day Gdańsk, Poland)OccupationActorYears active1965–present Matthias Habich (born 12 January 1940) is a Ger...

 

 

First era of the Phanerozoic Eon 539–252 million years ago Primitive period redirects here. For the use in mathematics, see Periodic function. Paleozoic538.8 ± 0.2 – 251.9 ± 0.024 Ma Pha. Proterozoic Archean Had. Chronology−550 —–−500 —–−450 —–−400 —–−350 —–−300 —–−250 —PrPhanerozoicNeoproterozoicPaleozoicMesozoicCambrianOrdovicianSil...

 

 

この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。出典を追加して記事の信頼性向上にご協力ください。(このテンプレートの使い方)出典検索?: コルク – ニュース · 書籍 · スカラー · CiNii · J-STAGE · NDL · dlib.jp · ジャパンサーチ · TWL(2017年4月) コルクを打ち抜いて作った瓶の栓 コルク(木栓、�...

Pemilihan Umum Singapura 202010 Juli 202095 kursi Parlemen Singapura (termasuk 2 kursi anggota non-konstituen) 47 kursi untuk meraih status mayoritasTerdaftar2,651,435[1][2][3]Kehadiran pemilih2,535,565 (95.63%)[1]Kandidat   Partai pertama Partai kedua Partai ketiga   Ketua Lee Hsien Loong Pritam Singh Tan Cheng Bock Partai Partai Tindakan Rakyat Partai Buruh Partai Kemajuan Singapura Ketua sejak 3 Desember 2004 8 April 2018[4] 28 Maret ...

 

 

1929 American pre-Code romantic drama film by E. Mason Hopper Their Own DesireLobby cardDirected byE. Mason HopperScreenplay byFrances MarionJames Forbes (dialogue)Lucille Newmark (titles)Based onTheir Own Desire1929 novelby Sarita FullerStarringNorma ShearerBelle BennettLewis StoneRobert MontgomeryHelene MillardCinematographyWilliam H. DanielsEdited byHarry ReynoldsDistributed byMetro-Goldwyn-MayerRelease date December 27, 1929 (1929-12-27) Running time65 minutesCountryUnited ...

 

 

此条目序言章节没有充分总结全文内容要点。 (2019年3月21日)请考虑扩充序言,清晰概述条目所有重點。请在条目的讨论页讨论此问题。 哈萨克斯坦總統哈薩克總統旗現任Қасым-Жомарт Кемелұлы Тоқаев卡瑟姆若马尔特·托卡耶夫自2019年3月20日在任任期7年首任努尔苏丹·纳扎尔巴耶夫设立1990年4月24日(哈薩克蘇維埃社會主義共和國總統) 哈萨克斯坦 哈萨克斯坦政府...

  لمعانٍ أخرى، طالع سترلينغ (توضيح). سترلينغ     الإحداثيات 40°37′32″N 103°12′43″W / 40.6256°N 103.212°W / 40.6256; -103.212   [1] تاريخ التأسيس 1868  تقسيم إداري  البلد الولايات المتحدة[2]  التقسيم الأعلى مقاطعة لوغان  عاصمة لـ مقاطعة لوغان  خصائص جغرافي�...

 

 

Euphemism for program of systematic torture by U.S. government Enhanced interrogation techniques or enhanced interrogation was a program of systematic torture of detainees by the Central Intelligence Agency (CIA), the Defense Intelligence Agency (DIA) and various components of the U.S. Armed Forces at remote sites around the world—including Bagram, Guantanamo Bay, Abu Ghraib, and Bucharest—authorized by officials of the George W. Bush administration.[1][2][3][4...

 

 

British people of African descent Ethnic group Black British peopleDistribution by local authorities in the 2011 censusTotal population United Kingdom: 2,485,724 – 3.7% (2021/22 Census)  England: 2,381,724 – 4.2% (2021)[1] Scotland: 65,414 – 1.2% (2022)[a][3] Wales: 27,554 – 0.8% (2021)[1]Northern Ireland: 11,032 – 0.6% (2021)[4]Regions with significant populationsLondonBirminghamManchesterLeedsHertfordshireKentEssexNottinghamLa...

Minelayer Júpiter Class overview BuildersSECN Operators Spanish Navy In commission1935–1977 Completed4 Retired4 General characteristics TypeMinelayer Displacement 2,100 long tons (2,100 t) standard 2,600 long tons (2,600 t) full load Length100 m (328 ft 1 in) Beam12.36 m (40 ft 7 in) Draught3.6 m (11 ft 10 in) Propulsion 2 shaft Parsons type geared turbines 2 Yarrow boilers 5,000 hp (3,700 kW) Speed18 knots (33 ...

 

 

Cet article est une ébauche concernant une localité malienne. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Dogani Béré Administration Pays Mali Région Mopti Cercle Bandiagara Maire Kalilou Diombélé (URD) Démographie Population 4 419 hab. (2009[1]) Population précédent recensement 3 259 hab. Géographie Coordonnées 14° 54′ 00″ nord, 3° 25′ 00″&#...

 

 

此條目没有列出任何参考或来源。 (2021年12月29日)維基百科所有的內容都應該可供查證。请协助補充可靠来源以改善这篇条目。无法查证的內容可能會因為異議提出而被移除。 腓特烈·卡爾符騰堡-溫嫩塔爾公爵出生(1652-09-12)1652年9月12日斯圖加特逝世1697年12月20日(1697歲—12—20)(45歲)斯圖加特貴族符騰堡家族父親埃伯哈德三世母親安娜·卡塔里娜 腓特烈·卡爾(德語:Friedrich...

French colony and later territory in Northern Africa from 1830 to 1962 This article is about Algeria. For other uses, see Algeria (disambiguation). French in Algeria redirects here. For usage of the French language, see French language in Algeria. French AlgeriaAlgérie française (French)الجزائر المستعمرة (Arabic)1830–1962 FlagAnthem: La Parisienne (1830–1848)Le Chant des Girondins (1848–1852)Partant pour la Syrie (1852–1870)La Marseillaise (1870–1962...

 

 

Lasting state of war with no clear ending conditions Forever war redirects here. For the novel, see The Forever War. For other uses, see The Forever War (disambiguation). Part of a series onWar(outline) History Prehistoric Ancient Post-classical castles Early modern pike and shot napoleonic Late modern industrial fourth-gen Military Organization Command and control Defense ministry Army Navy Air force Marines Coast guard Space force Reserves Regular / Irregular Ranks Specialties: Staff Engine...

 

 

This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Marshal of the Empire – news · newspapers · books · scholar · JSTOR (April 2021) (Learn how and when to remove this message) French military title Napoleon and several of his Marshals (recognisable by their white-feathered bicornes) at the Battle of Borodino in...

Hardanges La mairie. Administration Pays France Région Pays de la Loire Département Mayenne Arrondissement Mayenne Intercommunalité Communauté de communes Mayenne Communauté Maire Mandat Éric Neveu 2020-2026 Code postal 53640 Code commune 53114 Démographie Gentilé Hardangeois, Hardangeoises Populationmunicipale 183 hab. (2021 ) Densité 9,9 hab./km2 Géographie Coordonnées 48° 20′ 14″ nord, 0° 24′ 03″ ouest Altitude Min. 149 mMa...

 

 

Đây là một tên người Nhật; trong tiếng Nhật họ và tên được viết theo thứ tự Á Đông (họ trước tên sau): họ là Koshiba. Koshiba MasatoshiẢnh Koshiba Masatoshi trong tạp chí Koizumi Cabinet E-mail Magazine, số 74, 12 tháng 12 năm 2002.Sinh(1926-09-19)19 tháng 9, 1926Toyohashi, Aichi, Nhật BảnMất12 tháng 11, 2020(2020-11-12) (94 tuổi)Tokyo, Nhật BảnQuốc tịchNhật BảnTrường lớpĐại học TokyoĐại học Roches...