[cache] для одного параметра не оборачивает его в Tuple - за счет этого ускорена в 10 раз

This commit is contained in:
Mikhalkovich Stanislav 2022-05-08 19:37:15 +03:00
parent 47cc526e19
commit 104f0d43da
14 changed files with 69 additions and 29 deletions

View file

@ -15,7 +15,7 @@ internal static class RevisionClass
public const string Major = "3";
public const string Minor = "8";
public const string Build = "3";
public const string Revision = "3115";
public const string Revision = "3116";
public const string MainVersion = Major + "." + Minor;
public const string FullVersion = Major + "." + Minor + "." + Build + "." + Revision;

View file

@ -1,4 +1,4 @@
%MINOR%=8
%REVISION%=3115
%COREVERSION%=3
%REVISION%=3116
%MINOR%=8
%MAJOR%=3

View file

@ -1,24 +1,30 @@
// Пример иллюстрирует возможности оператора foreach
// Пример иллюстрирует возможности оператора foreach
var
a: array [1..5] of integer := (1,3,5,7,9);
s: set of integer;
l: List<integer>;
begin
write('foreach по обычному массиву: ':35);
Write('foreach по обычному массиву: ':35);
foreach x: integer in a do
Print(x);
writeln;
Println;
s := [2..5,10..14];
write('foreach по множеству: ':35);
Write('foreach по множеству: ':35);
foreach var x in s do
Print(x);
writeln;
Println;
l := new List<integer>;
l.Add(7); l.Add(2); l.Add(5);
write('foreach по динамическому массиву: ':35);
Write('foreach по динамическому массиву: ':35);
foreach var x in l do
Print(x);
Println;
Write('foreach по диапазону: ':35);
foreach var x in 1..10 do
Print(x);
Println;
end.

View file

@ -59,10 +59,6 @@ PascalABC.NET</strong>
<p>Интегрированная среда <b>PascalABC.NET</b>
позволяет переключать в настройках русский и английский язык, при этом
локализованы не только элементы интерфейса, но и сообщения об ошибках.</p>
<p>Кроме этого, внутренние представления <strong>PascalABC.NET</strong> позволяют создавать
компиляторы других языков программирования и встраивать их в среду разработки с помощью
специальных
<a href="http://pascalabc.net/wiki/index.php/Плагины_для_PascalABC.NET">плагинов</a>.</p>
<h2>Специализированные модули для обучения</h2>
<p>Платформа Microsoft.NET обеспечивает <strong>PascalABC.NET</strong>
стандартной библиотекой, состоящей из огромного количества класссов для решения
@ -83,11 +79,6 @@ Taskbook</a> (
<a href="../PABCUnits/WPFObjects/index.html">WPFObjects</a> и модуль трёхмерной
графики <a href="../PABCUnits/Graph3D/index.html">Graph3D</a> могут быть использованы для создания простейших графических. а также
интерактивных анимационных приложений, управляемых событиями.</p>
<p>Следует также отметить &quot;студенческие&quot; модули: модуль <span lang="en-us">Collections
</span>упрощенных коллекций, модуль <span lang="en-us">Arrays </span>для
простейших операций с динамическими массивами и модуль Forms для ручного
создания простых приложений с оконным пользовательским интерфейсом.</p>
<p>&nbsp;</p>
</body>
</html>

View file

@ -35,12 +35,11 @@
как и код на C#, и несколько медленнее, чем код на
C++ и Delphi.</li>
<li>PascalABC.NET является представителем линейки современных языков Паскаль
вместе с Delphi XE и Oxygene.</li>
вместе с Delphi и Oxygene.</li>
<li>Мнение, что язык Паскаль устарел и утрачивает свои
позиции, основано на представлении о старом Паскале и старых средах
программирования (например, <span lang="en-us">Free Pascal </span>с его
несовременной консольной оболочкой и языком <span lang="en-us">Delphi </span>
образца 2002 года). К сожалению, масса отечественной учебной литературы
несовременной консольной оболочкой). К сожалению, масса отечественной учебной литературы
<span lang="ru">с упорством,
достойным лучшего применения, </span>ориентируется на <span lang="ru">отживший
</span>Turbo Pascal<span lang="ru"> с древней

View file

@ -25,7 +25,9 @@
<param name="Keyword" value="ToReals">
<param name="Keyword" value="ToWords">
<param name="Keyword" value="TryToInteger">
<param name="Keyword" value="TryToReal"></object>
<param name="Keyword" value="TryToReal">
<param name="Keyword" value="TypeName">
<param name="Keyword" value="TypeToTypeName"></object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><link rel="StyleSheet" href="../../../default.css">
</HEAD><body><H1>Методы расширения типа string</H1>
<table border=0 cellpadding=5><tr><td><code><b>function</b> Between(Self: string; a, b: string): boolean;</code>
@ -94,5 +96,9 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Преобразует строку в целое и записывает его в value.При невозможности преобразования возвращается False</td></tr>
<tr><td><code><b>function</b> TryToReal(Self: string; <b>var</b> value: real): boolean;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Преобразует строку в вещественное и записывает его в value.При невозможности преобразования возвращается False</td></tr>
<tr><td><code><b>function</b> TypeName(o: Object): string;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò èìÿ òèïà îáúåêòà</td></tr>
<tr><td><code><b>function</b> TypeToTypeName(t: System.Type): string;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äëÿ òèïà System.Type âîçâðàùàåò èìÿ òèïà îáúåêòà</td></tr>
</table>
</body></HTML>

