powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus
314 сообщений из 314, показаны все 13 страниц
Lazarus
    #39876137
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Программа компилируется без ошибок.

Но почему при попытке сделать Find Declaration вываливает ошибку:
...
Рейтинг: 0 / 0
Lazarus
    #39876138
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любой Find Declaration.
...
Рейтинг: 0 / 0
Lazarus
    #39876141
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лазарь 2.1.0 с транка.
...
Рейтинг: 0 / 0
Lazarus
    #39876142
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прописать в юните {$mode delphiunicode} помогло, но не понятна причина.
...
Рейтинг: 0 / 0
Lazarus
    #39876150
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatПрописать в юните {$mode delphiunicode} помогло, но не понятна причина.
Свойства с названием "Buffer" нет случайно?
...
Рейтинг: 0 / 0
Lazarus
    #39876152
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Нету.
...
Рейтинг: 0 / 0
Lazarus
    #39876158
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно ли сделать что бы Undo в редакторе лазаря работало как в дельфях?

Т.е. что бы при нажатии Ctrl+Z не выполняло откат сразу же а сначала переходило на позицию где будет сделан откат, если ее не видно на экране?

Такое поведение было очень удобно для навигации.
...
Рейтинг: 0 / 0
Lazarus
    #39876161
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatТакое поведение было очень удобно для навигации.
Для навигации назад там Ctrl+H;
...
Рейтинг: 0 / 0
Lazarus
    #39876165
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Блин, почти максимально удаленные друг от друга кнопки на клавиатуре.
Я себе пальцы сломаю. :)
...
Рейтинг: 0 / 0
Lazarus
    #39876168
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Перенастрой хоткей, там можно.
...
Рейтинг: 0 / 0
Lazarus
    #39876169
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

А в SysUtils в FPC принципиально неюникодный?
...
Рейтинг: 0 / 0
Lazarus
    #39876171
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatА в SysUtils в FPC принципиально неюникодный?
Что ты имеешь ввиду?
...
Рейтинг: 0 / 0
Lazarus
    #39876173
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Код: pascal
1.
2.
3.
4.
5.
6.
7.
unit SysUtils;
interface

{$MODE objfpc}
{$MODESWITCH OUT}
{ force ansistrings }
{$H+}
...
Рейтинг: 0 / 0
Lazarus
    #39876177
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как я понял {$H+} приводит к String = AnsiString;
...
Рейтинг: 0 / 0
Lazarus
    #39876179
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А {$MODE objfpc} оверрайдит {$mode delphiunicode} который я выставил в проекте.
...
Рейтинг: 0 / 0
Lazarus
    #39876184
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

H+, как и в дельфях, это переключение с дефолтных shortstring на т.н. longstrings, т.е. со статических строк на динамические. В дельфях это сейчас по дефолту и дефолтные строки UnicodeString, в фпц всё несколько сложнее. UnicodeString там пока не дефолтные, и вообще, в разных юнитах дефолтные строки могут быть разными. То есть, в одном юните string может означать AnsiString, а в другом UnicodeString. Насколько я помню, в RTL все эти приколы разруливаются благодаря использованию RawByteString.
...
Рейтинг: 0 / 0
Lazarus
    #39876209
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А как там вообще реализовано использование строк в RTL?

Какая кодовая страница будет использована при переходе с юникода к анси?
...
Рейтинг: 0 / 0
Lazarus
    #39876280
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Lazarus
    #39876322
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

ощущение, что фпц усиленно пилят в сторону макс. совместимости с юникодными дельфями. Отсюда и эти прыжки в сторону (уход от нативной в никсах UTF8 в UTF16 с кучей "конвертирующих" функций), и обещания разделения редакций Лазаря отдельно на utf8 и utf16, и тупое копирование дельфей (тот же TEncoding), и проч. "трихомундия"©.

Сейчас же все просто: в винде строки (если не уверен в кодировке) гоняешь туда-сюда при помощи WinCpToUTF8/UTF8ToWinCP, в никсах - все нативное. Красота :)
...
Рейтинг: 0 / 0
Lazarus
    #39876376
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

UTF8 так-то не особо удобная кодировка. Например, есть у тебя произвольная строка в UTF8 - как быстро узнать её длину в *символах*? А никак, тупо распарсить полностью.
Плюс операции вроде if s[10] = 'a' {lat} then s[10] := 'a' {cyr}; - это ад для UTF8.

Так что UTF16 самое оно. Где его не хватает - UTF32.
...
Рейтинг: 0 / 0
Lazarus
    #39876379
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИМХО где UTF8 может быть оправдана - это каналы передачи данных, БД и прочие места, где критично занимаемое место, а сами строки почти никогда не изменяются.
...
Рейтинг: 0 / 0
Lazarus
    #39876488
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpДок,

UTF8 так-то не особо удобная кодировка. Например, есть у тебя произвольная строка в UTF8 - как быстро узнать её длину в *символах*? А никак, тупо распарсить полностью.
Это не так :) С утф8 как раз все просто и понятно. И обычно достаточно для большинства языков, если ты не пишешь программы на тайском или суахили
...
Рейтинг: 0 / 0
Lazarus
    #39876515
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.10.2019 10:16, alekcvp пишет:
>
> Так что UTF16 самое оно.

нихера ни разу.
в UTF16 тоже есть суррогатные пары.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus
    #39876522
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийнихера ни разу.
в UTF16 тоже есть суррогатные пары.

Суррогатные пары есть даже в AnsiString, насколько я помню. Но речь-то не про них.
...
Рейтинг: 0 / 0
Lazarus
    #39876525
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокЭто не так :) С утф8 как раз все просто и понятно. И обычно достаточно для большинства языков, если ты не пишешь программы на тайском или суахили
Что не так? Вот есть у тебя дельфийская строка - у неё длина в символах равна длине в байтах/размер символа. А как определить длину строки UTF8 с латиницей и кириллицей вперемешку?
...
Рейтинг: 0 / 0
Lazarus
    #39876543
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpСуррогатные пары есть даже в AnsiString, насколько я помню
Мультибайт это не суррогатные пары.

alekcvpЧто не так? Вот есть у тебя дельфийская строка - у неё длина в символах равна длине в байтах/размер символа
Вот это и не так. Суррогатная пара требует два кодпоинта, и преобразована она будет в один. Все кодпоинты за пределами BMP будут кодироваться суррогатными парами.

Но это всё равно проще, чем чекать все последовательности UTF-8. UTF-8 не для обработки строк - строго для хранения и передачи.
...
Рейтинг: 0 / 0
Lazarus
    #39876571
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да уж работать с utf8 это почти также геморно как работать с base64.
...
Рейтинг: 0 / 0
Lazarus
    #39876595
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот сколько кодю, ни разу не понадобилось узнавать, что же за символ по конкретному индексу в строке...
...
Рейтинг: 0 / 0
Lazarus
    #39876608
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Вот сколько кодю, ни разу не понадобилось узнавать, что же за символ по конкретному индексу в строке...
Что, ни разу не использовали конструкцию s[x] := ... ?
...
Рейтинг: 0 / 0
Lazarus
    #39876612
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpА как определить длину строки UTF8 с латиницей и кириллицей вперемешку?
я не совсем тебя понял, тебе что надо-то в конце концов? Длину "дельфийской" строки в Лазаре? Юзай UTF8Length из LazUTF8.

Если тебе надо посимвольно, то ищешь посредством UTF8Pos(первый аргумент может быть и строкой, и Char'ом). Если побайтно, то загоняй свою строку в RawByteString и ползай по ней, куда угодно. Там все аналогично дельфям :)
...
Рейтинг: 0 / 0
Lazarus
    #39876613
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Вот сколько кодю, ни разу не понадобилось узнавать, что же за символ по конкретному индексу в строке...
ну, не скажи. Неужели ни разу строку не парсил? :)
...
Рейтинг: 0 / 0
Lazarus
    #39876623
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокДлину "дельфийской" строки в Лазаре? Юзай UTF8Length из LazUTF8.
Ну вот и сравни скорость этой функции с дельфийской Length().
...
Рейтинг: 0 / 0
Lazarus
    #39876633
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
15.10.2019 15:22, alekcvp пишет:
> Ну вот и сравни скорость этой функции с дельфийской Length().

ога.
а тёплое сравни с мягким.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus
    #39876676
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpНу вот и сравни скорость этой функции с дельфийской Length().
так тебе шашечки или ехать? ©

Для нафига тебе посимвольный доступ? Хочешь быстро, заполняй строкой массив байт и вперде. Будет работать гарантированно на любой кодовой странице. Правда, возни больше :)
...
Рейтинг: 0 / 0
Lazarus
    #39876688
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2,

повезло. у нас - то сплошь и рядом. utf8 в лазаре знатно добавил работы
...
Рейтинг: 0 / 0
Lazarus
    #39876695
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доктак тебе шашечки или ехать? © Если продолжить аналогии то Utf18 - такси с шашечками, а Utf8 - велосипед "чтобы ехать".

У лучше на такси. ;)
...
Рейтинг: 0 / 0
Lazarus
    #39876704
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonutf8 в лазаре знатно добавил работы
Что вам мешает использовать UnicodeString?
...
Рейтинг: 0 / 0
Lazarus
    #39876713
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpЧто, ни разу не использовали конструкцию s[x] := ... ?
Обычно этот х не берется с потолка, а как-то вычисляется. соответственно без разницы, какой будет этот х, и какой вообще формат строк - utf8, ansi или utf16 - итоговый код одинаков для всего.
Докну, не скажи. Неужели ни разу строку не парсил? :)
Парсил конечно, но как-то так получалось, что все служебные символы были ANSI и проверялись в цикле, а все остальные заглатывались скопом.
Типа такого (полу-псевдокод)
Код: pascal
1.
2.
3.
4.
5.
6.
7.
for i := 1 to Length(s) do
  if s[i] = '{' then
  begin
    endpos := PosEx(s, '}', i);
    contents := Copy(s, i, endpos - i);
    i := endpos;
  end;
...
Рейтинг: 0 / 0
Lazarus
    #39876714
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexeymakhaonutf8 в лазаре знатно добавил работы
Что вам мешает использовать UnicodeString?
По-хорошему, тогда уж UCS4String. Иначе один фиг суррогатные пары могут добавить веселья
...
Рейтинг: 0 / 0
Lazarus
    #39876718
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonutf8 в лазаре знатно добавил работы
Дим, если не секрет, где конкретно и на какой платформе?
...
Рейтинг: 0 / 0
Lazarus
    #39876720
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2По-хорошему, тогда уж UCS4String. Иначе один фиг суррогатные пары могут добавить веселья
UCS4 для всего это слишком жирно, но в определённых сценариях вполне себе вариант. А с суррогатами в UTF-16 всё довольно просто, буквально пара условий.
...
Рейтинг: 0 / 0
Lazarus
    #39876721
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Типа такого (полу-псевдокод)
Без UTF8...-аналогов сомневаюсь. На никсах прокатит, а на винде - фиг, если только строка не явно 1-байтовая. Попробуй сам, "погуляй" отладчиком в виндовом Лазаре по String'у - он будет 2х-байтовым :)
...
Рейтинг: 0 / 0
Lazarus
    #39876722
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На самом деле, по-хорошему, для переносимого кода работа с char должна быть строго ограничена ansi диапазоном. Все остальные случаи должны использовать функции типа GetCharAt или GetNextChar, возвращающие UCS4, либо строки.
Например - делаем мы функцию Split с разделителем-символом на Delphi со строками в utf16. Всё было хорошо, пока кто-то не захотел расщепить строку по символу 1F708 ALCHEMICAL SYMBOL FOR AQUA VITAE. И всё, облом.
...
Рейтинг: 0 / 0
Lazarus
    #39876723
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокВасилий 2Типа такого (полу-псевдокод)
Без UTF8...-аналогов сомневаюсь. На никсах прокатит, а на винде - фиг, если только строка не явно 1-байтовая. Попробуй сам, "погуляй" отладчиком в виндовом Лазаре по String'у - он будет 2х-байтовым :)
В смысле, в чем сомневаешься? Код универсальный под любую кодировку строк.
Про отладчик в Лазаре не напоминай... это боль и страдания
...
Рейтинг: 0 / 0
Lazarus
    #39876731
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Код универсальный под любую кодировку строк.
в этом. Попробуй сделать под виндой
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
var
  TmpStr: String = 'ЖЗИфыв';
begin
  if pos('ф', TmpStr) = 4
    then
      Self.Caption:= 'ага'
    else
      Self.Caption:= 'ой';
end;


Потом поделишься впечатлениями :)
...
Рейтинг: 0 / 0
Lazarus
    #39876756
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Например - делаем мы функцию Split с разделителем-символом на Delphi со строками в utf16. Всё было хорошо, пока кто-то не захотел расщепить строку по символу 1F708 ALCHEMICAL SYMBOL FOR AQUA VITAE. И всё, облом.
Это вопрос элементарного дизайна:
Код: pascal
1.
2.
3.
...
      Function Split(Const ASeparator : Common.Types.UnicodeString) : TSubStrings; Overload;
      Function Split(Const ASeparator : WideChar) : TSubStrings; Overload;
...
Рейтинг: 0 / 0
Lazarus
    #39876776
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

на линукске. у нас довольно много обработки строк посимвольно. кровушки попило, но уже вылизали.
...
Рейтинг: 0 / 0
Lazarus
    #39876783
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Обычно этот х не берется с потолка, а как-то вычисляется. соответственно без разницы, какой будет этот х, и какой вообще формат строк - utf8, ansi или utf16 - итоговый код одинаков для всего.
Код в программе - да, а вот под капотом: UTF16 - пишем новый символ на место старого, UTF8 - при замене латинского символа на кириллицу, например, там будет куча операций, потому что под кириллицу надо больше места, чем под латиницу.
...
Рейтинг: 0 / 0
Lazarus
    #39876788
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
program Test1;

{$mode delphiunicode}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes,
  SysUtils,
  graphtype,
  intfgraphics,
  lazcanvas,
  fpimage,
  fpcanvas,
  types
  { you can add units after this };

