Тип string в .NET внутри - ссылочный. Он находится под управлением сборщика мусора.
Так что “нормальных” строк в вашем понимании нет.
Нужно понимать, что PascalABC.NET - это не Free Pascal, работающий на нативной платформе - это язык платформы .NET.
Тип string в .NET внутри - ссылочный. Он находится под управлением сборщика мусора.
Так что “нормальных” строк в вашем понимании нет.
Нужно понимать, что PascalABC.NET - это не Free Pascal, работающий на нативной платформе - это язык платформы .NET.
Главный вопрос тут даже не “Как сделать…”, а “Зачем делать?”. Кому надо - идет во Free Pascal и там ностальгирует тихонько, чтобы никто не увидел.
В целом солидарен с @RAlex, но вместо того чтоб посылать - @Catcher лучше объясните что вы пытались сделать, чтоб можно было судить о том как это же делается под .Net .
var
p: ^shortstring;
begin
new(p);
p^ := 'Hello, dynamic world!';
writeln(p^);
dispose(p);
end.
PABCSystem.__FixPointer тут вызывается уже после того как объект строки был засунут за указатель. Если сборка мусора вызовется до __FixPointer - строку может удалить.
Добрый день всем. У меня программа, графическая, разработано с применением GraphWpf. Откомпилированная программа exe на других компьютерах (Windows7 и более) не запускается. Почему так происходит?
Это ни о чём - нужны симптомы. Если пишет просто “прекращение работы программы”, без возможности диагностики, то используйте такую программу:
##
System.AppDomain.CurrentDomain.UnhandledException += (o,e)->
begin
Writeln(e.ExceptionObject);
Readln;
Halt;
end;
var prog_path := System.IO.Path.GetFullPath('Program2.exe');
System.Reflection.Assembly.LoadFile(prog_path).EntryPoint.Invoke(nil, nil);
Writeln('Успешный выход');
Readln;
Только не запускайте её из IDE - паскалевский дебагер не дружит с .UnhandledException .
uses System.Text.RegularExpressions;
var x: match; // Встречено 'match', а ожидалось выражение
begin
end.
Не могу задать тип. Учусь по этому учебнику link .
match — ключевое слово
var x: &match;
Спасибо! Похоже браузер съел амперсанды в учебнике.
Тогда match еще не было
Хотел добавить пример для OpenCLABC:
Игра жизнь.rar (46.7 КБ)
С полем 100х100 OpenCLABC справляется практически моментально, но вывод через GraphWPF сильно лагает. @Admin есть идеи как оптимизировать?
Выводить через прямые вызовы Windows API без WPF?
Если всё равно медленно — портировать на FPC или лучше FPC+Lazarus (в смысле его граф либу).
Та я могу и с моим же модулем OpenGL, но тут для примера хотел написать что то простое.
Подскажите аналог из Python:
@lru_cache(None)
Полного аналога нет и быть не может в языке со статической типизацией. Есть [Cache].
[Cache] это и есть @lru_cache(None). Никакой логики чистки кэша у [Cache] нет.
Спасибо.
Прошу помощи. Задание 21 ЕГЭ.
Решение на Питонfrom functools import lru_cache
def moves(h):
a,b=h
return(a+1,b),(a*2,b),(a,b+1),(a,b*2)
@lru_cache(None)
def game(h):
if sum(h)>=62:
return "w"
if any(game(m)=="w" for m in moves(h)):
return "P1"
if all(game(m)=="P1" for m in moves(h)):
return "B1"
if any(game(m)=="B1" for m in moves(h)):
return "P2"
if all(game(m)=="P1" or game(m)=="P2" for m in moves(h)):
return "B2"
for s in range(1,52):
if game((10,s)) is not None:
print(s, game((10,s)) )
Переписал на PascalABC.NET как сумел:
function moves(h:(integer,integer)):((integer,integer),
(integer,integer),
(integer,integer),
(integer,integer));
var a,b:integer;
begin
(a,b):=h;
result:=((a+1,b),(a*2,b),(a,b+1),(a,b*2))
end;
[Cache]
function game(h:(integer,integer)):string ;
begin
result := 'N';
if (h[0]+h[1])>=62 then
begin
result:='w';
exit
end;
if (game(moves(h)[0])='w') or
(game(moves(h)[1])='w') or
(game(moves(h)[2])='w') or
(game(moves(h)[3])='w') then
begin
result := 'P1';
exit
end;
if (game(moves(h)[0])='P1') and
(game(moves(h)[1])='P1') and
(game(moves(h)[2])='P1') and
(game(moves(h)[3])='P1') then
begin
result := 'B1';
exit
end;
if (game(moves(h)[0])='B1') or
(game(moves(h)[1])='B1') or
(game(moves(h)[2])='B1') or
(game(moves(h)[3])='B1') then
begin
result := 'P2';
exit
end;
if ((game(moves(h)[0])='P1') or (game(moves(h)[0])='P2')) and
((game(moves(h)[1])='P1') or (game(moves(h)[1])='P2')) and
((game(moves(h)[2])='P1') or (game(moves(h)[2])='P2')) and
((game(moves(h)[3])='P1') or (game(moves(h)[3])='P2')) then
begin
result := 'B2';
exit
end;
end;
begin
for var s:=1 to 51 do
begin
if game((10,s)) <> 'N' then writeln(s, game((10,s)))
end
end.
Работает медленнее. Как ускорить или написать решение по другому (проще)?
А что такое медленнее? У меня мгновенно. К тому же время не выдаётся
Институт математики, механики и компьютерных наук ЮФУ, 2005–2021