Версия PascalABC.NET 3.4

Кстати, это с какой-то версии .NET так сильно память стала жрать генерация сборок. Вместе со студией куда-то все катится…

1 лайк

У нас при генерации инсталлятора запускается TestRunner - и там ошибок нет

Да, я заметил, поэтому и просил посмотреть в этот .pcu и/или компилятор. Что именно в том .pcu не так сгенерировалось.

Непонятно, куда смотреть. Pcu - бинарный формат, его не посмотришь. А в компиляторе - куда смотреть, если у нас всё работает?

Ну, когда я дебажил что то подобное в SAC - я включал отладку чтения этого бинарного файла и смотрел где появляется неадекватное значение… Почему сам не могу - я не знаю как устроен компилятор, какие значения что значат. Я даже не знаю где что чем открыть чтоб получить IDE в которой возможна отладка.

И -

скачать мою ветку в отдельную папку - это 1-2 мин. Ссыль уже была, но вот чистая:

@Admin, вы несколько часов закрыли все issue с тайпклассами, но не похоже чтоб что то было исправлено… И @voloshinbogdan, кто был, вроде как, ответственен за их реализацию - ничего не делал на гитхабе почти 5 месяцев.

Какова ситуация с тайпклассами? Их отказались реализовывать?

Они по-прежнему в другом branchе на Github.

Но к моему глубокому сожалению за практически полгода ситуация с ними не изменилась ни на йоту. Для живого проекта это недопустимо.

Поэтому Issues убраны.

Вхождение type classes в Release призрачно.

2 лайка

Есть ли более человеческий способ программно узнать установленную версию паскаля, чем следующий?:

begin
  var a := System.Reflection.Assembly.ReflectionOnlyLoadFrom('C:\Program Files (x86)\PascalABC.NET\PascalABCNET.exe');
  a.GetName.Version.ToString.Print;
end.

С этим способом выполняется слишком много всего лишнего + оперативка забивается несколькими мегабайтами мусора, который далее ни на что не сгодится.

Может добавите какой то файл соответствующий онлайн версии?

Мне это надо для кастомной программы для обновления…

PascalABCVersion()

1 лайк

Говорят, последний релиз не работает на XP.

Пусть качают отсюда и не говорят: http://pascalabc.net/downloads/PascalABCNETWithDotNet40Setup.exe

В последней версии существенно улучшена графика GraphWPF. Несколько увеличена скорость и кардинально улучшена плавность прорисовки при большом количестве рисуемых объектов. В частности, появились примитивы SetPixel и SetPixels

3 лайка

Кстати, как заметил @Kotov (не на форуме), с юбилеем вас)):

3 лайка

Да, спасибо ))

В этой версии у нас иконка немного новая )

В последнем билде (2022) разом появилось несколько багов.

Сначала #1900, а теперь ещё вот:

Loading core...
Подключен парсер PascalABC.NET Language Parser v1.2
Подключен парсер Documentation Comments Tag Parser v0.9
PascalABCCompiler.Core v3.4.2.2022
Copyright (c) 2005-2018 by Ivan Bondarev, Stanislav Mihalkovich
OK 255,3668ms
Connected parsers: PascalABC.NET (*.pas);
Connected conversions: Optimizer;
Compiling assembly SAC.pas...
[0]Internal compiler error in module Compiler.Compile[CompArgsData.pas] :'System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(exception_handler eh)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(statement_list stmtList)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(for_node _for_node)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(statement_list stmtList)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(statement_list stmtList)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(statement_list stmtList)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(function_lambda_definition lambdaDefinition)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(assign _assign)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(statement_list stmtList)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.BuildTree(statement_list statementList)
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesSubstitutionsManager.Substitute(syntax_tree_visitor _visitor, declarations decls, statement_list _statementList)
   в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(block _block)
   в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(procedure_definition _procedure_definition)
   в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(declarations _subprogram_definitions)
   в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(implementation_node _implementation_node)
   в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit_implementation(unit_module _unit_module)
   в PascalABCCompiler.TreeConverter.SyntaxTreeToSemanticTreeConverter.CompileImplementation(common_unit_node SemanticUnit, compilation_unit SyntaxUnit, unit_node_list UsedUnits, List`1 ErrorsList, List`1 WarningsList, SyntaxError parser_error, Hashtable bad_nodes, using_namespace_list interface_namespaces, using_namespace_list imlementation_namespaces, Dictionary`2 docs, Boolean debug, Boolean debugging)
   в PascalABCCompiler.Compiler.CompileUnit(unit_node_list Units, unit_or_namespace SyntaxUsesUnit)
   в PascalABCCompiler.Compiler.CompileUnit(unit_node_list Units, unit_or_namespace SyntaxUsesUnit)
   в PascalABCCompiler.Compiler.Compile()'

Считая что в обоих случаях, на сколько я понял, виноваты лямбды - может ли быть так что вы случайно залили билд, в котором падают тесты, из за первого фикса #1897? Или это какая то новая ошибка и придётся её тоже искать.

Последнее было бы нежелательно, ибо падает компиляция SAC.pas, к которому привязано модулей, в общей сумме на, где то, 10k-15k строк. 1 раз найти ошибку, конечно, не сложно. Но если появилась тонна ошибок с лямбдами (которые у меня там повсюду) - всё это придётся перебрать несколько десятков раз.

Да, увидели. В ближайшее время исправим.

1 лайк

А, всё оказалось не так плохо… Там ошибка была в 1 модуле на 340 строк, и все подключённые к нему модули (каким то чудом, ибо в них всё на много всё мудрёнее) не вызывали ошибку.

Вот программа для тестов:

begin
  
  //обязательно лямбда
  var p: procedure := ()->
  begin end;
  
  try
  except
    on Exception do//если написать "on e: Exception do" - ошибки нет
  end;
  
end.
() : Внутренняя ошибка компилятора в модуле [pabcnetc.exe] :'System.Exception: System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(exception_handler eh)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.DefaultVisit(syntax_tree_node n)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.visit(statement_list stmtList)
   в PascalABCCompiler.SyntaxTree.WalkingVisitorNew.ProcessNode(syntax_tree_node Node)
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesTreeBuilder.BuildTree(statement_list statementList)
   в TreeConverter.LambdaExpressions.Closure.CapturedVariablesSubstitutionsManager.Substitute(syntax_tree_visitor _visitor, declarations decls, statement_list _statementList)
   в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(block _block)
   в PascalABCCompiler.TreeConverter.syntax_tree_visitor.visit(program_module _program_module)
   в PascalABCCompiler.TreeConverter.SyntaxTreeToSemanticTreeConverter.CompileInterface(compilation_unit SyntaxUnit, unit_node_list UsedUnits, List`1 ErrorsList, List`1 WarningsList, SyntaxError parser_error, Hashtable bad_nodes, using_namespace_list namespaces, Dictionary`2 docs, Boolean debug, Boolean debugging)
   в PascalABCCompiler.Compiler.CompileUnit(unit_node_list Units, unit_or_namespace SyntaxUsesUnit)
   в PascalABCCompiler.Compiler.Compile()'

И таки, получается, так же как #1900, проблема в столкновении лямбд и on-do.

Кидать в issue?

Давайте мы откатим issue вызвавший проблему и потом решим

Появилась версия 3.4.3 (сборка 2041 от 24.04.2019). Хорошо бы узнать основные отличия от 3.4.2. Например, через “Что нового” на официальном сайте.

Это ошибка. В ближайшее время восстановим 3.4.2

1 лайк