View file

@ -30,7 +30,9 @@
<param name="Keyword" value="RenameFile">
<param name="Keyword" value="RmDir">
<param name="Keyword" value="SetCurrentDir">
<param name="Keyword" value="Sleep"></object>
<param name="Keyword" value="Sleep">
<param name="Keyword" value="TypeName">
<param name="Keyword" value="TypeToTypeName"></object>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251"><link rel="StyleSheet" href="../../../default.css">
</HEAD><body><H1>Cèñòåìíûå ïîäïðîãðàììû</H1>
<table border=0 cellpadding=5><tr><td><code><b>procedure</b> Assert(cond: boolean);</code>
@ -109,5 +111,9 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óñòàíàâëèâàåò òåêóùèé êàòàëîã. Âîçâðàùàåò True, åñëè êàòàëîã óñïåøíî óäàëåí</td></tr>
<tr><td><code><b>procedure</b> Sleep(ms: integer);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äåëàåò ïàóçó íà ms ìèëëèñåêóíä</td></tr>
<tr><td><code><b>function</b> TypeName(o: Object): string;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò èìÿ òèïà îáúåêòà</td></tr>
<tr><td><code><b>function</b> TypeToTypeName(t: System.Type): string;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Äëÿ òèïà System.Type âîçâðàùàåò èìÿ òèïà îáúåêòà</td></tr>
</table>
</body></HTML>

View file

@ -136,6 +136,8 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Óñòàíàâëèâàåò òåêóùóþ ïîçèöèþ ðèñîâàíèÿ â òî÷êó (x,y)</td></tr>
<tr><td><code><b>procedure</b> Pie(x, y, r, angle1, angle2: real);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ðèñóåò ñåêòîð îêðóæíîñòè ñ öåíòðîì â òî÷êå (x,y) è ðàäèóñîì r, çàêëþ÷åííûé ìåæäó äâóìÿ ëó÷àìè, îáðàçóþùèìè óãëû angle1 è angle2 ñ îñüþ OX</td></tr>
<tr><td><code><b>procedure</b> Pie(x, y, r, angle1, angle2: real; c: Color);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Đčńóĺň ńĺęňîđ îęđóćíîńňč ń öĺíňđîě â ňî÷ęĺ (x,y) č đŕäčóńîě r, çŕęëţ÷ĺííűé ěĺćäó äâóě˙ ëó÷ŕěč, îáđŕçóţůčěč óăëű angle1 č angle2 ń îńüţ OX, öâĺňîě c</td></tr>
<tr><td><code><b>procedure</b> Polygon(points: <b>array</b> <b>of</b> Point);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ðèñóåò ìíîãîóãîëüíèê, çàäàííûé ìàññèâîì òî÷åê</td></tr>
<tr><td><code><b>procedure</b> Polygon(points: <b>array</b> <b>of</b> Point; c: Color);</code>

View file

@ -7,6 +7,7 @@
<param name="Keyword" value="GrayColor">
<param name="Keyword" value="Pnt">
<param name="Keyword" value="RandomColor">
<param name="Keyword" value="RandomColorBrush">
<param name="Keyword" value="RandomPoint">
<param name="Keyword" value="RandomPoints">
<param name="Keyword" value="Rect">
@ -33,6 +34,8 @@
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò òî÷êó ñ êîîðäèíàòàìè (x,y)</td></tr>
<tr><td><code><b>function</b> RandomColor: Color;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò ñëó÷àéíûé öâåò</td></tr>
<tr><td><code><b>function</b> RandomColorBrush: GBrush;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âîçâðàùàåò îäíîòîííóþ öâåòíóþ êèñòü ñëó÷àéíîãî öâåòà</td></tr>
<tr><td><code><b>function</b> RandomPoint(w: real := 0): Point;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ôóíêöèÿ ãåíåðàöèè ñëó÷àéíîé òî÷êè â ãðàíèöàõ ýêðàíà. Íåîáÿçàòåëüíûé ïàðàìåòð w çàäà¸ò ìèíèìàëüíûé îòñòóï îò ãðàíèöû</td></tr>
<tr><td><code><b>function</b> RandomPoints(n: integer; w: real := 0): <b>array</b> <b>of</b> Point;</code>

View file

