close

PascalABC.NET

Aller à la navigation Aller à la recherche
PascalABC.NET
Sémantique impératif
Cours de langue multi- paradigme : programmation structurée , orientée objet , générique , procédurale , programmation fonctionnelle
Type d'exécution compilateur
Apparaît dans 2007
Auteur S. S. Mikhalkovich , I. V. Bondarev, A. V. Tkachuk, S. O. Ivanov
Sortie 3.8.3 version 3162 (2022/08/20)
Système de types statique
Implémentations majeures PascalABC.NET,
Pascal ABC (obsolète)
A été influencé Pascal , Delphi , C# , Python , Kotlin
Licence LGPL
Site Internet pascalabc.net
Plateforme .NET CLR (WinXP et versions antérieures), Mono (Linux, MacOS)

PascalABC.NET est un  langage de programmation Pascal de nouvelle génération qui inclut le Pascal classique, la plupart des fonctionnalités du langage Delphi , ainsi qu'un certain nombre d'extensions propriétaires. Il est implémenté sur la plate-forme Microsoft.NET et contient toutes les fonctionnalités du langage moderne : déclarations dans le bloc, détection automatique de type, tuples , tranches, classes , surcharge d'opérateurs , interfaces , gestion des exceptions , classes et sous-routines génériques , expressions lambda , outils de programmation parallèle .

PascalABC.NET est positionné par les développeurs comme un langage de programmation pour l'enseignement et la recherche.

PascalABC.NET est un langage multi-paradigmes : il peut être programmé dans des styles structurels , orientés objet et fonctionnels .

PascalABC.NET est également un IDE simple et puissant compatible IntelliSense avec des outils de formatage automatique, un débogueur intégré et un concepteur de formulaires intégré. De plus, le compilateur de console PascalABC.NET fonctionne sous Linux et MacOS sous Mono .

Historique du développement

En 2003, l'environnement d'apprentissage de la programmation Pascal ABC a été créé à la Faculté de mathématiques, de mécanique et d'informatique de la Southern Federal University. Le système était un shell intégré avec un interpréteur intégré pour le langage de programmation Pascal, qui est proche du langage Delphi. Malgré l'implémentation incomplète du langage, il est devenu un remplacement réussi du système obsolète Turbo Pascal dans l'enseignement initial de la programmation. En tant que système éducatif, il était utilisé dans de nombreuses régions de la CEI . Dans le catalogue [email protected] , Pascal ABC a été reconnu comme l'émission de la semaine en 2006 [1] .

En 2005 - 2006, le système a été complètement repensé : son architecture a été changée - en un compilateur à part entière d'un langage proche de Delphi , avec des extensions liées à la plate-forme .NET . Le nouveau système a été nommé PascalABC.NET . En juin 2009, la première version stable de PascalABC.NET 1.2 est sortie.

En septembre 2009 , l'environnement de développement web WDE est apparu, qui ne nécessite pas l'installation de PascalABC.NET sur un ordinateur local et permet d'exécuter des programmes sur PascalABC.NET directement depuis une fenêtre de navigateur. L'environnement de développement Web a été fermé en octobre 2017.

En août 2011 , la transition vers .NET 4.0 (version 1.8) a été effectuée.

En février 2013 , PascalABC.NET 2.0 est sorti avec un concepteur de formulaire et un support de projet.

Le 15 mai 2013 , la version 2.1 est sortie avec la localisation en anglais de l'interface et des messages d'erreur.

Le 15 février 2014 , PascalABC.NET 2.2 est sorti. L'accès aux caractères d'une chaîne pour l'écriture a été grandement accéléré.

Le 28 août 2015, PascalABC.NET 3.0 est sorti. PascalABC.NET est devenu gratuit et distribué sous la licence LGPLv3.

Le 12 février 2016, PascalABC.NET 3.1 est sorti. Les tuples et les tranches sont apparus, la bibliothèque standard a été considérablement mise à jour.

