Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 16 17 18 19 20 21 [22] 23 24 25   вперед  Ctrl
 Re: goto address  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 720
[quot Kazantsev Alexey]
Няшик
Я тебе ещё раз говорю: если при парсинге использовать словарь статичных строк, то в дальнейшем для таких строк сравнение делать не потребуется т.к. у одинаковых строк будет один адрес.


В интерпретаторе эта конструкция динамическая, и статическая. Т.е простое обращение isset(ArrayBase[Key]) = Address Block (Call)

При обращение, если переменная key не содержит hash,то надо с генерировать для данной переменной. И проверить в базе
29 авг 17, 18:31    [20757018]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
rgreat
Member

Откуда:
Сообщений: 3526
Няшик
А ты думал почему в php и c# к примеру, switch поддерживает строки? А в сях и delphi нет ?
Потому что мало голосуют тут https://quality.embarcadero.com/browse/RSP-16478
29 авг 17, 18:37    [20757023]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 720
rgreat
Няшик
А ты думал почему в php и c# к примеру, switch поддерживает строки? А в сях и delphi нет ?
Потому что мало голосуют тут https://quality.embarcadero.com/browse/RSP-16478


Случаем не из за этого? xD Я 5 минут сидел ждал пока смог закрыть браузер
+
Картинка с другого сайта.
29 авг 17, 18:46    [20757039]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 720
Картинка с другого сайта.
29 авг 17, 18:47    [20757041]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
schi
Member

Откуда: Москва
Сообщений: 2206
Няшик
А ты думал почему в php и c# к примеру, switch поддерживает строки? А в сях и delphi нет ? Наверно потому что это сложная операция, которая будет тормозить код, и по этому её решили просто напросто не добавлять


Вы, сударь, ерунду говорите. В С строка не является базовым типом, почему не сделали в Паскале, я не знаю, сделать - труда не составит.
29 авг 17, 18:49    [20757044]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 720
schi
Няшик
А ты думал почему в php и c# к примеру, switch поддерживает строки? А в сях и delphi нет ? Наверно потому что это сложная операция, которая будет тормозить код, и по этому её решили просто напросто не добавлять


Вы, сударь, ерунду говорите. В С строка не является базовым типом, почему не сделали в Паскале, я не знаю, сделать - труда не составит.


Ну ёпти.. Как так не является ? Тот же самый PAnsiChar там пишется как char * (Указатель на массив байт) Даже обычный string это тот же punicodestring так же как и wchar* если включить в настройках компилятора двух байтовую кодировку

Различий со строками почти нулевая.
29 авг 17, 18:53    [20757048]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
schi
Member

Откуда: Москва
Сообщений: 2206
rgreat
Няшик
А ты думал почему в php и c# к примеру, switch поддерживает строки? А в сях и delphi нет ?
Потому что мало голосуют тут https://quality.embarcadero.com/browse/RSP-16478


Проголосовал. Стефан там вовсю разошелся с примерами :)
29 авг 17, 18:54    [20757052]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
Aleksandr Sharahov
Member

Откуда: Москва
Сообщений: 1314
schi
rgreat
пропущено...
Потому что мало голосуют тут https://quality.embarcadero.com/browse/RSP-16478


Проголосовал. Стефан там вовсю разошелся с примерами :)


куда катится мир
29 авг 17, 20:10    [20757147]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
schi
Member

Откуда: Москва
Сообщений: 2206
Няшик
schi
пропущено...


Вы, сударь, ерунду говорите. В С строка не является базовым типом, почему не сделали в Паскале, я не знаю, сделать - труда не составит.


Ну ёпти.. Как так не является ? Тот же самый PAnsiChar там пишется как char * (Указатель на массив байт) Даже обычный string это тот же punicodestring так же как и wchar* если включить в настройках компилятора двух байтовую кодировку

Различий со строками почти нулевая.


Ну так, не является. Нет там строк. Не надо путать строки и указатели, не выставляй себя в плохом свете.
29 авг 17, 20:39    [20757193]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 720
schi
Няшик
пропущено...