var
  i        : integer;
  RawImage : TRawImage;
  Img      : TLazIntfImage;
  CV       : TLazCanvas;
  Col      : TFPColor;
begin
  try
    WriteLn('Start');
    RawImage.Init;
    RawImage.Description.Init_BPP32_A8R8G8B8_BIO_TTB(1280, 1024);
    RawImage.CreateData(True);

    Img:=TLazIntfImage.Create(0,0);
    try
      Img.SetRawImage(RawImage);
      CV:=TLazCanvas.Create(img);
      try
        CV.Brush.FPColor:=colWhite;
        CV.FillColor(colTransparent);
        Col.Red:=65535;
        Col.Green:=0;
        Col.Blue:=0;
        for i:=50 to 200 do begin
          Col.Alpha:=(i+50)*255;
          CV.Pen.FPColor:=Col;
          CV.Line(i*2,50,i*2,450);
        end;
        Img.SaveToFile('1.bmp',TLazWriterBMP.Create);
        WriteLn('1.bmp written');
        Img.SaveToFile('1.png',TLazWriterPNG.Create);
        WriteLn('1.png written');
      finally
        CV.Free;
      end;
    finally
      Img.Free;
    end;
  except
    on E: Exception do begin
      WriteLn('Error: '+E.Message);
    end;
  end;
  ReadLn;
end.


Изображения на диске не прозрачные а черные. Что я делаю не так?
...
Рейтинг: 0 / 0
Lazarus
    #39876789
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И еще вопрос.

Можно ли как нибудь настроить удаленную отладку на headless линуксе из винды?

Желательно без ручного запихивания каждый раз запускаемого файла и кучи телодвижений.
Хотелось бы как в дельфях с PAServer-ом.

Ну или "хотя бы как".

Что куда ставить и жать?
...
Рейтинг: 0 / 0
Lazarus
    #39876790
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первый вопрос снимаю, сам разобрался.

Код: pascal
1.
2.
3.
        Png:=TLazWriterPNG.Create;
        Png.UseAlpha:=True;
        Img.SaveToFile('1.png',Png);
...
Рейтинг: 0 / 0
Lazarus
    #39876893
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докв этом. Попробуй сделать под виндой

Так я о том же, что у меня лично никогда не встречалось необходимости привязываться к конкретным индексам символов. Имхо, это только в софте из разряда редакторов требуется.

alekcvpКод в программе - да, а вот под капотом: UTF16 - пишем новый символ на место старого, UTF8 - при замене латинского символа на кириллицу, например, там будет куча операций, потому что под кириллицу надо больше места, чем под латиницу.
Так в utf16 ты тоже в общем случае не можешь быть уверен, что заменяемый либо заменяющий символ не является суррогатной парой. Т.е., по большому счету, закладываться на это надо всегда, чтобы потом через пару лет не словить неприятный Ой.
Да даже нельзя быть уверенным, что WideString[N] - это именно N-й символ (правильнее, codepoint). Просто итерация по utf16 чуть быстрее и проще, но по-прежнему необходимо перебирать всю строку, чтобы найти N-й символ.
...
Рейтинг: 0 / 0
Lazarus
    #39876912
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Да даже нельзя быть уверенным, что WideString[N] - это именно N-й символ (правильнее, codepoint).
Это всё из-за богомерзких эмодзи...
...
Рейтинг: 0 / 0
Lazarus
    #39876928
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2,
Кстати, почитал тут интернетики и выяснил, что почти все стандартные функции C# не умеют работать с суррогатными парами, как и дельфийские.
...
Рейтинг: 0 / 0
Lazarus
    #39876932
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpпочти все стандартные функции C# не умеют работать с суррогатными парами
Что такое "суррогатные пары"?
...
Рейтинг: 0 / 0
Lazarus
    #39876938
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanalekcvpпочти все стандартные функции C# не умеют работать с суррогатными парами
Что такое "суррогатные пары"?
https://ru.stackoverflow.com/questions/575494/Что-такое-unicode-и-как-с-ним-связана-utf-8
...
Рейтинг: 0 / 0
Lazarus
    #39876999
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpВасилий 2,
Кстати, почитал тут интернетики и выяснил, что почти все стандартные функции C# не умеют работать с суррогатными парами, как и дельфийские.вот по этому я за utf-8, с ним явно приходится применять все разборы, а не надеяться на то что прокатит
...
Рейтинг: 0 / 0
Lazarus
    #39877022
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadmanЧто такое "суррогатные пары"?
Тролль!


kealon(Ruslan)вот по этому я за utf-8
Про большому счету, наверное, нет разницы с utf16, если писать проект с нуля. Все равно придется поменять специальные функции для работы со строками или явно приводить к однобайтовым. Но вот старый код переделывать - это ахтунг.
...
Рейтинг: 0 / 0
Lazarus
    #39877033
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)с ним явно приходится применять все разборы...
Ну да, когда секса в жизни не хватает, этот вариант самое оно.
...
Рейтинг: 0 / 0
Lazarus
    #39877050
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ДокТролль!

Не угадал. :) я мельком прочитал не "пары", а "параметры" и удивился.
...
Рейтинг: 0 / 0
Lazarus
    #39877072
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexeykealon(Ruslan)с ним явно приходится применять все разборы...
Ну да, когда секса в жизни не хватает, этот вариант самое оно.да бросьте вы, пара итераторов никого не убили
...
Рейтинг: 0 / 0
Lazarus
    #39877076
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)Kazantsev Alexeyпропущено...

Ну да, когда секса в жизни не хватает, этот вариант самое оно.да бросьте вы, пара итераторов никого не убили
В C++ тоже поначалу так думали. Теперь итераторы захватили мир.
...
Рейтинг: 0 / 0
Lazarus
    #39877080
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёВ C++ тоже поначалу так думали. Теперь итераторы захватили мир.есть "сложность", есть способ её спрятать
не вижу никаких проблем, ну за исключением того что надо знать как всё внутри крутится, но мы ж прогарммисты или кто?
...
Рейтинг: 0 / 0
Lazarus
    #39877082
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)ёёёёёВ C++ тоже поначалу так думали. Теперь итераторы захватили мир.есть "сложность", есть способ её спрятать
не вижу никаких проблем, ну за исключением того что надо знать как всё внутри крутится, но мы ж прогарммисты или кто?
Это да, мы лучше всех, не убавить, ни прибавить.
...
Рейтинг: 0 / 0
Lazarus
    #39877094
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)да бросьте вы, пара итераторов никого не убили
Итераторы это медленно. И ради чего, собственно?
...
Рейтинг: 0 / 0
Lazarus
    #39877111
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpВасилий 2,
Кстати, почитал тут интернетики и выяснил, что почти все стандартные функции C# не умеют работать с суррогатными парами, как и дельфийские.
Вполне допускаю, кажущаяся простота utf16 на это провоцирует. utf8 действительно вынуждает закладываться на все случаи и использовать правильные средства
...
Рейтинг: 0 / 0
Lazarus
    #39877139
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что никто не знает?

"Можно ли как нибудь настроить удаленную отладку на headless линуксе из винды?

Желательно без ручного запихивания каждый раз запускаемого файла и кучи телодвижений.
Хотелось бы как в дельфях с PAServer-ом.

Ну или "хотя бы как".

Что куда ставить и жать?"
...
Рейтинг: 0 / 0
Lazarus
    #39877144
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Я не пользовался, но первая строчка из гугла ведёт сюда: https://wiki.freepascal.org/Remote_Debugging
...
Рейтинг: 0 / 0
Lazarus
    #39877157
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpКстати, почитал тут интернетики и выяснил, что почти все стандартные функции C# не умеют работать с суррогатными парами, как и дельфийские.
Ничего не скажу на счёт C#, но в дельфийской RTL проверка на суррогатные пары есть.
...
Рейтинг: 0 / 0
Lazarus
    #39877164
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докkealon(Ruslan)вот по этому я за utf-8
Про большому счету, наверное, нет разницы с utf16, если писать проект с нуля.
если эти строки пойдут куда-то дальше, наверное, есть
...
Рейтинг: 0 / 0
Lazarus
    #39877177
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexeyrgreat,

Я не пользовался, но первая строчка из гугла ведёт сюда: https://wiki.freepascal.org/Remote_Debugging
Я там был но ответа не нашел.
...
Рейтинг: 0 / 0
Lazarus
    #39877271
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyalekcvpКстати, почитал тут интернетики и выяснил, что почти все стандартные функции C# не умеют работать с суррогатными парами, как и дельфийские.
Ничего не скажу на счёт C#, но в дельфийской RTL проверка на суррогатные пары есть.
И что, Length() корректную длину возвращает? Pos() тоже их учитывает? Copy()? Delete()?..
...
Рейтинг: 0 / 0
Lazarus
    #39877279
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpИ что, Length() корректную длину возвращает? Pos() тоже их учитывает? Copy()? Delete()?..
Эти функции оперируют не символами и даже не кодпоинтами, а элементами из которых состоит строка.
...
Рейтинг: 0 / 0
Lazarus
    #39877286
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Что такое "элемент" строки в этом контексте?
...
Рейтинг: 0 / 0
Lazarus
    #39877287
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatЧто такое "элемент" строки в этом контексте?
For single-byte and multibyte strings, Length returns the number of bytes used by the string. Example for UTF-8:

Writeln(Length(Utf8String('1¢'))); // displays 3

For Unicode (WideString) strings, Length returns the number of bytes divided by two.
...
Рейтинг: 0 / 0
Lazarus
    #39877290
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Трешак.
...
Рейтинг: 0 / 0
Lazarus
    #39877291
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatТрешак.
Дока.

Но если угодно, можно сказать что юникодовые состоят из двухбайтовых элементов, которые можно считать символами UCS-2.
...
Рейтинг: 0 / 0
Lazarus
    #39877293
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, кстати, ссылочка, где прямо говорится об элементах строк: http://docwiki.embarcadero.com/RADStudio/Rio/en/Unicode_in_RAD_Studio#New_String_Type:_UnicodeString
Characters in UTF-16 may be 2 or 4 bytes, so the number of elements in a string is not necessarily equal to the number of characters. If the string has only BMP characters, the number of characters and elements are equal.
...
Рейтинг: 0 / 0
Lazarus
    #39877298
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyНо если угодно, можно сказать что юникодовые состоят из двухбайтовых элементов, которые можно считать символами UCS-2.Меня печалит то что работа функции Length не постоянна.
Ладно бы она всегда выдавала кол-во символов, или всегда количество байт. Можно было бы писать нормальный код.
Но в текущей реализации это "скажи привет" условной компиляции и миллиону ifdef.
...
Рейтинг: 0 / 0
Lazarus
    #39877304
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat> Но в текущей реализации это "скажи привет" условной компиляции и миллиону ifdef.

Можно же свою написать, зачем директивы втыкать.

P.S. Не знал, что кто-то использует UCS.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Lazarus
    #39877306
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

rgreatЛадно бы она всегда выдавала кол-во символов
Каких символов? Нормализованных? В какой форме нормализации?

rgreatили всегда количество байт
Размер в байтах без ифдефов и условной компиляции:
Код: pascal
1.
Length(s) * SizeOf(Char)
...
Рейтинг: 0 / 0
Lazarus
    #39877313
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatKazantsev Alexey,
Что такое "элемент" строки в этом контексте?
Kazantsev Alexey,

Ну то есть сферическими конями в вакууме. Если для UTF-8 она возвращает хотя бы длину строки в байтах, то для UnicodeString она вообще бесполезна получается.
...
Рейтинг: 0 / 0
Lazarus
    #39877315
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpНу то есть сферическими конями в вакууме.
Нет.

alekcvpто для UnicodeString она вообще бесполезна получается
Почему бесполезна и чем лучше размер в байтах?
...
Рейтинг: 0 / 0
Lazarus
    #39877321
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyПочему бесполезна и чем лучше размер в байтах?
А какой толк от функции, которая возвращает длину строки не в байтах и не в символах?..
Это как возвращать размер прямоугольника на экране не в пикселах и не в сантиметрах, а в енотах. Причём каждый енот разной длины (суррогатные пары), если тебе нужен точный размер (кол-во символов) - всё равно придётся заново линейкой померять (распарсить). А если в байтах - то зачем было на 2 умножать?
...
Рейтинг: 0 / 0
Lazarus
    #39877322
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Кстати, про Pos() написано: Pos searches for Substr within S and returns an integer value that is the index of the first character of Substr within S. Pos is case-sensitive. If Substr is not found, Pos returns zero. Она суррогатные пары учитывает?
...
Рейтинг: 0 / 0
Lazarus
    #39877328
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpА какой толк от функции, которая возвращает длину строки не в байтах и не в символах?..
Это как возвращать размер прямоугольника на экране не в пикселах и не в сантиметрах, а в енотах. Причём каждый енот разной длины (суррогатные пары), если тебе нужен точный размер (кол-во символов) - всё равно придётся заново линейкой померять (распарсить).
Я и тебя спрошу о символах. Каких символов? Нормализованных? В какой форме нормализации? Без ответа на этот вопрос тебе даже UTF-32 не поможет.

alekcvpОна суррогатные пары учитывает?
Для подобной функции это не проблема, они будут учитываться без прилагания каких либо усилий.

И как я уже говорил, можно считать, что:
юникодовые состоят из двухбайтовых элементов, которые можно считать символами UCS-2
Если быть ещё более точным, то это кодпоинты BMP.
...
Рейтинг: 0 / 0
Lazarus
    #39877332
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexeyrgreat,