Le 29 août 2016, PascalABC.NET 3.2 est sorti. Les opérateurs yield et yield sequence sont apparus , la bibliothèque standard a été mise à jour.

Le 30 août 2017, PascalABC.NET 3.3 est sorti. Il y avait des modules standard GraphWPF et Graph3D (pour Windows Vista et supérieur), une boucle de boucle simplifiée, une opération de coupe sécurisée, une affectation de tuple, la prise en charge des types Nullable. Ajout de la localisation ukrainienne de l'interface et des messages d'erreur.

Le 11 février 2018, PascalABC.NET 3.3.5 a été publié. Ajout du module standard NumLibABC (bibliothèque de formation aux méthodes numériques), implémentation des chaînes de format et de l'opération d'exponentiation. .NET 4.7.1 est intégré dans la version complète du kit de distribution (pour Windows Vista et supérieur), pour Windows XP le kit de distribution avec .NET 4.0 est laissé.

Le 25 mai 2018, PascalABC.NET 3.4 est sorti. Implémentation d'un sous-ensemble de Pattern Matching , l' opérateur is étendu .

Le 1er septembre 2018, PascalABC.NET 3.4.2 a été publié. Les propriétés étendues, les propriétés d'index étendues et les propriétés automatiques ont été implémentées, le module WPFObjects a été ajouté en remplacement des obsolètes ABCObjects.

Le 25 mai 2019, PascalABC.NET 3.5 est sorti. Pattern Matching ajoute la possibilité de faire correspondre des listes, des tuples et des constantes.

Le 16 janvier 2020, PascalABC.NET 3.6.0 a été publié. Une opération est implémentée ..qui retourne IntRangeou CharRangeselon le contexte, ainsi qu'une opération conditionnelle :var min := if a < b then a else b;

Le 7 mai 2020, PascalABC.NET 3.6.3 a été publié. L'opération d'accès par index à partir de la fin est implémentée a[^1]pour les tableaux, les listes et les chaînes. Implémentation de la possibilité d'utiliser des tranches sur le côté gauche de l'opérateur d'affectation : a[:2] := a[3:5]. Saisie redirigée considérablement accélérée

Le 8 août 2020, PascalABC.NET 3.7 est sorti. Implémentation de la décompression d'une séquence en variables, valeurs de tableau sous la forme de |1,3,5,7,9|, écriture de programmes sans externe à l' begin-endaide de ##( ## Print(2*2))

Le 7 mars 2021, PascalABC.NET 3.8 est sorti. Opérateur étendu implémenté foreach( ), littéraux pour sous la forme , tranches de tableaux multidimensionnels sous la forme , , expressions lambda avec paramètre unpacking ( ). foreach var (x,y) in aBigInteger1bim[:,:]m[^1,:]s.Where(\(name,age) -> age >= 18)

Le 24 août 2021, PascalABC.NET 3.8.1 est sorti. Implémentation de l'attribut [Cache] pour la mise en cache des résultats de la fonction, une directive complète {$zerobasedstrings}, un module PlotWPF standard.

Le 9 mars 2022, PascalABC.NET 3.8.3 est sorti. Conceptions mises en œuvre etfor var i:=1 to 6 step 2 doforeach var x in a index i do

Caractéristiques du langage