Ну ёпти.. Как так не является ? Тот же самый PAnsiChar там пишется как char * (Указатель на массив байт) Даже обычный string это тот же punicodestring так же как и wchar* если включить в настройках компилятора двух байтовую кодировку

Различий со строками почти нулевая.


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


=__= Ну калакошки ложки у ермёшки... Когда ты пишешь в Delphi тип string то это UnicodeString который прямой аналог в c++ строки.

И строки, это массив байт.. И все переменные - Адреса на память. Вроде основы...
29 авг 17, 21:02    [20757210]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
alekcvp
Member

Откуда:
Сообщений: 385
Няшик
И строки, это массив байт.. И все переменные - Адреса на память. Вроде основы...

Увы, в Delphi строка - это скорее record, чем массив байт. С одной стороны это удобно, с другой - порождает некоторые проблемы. Например: string(<PCharVariable>) - это преобразование с копированием данных, а не просто приведение типов, как в случае Pointer(<StringVariable>).
29 авг 17, 21:10    [20757226]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
bk0010
Member

Откуда:
Сообщений: 3399
rgreat
Няшик
А ты думал почему в php и c# к примеру, switch поддерживает строки? А в сях и delphi нет ?
Потому что мало голосуют тут https://quality.embarcadero.com/browse/RSP-16478
Потому что это ересь: в паскале case применяется к перечислимым типам.
29 авг 17, 21:15    [20757235]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
schi
Member

Откуда: Москва
Сообщений: 2206
Няшик
Когда ты пишешь в Delphi тип string то это UnicodeString который прямой аналог в c++ строки.

И строки, это массив байт.. И все переменные - Адреса на память. Вроде основы...


Увы, степень вашей квалификации не позволяет безоговорочно доверять вашим высказываниям. За сим дозвольте завершить дискуссию.
29 авг 17, 21:17    [20757236]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 720
Я вот не поленился специально залесть в справку и посидеть там 10 минут выискивая то, когда видел что - то

http://docwiki.embarcadero.com/Libraries/Berlin/en/System.UnicodeString

Цитата
UnicodeString is the C++ analog for the Delphi UnicodeString type.

А вот то, что там есть структура - это виноват NextGen который призван ускорить работу со строками, структура StrRec в модуле System

Все эти основы я прекрасно знаю, и понимаю как это работает.

Сначала идёт описание Pointer - PStrRec потом идёт массив байт строки. А PStrRec указывает сколько символов там, какой кодировки, и.т.д. До количество ссылок на строку.
29 авг 17, 21:21    [20757240]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 720
Вот кстати пример создания строки
function _NewUnicodeString(CharLength: Integer): Pointer;
var
  P: PStrRec;
begin
  Result := nil;
  if CharLength > 0 then
  begin
    // Allocate a memory with record and extra wide-null terminator.
    if CharLength >= (MaxInt - SizeOf(StrRec)) div SizeOf(WideChar) then _IntOver;
    GetMem(P, SizeOf(StrRec) + (CharLength + 1) * SizeOf(WideChar));
    Result := Pointer(PByte(P) + SizeOf(StrRec));
    P.length := CharLength;
    P.refCnt := 1;
    P.elemSize := SizeOf(WideChar);
    P.codePage := Word(DefaultUnicodeCodePage);
    PWideChar(Result)[CharLength] := #0;
  end;
end;


Для Ansi почти тоже самое
29 авг 17, 21:26    [20757245]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
alekcvp
Member

Откуда:
Сообщений: 385
Няшик
А вот то, что там есть структура - это виноват NextGen который призван ускорить работу со строками, структура StrRec в модуле System

Ну да, NextGen во времена Delphi 3
С тех пор там только поле CodePage появилось и всё.
29 авг 17, 21:33    [20757253]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
defecator
Member

Откуда:
Сообщений: 34620
alekcvp
Няшик
А вот то, что там есть структура - это виноват NextGen который призван ускорить работу со строками, структура StrRec в модуле System

