PascalABC.NETは、複数のプログラミングパラダイムをサポートする高水準の汎用プログラミング言語です。DelphiのObject Pascalをベースにしていますが、C#、Python、Kotlin、Haskellからも影響を受けています。Windows( .NET Framework)、Linux、macOS(Mono)向けのコマンドラインツールとして配布されているほか、対話型デバッガ、 IntelliSenseシステム、フォームデザイナー、コードテンプレート、コード自動フォーマット機能などを備えたWindowsおよびLinux向けの統合開発環境も提供されています。
PascalABC.NET は.NET Framework プラットフォーム向けに実装されているため、すべての .NET ライブラリと互換性があり、ガベージ コレクション、例外処理、ジェネリクスなど、共通言語ランタイムのすべての機能を利用できます。タプル、シーケンス、ラムダなどの一部の言語構造は、通常の .NET 型に基づいています。PascalABC.NET は、理念的にはOxygeneに近いですが、Oxygene とは異なり、Delphiとの高い互換性を提供します。
PascalABC.NET は、ロシアのロストフ・ナ・ドヌにある数学・力学・コンピュータ科学研究所の熱心な研究者グループによって開発されました。[ 1 ] 2003 年、現代の PascalABC.NET の前身である Pascal ABC が、准教授の Stanislav Mikhalkovich によって実装されました。これは、時代遅れになり、最新のオペレーティングシステムと互換性がなくなったものの、教育目的でまだ使用されていたTurbo Pascalの代わりに、小学生を教えるために使用されるものでした。Pascal ABC はインタプリタ型プログラミング言語として実装されたため、パフォーマンスが著しく低下しました。その 4 年後、学生の Ivan Bondarev、Alexander Tkachuk、Sergey Ivanov によって、 .NET プラットフォーム用のコンパイル型プログラミング言語として完全に書き直されました。2009 年、PascalABC.NET は高校生の教育に積極的に使用されるようになりました。2015 年までに、この言語のユーザー数は大幅に増加しました。 PascalABC.NETは、ロシア全土の学校やプログラミングコンテストでFree Pascalを凌駕するほどの勢いで使われるようになった。それ以来、PascalABC.NETの開発者たちは、この言語に最新の機能を積極的に取り入れることを目標としてきた。同年、PascalABC.NETはGNU Lesser General Public License (LGPLv3)の下で配布されるオープンソースプロジェクトとなった。[ 2 ] [ 3 ]
2017年[ 4 ]と2022年[ 5 ]に、 PascalABC.NETの公開リポジトリに対する独立した監査が実施されました。静的チェックの結果に基づき、開発者による追加分析が必要な、潜在的に危険なコード断片がリストアップされました。また、コード全体の品質を向上させる必要があることも指摘されました。そのためには、コードの重複や冗長なチェックを排除し、リファクタリングをより慎重に行う必要があります。
教育用に設計された PascalABC.NET は、ロシアの学校で最も一般的なプログラミング言語であり、情報科学の統一国家試験に合格するための推奨言語の 1 つです。[ 6 ] [ 7 ] [ 8 ]南部連邦大学では、コンピュータサイエンスを専攻する学生への第一言語として、またロシア最大のコンピュータスクールの 1 つで子供たちへの教育に使用されています。[ 9 ] PascalABC.NET は、教育大学でコンピュータサイエンスの教師を養成するための基本的なプログラミング言語として広く使用されています。[ 10 ] [ 11 ] [ 12 ] [ 13 ]また、科学計算のツールとしても使用されています。[ 14 ] [ 15 ] PascalABC.NET は、プログラミングコンテストで使用される多くの検証システムにも組み込まれています。[ 16 ] [ 17 ]
2020年、新型コロナウイルス対策のロックダウンと自宅学習期間中、PascalABC.NETウェブサイトはYandexトラフィックランキングの「プログラミング」カテゴリで3位にランクインし、インストールキットのダウンロード数は1日10000件を超えました。[ 18 ]
PascalABC.NET コミュニティの中核はロシアにありますが、この言語はベラルーシ[ 19 ]、ルーマニア[ 20 ]、インドネシア[ 21 ] 、アルジェリア[ 22 ]などの他の国でも知られています。
•loop声明
ループ10でWrite ( '*' ) ;を実行する•forステップ付きループ
for var i := 1 to 20 step 2 do Print ( i ) ;・foreachインデックス付きループ
foreach var c in Arr ( 'a' .. 'z' ) index i do if i mod 2 = 0 then Print ( c ) ;•a..b範囲
(1 ~10 )印刷行•短い関数定義構文
function Sum ( a , b : real ) := a + b ;・メソッドの実装はクラス定義内に配置できます
type Point = class x , y : real ; procedure Output ; begin Print ( x , y ) ; end ; end ;・sequence of T 配列、リスト、セットの抽象化としての型
var seq : sequence of integer := Arr ( 1 .. 10 ) ; seq . Println ; seq := Lst ( 11 .. 100 ) ; seq . Println ; seq := HSet ( 1 .. 20 ) ; seq . Println ;var a := ArrGen ( 10 , i -> i * i ) ;•自動クラス - コンストラクタが自動生成されるクラス
type Point = auto class x , y : real ; end ; var p := new Point ( 2 , 5 ) ;・一次元および多次元配列スライス
var m : array [ , ] of integer := MatrGen ( 3 , 4 , ( i , j ) -> i + j + 1 ) ; Println ( m ) ; // [[1,2,3,4],[2,3,4,5],[3,4,5,6]] Println ( m [ : 2 , 1 : 3 ]) ; // [[2,3],[3,4]]forインライン変数宣言、型推論、変数宣言を含むステートメントなどのその他の機能は、現在のバージョンの Delphi では標準となっています。しかし、これらの機能は PascalABC.NET が 2007 年に先駆けて導入したもので[ 23 ]、Delphi では 2018 年に実装されました[ 24 ] [ 25 ]。
caseステートメント内の文字列set of stringnew T(...)コンストラクタは構文で呼び出すことができますinterfaceできimplementationますPascalABC.NETでは、関数は第一級オブジェクトです。関数は変数に代入したり、パラメータとして渡したり、他の関数から返したりできます。関数型は の形式で設定されますT -> Res。[ 26 ]この型の変数には匿名関数を代入できます。
## // メインプログラムは begin-end を囲まずに記述されることを示しますvar f : real -> real := x -> x * x ;以下に、 2つの関数の重ね合わせの例を示します。
## function Super < T , T1 , T2 > ( f : T1 -> T2 ; g : T -> T1 ) : T -> T2 := x -> f ( g ( x )) ;var f :実数->実数:= x -> x * x ; var fg := Super ( f , Sin ) ; var gf :=スーパー( Sin , f ) ;print ( fg ( 2 )) ; print ( gf ( 2 )) ;重ね合わせ演算は標準ライブラリで定義されています。
## var f :実数->実数:= x -> x * x ;Print (( f * Cos )( 2 )) ; Print (( Cos * f )( 2 )) ;書籍「How To Program Effectively In Delphi」[ 27 ]および対応するビデオチュートリアル[ 28 ] [ 29 ]の中で、プログラマーでありコンピュータサイエンスの教育専門家でもあるケビン・ボンド博士[ 30 ]は、PascalABC.NETにはDelphiにはない強力な関数型プログラミング機能があると指摘しています。例として、部分関数適用が示されています。
begin var f : integer -> integer -> integer := x -> y -> x + y ; Writeln ( f ( 2 )( 6 )) ; end .PascalABC.NET はマルチパラダイムプログラミング言語です。昔ながらの Pascal から関数型プログラミングやオブジェクト指向プログラミングまで、さまざまなコーディングスタイルを使用できます。同じタスクを次のようにさまざまなスタイルで解決できます。[ 31 ]
begin var ( a , b ) := ReadInteger2 ; // 入力を 2 つの変数のタプルに読み込むvar sum := 0 ; // 型の自動推論for var i := a to b do sum += i * i ; Print ( $ 'Sum = {sum}' ) // 文字列補間end .function SumSquares ( a , b : integer ) : integer ; begin Result := 0 ; for var i := a to b do Result += i * i end ;begin var ( a , b ) := ReadInteger2 ; Print ( $ 'Sum = {SumSquares(a,b)}' ) end . このソリューションは、シーケンスと PascalABC.NET 固有の範囲に対して .NET 拡張メソッドを使用します(a..b)。
begin var ( a , b ) := ReadInteger2 ; ( a .. b ) . Sum ( x -> x * x ) . Print // ラムダ式を使用したメソッドチェーンend .このソリューションは、PascalABC.NET特有の簡潔な関数定義スタイルを示しています。
type Algorithms = class static function SumSquares ( a , b : integer ) := ( a .. b ) . Sum ( x -> x * x ) ; static function SumCubes ( a , b : integer ) := ( a .. b ) . Sum ( x -> x * x * x ) ; end ;begin var ( a , b ) := ReadInteger2 ; Println ( $ 'Squares sum = {Algorithms.SumSquares(a,b)}' ) ; Println ( $ 'Cubes sum = {Algorithms.SumCubes(a,b)}' ) end .PascalABC.NET標準ライブラリを使用せずにプログラムを作成することも可能です。すべての標準.NET Frameworkクラスとメソッドを直接使用できます。
uses System ; // using .NET System namespace begin var arr := Console.ReadLine.Split ( new char [ ]( ' ' ) , StringSplitOptions.RemoveEmptyEntries ) ; var ( a , b ) := ( integer.Parse ( arr [ 0 ] ) , integer.Parse ( arr [ 1 ] ) ) ; var sum := 0 ; for var i : = a to b do sum + = i * i ; Console.WriteLine ( $ ' Sum = { sum } ' ) end .PascalABC.NET は教師のトレーニングに積極的に使用されていますが、[ 7 ] [ 10 ] [ 32 ] [ 33 ]教育コミュニティの一部のメンバーは、歴史的に使用されてきた Turbo Pascal と PascalABC.NET の違いを無視し、特定されていない「Pascal」言語を、現代のプログラミングからかけ離れており、冗長で、最初のプログラミング言語として使用するには単純ではないと批判しています。[ 34 ] [ 35 ]彼らは、Python の方が簡潔で実用的であるため、Python が最良の出発点であると考えています。PascalABC.NET の開発者自身を含む反対者は、後者には Python の機能を含む多くの現代的なマルチパラダイム機能が含まれているため、古典的な Pascal と PascalABC.NET を同等に扱うのは間違いだと主張しています。[ 8 ] [ 36 ] [ 37 ] PascalABC.NET は、学生が Python と同じくらい簡潔で表現力豊かなプログラムを書けるようにし、[ 38 ]静的型付けの概念を適用することで「実用プログラミングへの架け橋」として機能します。[ 8 ] PascalABC.NET はコンパイル可能な言語でもあるため、すべての意味エラーが実行時に予期せず発生するのではなくコンパイル時に検出されるため、プログラミングの学習が容易になります。[ 8 ] [ 39 ] Pascal は厳密に構造化されたプログラミング言語としてよく見なされており、入門プログラミング教育で人気のある選択肢となっています。しかし、一部の著者は、Python を初心者向けの言語として推進するのは、商業的な利益によって部分的に推進されていると主張しています。
{{cite book}}: CS1メンテナンス: 場所の発行元が見つかりません (リンク){{cite book}}: CS1メンテナンス: 場所の発行元が見つかりません (リンク)