Выпуск среды разработки PascalABC.NET 3.7.2

Доступен выпуск системы программирования PascalABC.NET 3.7.2, предлагающей редакцию языка программирования Паскаль с поддержкой генерации кода для платформы .NET, возможностью использования библиотек .NET и дополнительными возможностями, такими как обобщённые классы, интерфейсы, перегрузка операций, λ-выражения, исключения, сборка мусора, методы расширения, безымянные классы и автоклассы. Проект главным образом ориентирован на применение в сфере образования и научных исследований. Пакет также включает среду разработки с подсказками по коду, автоформатированием, отладчиком, дизайнером форм и образцами кода для начинающих. Код проекта распространяется под лицензией LGPLv3. Возможна сборка в Linux (на базе Mono) и Windows.

Изменения в новом выпуске:

  • Расширенный foreach с распаковкой значений в несколько переменных. Значения должны быть кортежами или последовательностями:
        begin    var a := Arr((1,2),(3,4),(5,6));    foreach var (x,y) in a do      Print(x,y);    Println;    var b := Arr(|1,2,3|,|4,5|,|6,7,8,9|);    foreach var (x,y) in b do      Print(x,y);  end.   
  • Литералы для BigInteger, имеющие окончание bi: 1bi, 874658734265762345bi
      Пример 1    begin    var n := ReadInteger;    var p := 1bi;    for var i:=2 to n do      p *= i;    Print(p);    end.  Пример 2    ##  Print(25bi ** 25 + 17bi ** 17)   
  • Использование uses в коротких программах
      Пример 1    ##  uses Graph3D;  Sphere(Origin,1);  Пример 2    ###  uses School;  Pr(Bin(123)); 
  • Стандартная библиотека.
    • Размещения и размещения с повторениями. В дополнение к методам a.Permutations и a.Combinations (m) для массивов реализованы: a.Cartesian (n) — возвращает n-тую декартову степень множества, элементов a.Permutations (m) — возвращает все частичные перестановки из n элементов по m.

      Кроме того, все указанные методы определены также над последовательностями

        ###  var a := Arr(1,3,5,7);  a.Permutations.Println;  a.Cartesian(2).Println;  a.Permutations(2).Println;  a.Combinations(2).Println;  Println;  var s := Seq(1,3,5,7);  s.Permutations.Println;  s.Cartesian(2).Println;  s.Permutations(2).Println;  s.Combinations(2).Println;  s.CountOf(x) для последовательностей  ###  var a := Arr(1,3,5,7,1,2,1,3,1,5);  a.CountOf(1).Print   
    • Sum, Average, Product для последовательностей BigInteger
        begin    var s := SeqGen(100,i->BigInteger(i)**i);    Print(s.Sum,s.Product);  end. 
    • Методы расширения строк s.IsInteger и s.IsReal:
        begin    var s := '123.4 3 5 6.6 a v 67';    var (si,sr) := (0,0.0);    foreach var w in s.ToWords do      if w.IsInteger then        si += w.ToInteger      else if w.IsReal then        sr += w.Toreal;    Print(si,sr);    end. 
    • s.ToWords (delims) с разделителями в виде строки. Разделители в s.ToWords теперь можно задавать в виде строки
        begin    var s := '123.4, 6.6, 67';    s.ToWords(' ,').PrintLines  end. 
    • Определена константа AllDelimiters, содержащая все разделители слов в текстах
        begin    ...    s.ToWords(AllDelimiters).Println  end. 
    • В Graph3D реализована сериализация и десериализация компонентов Object3D
        Сериализация    uses Graph3D;    begin    var s := Sphere(0,0,0,1);    s.AddChild(Cube(0,0,1,0.5));    s.AddChild(Cube(1,0,0,0.5));    s.AddChild(Cube(-1,0,0,0.5));    s.Serialize('c.dat');  end.  Десериализация    uses Graph3D;    begin    var s := Object3D.DeSerialize('c.dat') as SphereT;    var c1 := s[0] as CubeT;    var c2 := s[1] as CubeT;    var c3 := s[2] as CubeT;  end.   



Источник: http://www.opennet.ru/opennews/art.shtml? num=54447

© OpenNet