Extensions du langage Pascal

  • Les opérateurs+= -= *= /=
  • Opération **d'exponentiation
  • Déclarations intra-bloc de variables
  • Description des variables dans l'en-tête de la bouclefor
  • Initialisation de la variable à la description ( var n: integer := 10;)
  • Détection automatique du type de variable lors de l'initialisation ( var x := 1;)
  • Cycleforeach
  • Boucle simplifiéeloop
  • Sous -programmes à paramètres variables
  • Ensembles set basés sur des types arbitraires ( set of integer)
  • caseligne par ligne
  • Méthodes d' enregistrement
  • La possibilité de définir des méthodes à l'intérieur et à l'extérieur de l'interface d'une classe ou d'un enregistrement
  • Avec la syntaxe de module standard et simplifiée
  • Opération newpour appeler le constructeur
  • Initialiseurs de champs de classe et d'enregistrement
  • Surcharge de fonctionnement [2]
  • Classes automatiques
  • Classes sans nom
  • Expressions lambda
  • Type de fonction dans le styleT->T
  • Type de tuple de style(T1,T2)
  • Type de séquencesequence of T
  • Affectation de tuple(a,b) := (b,a)
  • Segments a[from:to:step]et tranches sûres a?[from:to:step]pour les tableaux, les listes et les chaînes
  • Tranches multidimensionnellesa[:,:10]
  • Opérateurs yieldet yield sequencepour générer des séquences
  • Opérateur de correspondance de modèlematch ... with
  • Fonctionnement prolongéis
  • Propriétés étendues, propriétés automatiques
  • Interpolation de chaîne
  • Fin de l'indexation :a[^1] := 777;
  • Plages ..et cycle par plage :foreach var i in 1..10 do Print(i);
  • Cycle foravec pas :for var i:=1 to 10 step 2 do Print(i);
  • Boucle foreachavec index :foreach var x in Arr(1,3,5) index i do Println(i,x);
  • Déballage des paramètres d'expression lambda\(x,y) -> x + y
  • Prise en charge partielle des directives OpenMP

Fonctionnalités du langage liées à la plate-forme .NET

  • Tous les types sont des classes
  • Type standard BigInteger
  • Formater les chaînes
  • Tableaux dynamiques multidimensionnels
  • Interfaces .NET
  • Connexion d'espaces de noms .NET dans une sectionuses
  • Classes génériques , interfaces, sous-programmes et variables procédurales
  • Ramassage automatique des déchets pour les objets
  • Les attributs
  • Méthodes d'extension
  • Prise en charge du code de plate-forme via externe
  • Types de type?valeur nil(synonyme Nullable<T>)

Modules standards

Comme toutes les bibliothèques de la plateforme .NET peuvent être utilisées dans PascalABC.NET , les modules standards sont peu nombreux et axés sur l'apprentissage :

  • Module graphique raster GraphWPF
  • Module graphique raster GraphABC (obsolète)
  • Module graphique et animation 3D Graph3D (basé sur la bibliothèque gratuite Helix Toolkit)
  • Module graphique vectoriel WPFObjects
  • Module graphique vectoriel ABCObjects (obsolète)
  • Module FormsABC de création d'interfaces graphiques (basé sur la technologie Windows Forms )
  • Module NumLibABC (bibliothèque de méthodes numériques)
  • Module PlotWPF pour la visualisation de données
  • Modules d'exécuteurs Robot et Dessinateur (informatique scolaire)
  • Module Cahier des tâches de programmation ( version de base)

Exemples de programmes

Exemple 1. Échangez les première et seconde moitiés d'un tableau

begin 
  var  a  :=  ArrGen ( 10 ,  i -> 2 * i + 1 ) ; 
  un . Imprimerln ; 
  Assert ( a . Length  mod  2  =  0 ) ; 
  var  n  :=  une . Longueur  div  2 ; 
  une  :=  une [ n : ]  +  une [ : n ] ; 
  un . Imprimerln ;  
fin .

Exemple 2. 100 !

début 
  var  P  :=  1 bi ;  
  pour  var  i  :=  1  à  100  faire 
    P  :=  P  *  i ; 
  println ( P ) ; 
fin .

Exemple 3 : Imprimer tous les nombres de Fibonacci inférieurs à 1000

begin 
  SeqWhile ( 1 ,  1 ,  ( x ,  y )  ->  x  +  y ,  x  ->  x  <  1000 ) . imprimer ; 
fin .

Exemple 4. Trouver le plus grand commun diviseur de deux nombres

début 
  var  ( a ,  b )  :=  ReadInteger2 ; 
  tandis que  b  <>  0  do 
    ( a ,  b )  :=  ( b ,  a  mod  b ) ; 
  var  pgcd  :=  Abs ( a ) ; 
  GCD . imprimer ; 
