PascalABCCompiler.Core v3.5.0.2217 (27.07.2019), debug version
Runtime version: 4.0.30319.42000
OS version: Microsoft Windows NT 6.1.7601 Service Pack 1
Processor count: 2
WorkingSet: 92368 kb
program test;
uses System;
const
q: array [0..1] of byte = (0, 1);
var
w := new byte[2](0, 1);
begin
Console.WriteLine($'{q}');
Console.WriteLine(q);
Console.WriteLine($'{w}');
Console.WriteLine(w);
Console.ReadKey(true);
end.
Спасибо за ответ!
И еще меня интересует:
1 - стоит ли использовать строки $’’ или надежнее через ().ToString ?
2 - почему программа выводящая через writeln весит на 0.5КБ больше, чем программа выводящая через Console.WriteLine() ?
Вы можете, конечно, подождать ответа, а можете посмотреть сами код этих методов - исходник же открыт. На интерполированные строки (так тут называются эти самые $’ ') пока что вроде бы никто не жаловался. Что до длины программы Writeln - это особенности ее волшебной реализации: тут она умеет выводить буквально всё.
А точнее - в данных случаях вызывается метод .ToString, стандартный для .Net, который лишь выписывает тип объекта вместо его содержимого (для массивов он не переопределён, ибо это лишнее усложнение).
$pascal_array1 это имя внутреннего типа, класса в который разворачиваются статичные массивы. Этот класс работает через динамичный массив, но медленнее и довольно ограничен в функционале, поэтому его использование не желательно. Он оставлен только для совместимости со старыми паскалями.
Форматные строки ($'', да, правильно “интерполированные”, но это слишком сложное слово) вызывают o=nil?'':o.ToString для каждого своего параметра.
Однако вопрос некорректный, .ToString надо применять для получения строки 1 объекта.
Зато в этом случае:
$'a={a}, b={b}'
'a='+a.ToString+'b='+b.ToString
Вторая строчка это ужасный говнокод. Сложение более чем 2 строк плюсами - выполняет кучу лишних действий.
Если заменить сложения на вызов Concat - эффективность обоих строк станет одинакова (а точнее даже Concat немного быстрее), однако запись с форматной строкой будет всё равно читабельнее и красивее.
Потому что компилятор по возможности удаляет неиспользуемый функционал из .exe . Console.WriteLine это стандартный метод из стандартной .Net .dll-ки. В то время как Writeln описан в системном модуле паскаля - PABCSystem. Поэтому первый удалить нельзя (его реализация и не записывается в .exe), а второй можно.
Ручками вывод пишут. То есть по 1 элементу выводят у массивов.
@Nikolaj_Tkachenko, теперь можно и не писать. Для NET и PascalABC.NET есть отдельные модули. Когда в C# можно будет перегружать операторы для внешних типов, код которых нельзя менять - тогда можно будет более кратко некоторые операции записывать.
В C# это делают программисты, использующие язык. То есть каждый выбирает как реализовывать или чью реализацию брать.
А в PABC.Net уже есть реализация с завода.
И нет, ни 1 из вариантов не является плохим, оба хороши в своих ситуациях.
P.S. Ссыли на скачивание лучша давать отсюда, так сторонние ресурсы вроде гугл диска не нужны.