Каких символов? Нормализованных? В какой форме нормализации?
Char, SizeOf(Char)
...
Рейтинг: 0 / 0
Lazarus
    #39877336
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatChar, SizeOf(Char)
А сейчас не количество чаров возвращается?
...
Рейтинг: 0 / 0
Lazarus
    #39877345
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Я-то откуда знаю. Я неделю на лазаре пишу.
...
Рейтинг: 0 / 0
Lazarus
    #39877347
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но судя по твоему "Writeln(Length(Utf8String('1¢'))); // displays 3" - нет.
...
Рейтинг: 0 / 0
Lazarus
    #39877350
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatНо судя по твоему "Writeln(Length(Utf8String('1¢'))); // displays 3" - нет.
Так Utf8String - это байтовая строка. С чего бы Length должна возвращать количество Char для байтовой строки???
...
Рейтинг: 0 / 0
Lazarus
    #39877362
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Потому что UTF8 не байтовая строка. Это строка с вариативным размером char.

По законам здравого смысла Length строки должен выдавать количество символов в ней.
А s[n] возвращать символ под номером n.
...
Рейтинг: 0 / 0
Lazarus
    #39877364
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для выявления же размера в байтах по хорошему надо использовать нечто вроде System.SysUtils.ByteLength(s).
Особенно в случае UFT8 и т.п.
...
Рейтинг: 0 / 0
Lazarus
    #39877367
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatПотому что UTF8 не байтовая строка. Это строка с вариативным размером char.
Ты не фантазируй, а на декларацию типа смотри. Она байтовая.
...
Рейтинг: 0 / 0
Lazarus
    #39877370
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Они все в памяти "байтовые".
Только суть от этого не меняется. Раз уж строка состоит из разных видов char то по этим char к ней и надо по логике вещей доступ делать.

Это будет универсально а не как нынче с зоопарком подходов.

А с байтами надо бы работать через байты а не через индекс символа в строек.
...
Рейтинг: 0 / 0
Lazarus
    #39877371
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatОни все в памяти "байтовые"
Вопрос можно было бы ставить таким образом, если бы эта адресуемость не была публичным интерфейсом. Но она такая, какая есть. Вот юникодовые строки они не байтовые, хотя "в памяти...".

rgreatРаз уж строка состоит из разных видов char
В том то и дело, что состоит она из однобайтовых элементов.
...
Рейтинг: 0 / 0
Lazarus
    #39877372
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Да я в курсе что в дельфе UTF8String это вообще AnsiSting.

Только радоватся этому я смысла не вижу.
...
Рейтинг: 0 / 0
Lazarus
    #39877373
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatДа я в курсе что в дельфе UTF8String это вообще AnsiSting.
Оно и в FPC так.

rgreatТолько радоватся этому я смысла не вижу.
А я не вижу смысла сокрушаться по этому поводу. Могу повторить ещё раз - UTF-8 не для манипуляций со строками, это компактная кодировка для хранения и передачи юникода.
...
Рейтинг: 0 / 0
Lazarus
    #39877375
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Так-то оно так, но чем тогда UTF8String лучше обычного TBytes?
Нафига он такой ущербный нужен?
...
Рейтинг: 0 / 0
Lazarus
    #39877427
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatKazantsev Alexey,

Так-то оно так, но чем тогда UTF8String лучше обычного TBytes?
Нафига он такой ущербный нужен?лишние сущности это плохо, а невыделенная сущность это ещё хуже
...
Рейтинг: 0 / 0
Lazarus
    #39877434
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatТак-то оно так, но чем тогда UTF8String лучше обычного TBytes?
Нафига он такой ущербный нужен?

Используй UTF8Lenght() vs Lenght(), UTF8Pos() vs Pos()... Что-то мешает этому?

