Переустановил, в ту же папку. Заработало =). Что там было я не понял. Но есть другой вопрос. Если те же два файла CallCS.pas и ClassLibrary1.dll скопировать в какую-нибудь другую папку и, не закрывая паскаля, после запуска первого CallCS.pas из примеров, открыть и запустить второй, который в другой папке, то выдает ошибку. Не знает что такое Class1.
Ерунда какая-то. В любой папке всё работает
Надо не закрывая первый файл.
Да, увидел. Сделайте новую Issue и четко опишите последовательность действий
Итак, вопрос к разработчикам. Какие методы/классы в PABCSystem.pas и PABCExtensions.pas являются критичными для работы компилятора? Я попытался очистить содержимое обоих модулей и получил следующую ошибку:
А вообще ведь должна быть где-то лазейка для отключения в компиляторе этих двух модулей! Вы ведь не могли здесь сделать настолько глубокую привязку! Я надеюсь, что это возможно. Обидно, что при написании программ я не использую ничего из стандартных средств - чистый .NET, а в исполнимый файл всё равно кидается всякий хлам. Тем более, на форуме уже у кого-то была проблема из-за этих модулей. Может и правда, сделаете директиву/настройку?P. S. А проблема была с dll-кой. В неё не смогли скомпилировать метод Init(или что-то типа того) именно из-за того, что метод с таким названием объявлен в PABCSystem. А ещё при декомпиляции приложения кто-то утонул в именах с приставкой PABC и древних ReadLn, WriteLn и т.п.
А она (глубокая привязка) таки есть, ни раз поднимали эту тему и последний раз на этом и закончили…
Вот смотрите на программу которую генерирует (я декомпилировал программу, состоящую из begin end.
). Там идёт настройка для всего, что нужно для работы writeln
и т.п. Если writeln
не используется - его может и не добавляет в .exe
файл, но заполнение внутренних переменных из модуля PABCSystem
не уберёт. Не на столько хорошая оптимизация проводится…
PABCSystem
имеет своё пространство имён (два*), так что это не могло стать проблемой. Если мы оба говорим про робокод - я запомнил что там проблема была в том, что паскаль стал запихивать написанный код в какой то дополнительный класс/пространство имён и разработчики робокода не сумели его оттуда достать.
Ну так может попытаться начать ещё раз или продолжить?
Вот и я об этом. Я не использую ничего из стандартного(то бишь из PABCSystem.pas), даже OMP уже заменил на Tasks.Parallel, но в программе/dll всё равно полно хлама, который там никак не нужен.
Исходя из размера .exe файла, туда добавляется всё содержимое PABCSystem. Про внутренние переменные уже написал выше. Это я так понимаю System.Random для рандома, DateTime для milliseconds/millisecondsDelta? Ну, сейчас даже такую ленивую для собственноручной реализации функцию как milliseconds, я уже пишу в программе самостоятельно, не говоря уже о Random. Просто переходить на C# только из-за мусора в exe из PABCSystem мне очень не хочется. Тем более, тут не нужно удалять из exe ненужное, уже предлагали просто не совать туда это(во всяком случае я, хотя и Вы тоже что-то подобное предлагали). Попросить разработчиков добавить директиву компилятора, отключающую чтение всех стандартных модулей в режиме без связи с оболочной(системные модули обеспечивают эту связь, следовательно без них её просто быть не может).
Наткнулся на просторах Интернет при обсуждении школьного языка КУМИР:
Мы обращались в фирму 1С с предложением ввести в язык (речь идет о версии 6.0) следующие конструкции:
ПОЧЕМУ БЫ И НЕ — проверяет условие еще раз (самый частый глюк старой 1С)
НЕПРЕМЕННО — выполняет оператор без сбоев и зависаний
ОТНЫНЕ — присваивает значение переменной так, чтобы оно там действительно оказалось. (присвоить переменной вида, к примеру, «Справочник» значение в языке 1С — порой очень непростая задача, иногда требующая конструкции аж из 4-х операций)
ВО ЧТО БЫ ТО НИ СТАЛО — выводит текст отчета который без этого оператора выводится через раз.
НЕ СПАТЬ — отключает внутренний глюкогенератор
Я СКАЗАЛ — выполняет команду до тех пор, пока она не выполнится.
ИМЕТЬ СОВЕСТЬ — приостановить выполнение команды при её зависании.
Почему-то фирма не прислушалась к нашему мнению..
{$faststrings}
{$string_nullbased+}
begin
var A := 'abc';
A.Chars[0].Println();
A.Chars[0] := 'd'; // Не работает.
A.Println();
end.
Но почему же тогда в справке: {$faststrings} - строки с быстрым доступом к символам на запись, но со ссылочной семантикой? Это разве не про то, что можно напрямую символы перезаписывать?
Вам же так и пишет, свойство Chars
не имеет поля для записи.
Так работает:
{$faststrings}
{$string_nullbased+}
begin
var A := 'abc';
A[0].Println();
A[0] := 'd';
A.Println();
end.
А те директивы ни при чём, и без них должно работать так и только так.
Хорошо, понял.
В новой версии 3.3.5.1669 происходит ошибка компиляции шахмат game2.pas
game2.pas(61) : Несколько подпрограмм могут быть вызваны
Я ещё обратил внимание, когда смотрел что-то на GitHub, что прошёл коммит ABCPascal.y с изменением в const_variable, где была закомментирована часть с tkRoundOpen const_expr tkRoundClose. Может и не связано, но всё равно непонятно зачем.
Да, оно даёт конфликт в грамматике
Так и есть. Несколько подпрограмм могут быть вызваны