fin .

Exemple 5. Dictionnaire de fréquence des mots du fichier

begin 
  var  D  :=  new  Dictionary < string ,  integer >; 
  foreach  var  s  dans  ReadLines ( 'words.txt' )  faire 
    foreach  var  word  in  s . ToWords  do 
      D [ mot ]  :=  D . Obtenez ( mot )  +  1 ; 
  D. _ lignes d'impression ; 
fin .

Exemple 5a. Dictionnaire de fréquence des mots du fichier. Solution de style fonctionnel

commencer 
  ReadLines ( 'words.txt' ) . SélectionnezPlusieurs ( s  ->  s . VersMots ) . GroupBy ( v  ->  v ) . ToDictionary ( x  ->  x . Key ,  x  ->  x . Count ) . lignes d'impression ; 
fin .

Exemple 6. Valeurs maximales dans les colonnes d'une matrice

commencer 
  var  ( M ,  N )  :=  ( 4 ,  5 ) ; 
  var  A  :=  MatrRandom ( M ,  N ) ; 
  A. _ Imprimerln ; 
  A. _ Cols . Sélectionnez ( col  ->  col . Max ) . Imprimerln ; 
fin .

Exemple 7 : Multiplication matricielle parallèle à l'aide des directives OpenMP

procédure  Mult ( a ,  b ,  c :  tableau  [ , ]  de  réels ;  n :  entier ) ; 
begin 
  {$omp parallel for} 
  for  var  i  :=  0  to  n  -  1  do 
    for  var  j  :=  0  to  n  -  1  do 
    begin   
       var  cc  :=  0.0 ; 
       pour  var  l  :=  0  à  n  -  1  faire 
          cc  +=  a [ je ,  l ]  *  b [ l ,  j ] ; 
       c [ je ,  j ]  :=  cc ;    
    fin ; 
fin ;
 
const  N  =  1000 ;
 
début 
  var  A  :=  MatrRandomReal ( N ,  N ,  1 ,  1.1 ) ; 
  var  B  :=  MatrRandomReal ( N ,  N ,  1 ,  1.1 ) ; 
  var  C  :=  nouveau  réel [ N ,  N ] ; 
  Multi ( A ,  B ,  C ,  N ) ; 
  Writeln ( MillisecondesDelta  /  1000 ) ; 
fin .

Licence

PascalABC.NET (depuis la version 3.0) est un logiciel libre distribué sous la licence LGPLv3 .

Remarques

  1. Programmes de la semaine -> programmation Archivé le 4 juin 2012.
  2. Opération Surcharge (liaison descendante) . Date d'accès : 18 septembre 2015. Archivé de l'original le 4 mars 2016. 

Liens

Littérature

  • Mikhalkovitch S.S. Système de programmation pédagogique PascalABC // Conférence scientifique et méthodologique "Technologies de l'information modernes dans l'éducation : District fédéral du Sud" 13-14 mai 2004 / Krukier L.A., Muratova G.V. - Rostov-on-Don : YuGINFO RGU, 2004 . - S. 156-158. — 252 p. - 200 exemplaires.
  • Mikhalkovitch S.S. Système de programmation pédagogique PascalABC: expérience de développement et d'utilisation // Deuxième conférence scientifique et pratique internationale "Technologies modernes de l'information et enseignement de l'informatique": Actes. - M. , 2006. - S. 394-399.
  • Vodolazov N.N., Mikhalkovich S.S., Tkachuk A.V. Expérience dans le développement d'un langage de programmation pédagogique pour la plate-forme .NET // Conférence scientifique et méthodologique "Technologies modernes de l'information dans l'éducation : District fédéral du Sud" 26-29 avril 2007 / Krukier L.A., Muratova G.V. - Rostov-on-Don : TsVVR Publishing Maison, 2007 . - S. 71-73. - 312 p. - 250 exemplaires.  — ISBN 978-5-94153-146-2 .