Они корректно работают что с UTF8String(AnsiString(CP_UTF8)/RawByteString(AnsiString(CP_NONE)), что co String (которая в винде ведет себя, как 2-байтовая AnsiString, а в линуксе [ если я правильно помню ] - как 1-байтовая).

Еще бы я посоветовал глянуть сюда и сюда . Возможно, это внесет какую-то ясность.
...
Рейтинг: 0 / 0
Lazarus
    #39877503
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
было (Delphi), стало (FPC)

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 TempCnt := Min(Length(s1), l);
 for i := 1 to TempCnt do
 begin
  c := s1[i];
  if (c <> '"')
   {and (c <> '''')}//исправил - не было мягких знаков
   and not CharInSet(c, [#0..#9, #11, #12, #14..#20]) then //исправил - не было переносов
   Result := Result + c
  else
   Result := Result + ' ';
 end;



Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 TempCnt := Min(Utf8Length(s1), l);
 for i := 0 to TempCnt - 1 do
 begin
  CPLen := UTF8CodepointSize(p);
  c := p[0];
  if (c <> '"')
   and not CharInSet(c, [#0..#9, #11, #12, #14..#20]) then 
   begin
    SetLength(Result, Length(Result) + CPLen);
    Move(P^, Result[Length(Result) - CPLen + 1], CPLen);
   end;
  Inc(p, CPLen);
 end;



Приходится два кода держать, да и вообще неуднобно.
...
Рейтинг: 0 / 0
Lazarus
    #39877505
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Length возвращает количество элементов , что соответствует поведению массивов, хоть со стороны на первый взгляд и может показаться непривычным.
К тому же, повторюсь, есть очень мало случаев, когда требуется получать именно конкретный кодпоинт. В подавляющем большинстве применений if s[i]='Ы' then ... или if Pos('Гы', s) <> 0 then... или что-то вроде - всё это будет прекрасно работать и без заморочек с плавающими длинами кодпоинтов.
...
Рейтинг: 0 / 0
Lazarus
    #39877509
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonбыло (Delphi), стало (FPC)
Потому что пора бы оторваться от алгоритмов детского сада и копировать кусками
...
Рейтинг: 0 / 0
Lazarus
    #39877513
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonбыло (Delphi), стало (FPC)
Кстати, а в чем вообще проблема? Символы из набора ", #0..#9, #11, #12, #14..#20 заменяются на пробелы, так? Но ведь и составляющие суррогатной пары, и первый байт любого кодпоинта utf8 имеют особые значения, которые не перепутаешь с символами.
...
Рейтинг: 0 / 0
Lazarus
    #39877540
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2makhaonбыло (Delphi), стало (FPC)
Потому что пора бы оторваться от алгоритмов детского сада и копировать кусками

То есть еще существенно усложнить обработку в обоих случаях? Можно. Но результат станет еще хуже. Хоть и работать будет лучше.
...
Рейтинг: 0 / 0
Lazarus
    #39877624
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatТак-то оно так, но чем тогда UTF8String лучше обычного TBytes?
Нафига он такой ущербный нужен?
Ну, например, у codepage aware строк есть COW и поддержка элементарных строковых функций, что может быть полезно при разработке, например, http сервера или клиента (для обработки заголовков не требуется переводить их в юникод-строку только для того чтобы выполнить некоторые проверки).
...
Рейтинг: 0 / 0
Lazarus
    #39877631
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonПриходится два кода держать, да и вообще неуднобно
Что вам мешает использовать UnicodeString в FPC?
...
Рейтинг: 0 / 0
Lazarus
    #39877640
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonПриходится два кода держать, да и вообще неуднобно.
И насколько я понимаю, этот дельфийский код работал бы без переделок даже для Utf8String.
...
Рейтинг: 0 / 0
Lazarus
    #39877719
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonТо есть еще существенно усложнить обработку в обоих случаях? Можно. Но результат станет еще хуже. Хоть и работать будет лучше.
Нет, при использовании фрагментов строк вместо символов код будет один.
Хотя и этот нормально работает на любых строках
...
Рейтинг: 0 / 0
Lazarus
    #39877773
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

авторЧто вам мешает использовать UnicodeString в FPC?
Так еще больше править - код один и пришлось бы все string'и менять на какие-то свои с дефайнами.

авторНет, при использовании фрагментов строк вместо символов код будет один.
Хотя и этот нормально работает на любых строках

Лучше с кодом. Что-то не могу представить как можно сделать один код и для дефолтных string'ов delphi и fpc без дефайнов или как у меня - просто двух кусков кода.
...
Рейтинг: 0 / 0
Lazarus
    #39877781
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonТак еще больше править - код один и пришлось бы все string'и менять на какие-то свои с дефайнами.
Пишешь {$mode delphiunicode} или {$modeswitch unicodestrings}, если нужен диалект fpc, и ничего править не нужно - дефолтные строки становятся юникодовыми.
...
Рейтинг: 0 / 0
Lazarus
    #39877783
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonЧто-то не могу представить как можно сделать один код и для дефолтных string'ов delphi и fpc без дефайнов или как у меня - просто двух кусков кода.
Приведённый тобою дельфийский код одинако работоспособен с любыми типами дефолтных строк.
...
Рейтинг: 0 / 0
Lazarus
    #39877788
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

это да. однако все api в линухе как было utf8 строки, так и останется. ну и придется лепить прокладки. так как я сейчас сделал - получились минимальные правки. когда строки в лазаре станут по дефолту как в делфи, то получится вообще один код.
...
Рейтинг: 0 / 0
Lazarus
    #39877789
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

авторПриведённый тобою дельфийский код одинако работоспособен с любыми типами дефолтных строк.


Увы, не работало. пришлось переписывать. Ну не от хорошей жизни же правил :) Работало бы - нафиг я бы это все трогал.
...
Рейтинг: 0 / 0
Lazarus
    #39877790
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonоднако все api в линухе как было utf8 строки, так и останется. ну и придется лепить прокладки
У тебя там много работы непосредственно с API? Да и какие прокладки, конвертирование строк делается простым приведением типа. К слову, у FPC в RTL многие функции (не все) имеют перегруженные варианты для трёх типов строк: unicode, utf8 и rawbytestring.
...
Рейтинг: 0 / 0
Lazarus
    #39877791
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonУвы, не работало. пришлось переписывать.
Я конечно не проверял, но у тебя там заменяемые символы не выходят из диапазона ASCII. Ни один спец символ используемый для кодирования последовательностей utf8 не будет заменён (т.к. все они имеют старший бит установленный в единицу), следовательно последовательности нарушены не будут.
...
Рейтинг: 0 / 0
Lazarus
    #39877796
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

авторУ тебя там много работы непосредственно с API? Да и какие прокладки, конвертирование строк делается простым приведением типа. К слову, у FPC в RTL многие функции (не все) имеют перегруженные варианты для трёх типов строк: unicode, utf8 и rawbytestring.
Хватает всякого, кода полмиллиона строк.

авторЯ конечно не проверял, но у тебя там заменяемые символы не выходят из диапазона ASCII.
Точно не работало. Впрочем можно попробовать перепроверить. Ну и это не единственное место. Просто относительно простое.
...
Рейтинг: 0 / 0
Lazarus
    #39877813
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кусочки веселушки равномерно рзамазаны по коду:
Код: pascal
1.
2.
  Pos1 := {$IFDEF FPC}UTF8Pos{$ELSE FPC}Pos{$ENDIF FPC}(' ', s);
  Pos2 := {$IFDEF FPC}UTF8Pos{$ELSE FPC}PosEx{$ENDIF FPC}(' ', s, Pos1 + 1);


Везде по чуть-чуть. Общая картина далека от радостной. Но работает :)
...
Рейтинг: 0 / 0
Lazarus
    #39877819
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonКусочки веселушки равномерно рзамазаны по коду:
Код: pascal
1.
2.
  Pos1 := {$IFDEF FPC}UTF8Pos{$ELSE FPC}Pos{$ENDIF FPC}(' ', s);
  Pos2 := {$IFDEF FPC}UTF8Pos{$ELSE FPC}PosEx{$ENDIF FPC}(' ', s, Pos1 + 1);


Везде по чуть-чуть. Общая картина далека от радостной. Но работает :)
Ох ё... мало того что бессмысленно это, ибо и так работает, так еще и сделано максимально коряво. Вместо того, чтобы плодить дефайны, сделали бы NativeStrPos, которая бы мапилась на соответствующую функцию из RTL и всё.
...
Рейтинг: 0 / 0
Lazarus
    #39877823
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2так еще и сделано максимально коряво.
зато, как красиво! В одну строку
...
Рейтинг: 0 / 0
Lazarus
    #39877826
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2Ох ё...
Эт точно...
...
Рейтинг: 0 / 0
Lazarus
    #39877869
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Согласен. Нормальные строки решат весь ох е...
...
Рейтинг: 0 / 0
Lazarus
    #39877889
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что ж, если человек желает продолжать плодить говнокод, то медицина тут бессильна
...
Рейтинг: 0 / 0
Lazarus
    #39877932
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2то медицина тут бессильна
не обижай зря человека. ИМХО, иногда воркэраунд целесообразнее, чем замена свечей на работающем двигателе.
...
Рейтинг: 0 / 0
Lazarus
    #39878052
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Докне обижай зря человека. ИМХО, иногда воркэраунд целесообразнее, чем замена свечей на работающем двигателе.
От преумножения говнокода целесообразнее не становится, а ведь кому-то в нем еще и ковыряться
...
Рейтинг: 0 / 0
Lazarus
    #39878069
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2,

повторюсь: строки нормальные станут - говнокод выкину. а так то как быстрое решение работает. были бы нормальные строки, проблемы бы вообще не было. уже, видно, что и в лазаре (fpc) наконец осознали и правят. и, да, ковырять больше кроме меня этот кусок некому, можешь не беспокоиться.
...
Рейтинг: 0 / 0
Lazarus
    #39878174
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonстроки нормальные станут - говнокод выкину. а так то как быстрое решение работает. были бы нормальные строки, проблемы бы вообще не было.
Строки и так нормальные... Единый код:

Delphi 10.3:


Lazarus 2.1 (trunk) {$mode delphiunicode}:


Lazarus 2.1 (trunk) {$mode delphi}:
...
Рейтинг: 0 / 0
Lazarus
    #39878293
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
наконец пошел код, а не голословные набросы на вентилятор. у меня так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
procedure TForm6.Button1Click(Sender: TObject);
 function CopyLim(const s: string; StrBeg, StrEnd: integer): string;
 begin
  Result := Copy(s, StrBeg, StrEnd - StrBeg + 1);
 end;

 function NameFormat(const s: string): string;
 var
  Pos1, Pos2: integer;
 begin
  Pos1 := Pos(' ', s);
  Pos2 := PosEx(' ', s, Pos1 + 1);
  Result := CopyLim(s, 1, Pos1 + 1) + '.' + CopyLim(s, Pos2 + 1, Pos2 + 1) + '.';
 end;

var
 s: string;
begin
 s := 'тест тест тест';
 s := NameFormat(s);
 ShowMessage(s);
end;



Ставлю бряк перед ShowMessage
Win/Delphi показывает
...
Рейтинг: 0 / 0
Lazarus
    #39878295
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лазарь/Убунта:
...
Рейтинг: 0 / 0
Lazarus
    #39878296
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
финально на винде все ок:

[Window Title]
Project7

[Content]
тест т.т.

[OK]

на убунте сообщения не видно
...
Рейтинг: 0 / 0
Lazarus
    #39878299
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в delphiunicode - все ок на убунте, как и ожидалось ждем этот режим дефолтно
...
Рейтинг: 0 / 0
Lazarus
    #39878303
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
из наблюдений по поводу delphiunicode. большая часть всех строчных функций дефолтно несовместима с delphiunicode режимом. ладно бы просто api, хотя и оно все несовместимо.
что бы далеко не ходить - ShowMessage:
unit1.pas(53,15) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
...
Рейтинг: 0 / 0
Lazarus
    #39878330
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon,

Говнокод из палаты мер и весов работать и не должен. Если ты закладываешься на то, что символ юникода уместится в одну кодовую позицию строки - ты огребаешь. C utf-8 или utf-16 - не имеет значения (с utf-16 тебе просто везёт больше, т.к. он закрывает весь BMP. Будут там суррогаты, и эти строки для тебя окажутся "неправильными").

makhaonunit1.pas(53,15) Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
Где тут проблема? На линуксе дефолтная кодовая страница utf-8, т.ч. приведение UnicodeString к AnsiString ни к чему ужасному не приведёт.
...
Рейтинг: 0 / 0
Lazarus
    #39878331
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexeyт.к. он закрывает весь BMP
т.к. его одиночные кодовые позиции закрывают весь BMP.
...
Рейтинг: 0 / 0
Lazarus
    #39878338
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon,
+1

Я тоже пока не понимаю оптимизма про юникод. Все utf8, все вручную с явным приведением типов
...
Рейтинг: 0 / 0
Lazarus
    #39878349
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для своих границ применения этих строк и кода достаточно
...
Рейтинг: 0 / 0
Lazarus
    #39878351
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторГде тут проблема? На линуксе дефолтная кодовая страница utf-8, т.ч. приведение UnicodeString к AnsiString ни к чему ужасному не приведёт.
то есть - работа с кодовыми позициями utf16 это говнокод, а куча варнингов по коду - это все отлично? ясно-понятно.
...
Рейтинг: 0 / 0
Lazarus
    #39878379
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonа куча варнингов по коду - это все отлично? ясно-понятно.
Компилятор хочет от тебя явного приведения типа - чтобы убедиться, что ты знаешь, что делаешь.
...
Рейтинг: 0 / 0
Lazarus
    #39878437
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaonавторГде тут проблема? На линуксе дефолтная кодовая страница utf-8, т.ч. приведение UnicodeString к AnsiString ни к чему ужасному не приведёт.
то есть - работа с кодовыми позициями utf16 это говнокод, а куча варнингов по коду - это все отлично? ясно-понятно.
А я не смотрю на ворнинги. Что на них смотреть. Компиляции не мешают.
То одни, то другие. Со времён Delphi 3 много кода, что-то поменялось, стало "деприкатет".
...
Рейтинг: 0 / 0
Lazarus
    #39878451
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёА я не смотрю на ворнинги. Что на них смотреть. Компиляции не мешают.Я бы за это как минимум лишал премии.
...
Рейтинг: 0 / 0
Lazarus
    #39878458
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatёёёёёА я не смотрю на ворнинги. Что на них смотреть. Компиляции не мешают.Я бы за это как минимум лишал премии.
Да ну. У нас премии на результат и сроки, а не за красоту кода.
...
Рейтинг: 0 / 0
Lazarus
    #39878472
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

Хуяк хуяк и в продакшн! (с) ;)
...
Рейтинг: 0 / 0
Lazarus
    #39878475
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

именно.
...
Рейтинг: 0 / 0
Lazarus
    #39878483
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Отличные последствия того что RTL живет в UTF8:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
function AnsiUpperCase(Text: string): string;
begin
  Result:=UTF8Decode(SysUtils.AnsiLowerCase(UTF8Encode(Text)));
end;

function AnsiLowerCase(Text: string): string;
begin
  Result:=UTF8Decode(SysUtils.AnsiLowerCase(UTF8Encode(Text)));
end;
...
Рейтинг: 0 / 0
Lazarus
    #39878484
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Упс. AnsiUpperCase в AnsiUpperCase, конечно.
...
Рейтинг: 0 / 0
Lazarus
    #39878511
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Зачем ты это написал???
...
Рейтинг: 0 / 0
Lazarus
    #39878514
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Потому что:
Код: pascal
1.
Result:=AnsiLowerCase(Result);   // Warning: Implicit string type conversion with potential data loss from "UnicodeString" to "AnsiString"
...
Рейтинг: 0 / 0
Lazarus
    #39878515
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И да, действительно "даталосс".
...
Рейтинг: 0 / 0
Lazarus
    #39878518
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatИ да, действительно "даталосс
Весь код покажи, и что именно теряется.
...
Рейтинг: 0 / 0
Lazarus
    #39878519
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
{$mode delphiunicode}
...
Рейтинг: 0 / 0
Lazarus
    #39878527
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
program Test1;

{$mode delphiunicode}

uses
  {$IFDEF UNIX}
  cthreads,
  {$ENDIF}
  Classes,
  SysUtils,
  graphtype,
  intfgraphics,
  lazcanvas,
  fpimage,
  fpcanvas,
  types
  { you can add units after this };

var
  RawImage : TRawImage;
  Img      : TLazIntfImage;
  CV       : TLazCanvas;
begin
  try
    RawImage.Init;
    RawImage.Description.Init_BPP32_A8R8G8B8_BIO_TTB(1280, 1024);
    RawImage.CreateData(True);

    Img:=TLazIntfImage.Create(0,0);
    try
      Img.SetRawImage(RawImage);
      CV:=TLazCanvas.Create(img);
      try
        CV.TextOut(100,100,'Text');  // Error: Not availlable


?!
...
Рейтинг: 0 / 0
Lazarus
    #39878532
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

{$mode delphiunicode}

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
function TNode.NormalizedName: String;
var
  i : integer;
begin
  Result:=Name;
  if length(Result)>0 then begin
    Result:=AnsiLowerCase(Result);
    Result[1]:=AnsiUpperCase(Result[1])[1];
    for i:=1 to length(Result) do begin
      if Result[i]='i' then Result[i]:='I';
      if (i>1) and (Result[i-1]='-') then Result[i]:=AnsiUpperCase(Result[i])[1];
    end;
  end;
end;



Код: pascal
1.
2.
WriteLn(Core.Nodes[1].Name);
WriteLn(Core.Nodes[1].NormalizedName);


Выводит:

Код: plaintext
1.
МОСКВА-П-КУР
?осква-?-?ур

Подсовываю обертку AnsiUpperCase - все норм.
...
Рейтинг: 0 / 0
Lazarus
    #39878535
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код корявенький, конечно, но я его почти 20 лет назад такой написал. :)
...
Рейтинг: 0 / 0
Lazarus
    #39878539
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatПодсовываю обертку AnsiUpperCase - все норм.
Этот код должен выглядеть так:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
type

  RTLString = AnsiString;

function NormalizedName(const Name : string): String;
var
  i : integer;
begin
  Result:=Name;
  if length(Result)>0 then begin
    Result:=string(AnsiLowerCase(RTLString(Result)));
    Result[1]:=string(AnsiUpperCase(RTLString(Result[1])))[1];
    for i:=1 to length(Result) do begin
      if Result[i]='i' then Result[i]:='I';
      if (i>1) and (Result[i-1]='-') then Result[i]:=string(AnsiUpperCase(RTLString(Result[i])))[1];
    end;
  end;
end;


Псевдоним типа исключительно для того, чтобы потом, когда RTL станет полностью UTF-16, заменить AnsiString на UnicodeString;
...
Рейтинг: 0 / 0
Lazarus
    #39878541
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Т.е. вот так?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
type
  RTLString = AnsiString;

function AnsiUpperCase(Text: string): string;
begin
  Result:=string(SysUtils.AnsiLowerCase(RTLString(Text)));
end;

function AnsiLowerCase(Text: string): string;
begin
  Result:=string(SysUtils.AnsiLowerCase(RTLString(Text)));
end;
...
Рейтинг: 0 / 0
Lazarus
    #39878543
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А чем UTF8Decode/UTF8Encode не катят?
...
Рейтинг: 0 / 0
Lazarus
    #39878545
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, "когда RTL станет полностью UTF-16" RTLString да и вообще эти костыли не понадобятся.
...
Рейтинг: 0 / 0
Lazarus
    #39878546
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatТ.е. вот так?
Можно и так, да.

rgreatА чем UTF8Decode/UTF8Encode не катят?
Ну если хочется потом это ещё раз переписать, можно и их использовать. Просто, когда в RTL будут дефолтные строки utf-16, цена тайп-каста станет нулевой, а ручное конвертирование будет продолжать делать уже ненужную работу.
...
Рейтинг: 0 / 0
Lazarus
    #39878547
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда RTL будут дефолтные строки utf-16 это все вообще не понадобиться.

И уж лучше тогда сделать хуки на RTL функции. Так можно будет основной код не трогать.
--------
По TextOut не подскажешь?
Как включить у TLazIntfImage/TLazCanvas поддержку текста?
...
Рейтинг: 0 / 0
Lazarus
    #39878549
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Можно вообще пользоваться функциями TCharacter, например TCharacter.ToUpper();

rgreatПо TextOut не подскажешь?
NotImplemented;
...
Рейтинг: 0 / 0
Lazarus
    #39878552
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyNotImplemented;Привет, приехали. (с)

Нафига нужен канвас в котором нет вывода текста?!

Блин, ну ты и диверсант! Зачем ты мне его посоветовал?
Я уже неделю код под него адаптирую!
...
Рейтинг: 0 / 0
Lazarus
    #39878553
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatБлин, ну ты и диверсант! Зачем ты мне его посоветовал?
Ты не говорил, что тебе текст будет нужен. Впрочем, я всё равно не знал, что там оно не реализовано.

Тебе же, наверняка, просто подписи простенькие нужны? Сделай алфавит из картинок и всё :)
...
Рейтинг: 0 / 0
Lazarus
    #39878554
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyТебе же, наверняка, просто подписи простенькие нужны? Сделай алфавит из картинок и всё :)
Как бы нет. У меня рендер картографии. ;)

Но я вот тут некие костыли нашел:
https://wiki.lazarus.freepascal.org/fcl-image#Drawing_text
...
Рейтинг: 0 / 0
Lazarus
    #39878555
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Я нашёл пример к этому пакету:
https://github.com/graemeg/freepascal/blob/master/packages/fcl-image/examples/textout.pp
...
Рейтинг: 0 / 0
Lazarus
    #39880133
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то у меня не выходит приделать перегрузку операторов.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
type
  TColor = Cardinal;

  operator := (R: TFPColor)L: TColor; // Fatal: Syntax error, "=" expected but ":=" found

implementation

operator:=(R: TFPColor)L: TColor;
begin
  L:=(R.Alpha shr 8) shl 24+
     (R.Red shr 8) shl 16 +
     (R.Green shr 8) shl 8+
     (R.Blue shr 8) ;
end;


Как?
...
Рейтинг: 0 / 0
Lazarus
    #39880135
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добавлял, удалалял {$mode delphiunicode} - не помогает.
...
Рейтинг: 0 / 0
Lazarus
    #39880136
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatЧто-то у меня не выходит приделать перегрузку операторов.
Как?
А справку почитать?
Delphi allows certain functions, or "operators", to be overloaded within record declarations .
...
Рейтинг: 0 / 0
Lazarus
    #39880137
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

А, блин, туплю, это FPC :)
...
Рейтинг: 0 / 0
Lazarus
    #39880138
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Код: pascal
1.
2.
3.
4.
operator := (const fpcolor : TFPColor) : TColor; inline;
begin
 result := FPColorToTColor(fpcolor);
end;


Но такой синтаксис только для диалекта {$mode objfpc}, если выбираешь диалект дельфей то и синтаксис должен быть дельфийским.
...
Рейтинг: 0 / 0
Lazarus
    #39880141
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо, разобрался.

Как бы прикрутить implicit автоперекодировку из TFPColor в cardinal, если TFPColor - рекорд в другом модуле, а в текущем модуле - $Mode Delphi ?
...
Рейтинг: 0 / 0
Lazarus
    #39880144
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Полагаю, можно вынести оператор в другой модуль с диалектом fpc и подключать в требуемом.
...
Рейтинг: 0 / 0
Lazarus
    #39880146
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прикольные игры с диалектами паскаля в одном проекте. :)
...
Рейтинг: 0 / 0
Lazarus
    #39880150
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Почему нет, у fpc, кстати, ещё и тайп-хелперы множественные допускаются.
...
Рейтинг: 0 / 0
Lazarus
    #39880178
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Ну я тут внезапно выяснил что в дельфях тоже можно несколько хелперов иметь.
Родив наследника.
...
Рейтинг: 0 / 0
Lazarus
    #39880192
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

Это совсем другое, сильно круче. В дельфийской доке вообще указано, что хелпер может иметь ancestor list, что, как бы, намекает... Однако, упс.
...
Рейтинг: 0 / 0
Lazarus
    #39882882
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как такое может быть?

Установил пакет Indy10. Там есть ZLib.

IDE по клику на типе переходит а компилятор не находит, даже если явно юнит указать.
...
Рейтинг: 0 / 0
Lazarus
    #39882900
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Решил проблему добавление каталога с ZLib в Other Unit Files.

Но непонятно почему такое происходит?
Почему не видно сорцов установленного пакета, и где это настраивается в IDE?

В дельфе я могу прописать в IDE пути к библиотекам глобально, а в лазаре как?
...
Рейтинг: 0 / 0
Lazarus
    #39882913
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

в fpc.cfg
...
Рейтинг: 0 / 0
Lazarus
    #39882916
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Руками в notepad-e?

А раздел какой?
...
Рейтинг: 0 / 0
Lazarus
    #39883343
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поставил Indy 10.
Пакет установился без ошибок.

Стоит добавить в проект пакет indylaz - проект перестает линковатся.
Compile Project, Mode: Windows, Target: Test1.exe: Exit code 1, Errors: 11
Test1.lpr(115,1) Error: Illegal COFF Magic while reading C:\Lazarus-Linux\fpcsrc\rtl\Indy10\Protocols\ZLib\adler32.obj
Test1.lpr(115,1) Error: Illegal COFF Magic while reading C:\Lazarus-Linux\fpcsrc\rtl\Indy10\Protocols\ZLib\compress.obj
Test1.lpr(115,1) Error: Illegal COFF Magic while reading C:\Lazarus-Linux\fpcsrc\rtl\Indy10\Protocols\ZLib\crc32.obj
Test1.lpr(115,1) Error: Illegal COFF Magic while reading C:\Lazarus-Linux\fpcsrc\rtl\Indy10\Protocols\ZLib\deflate.obj
Test1.lpr(115,1) Error: Illegal COFF Magic while reading C:\Lazarus-Linux\fpcsrc\rtl\Indy10\Protocols\ZLib\infback.obj
Test1.lpr(115,1) Error: Illegal COFF Magic while reading C:\Lazarus-Linux\fpcsrc\rtl\Indy10\Protocols\ZLib\inffast.obj
Test1.lpr(115,1) Error: Illegal COFF Magic while reading C:\Lazarus-Linux\fpcsrc\rtl\Indy10\Protocols\ZLib\inflate.obj
Test1.lpr(115,1) Error: Illegal COFF Magic while reading C:\Lazarus-Linux\fpcsrc\rtl\Indy10\Protocols\ZLib\inftrees.obj
Test1.lpr(115,1) Error: Illegal COFF Magic while reading C:\Lazarus-Linux\fpcsrc\rtl\Indy10\Protocols\ZLib\trees.obj
Test1.lpr(115,1) Error: Illegal COFF Magic while reading C:\Lazarus-Linux\fpcsrc\rtl\Indy10\Protocols\ZLib\uncompr.obj
Test1.lpr(115,1) Error: Illegal COFF Magic while reading C:\Lazarus-Linux\fpcsrc\rtl\Indy10\Protocols\ZLib\zutil.obj

Win x64.

Если вручную копирую объектные файлы:
copy C:\Lazarus-Linux\fpcsrc\rtl\Indy10\Protocols\ZLib\x86_64-Win64-ZLib\*.obj C:\Lazarus-Linux\fpcsrc\rtl\Indy10\Protocols\ZLib\*.obj

Выдает:
Compile Project, Mode: Windows, Target: Test1.exe: Exit code 1, Errors: 50
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomPage
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomNotebook
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomImageListResolution
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterMenuItem
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterMenu
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterMainMenu
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterPopupMenu
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterDragImageListResolution
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterLazAccessibleObject
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterControl
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterWinControl
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterGraphicControl
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomControl
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterScrollingWinControl
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterScrollBox
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomFrame
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomForm
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterHintWindow
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomScrollBar
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomGroupBox
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomComboBox
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomListBox
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomEdit
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomMemo
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterButtonControl
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomButton
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomCheckBox
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterToggleBox
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterRadioButton
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomStaticText
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomLabel
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomBitBtn
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomSpeedButton
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterShape
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomSplitter
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterPaintBox
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomImage
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterBevel
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomRadioGroup
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomCheckGroup
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomLabeledEdit
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomPanel
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomTrayIcon
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterStatusBar
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterTabSheet
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterPageControl
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomListView
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomProgressBar
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomUpDown
Test1.lpr(115,1) Error: Undefined symbol: WSRegisterCustomToolButton
...
Рейтинг: 0 / 0
Lazarus
    #39883846
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

с таким уровнем вопросов лучше стучаться в основной буржуйский форум (а еще лучше, в mailing list), где трутся основные разрабы.
...
Рейтинг: 0 / 0
Lazarus
    #39883873
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Печаль. Я думал тут кто-нибудь инди под лазаря юзал.
...
Рейтинг: 0 / 0
Lazarus
    #39883876
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В основном лазарьцы на синапсе сидят, кмк
...
Рейтинг: 0 / 0
Lazarus
    #39883916
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

да нормально вроде синапс работает. дописанный вариант, к слову:
https://github.com/Makhaon/Ararat-Synapse
...
Рейтинг: 0 / 0
Lazarus
    #39884051
-Rik-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я раньше на Delphi то же Indy юзал, как на Lazarus перешел, давно это было, Инди с ходу не взлетел, поэтому заморачиваться не стал и перешел на Синапс и не разу не пожалел. Почту отсылает-принимает, с http, ftp работает, у меня интеграция сделана с личным кабинетом Почты России, Боксберри, СДЭК, все работает абсолютно без проблем. Ещё на Синапсе TCP сервер сделал, у меня программа через него со станком общается, выдает задание, получает результат. Ну и само собой синапс работает на любой платформе, программа с ним и на Линуксе заведется и Маке и на ARM-Линуксе. Зря Вы от него нос воротите. Стоит попробовать.
...
Рейтинг: 0 / 0
Lazarus
    #39884205
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А синапс разве не забросили?
http://synapse.ararat.cz/doc/ChangeLog.html
...
Рейтинг: 0 / 0
Lazarus
    #39884208
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerА синапс разве не забросили?
http://synapse.ararat.cz/doc/ChangeLog.html
Кто-то забросил, кто-то подхватил. Там и так код вылизанный и минимальный в сравнении от...
...
Рейтинг: 0 / 0
Lazarus
    #39884210
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот тут посвежее, отсюда беру: https://sourceforge.net/projects/synalist/
...
Рейтинг: 0 / 0
Lazarus
    #39884213
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В своё время выбирал между Indy, synapse и OverbyteIcs. Делал поддержку системы платежей CreditPilot. Синапс не подошёл, т.к. периодически он зависал на вызовах https. С OverbyteIcs зависаний не было, поэтому на нём остановился. Жалею, что тогда Indy не обновил до актуальной версии, может быть и с ним бы всё пошло (на старой версии каждый https-Запрос выполнялся более секунды).
OverbyteIcs не особо нравится, всё асинхронно, работать с email очень тяжело, как реализовать TCP-сервер, который формирует ответы сложнее "hello, world", так и не удалось выяснить, а все их демки как раз уровня "hello, world".
...
Рейтинг: 0 / 0
Lazarus
    #39884256
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerOverbyteIcs не особо нравится, всё асинхронно, работать с email очень тяжело, как реализовать TCP-сервер, который формирует ответы сложнее "hello, world", так и не удалось выяснить, а все их демки как раз уровня "hello, world".
Ничего особо тяжелого. Пора осваивать асинхронное мышление, блокировки уже не в моде. Тем более что там куча высокоуровневых классов для всех мыслимых протоколов.
...
Рейтинг: 0 / 0
Lazarus
    #39884266
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Впрочем, для одного-двух соединений и разветвлённого протокола в стиле запрос-ответ*N асинхронная модель в самом деле может оказаться избыточной. Иногда жалею, что в одной своей программе решил использовать асинхронную модель для FTP. Нахлебался с ней порядочно.
...
Рейтинг: 0 / 0
Lazarus
    #39884535
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2DmSerOverbyteIcs не особо нравится, всё асинхронно, работать с email очень тяжело, как реализовать TCP-сервер, который формирует ответы сложнее "hello, world", так и не удалось выяснить, а все их демки как раз уровня "hello, world".
Ничего особо тяжелого. Пора осваивать асинхронное мышление, блокировки уже не в моде. Тем более что там куча высокоуровневых классов для всех мыслимых протоколов.

Асинхронное программирование на Паскале это не тоже самое, что на c#, JavaScript и других языках с поддержкой async / await. Пусть уж лучше будут блокировки.
...
Рейтинг: 0 / 0
Lazarus
    #39884540
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerС OverbyteIcs зависаний не было, поэтому на нём остановился.
Кстати, уже довольно давно касперский почему-то очень агрится сильно на ссылки для скачивания ICS...
...
Рейтинг: 0 / 0
Lazarus
    #39884546
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerВасилий 2пропущено...

Ничего особо тяжелого. Пора осваивать асинхронное мышление, блокировки уже не в моде. Тем более что там куча высокоуровневых классов для всех мыслимых протоколов.

Асинхронное программирование на Паскале это не тоже самое, что на c#, JavaScript и других языках с поддержкой async / await. Пусть уж лучше будут блокировки.как либу + какой-то базовый RTL к ней напишешь так и будет
не вижу никаких причин вводить для этого синтаксический сахар, текущих языковых возможностей с лихвой хватает
...
Рейтинг: 0 / 0
Lazarus
    #39884565
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)как либу + какой-то базовый RTL к ней напишешь так и будет
не вижу никаких причин вводить для этого синтаксический сахар, текущих языковых возможностей с лихвой хватает

В целом мне хватает Indy. С нею стиль программирование такой же удобный, как в C# / JavaScript при использовании async/await. Разница только в том, что в Indy на каждое подключение выделяется отдельный поток, а при async/await потоки выделяются при необходимости, один поток может обслуживать десятки подключений.
В другой стороны, потоки в Delphi намного легче, чем потоки в C# / JavaScript. В Delphi при создании потока выделяется порядка 16КБ ОЗУ (+ ещё 16КБ, если Windows 64-битный, а прога 32-битная). Таким образом, установить несколько тысяч потоков (если и прога и ОС - 64-битные) - не проблема. Важно с таким количеством потоков избегать использование Sleep (особенно Sleep(0)), иначе планировщик задач Windows загнётся.
Не знаю, сколько подключений можно установить на C# с его async/await. Скорее всего больше, чем в Indy (а может и меньше, тупо может начать тормозить основной поток, из которого на практике вероятнее всего начинаются await-вызовы из-за того, что будет быстро заполняться очередь сообщений у потока).
В этом плане лучше всего GoLang - у него нет потока, у которого может заполнится очередь сообщений и он начнёт тормозить при её обработке, поэтому без проблем может держать десятки тысяч подключений, причем ему для этого хватит лишь несколько десятков потоков Worker. Правда, у него есть поток диспетчеризации, который раскидывает задачи (горутины) между тредами и копирует куски стека, в него всё может упереться. Вроде такую же вещь сделали и в котлине - скрестили оба подхода - там и аналог async/await и копирование кусков стека корутин.
...
Рейтинг: 0 / 0
Lazarus
    #39884608
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer В Delphi при создании потока выделяется порядка 16КБ ОЗУ (+ ещё 16КБ, если Windows 64-битный, а прога 32-битная). Таким образом, установить несколько тысяч потоков (если и прога и ОС - 64-битные) - не проблема.

А стек на каждую нить почему не учел?
...
Рейтинг: 0 / 0
Lazarus
    #39884621
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

Насколько мне известно, под нагрузкой Go упирается в GC, поэтому сейчас идут работы над его (GC) улучшением.

ёёёёёА стек на каждую нить почему не учел?
Даже с дефолтным размером стека на 32-битах можно создать чуть более 1900 потоков. Если размер стека для нитей ограничить, то это значение будет ещё больше. Переход на 64 бита решает.
...
Рейтинг: 0 / 0
Lazarus
    #39884622
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Lazarus
    #39884643
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёDmSer В Delphi при создании потока выделяется порядка 16КБ ОЗУ (+ ещё 16КБ, если Windows 64-битный, а прога 32-битная). Таким образом, установить несколько тысяч потоков (если и прога и ОС - 64-битные) - не проблема.

А стек на каждую нить почему не учел?

16КБ - это и было про стек.
...
Рейтинг: 0 / 0
Lazarus
    #39884646
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerkealon(Ruslan)как либу + какой-то базовый RTL к ней напишешь так и будет
не вижу никаких причин вводить для этого синтаксический сахар, текущих языковых возможностей с лихвой хватает

В целом мне хватает Indy. С нею стиль программирование такой же удобный, как в C# / JavaScript при использовании async/await. Разница только в том, что в Indy на каждое подключение выделяется отдельный поток, а при async/await потоки выделяются при необходимости, один поток может обслуживать десятки подключений.
В другой стороны, потоки в Delphi намного легче, чем потоки в C# / JavaScript. В Delphi при создании потока выделяется порядка 16КБ ОЗУ (+ ещё 16КБ, если Windows 64-битный, а прога 32-битная). Таким образом, установить несколько тысяч потоков (если и прога и ОС - 64-битные) - не проблема. Важно с таким количеством потоков избегать использование Sleep (особенно Sleep(0)), иначе планировщик задач Windows загнётся.
Не знаю, сколько подключений можно установить на C# с его async/await. Скорее всего больше, чем в Indy (а может и меньше, тупо может начать тормозить основной поток, из которого на практике вероятнее всего начинаются await-вызовы из-за того, что будет быстро заполняться очередь сообщений у потока).
В этом плане лучше всего GoLang - у него нет потока, у которого может заполнится очередь сообщений и он начнёт тормозить при её обработке, поэтому без проблем может держать десятки тысяч подключений, причем ему для этого хватит лишь несколько десятков потоков Worker. Правда, у него есть поток диспетчеризации, который раскидывает задачи (горутины) между тредами и копирует куски стека, в него всё может упереться. Вроде такую же вещь сделали и в котлине - скрестили оба подхода - там и аналог async/await и копирование кусков стека корутин.мда...
вас послушать, так шарписты и голубцы под какими то разными ОС запускают свои программы
я вот прям перекрестился, до пенсии мне работы хватит
...
Рейтинг: 0 / 0
Lazarus
    #39884670
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerёёёёёпропущено...

А стек на каждую нить почему не учел?

16КБ - это и было про стек.
"Вопросов больше не имею" - (с).
...
Рейтинг: 0 / 0
Lazarus
    #39884678
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёDmSerпропущено...


16КБ - это и было про стек.
"Вопросов больше не имею" - (с).

А что не так?
...
Рейтинг: 0 / 0
Lazarus
    #39884698
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)голубцы
никогда такого не слышал.
...
Рейтинг: 0 / 0
Lazarus
    #39884699
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerА что не так?
Дефолтный резервируемый размер стека - 1Mb. Поэтому на 32-битах у приложения просто заканчивается адресное пространство.
...
Рейтинг: 0 / 0
Lazarus
    #39884702
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyDmSerА что не так?
Дефолтный резервируемый размер стека - 1Mb. Поэтому на 32-битах у приложения просто заканчивается адресное пространство.
А как его поменять для потока, кстати?
...
Рейтинг: 0 / 0
Lazarus
    #39884704
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvpKazantsev Alexeyпропущено...

Дефолтный резервируемый размер стека - 1Mb. Поэтому на 32-битах у приложения просто заканчивается адресное пространство.
А как его поменять для потока, кстати?
В параметрах линкера. Задается для всех создаваемых нитей приложения.

Для отдельной нити - в CreateThread() есть параметр, можно задать свое значение. Но - не меньше величины гранулярности памяти Windows, т.е. 64кБ.
...
Рейтинг: 0 / 0
Lazarus
    #39884714
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyDmSerА что не так?
Дефолтный резервируемый размер стека - 1Mb. Поэтому на 32-битах у приложения просто заканчивается адресное пространство.

Я про адресное пространство не упоминал. Не вижу смысла. Особенно для 64-битных приложений. А вот количество физической памяти считаю более важным показателем.
...
Рейтинг: 0 / 0
Lazarus
    #39884790
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerВ другой стороны, потоки в Delphi намного легче, чем потоки в ... JavaScript.

DmSerВ этом плане лучше всего GoLang - у него нет потока, у которого может заполнится очередь сообщений и он начнёт тормозить при её обработке, поэтому без проблем может держать десятки тысяч подключений, причем ему для этого хватит лишь несколько десятков потоков Worker. Правда, у него есть поток диспетчеризации, который раскидывает задачи (горутины) между тредами и копирует куски стека, в него всё может упереться.

забористо
...
Рейтинг: 0 / 0
Lazarus
    #39884805
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerKazantsev Alexeyпропущено...

Дефолтный резервируемый размер стека - 1Mb. Поэтому на 32-битах у приложения просто заканчивается адресное пространство.

Я про адресное пространство не упоминал. Не вижу смысла. Особенно для 64-битных приложений. А вот количество физической памяти считаю более важным показателем.
Прэлэстно. Особенно про постоянную оговорку "особенно".
...
Рейтинг: 0 / 0
Lazarus
    #39884815
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёПрэлэстно. Особенно про постоянную оговорку "особенно".

Если Вы хотите что-то спросить, то спрашивайте, чего стесняться? Может я чего-то не понимаю, а благодаря Вам узнаю что-то новое.
...
Рейтинг: 0 / 0
Lazarus
    #39884826
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

нет, меня ваши бормоталки устраивают прямо в этом виде.
...
Рейтинг: 0 / 0
Lazarus
    #39884843
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёёDmSer,

нет, меня ваши бормоталки устраивают прямо в этом виде.

Слово "особенно" мною было сказано только в двух сообщениях: применительно к Sleep(0) и к 64-битным приложениям.

Виртуальное адресное пространство для 64-битных приложений упоминать нет смысла, поскольку его дохрена и при создании даже десятков тысяч тредов мы не упрёмся в его дефицит. А для 32-битных приложений, как уже было сказано выше, можно задать в параметрах линкера "max stack size" (например 64КБ) и тем самым резко увеличить максимальное число тредов. Причем следует учитывать, что для 32-битного приложения, запущенного на 64-битной винде, ОС создаёт для каждого треда 64-битный стек размером 256КБ, поэтому кол-во потоков будет меньше, чем для 32-битной винды.
При создании треда выделяется совсем небольшое физической памяти (примерно 8 - 16 КБ на стек), причем оно никак не связано с параметром "max stack size".
...
Рейтинг: 0 / 0
Lazarus
    #39884900
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

Физическая память без нужды, да, не выделяется, на старте потока 1 страница всего
Но, что бы была возможность увеличить его до max stack size нужно зарезирвировать для этого адреса на весь этот объём - а они очень быстро конечны.

По поводу, повторить то, что сделано в .Net - совсем не Rocket Science.
Если упрощённо, то там просто пул потоков разгребает нити с задачами из IOPort

Сам диспетчер написать, это строчек 500
А вот с библиотеками которые будут его поддерживать уже проблема
Даже минимум вроде работы с примитивами блокировки, файлами и сетью при переписке на overlapped-режим потянет на несколько человеко-месяцев разработки.
Если замахнуться на гуи, то объём вообще становится непосильный
...
Рейтинг: 0 / 0
Lazarus
    #39884910
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Но, что бы была возможность увеличить его до max stack size нужно зарезирвировать для этого адреса на весь этот объём - а они очень быстро конечны.


Логично! Однако в реальных задачах крайне редко возникает необходимость достигать max stack size, который по умолчанию в Windows равен 1МБ. В своих программах не встречал случаев, чтобы и за 64 КБ вылезло.

По поводу, повторить то, что сделано в .Net - совсем не Rocket Science.
Если упрощённо, то там просто пул потоков разгребает нити с задачами из IOPort

Сам диспетчер написать, это строчек 500
А вот с библиотеками которые будут его поддерживать уже проблема
Даже минимум вроде работы с примитивами блокировки, файлами и сетью при переписке на overlapped-режим потянет на несколько человеко-месяцев разработки.
Если замахнуться на гуи, то объём вообще становится непосильный


Да и не нужно это переносить на Delphi. Итак всё работает, незачем ломать. Пусть лучше допилят 64-битный Android и управляемые записи.
...
Рейтинг: 0 / 0
Lazarus
    #39884955
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyДаже с дефолтным размером стека на 32-битах можно создать чуть более 1900 потоков.
Код: pascal
1.
{$SetPEFlags IMAGE_FILE_LARGE_ADDRESS_AWARE}



Кстати, а так на ~2900 потоков хватит?
...
Рейтинг: 0 / 0
Lazarus
    #39884970
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
КвейдКстати, а так на ~2900 потоков хватит?
На 32-битной ОС с ключём /3GB, теоретически, примерно столько. На 64-битной, теоретически, под 4 тыс. на практике (Windows 7 x64) получилось 3120.
...
Рейтинг: 0 / 0
Lazarus
    #39885046
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потоков в идеале должно быть число ядер+1 или +2. Остальное должно пулится.

JavaScript с потоками - что то новое =)
...
Рейтинг: 0 / 0
Lazarus
    #39885047
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl
Потоков в идеале должно быть число ядер+1 или +2. Остальное должно пулится.

Ничего подобного.

Пул тоже ресурсов стоит и далеко не всегда выгоден, даже если не учитывать усложнение кода.
...
Рейтинг: 0 / 0
Lazarus
    #39885054
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl

JavaScript с потоками - что то новое =)


К сожалению не могу объяснить как это в мой пост проскачило. Набираю вслепую, иногда попадает такое, о чем не задумываешься. Возможно в тот момент были мысли о nodejs. А может о java ;)
...
Рейтинг: 0 / 0
Lazarus
    #39885056
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

сделайте паузу. Вход-мееедленный выдох.
...
Рейтинг: 0 / 0
Lazarus
    #39885127
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
Siemargl

JavaScript с потоками - что то новое =)


К сожалению не могу объяснить как это в мой пост проскачило. Набираю вслепую, иногда попадает такое, о чем не задумываешься. Возможно в тот момент были мысли о nodejs. А может о java ;)

java и javascript это ведь одно и то же
...
Рейтинг: 0 / 0
Lazarus
    #39885157
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl
Потоков в идеале должно быть число ядер+1 или +2. Остальное должно пулится.

JavaScript с потоками - что то новое =)

https://developer.mozilla.org/en-US/docs/Web/API/Worker вообще не новое

DmSer
Асинхронное программирование на Паскале это не тоже самое, что на c#, JavaScript и других языках с поддержкой async / await. Пусть уж лучше будут блокировки.

Это все сахар, призванный помочь тем, кто не осилил асинхронное мышление, писать асинхронный код в манере синхронного. И async в JS появился не так уж давно, до этого все сидели на коллбэках, а ведь это вывих мозга покруче событий
...
Рейтинг: 0 / 0
Lazarus
    #39885237
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2
Siemargl
Потоков в идеале должно быть число ядер+1 или +2. Остальное должно пулится.

JavaScript с потоками - что то новое =)

https://developer.mozilla.org/en-US/docs/Web/API/Worker вообще не новое

DmSer
Асинхронное программирование на Паскале это не тоже самое, что на c#, JavaScript и других языках с поддержкой async / await. Пусть уж лучше будут блокировки.

Это все сахар, призванный помочь тем, кто не осилил асинхронное мышление, писать асинхронный код в манере синхронного. И async в JS появился не так уж давно, до этого все сидели на коллбэках, а ведь это вывих мозга покруче событий


В JavaScript async / await - это синтактический сахар (вроде сахар, поскольку с точки зрения компиляции наверное ничего не меняется) по отношению к промайзам. Промайзы в JavaScript - был очень важный шаг к решению проблемы коллбэков, а механихм async / await кардинально упростил асинхронное программирование.

А вот является ли async / await синтактическим сахаром по отношению к C# - не уверен. Разработчики механизма async / await в C# ввели новый подход к компиляции, при котором одна функция каждым упоминанием await расщепляется на подфункции, сохраняется состояние переменных на момент вызова await.
...
Рейтинг: 0 / 0
Lazarus
    #39885247
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2
Siemargl
Потоков в идеале должно быть число ядер+1 или +2. Остальное должно пулится.

JavaScript с потоками - что то новое =)

https://developer.mozilla.org/en-US/docs/Web/API/Worker вообще не новое


1. речь не за браузер и ссылку на до было на доку ноды давать
2. воркеры не не новость, но предназначены они для cpu-bound задач, а не для IO
...
Рейтинг: 0 / 0
Lazarus
    #39885260
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer
А вот является ли async / await синтактическим сахаром по отношению к C# - не уверен. Разработчики механизма async / await в C# ввели новый подход к компиляции, при котором одна функция каждым упоминанием await расщепляется на подфункции, сохраняется состояние переменных на момент вызова await.
не перенимайте эти суеверия, ничего там не расщепляется
...
Рейтинг: 0 / 0
Lazarus
    #39885272
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений
1. речь не за браузер и ссылку на до было на доку ноды давать

1. Про браузер
2. Конкретики не было, просто упоминался JS
3. Нода добавила их 2018-06-20, тоже не вчера. А если по мажорным версиям смотреть, так вообще 3 версии назад
...
Рейтинг: 0 / 0
Lazarus
    #39885326
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2,

таки в браузере уже tcp-сервера поднимать научились?
...
Рейтинг: 0 / 0
Lazarus
    #39885994
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSerПри создании треда выделяется совсем небольшое физической памяти (примерно 8 - 16 КБ на стек), причем оно никак не связано с параметром "max stack size".


На моём ноутбуке (куплен в 2013г, Core i3, 8ГБ ОЗУ, Windows 7 64-битная) с Delphi 2007 вот что получается:
- при дефолтном max stack size удалось создать 1500 потоков, используется 104МБ ОЗУ, время создания 104мс, в среднем 70КБ на поток (32-битный + 64-битный стек).
- при max stack size 64КБ удалось создать 6000 потоков, используется 398МБ ОЗУ, время создания 351мс, в среднем 66КБ на поток (32-битный + 64-битный стек).

Код потока следующий:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
procedure TMyThread.Execute;
begin
  FreeOnTerminate := True;
  InterlockedIncrement(ThreadCount);
  while not Stop do
    Sleep(1000);
  InterlockedDecrement(ThreadCount);
end;



В обоих случаях загрузка процессора = 0% (менеджер памяти при работе потоков не задействуется).

Меньше 64КБ вроде нельзя сделать max stack size.
...
Рейтинг: 0 / 0
Lazarus
    #39886002
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DmSer,

так, на затравку было бы интересно сколько нитей можно создать - CreateFiber
...
Рейтинг: 0 / 0
Lazarus
    #39886046
DmSer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверил на рабочем компьютере, проц дешёвый AMD FX-4330 Quad Core. Windows 7 32-битная.
При Max stack size = 64КБ удалось создать 28682 доп. потока, ОЗУ потребляется 862МБ, время создания 1254 мс (создаётся 22 потока за 1 мс), в среднем выходит 30КБ ОЗУ на 1 поток.
...
Рейтинг: 0 / 0
Lazarus
    #39886955
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему искажется строка?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
{$MODE DELPHIUNICODE} 

var
  s1,s2 : UnicodeString;
  DS : TMemDataSet;
begin
  s1:='Северо-Кавказская';
  DS.Fields[0].AsUnicodeString:=s1;
  s2:=DS.Fields[0].AsUnicodeString;
end;



Пробовал и AsString и AsAnsiString и AsUTF8String и AsWideString.
И конвертации при присвоении.

Результат одинаков:
...
Рейтинг: 0 / 0
Lazarus
    #39886956
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На вход:
...
Рейтинг: 0 / 0
Lazarus
    #39887050
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Почему искажется строка?

Длины поля точно хватает?
...
Рейтинг: 0 / 0
Lazarus
    #39887051
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat,

а если так:

s1,s2 : string;

?
...
Рейтинг: 0 / 0
Lazarus
    #39888191
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
Длины поля точно хватает?
Однако действительно не хватает.
https://wiki.freepascal.org/Database_field_type#Size.2C_DataSize_and_Unicode
автор Size, DataSize and Unicode
Note that for string type fields, Size indicates the number of characters that can be stored. As indicated in FPC Unicode support#Introduction, FPC up to and including 2.6 only deals with ANSI/ASCII single byte characters; it does not support Unicode/UTF8/UTF16/Unicodestring characters.

The read-only property DataSize indicates the field size in bytes.

If you use multibyte characters (e.g. UTF8 or UTF16/Unicodestring encoded), DataSize and Size do not mean the same thing. If you use only ANSI/ASCII characters, DataSize and Size are effectively the same thing.
Что-то как-то не понятно как это все с реальностью бьется ибо в поле с Size=30 текст 'Северо-Кавказская' не влазит.

В чем хранятся строки? В чем измеряется Size и DataSize?
...
Рейтинг: 0 / 0
Lazarus
    #39888208
b0rk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
В чем измеряется Size и DataSize?

В байтах. А все строки в Lazarus в UTF-8 кодировке.
...
Рейтинг: 0 / 0
Lazarus
    #39888215
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
b0rk,

Т.е. все Size указаные в БД локально надо умножать как минимум вдвое?
...
Рейтинг: 0 / 0
Lazarus
    #39888219
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
В чем хранятся строки? В чем измеряется Size и DataSize?

Зависит от типа поля. Если поле TStringFiled то это будет размер в байтах для текущей локали, если TWideStringField то размер будет в WideChar.
...
Рейтинг: 0 / 0
Lazarus
    #39888224
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Сделал так:

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
          with FieldDefs.AddFieldDef do begin
            Name:=FName;
{$IFDEF FPC}
            DataType:=ftWideString;
{$ELSE}
            DataType:=ftString;
{$ENDIF}
            Size:=FFieldDefs[i].Size;
          end;



Помогло.
...
Рейтинг: 0 / 0
Lazarus
    #39890123
Bali
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скопировал из Делфи модуль
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
unit blVarList;

{$mode objfpc}{$H+}

interface

uses
  SysUtils, Classes, StrUtils, variants, bslStrings, IniFiles,  VarConsts, bslDBUtils, bslDateUtils;

type
  tTipVarList = (lsNone, lsDOC, lsFirma, lsPartner, lsGrPol, lsGrOtpr,
    lsPP, lsNal, lsNakl, lsGrPerevoz, lsTABNom, lsFactur);

  tTipDateVar =(
    tdCurMY, tdCurM, tdCurY,
    tdPredMY, tdPredM, tdPredY,
    tdCurPeriod, tdCurKV,
    tdFDCurMonth, tdLDCurMonth,
    tdFDNextMonth, tdLDNextMonth,
    tdFDPriorMonth, tdLDPriorMonth,
    tdCurDate,
    tdFDCurPeriod, tdLDCurPeriod,
    tdFDNextPeriod, tdLDPriorPeriod,
    tdFDCurPeriod_Int, tdLDCurPeriod_Int, tdCurPeriod_Int,
    tdFDCurPeriod_DateTime, tdLDCurPeriod_DateTime, tdCurPeriod_DateTime,
    tdDatePrn, tdDateSostavlen, tdBegDateBankOplat, tdEndDateBankOplat,
    tdBegDateBankRasPeriod, tdEndDateBankRasPeriod,
    td1_MCurKV, td2_MCurKV, td3_MCurKV,
    tdRasPeriodBegYear,
    tdBegRasPeriodDate, tdEndRasPeriodDate);

const

DateVars: array[TTipDateVar] of String =(
    'ТекМесГод', 'ТекМес', 'ТекГод',
    'ПредМесГод', 'ПредМес', 'ПредГод',
    'ТекПериод', 'ТекКвартал',
    'НачТекМесДата', 'КонТекМесДата',
    'НачСледМесДата', 'КонСледМесДата',
    'НачПредМесДата', 'КонПредМесДата',
    'ТекДата',
    'НачТекПериодДата', 'КонТекПериодДата',
    'НачСледПериодДата', 'КонПредПериодДата',
    'BegPeriodIntDate', 'EndPeriodIntDate', 'PeriodIntDate',
    'BegPeriodDate', 'EndPeriodDate', 'PeriodDate',
    'ДатаПечати', 'ДатаСоставления', 'НачСрокОплат', 'КонСрокОплат',
    'НачПериодРасПлат', 'КонПериодРасПлат',
    '1_МесТекКВ', '2_МесТекКВ', '3_МесТекКВ',
    'РасчетПериодНачГод',
    'НачРасчетПериодДата', 'КонРасчетПериодДата');
    
implementation    
    
Function GetPosDateVars(const varName: string): integer;
var
    s: string;
begin
  s := DateVars[tdCurMY];
  result := AnsiIndexText(VarName, DateVars);
end;



из Фастрепорта получаю VarName='ТекМесГод', по массиву DateVars ничего не находит result=-1, строка s='????????'.

Копирую модуль в буфер, удаляю его из Лазарус, создаю пустой модуль с таким же именем, вставляю данные из буфера, все работает как положено, переменные вставляются в отчет.

Вопрос: я что, должен сначала создать пустой модуль, а в него уже переность данные или при копировании нужно что то поднастроить?
...
Рейтинг: 0 / 0
Lazarus
    #39890126
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то у тебя с кодировкой pas файла, походу, раз константы уплыли.
...
Рейтинг: 0 / 0
Lazarus
    #39890174
Bali
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rgreat,
Все там нормально с кодировкой, все работает.
Вопрос не в этом, а как переносить правильно из делфи в лазарус.
Если я сначала создаю модуль в Лазарус, а затем в него через буфер обмена копирую содержимое делфи модуля, то все работает,
а если я копирую делфи модуль в папку с лазарусом, то не работает по массиву строк.
...
Рейтинг: 0 / 0
Lazarus
    #39890175
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bali
rgreat,
Все там нормально с кодировкой, все работает.
Вопрос не в этом, а как переносить правильно из делфи в лазарус.
Если я сначала создаю модуль в Лазарус, а затем в него через буфер обмена копирую содержимое делфи модуля, то все работает,
а если я копирую делфи модуль в папку с лазарусом, то не работает по массиву строк.

А лазарус модули не в UTF-8 сохраняет? Потому что дельфя, по-умолчанию, в Win.
...
Рейтинг: 0 / 0
Lazarus
    #39890190
Bali
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alekcvp,
Да, абсолютно точно, а из буфера перекодирует.
...
Рейтинг: 0 / 0
Lazarus
    #39909532
alikisay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bali,
Лазарь все исходники сохраняет в кодировке UTF8. Delphi в кодировке по умолчанию системы.
Вообще походу Лазарь заточили на этот дебильный высер - UTF8 только для совместимости с linux. Возможно иного приемлимого решения не нашлось.
Всё это конечно крайне печально. Весь опыт работы со строками приходится переосмысливать, самописные библы выкидывать в мусорку.
После такого начинаешь задумываться, а надо ли оно это переходить из загибающегося Дельфя в Лазарь, если всё одно предыдущим опытом не попользуешься толком, и дебилизмов С++ все одно избежать не удастся. Мож уж луче встраиваться в когорту программистов от микрософта, которым специально запрещают думать об исключении паразитного кода и лишних операций. Которым когда говоришь про оптимизацию кода, то они впадают в истерику, катаются по полу, сучат ногами и орут, что не вставляют нигде делаев.
Сижу пишу прием SMSок с мамеда, и думаю: ну ладно щас я это сделаю, как нибудь решу, но вот в дальнейшем оно мне это надо???
...
Рейтинг: 0 / 0
Lazarus
    #39909535
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alikisay,

Я, попробовав кодить на лазаре, предпочитаю без крайней необходимости на нем не кодить.

А единственная причина на данный момент кодить на лазаре для меня - кроссплатформенная (линукс) графика. С этим в дельфях пока все плохо.

В остальном же дельфи несравнимо удобней и продуманней.
...
Рейтинг: 0 / 0
Lazarus
    #39909538
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alikisay,

Delphi "загибается" уже больше 20ти лет. И еще, думаю, как минимум, будет столько "загибаться". Поэтому можешь спокойно на нем дальше и работать.
И, да, Лазарь и fpc собирается переводить строки дефолтно на такие же как в Делфи. По срокам не скажу.
...
Рейтинг: 0 / 0
Lazarus
    #39909558
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
В остальном же дельфи несравнимо удобней и продуманней.

После лазаревой LCL на дельфийскую VCL смотреть не хочется.
...
Рейтинг: 0 / 0
Lazarus
    #39909566
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
alikisay,

Я, попробовав кодить на лазаре, предпочитаю без крайней необходимости на нем не кодить.

А единственная причина на данный момент кодить на лазаре для меня - кроссплатформенная (линукс) графика. С этим в дельфях пока все плохо.

В остальном же дельфи несравнимо удобней и продуманней.


хороший IDE, хороший компилятор - что еще нужно, чтобы встретить старость :)
...
Рейтинг: 0 / 0
Lazarus
    #39909588
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon
alikisay,

Delphi "загибается" уже больше 20ти лет. И еще, думаю, как минимум, будет столько "загибаться". Поэтому можешь спокойно на нем дальше и работать.
И, да, Лазарь и fpc собирается переводить строки дефолтно на такие же как в Делфи. По срокам не скажу.

Если не волнуют проблемы по дальнейшему трудоустройству в качестве программиста или не волнует проблема "где взять кадры" - можно и дельфи, и VFP и Clarion продолжать использовать.
ЗЫ: меня - не волнуют, дельфи наверняка меня переживет, просто скучно, много ограничений, "комьюнити" - одни старперы да маргиналы, нафталин с прошедшим сроком годности, короче.
...
Рейтинг: 0 / 0
Lazarus
    #39909665
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё,

авторЗЫ: меня - не волнуют, дельфи наверняка меня переживет, просто скучно, много ограничений, "комьюнити" - одни старперы да маргиналы, нафталин с прошедшим сроком годности, короче.

Не волнуют. Скучать с работой вот ни разу не приходится :) Почти не дня. В проектах движухи выше крыши. Ограничения есть в каждом языке, иначе бы остался просто один для всего. Комьюнити может и старперы, зато всегда есть кого спросить и дождаться внятного ответа, впрочем неофитов хватает.
...
Рейтинг: 0 / 0
Lazarus
    #39909711
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alikisay
Bali,
Лазарь все исходники сохраняет в кодировке UTF8. Delphi в кодировке по умолчанию системы.
Вообще походу Лазарь заточили на этот дебильный высер - UTF8 только для совместимости с linux. Возможно иного приемлимого решения не нашлось.
Всё это конечно крайне печально. Весь опыт работы со строками приходится переосмысливать, самописные библы выкидывать в мусорку.


А как связана кодировка исходника с работой со строками?
Разве нельзя работать с обычными строками при юникодном исходнике?
И наоборот - работать с юникодными строками при исходнике в ansi?
...
Рейтинг: 0 / 0
Lazarus
    #39909770
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks,

Когда весь rtl в utf8 а работать надо с utf16 кодинг превращается в фееричную и непрерывную генерацию подпорок.
...
Рейтинг: 0 / 0
Lazarus
    #39909789
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat

Когда весь rtl в utf8 а работать надо с utf16 кодинг превращается в фееричную и непрерывную генерацию подпорок.

И опять непонятно какая связь кодировки исходника .pas и работы rtl.
...
Рейтинг: 0 / 0
Lazarus
    #39909794
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
fraks,

Тут каждый о своем. ;)
...
Рейтинг: 0 / 0
Lazarus
    #39909944
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как это феерично, обсир@ть креветки только потому, что тебе не нравится их вкус
...
Рейтинг: 0 / 0
Lazarus
    #39928672
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какого буя в лазаре в TMemDataSet при попытке в записать в Field[x].AsDateTime:=Now; приводит к "Invalid floating point operation"?

Где Field.DataType = ftDateTime.

Если же попробовать = ftTimeStamp то выдает что такой тип ваще не поддеривается.

Нагуглил это: https://bugs.freepascal.org/view.php?id=28734

Пробую сделать подпорку:
Код: pascal
1.
2.
DT:=Now;
Fields[i].SetData(@DT,True);


Fields[i].AsString выдает: 0-0-00 00:00:43

Или так:
Код: pascal
1.
2.
DT:=Now*MSecsPerDay;
Fields[i].SetData(@DT,True);


Fields[i].AsString выдает:0-0-00 05:03:21

Передавать туда TTimeStamp тоже пробовал.

Что там за содомия с форматами даты?
...
Рейтинг: 0 / 0
Lazarus
    #39928676
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дорылся до вот этой мозговыносящей функции:

Код: pascal
1.
2.
3.
4.
function TimeStampToMSecs(const TimeStamp: TTimeStamp): comp;
begin
  result := TimeStamp.Time + comp(timestamp.date)*msecsperday;
end ;   



Походу где-то в кишках используется она. Но она блин падает по Invalid floating point operation, если ей текущее время передать!

Что это за маразм?!
...
Рейтинг: 0 / 0
Lazarus
    #39928677
V.Borzov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А TBufDataset не пробовали? Вроде, кажется поадекватнее. Я когда пытался выяснить для себя, что буду здесь использовать вместо TClientDataset, то пришел к выводу, что это оно, а вот TMemDataset вообще как-то не приглянулся.
...
Рейтинг: 0 / 0
Lazarus
    #39928682
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
V.Borzov
А TBufDataset не пробовали?

Попробовал. Там свои тараканы. С блобами.

При добавлении поля типа блоб count у FieldDefs и Fields отличаются!
...
Рейтинг: 0 / 0
Lazarus
    #39928685
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя может это и чем-то еще проблема.
...
Рейтинг: 0 / 0
Lazarus
    #39928700
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Перешел на TBufDataset проблема пропала.

Проблема с разным кол-вом полей оказалась в том что ни Close ни CreateDataset ни изменение FieldDefs не сбрасывает Fields.

Пришлось принудительно делать сброс Fields.Clear во время переиницализации датасета.

Странно это все...
...
Рейтинг: 0 / 0
Lazarus
    #39929152
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreat
Странно это все...

так пиши в трекер, вход и рега свободные. Заодно доброе дело сделаешь :)

пыс. посмотри, ради интереса, Логуновский TRxMemDataset.
...
Рейтинг: 0 / 0
Lazarus
    #39929306
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
rgreat
Странно это все...

так пиши в трекер, вход и рега свободные. Заодно доброе дело сделаешь :)

пыс. посмотри, ради интереса, Логуновский TRxMemDataset.


причем компилируется и работает и в линукс и в макос
...
Рейтинг: 0 / 0
Lazarus
    #39929699
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
пыс. посмотри, ради интереса, Логуновский TRxMemDataset.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
procedure TForm1.FormShow(Sender: TObject);
var
  i: Integer;
begin
  with RxMemoryData1 do
  begin
    FieldDefs.Add('nn_fld', ftInteger);
    FieldDefs.Add('datetime_fld', ftDateTime);
    FieldDefs.Add('time_fld', ftTime);

    Active:= True;

    for i:= 0 to 10 do
    begin
      AppendRecord([i,now,now]);
      Sleep(100);
    end;

  end;
end; 
...
Рейтинг: 0 / 0
Lazarus
    #39948013
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вышел очередной минорный релиз Лазаря 2.0.8 (список багофиксов )
...
Рейтинг: 0 / 0
Lazarus
    #39952183
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дженерики в FPC стали ещё круче, https://www.mail-archive.com/fpc-pascal@lists.freepascal.org/msg52712.html]теперь их можно специализировать константными значениями .
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
type
  generic TStaticArray<T; const N: Integer> = array[0..N-1] of T;

generic function TimesX<const N: Integer>(aArg: Integer): Integer;
begin
  Result := aArg * N;
end;

var
  myArray: specialize TStaticArray<LongInt, 2>;
  i: LongInt;
begin
  i := specialize TimesX<2>(21);
end.
...
Рейтинг: 0 / 0
Lazarus
    #39955226
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тем, у кого высоконагруженные приложения на FPC: New Multi-thread Friendly Memory Manager for FPC written in x86_64 assembly
...
Рейтинг: 0 / 0
Lazarus
    #39955530
pvv.pas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey,

Недавно был неприятно удивлён что дженерики фрипаскаля кое в чём уступают всё таки делфёвым, порылся нашёл тикет на их багтрекере который висит с 14-го года
...
Рейтинг: 0 / 0
Lazarus
    #39955558
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvv.pas,

Да, недоделок там хватает, к сожалению.
...
Рейтинг: 0 / 0
Lazarus
    #39955616
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pvv.pas
Kazantsev Alexey,

Недавно был неприятно удивлён что дженерики фрипаскаля кое в чём уступают всё таки делфёвым, порылся нашёл тикет на их багтрекере который висит с 14-го года


Как любит говорить тамошний админ Мартин, "patches will be accepted" :) Бери и делай, на худой конец хотя бы тикет создай. В отличие от Дельфей, патчи мерджят при первой возможности и обоюдном согласии всех сторон.

По поводу дженериков, основной разраб Maciej Izak два года назад ушел из основной команды разработчиков (там был большой разбор полетов ). С ними ли он теперь, я не в курсе. Но, судя по сорцам на гитхабе , движуха в плане их дальнейшего развития все-таки есть. Попробуй сравнить/заменить сорцы компилятора и пересобрать его, если они отличаются.
...
Рейтинг: 0 / 0
Lazarus
    #39955618
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
Тем, у кого высоконагруженные приложения на FPC: New Multi-thread Friendly Memory Manager for FPC written in x86_64 assembly

"У посла -медальон, у Шпака..." У Макоси lldb, у винды с линухом - мормот. Каждой сестре по серьге
...
Рейтинг: 0 / 0
Lazarus
    #39955623
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
По поводу дженериков, основной разраб Maciej Izak два года назад ушел из основной команды разработчиков

Док, а с чего ты взял, что он основной разраб дженериков? От того, что он запилил дельфи-компатибл коллекции и попутно фиксил баги в компиляторе? Насколько я понимаю, дженериками в компиляторе занимался совсем другой человек.
...
Рейтинг: 0 / 0
Lazarus
    #39955624
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
Док, а с чего ты взял, что он основной разраб дженериков?

хм, очень может быть. А на чем основаны твои предположения?
...
Рейтинг: 0 / 0
Lazarus
    #39955637
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
А на чем основаны твои предположения?

На структуре бранчей :) Ну и на меиллист я подписан.
...
Рейтинг: 0 / 0
Lazarus
    #39956259
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
Ну и на меиллист я подписан

а-а-а-а ... Авторитетно звучит :)
...
Рейтинг: 0 / 0
Lazarus
    #39956545
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Lazarus
    #39956607
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
О, свежатинка! А я думал, сайт у них давно помер.

Я как раз сейчас пытаюсь ваять батник по мотивам логов fpcupdeluxe с загрузкой, установкой и сборкой ресурсов с нуля. Статья как раз кстати.
...
Рейтинг: 0 / 0
Lazarus
    #39971917
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Lazarus
    #39978164
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зарелизили Lazarus 2.0.10 с fpc 3.2.0 внутри

https://sourceforge.net/projects/lazarus/files/

Правда, почему-то официального анонса нет
...
Рейтинг: 0 / 0
Lazarus
    #39979438
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обновился, блин... При сборке проекта с оптимизацией -Os3 компилятор зависает, входит в бесконечный цикл сыпя хинтами в консоль :(
...
Рейтинг: 0 / 0
Lazarus
    #39979455
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Kazantsev Alexey
Обновился, блин... При сборке проекта с оптимизацией -Os3 компилятор зависает, входит в бесконечный цикл сыпя хинтами в консоль :(

Откат, багрепорт, надежды на фикс... все как обычно))
...
Рейтинг: 0 / 0
Lazarus
    #39979463
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

Откатывать не буду, оказалось достаточно понизить уровень оптимизации. Багрепортить тоже не буду т.к. в трекере уже есть свежий репорт относительно глюков O3, O4.
...
Рейтинг: 0 / 0
Lazarus
    #39979543
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
Обновился, блин...

а ты релизные сборки пользуешь? Или только для продакшена?

На последних транках компилятора кое-какие компоненты перестали собираться. Щас на основном форуме пытаюсь выяснить, где собака порылась.
...
Рейтинг: 0 / 0
Lazarus
    #39979556
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

Я на транке. Из стороннего кода только bgrabitmap, всё остальное по дефолту. Компилятор глюканул на моём коде - юнит с описанием нескольких констант, перечислений и парой интерфейов.
...
Рейтинг: 0 / 0
Lazarus
    #39979567
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я слышал у них были эксперименты поверх LLVM
Кто знает, заглохла тема?
...
Рейтинг: 0 / 0
Lazarus
    #39979600
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU
были эксперименты поверх LLVM

это о чем?

LLVM используется на маках, кажется пытаются прикрутить к линуксам. На винде пока gdb без вариантов
...
Рейтинг: 0 / 0
Lazarus
    #39979603
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

На мой взгляд они ни сейчас, ни в перспективе не смогут сравняться по эффективности с LLVM
Тогда почему бы не отдать кодогенерацию на откуп LLVM, а самим заняться развитием языка, библиотек, IDE?
...
Рейтинг: 0 / 0
Lazarus
    #39979606
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Lazarus
    #39979621
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey,

Ясно. Осталось исключения переделать
Ещё 20 лет подождать )
...
Рейтинг: 0 / 0
Lazarus
    #39979655
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU,

Ну, у них, вот, таска открыта, а в дельфях бай дизайн и живите с этим.
...
Рейтинг: 0 / 0
Lazarus
    #39979687
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU
Ещё 20 лет подождать )

майнтейнеры подобны тебе: фиг его знает, когда сподобятся

зы. мне бы и gdb хватило с лихвой, кабы кто написал толковый мануал, как его собрать под винду без плясок с бубнами
...
Рейтинг: 0 / 0
Lazarus
    #39979696
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док,

Я стабильно каждые месяца 2 репозитории обновляю
Так что не надо мне тут :)
...
Рейтинг: 0 / 0
Lazarus
    #39979729
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Проверьте, пожалуйста, кто-нибудь на свежем релизе wthread. :)
...
Рейтинг: 0 / 0
Lazarus
    #39979929
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU
Док,

На мой взгляд они ни сейчас, ни в перспективе не смогут сравняться по эффективности с LLVM
Тогда почему бы не отдать кодогенерацию на откуп LLVM, а самим заняться развитием языка, библиотек, IDE?
в проекте lazarus и не занимаются кодогенерацией, этим занимаются в проекте fpc
...
Рейтинг: 0 / 0
Lazarus
    #39979937
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan),

Верно конечно
Но ещё верно, что он написан на FPC. И вроде есть разрабы, задействованные в обоих проектах
Но самое главное. Лазарус использует отладчик, который для LLVM свой
...
Рейтинг: 0 / 0
Lazarus
    #39979941
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOU
kealon(Ruslan),

Верно конечно
Но ещё верно, что он написан на FPC. И вроде есть разрабы, задействованные в обоих проектах
Но самое главное. Лазарус использует отладчик, который для LLVM свой
это не принципиально
интерфейсы всегда суживают, более главное тут правильный мапинг исходников - а его даёт не отладчик, а компилятор.
...
Рейтинг: 0 / 0
Lazarus
    #39980004
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ведь гадство: только написал две зеркальные функции WindowsState2String/String2WindowsState, глядь, а они оказывается есть в штатном Forms

Для людей сделано...
...
Рейтинг: 0 / 0
Lazarus
    #39980067
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Зачем целая функция?

Integer(WindowsState)
...
Рейтинг: 0 / 0
Lazarus
    #39980180
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
Проверьте, пожалуйста, кто-нибудь на свежем релизе wthread. :)

Проверил. Всё стабильно.
...
Рейтинг: 0 / 0
Lazarus
    #39980186
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
Зачем целая функция?

Integer(WindowsState)

в xml писать. Чтобы читабельно было, все равно обвязка нужна.

Там оказывается есть даже StringToColor/ColorToString :) Так по ходу работы и находишь что-нибудь написанное кем-то
...
Рейтинг: 0 / 0
Lazarus
    #39980191
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
Чтобы читабельно было, все равно обвязка нужна.

Разве что для читабельности и если часто возникает необходимость руками править конфиги.
Линуксоиды оценят. )
Док
Там оказывается есть даже StringToColor/ColorToString :)

Это и в дельфи есть.
...
Рейтинг: 0 / 0
Lazarus
    #39980326
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Это типа GetEnumName, только не универсальные, а под каждый тип?
...
Рейтинг: 0 / 0
Lazarus
    #39980547
Фотография Док
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fr0sT-Brutal,

если точнее
Код: pascal
1.
2.
3.
4.
5.
function StrToWindowState(const Name: string): TWindowState;
begin
  Result:=TWindowState(GetEnumValueDef(TypeInfo(TWindowState),Name,
                                       ord(wsNormal)));
end;




wadman
Разве что для читабельности и если часто возникает необходимость руками править конфиги.
Линуксоиды оценят. )

не обязательно. Из кода дефолтовый конфиг восстанавливать. Исходник же читабельнее.

Ты всегда помнишь, где и какая циферка что обозначает, хотя бы полгода спустя? :)
...
Рейтинг: 0 / 0
Lazarus
    #39980552
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Док
Ты всегда помнишь, где и какая циферка что обозначает, хотя бы полгода спустя? :)

Я в конфиг лезу только в случае, если там содержится параметр, который не доступен из интерфейса.
В ином случае удаляю.
...
Рейтинг: 0 / 0
Lazarus
    #39980797
Fr0sT-Brutal
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Док
если точнее
Код: pascal
1.
2.
3.
4.
5.
function StrToWindowState(const Name: string): TWindowState;
begin
  Result:=TWindowState(GetEnumValueDef(TypeInfo(TWindowState),Name,
                                       ord(wsNormal)));
end;


Колоссальный хелпер))))
Я себе давно сделал обертку, чтобы писать более приятно:
TEnum<TWindowState>.Val(Name)
После этого и утилиты никакие не нужны
...
Рейтинг: 0 / 0
Lazarus
    #40040820
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: pascal
1.
2.
    Function GetItem(Index: Integer): TObject; {$ifdef CLASSESINLINE}inline;{$endif}
    Procedure SetItem(Index: Integer; AObject: TObject); {$ifdef CLASSESINLINE}inline;{$endif}


Периодически сталкиваюсь с таким дефайном, определение которого не нашёл.

Может кто-то уже копал в эту сторону?
Где оно может быть спрятано?
Или может галка какая-то в настройках проекта?
Инфы крайне мало об этом...
...
Рейтинг: 0 / 0
Lazarus
    #40040825
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

Обычно такие вещи в .inc файлах.
...
Рейтинг: 0 / 0
Lazarus
    #40040834
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

искал в inc,pp,pas.
...
Рейтинг: 0 / 0
Lazarus
    #40040863
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman,

В исходниках FPC, в файле, cclasses.pas, есть похожий дефайн.
...
Рейтинг: 0 / 0
Lazarus
    #40040880
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexey
В исходниках FPC, в файле, cclasses.pas, есть похожий дефайн.

Define или ifdef? Или C CLASSESINLINE?
...
Рейтинг: 0 / 0
Lazarus
    #40040882
zedxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman, Этот дефайн надо самому объявлять, если хотите чтобы методы инлайнились. Вот тут товарищ на это сетует: https://www.mail-archive.com/fpc-devel@lists.freepascal.org/msg38993.html]https://www.mail-archive.com/fpc-devel@lists.freepascal.org/msg38993.html
...
Рейтинг: 0 / 0
Lazarus
    #40040905
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wadman
Define или ifdef?

Там дефайн в начале файла:
Код: pascal
1.
2.
3.
{$ifndef VER2_0}
  {$define CCLASSESINLINE}
{$endif}



wadman
Или C CLASSESINLINE?

Потому и сказал, что похожий.
...
Рейтинг: 0 / 0
314 сообщений из 314, показаны все 13 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Lazarus
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]