@ -1,11 +1,15 @@
<HTML><HEAD><object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
<param name="Keyword" value="Alignment">
<param name="Keyword" value="Brushes">
<param name="Keyword" value="Color">
<param name="Keyword" value="Colors">
<param name="Keyword" value="CoordType">
<param name="Keyword" value="DrawingContext">
<param name="Keyword" value="DrawingVisual">
<param name="Keyword" value="FontStyle">
<param name="Keyword" value="GBrush">
<param name="Keyword" value="GColor">
<param name="Keyword" value="GPen">
<param name="Keyword" value="GPoint">
<param name="Keyword" value="GRect">
<param name="Keyword" value="GWindow">
@ -16,18 +20,26 @@
</HEAD><body><H1>Òèïû ìîäóëÿ GraphWPF</H1>
<table border=0 cellpadding=5><tr><td><code>Alignment = (LeftTop,CenterTop,RightTop,LeftCenter,Center,RightCenter,LeftBottom,CenterBottom,RightBottom);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Êîíñòàíòû âûðàâíèâàíèÿ òåêñòà îòíîñèòåëüíî òî÷êè</td></tr>
<tr><td><code>Brushes = System.Windows.Media.Brushes;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Íàáîð ïðåäîïðåäåëåííûõ êèñòåé</td></tr>
<tr><td><code>Color = System.Windows.Media.Color;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Òèï öâåòà</td></tr>
<tr><td><code>Colors = System.Windows.Media.Colors;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Öâåòîâûå êîíñòàíòû</td></tr>
<tr><td><code>CoordType = (MathematicalCoords,StandardCoords);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âèäû ñèñòåìû êîîðäèíàò</td></tr>
<tr><td><code>DrawingContext = System.Windows.Media.DrawingContext;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Êîíòåêñò ðèñîâàíèÿ</td></tr>
<tr><td><code>DrawingVisual = System.Windows.Media.DrawingVisual;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Âèçóàëüíûé îáúåêò äëÿ îòðèñîâêè ñ ïîìîùüþ êîíòåêñòà ðèñîâàíèÿ</td></tr>
<tr><td><code>FontStyle = (Normal,Bold,Italic,BoldItalic);</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Òèï ñòèëÿ øðèôòà</td></tr>
<tr><td><code>GBrush = System.Windows.Media.Brush;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Òèï êèñòè</td></tr>
<tr><td><code>GColor = System.Windows.Media.Color;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Òèï öâåòà</td></tr>
<tr><td><code>GPen = System.Windows.Media.Pen;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Òèï ïåðà</td></tr>
<tr><td><code>GPoint = System.Windows.Point;</code>
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Òèï òî÷êè</td></tr>
<tr><td><code>GRect = System.Windows.Rect;</code>

View file

@ -1 +1 @@
3.8.3.3115
3.8.3.3116

View file

@ -1 +1 @@
!define VERSION '3.8.3.3115'
!define VERSION '3.8.3.3116'

View file

@ -75,7 +75,11 @@ namespace SyntaxVisitors.SugarVisitors
// var @tpar := Tuple.Create(все параметры)
var tupleIdent = new ident("@tpar" + UniqueNumStr());
var vs = new var_statement(tupleIdent,
// SSM 08.05.22 - один параметр не надо оборачивать в кортеж
var_statement vs;
if (pp.Length == 1)
vs = new var_statement(tupleIdent, pp[0].Item1 as expression);
else vs = new var_statement(tupleIdent,
new method_call(
new dot_node(new dot_node("?System", "Tuple"),new ident("Create")),
new expression_list(pp.Select(pair => pair.Item1 as expression).ToList())
@ -88,12 +92,23 @@ namespace SyntaxVisitors.SugarVisitors
// var @ИмяФункцииDict := new Dictionary<типTuple, тип возвр значения функции>
// var d := new PABCSystem.Dictionary<System.Tuple<integer,integer,real>,integer>;
var ttp = new template_param_list(new List<type_definition>(pp.Select(pair => pair.Item2 as type_definition)));
var ttr_tuple = new template_type_reference(new named_type_reference(new List<ident> { new ident("System"), new ident("Tuple") }),
// SSM 08.05.22 - один параметр не надо оборачивать в кортеж
template_param_list ttp;
if (pp.Length == 1)
ttp = new template_param_list(pp[0].Item2 as type_definition);
else
ttp = new template_param_list(new List<type_definition>(pp.Select(pair => pair.Item2 as type_definition)));
type_definition ttr_tuple;
if (pp.Length == 1)
ttr_tuple = pp[0].Item2 as type_definition;
else
ttr_tuple = new template_type_reference(new named_type_reference(new List<ident> { new ident("System"), new ident("Tuple") }),
ttp
);
var ttr_dict = new template_type_reference(new named_type_reference(new List<ident> { new ident("PABCSystem"), new ident("Dictionary") }),
new template_param_list(new List<type_definition> { ttr_tuple,(pd.proc_header as function_header).return_type }));
new template_param_list(new List<type_definition> { ttr_tuple,(pd.proc_header as function_header).return_type }));
var new_ex = new new_expr(ttr_dict, new expression_list());
var sug_ex = new sugared_expression(ttp, new_ex, new_ex.source_context); // семантическая проверка выражения

Binary file not shown.