Ну да, NextGen во времена Delphi 3
С тех пор там только поле CodePage появилось и всё.

Няшик - программист PHP, будь к нему снисходителен ))))
Он забрёл в Дельфи случайно
29 авг 17, 21:38    [20757258]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
alekcvp
Member

Откуда:
Сообщений: 385
Няшик
Цитата
UnicodeString is the C++ analog for the Delphi UnicodeString type.

UnicodeString в си - это класс, а не базовый тип.
29 авг 17, 21:40    [20757260]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 720
alekcvp
Няшик
А вот то, что там есть структура - это виноват NextGen который призван ускорить работу со строками, структура StrRec в модуле System

Ну да, NextGen во времена Delphi 3
С тех пор там только поле CodePage появилось и всё.


Я не в курсе был какими ты ископаемыми пользуешься

defecator
Он забрёл в Дельфи случайно


Не, не случайно -а с большой целью. Так как от сей меня тошнит, а желания написать свой язык есть.
29 авг 17, 21:41    [20757261]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 720
alekcvp
Няшик
Цитата
UnicodeString is the C++ analog for the Delphi UnicodeString type.

UnicodeString в си - это класс, а не базовый тип.


Один хер одно и тоже. Там класс, а там структура. А внутри одно и тоже

http://docs.embarcadero.com/products/rad_studio/delphiAndcpp2009/HelpUpdate2/EN/html/delphivclwin32/System__UnicodeString__StrRec.html
29 авг 17, 21:48    [20757270]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
defecator
Member

Откуда:
Сообщений: 34620
Няшик
alekcvp
пропущено...

Ну да, NextGen во времена Delphi 3
С тех пор там только поле CodePage появилось и всё.


Я не в курсе был какими ты ископаемыми пользуешься

ага, понеслось общение в стиле софт-фор-ю ))))
29 авг 17, 21:57    [20757276]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 720
Постойте, открыл я в токио исходники, и вижу такую картину

    #pragma pack(push,1)
    struct StrRec {
    #ifdef _WIN64
      int _Padding;
    #endif /* _WIN64 */
      unsigned short codePage;
      unsigned short elemSize;
      int refCnt;
      int length;
    };
    #pragma pack(pop)


Хм.. Это дико смахивает на
  StrRec = packed record
  {$IF defined(CPU64BITS)}
    _Padding: Integer; // Make 16 byte align for payload..
  {$ENDIF}
    codePage: Word;
    elemSize: Word;
    refCnt: Integer;
    length: Integer;
  end;
29 авг 17, 22:24    [20757305]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
alekcvp
Member

Откуда:
Сообщений: 385
Няшик
Постойте, открыл я в токио исходники, и вижу такую картину

В Visual C++ такую структуру найди :-)
29 авг 17, 22:32    [20757316]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
Няшик
Member

Откуда: Екатеринбург
Сообщений: 720
alekcvp
Няшик
Постойте, открыл я в токио исходники, и вижу такую картину

В Visual C++ такую структуру найди :-)


Найти NextGen в строках? О котором там не задумались. Но всё это не важно, если ты передашь строку в модуль c++ То всё будет окей. Так как ты передал лишь адрес на массив байт
29 авг 17, 22:47    [20757339]     Ответить | Цитировать Сообщить модератору
 Re: goto address  [new]
alekcvp
Member

Откуда:
Сообщений: 385
Няшик
Найти NextGen в строках? О котором там не задумались. Но всё это не важно, если ты передашь строку в модуль c++ То всё будет окей. Так как ты передал лишь адрес на массив байт


Ещё раз: StrRec имеет такое же отношение к NextGen, как и Boolean.
Ок, передал ты строку в модуль c++, попробуй теперь оттуда вернуть другую строку, только через тип string, а не через pchar. Или изменить ту, что ты передал (чтобы длина новой была больше старой).
29 авг 17, 22:59    [20757362]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 .. 16 17 18 19 20 21 [22] 23 24 25   вперед  Ctrl
Все форумы / Delphi Ответить