Каково грандиозное предприятие с СОЗДАНИЕМ 64-разрядных версий двоичных файлов?

У вас есть несколько проблем в вашем коде

// never Called!
  getUserById(user) {
    this.usersService.GetUserById(user._id).subscribe(
      data => {
        this.user = data.result;
        this.isVerified = data.result.isVerified;
      },
    );
  }
  signinUser() {

    this.authService.loginUser(this.SigninForm.value).subscribe(
      data => {
// might also return in case the loginUser fails (and it still returns data) -> try to output the data to see what is happening in this case
        this.tokenService.SetToken(data.token);
        this.SigninForm.reset();
        setTimeout(() => {
          this.router.navigate(['people']);
        }, 3000);
      },
      err => {

        if (err.error.message) {
          this.errorMessage = err.error.message;
        }
// it will never be false since it is either undefined or true
        if (this.isVerified === false) {
          this.router.navigate(['verify']);
        }
      }
    );
  }
9
задан user15071 2 October 2008 в 23:30
поделиться

8 ответов

В дополнение к вещам в сообщении @jvasak, главной вещи, которая может ошибки причин:

  • указатели больше, чем ints - огромный объем кода делает предположение, что размеры являются тем же.

Помните, что Windows даже не позволит приложению (или 32-разрядный или 64-разрядный) обрабатывать указатели, которые имеют адрес выше 0x7FFFFFFF (2 ГБ или выше), если они не были особенно отмечены как "LARGE_ADDRESS_AWARE" потому что столько приложений будет рассматривать указатель как отрицательную величину в какой-то момент и падать.

5
ответ дан 4 December 2019 в 06:41
поделиться

Если Вы запускаете с нуля, 64-разрядное программирование не это трудно. Однако все программы, которые Вы упоминаете, не являются новыми.

Намного легче создать 64-разрядное приложение с нуля, а не портировать его от существующей кодовой базы. Существует много глюков при портировании, особенно при вхождении в приложения, где некоторый уровень оптимизации был сделан. Программисты используют много небольших предположений для получения скорости, и они не всегда легки к быстро порту к 64-разрядному. Несколько примеров я должен был иметь дело с:

  • Надлежащее выравнивание элементов в структуре. Поскольку размеры данных изменяются, предположения, что определенные поля в структуре будут выровненные на оптимальной границе памяти, могут перестать работать
  • Длина long целочисленное изменение, поэтому при передаче значений по сокету к другой программе, которая не может быть 64-разрядной, необходимо осуществить рефакторинг код
  • Изменение длин указателя, как настолько трудно для дешифровки кода, записанного быть гуру, который покинул компанию, становится немного более хитрым для отладки
  • Базовые библиотеки должны будут также иметь 64-разрядную поддержку правильно ссылке. Это - значительная часть проблемы портирования кода при доверии каким-либо библиотекам, которые не являются открытым исходным кодом
16
ответ дан 4 December 2019 в 06:41
поделиться

Самыми большими проблемами, что я столкнулся с портированием нашего кода C/C++ к 64 битам, является поддержка со стороны сторонних библиотек. Например, существуют версии на в настоящее время только 32 бита API Lotus Notes и также MAPI, таким образом, Вы не можете даже связаться против них.

Также, так как Вы не можете загрузить DLL на 32 бита в свой процесс на 64 бита, Вы записываетесь, снова пытаясь загрузить вещи динамично. Мы столкнулись с этой проблемой, снова пытаясь поддерживать Microsoft Access менее чем 64 бита. Из Википедии:

Струйный Механизм базы данных останется 32-разрядным для обозримого будущего. Microsoft не имеет никаких планов исходно поддерживать Струю под 64-разрядными версиями Windows

5
ответ дан 4 December 2019 в 06:41
поделиться

Просто предположение, но я думал бы, что значительная часть его будет поддержкой - Если Adobe скомпилирует версию на 64 бита, они должны поддерживать его. Даже при том, что это может быть простой переключатель компиляции, они должны были бы все еще пробежать большое тестирование, и т.д., сопровождаемый обучением их персонал поддержки для ответа правильно, когда они действительно сталкиваются с проблемами, устраняющими их или результаты в новой версии двоичного файла на 32 бита или ответвление в коде и т.д. Таким образом, в то время как это кажется простым, для крупного приложения это может все еще закончить тем, что стоило много.

3
ответ дан 4 December 2019 в 06:41
поделиться

Другая причина, что много компаний не прошло усилие по созданию версий на 64 бита, просто они не должны.

Windows имеет WoW64 (Windows в Windows 64 бита), и Linux может иметь библиотеки на 32 бита в наличии вместе с 64 битами. Оба из них позволяют нам запускать приложения на 32 бита в средах на 64 бита.

Пока программное обеспечение может работать таким образом, нет главного стимула преобразовать в 64 бита.

Исключениями к этому являются вещи, такие как драйверы устройств, поскольку они связаны глубже с операционными системами и не могут работать в слое на 32 бита, который x86-64/AMD64 основанные 64-разрядные операционные системы предлагают (IA64 не может сделать это от того, что я понимаю).

Я соглашаюсь с Вами на Flash player, хотя, я очень разочарован Adobe, что они не обновили этот продукт. Как Вы указали, это не работает правильно в 64 битах, требующих, чтобы Вы выполняли версию на 32 бита Internet Explorer.

Я думаю, что это - стратегическая ошибка на части Adobe. Необходимость выполнить браузер на 32 бита для Flash player является неудобством для пользователей, и многие не поймут это решение. Это могло привести к разработчикам, являющимся опасающимся об использовании флэш-памяти. Самая важная вещь для веб-сайта состоит в том, чтобы удостовериться, что все могут просмотреть ее, решениями, которые отчуждают пользователей, обычно являются не популярные. Популярность Flash питалась ее собственной популярностью, чем больше сайтов, которые использовали ее, тем у большего количества пользователей была она в их системах, чем больше пользователей, которые имели ее в их системах, тем больше сайтов было готово использовать ее.

Розничный рынок продвигает эти вещи, когда общий потребитель идет для покупки нового компьютера, они не собираются знать, что им не нужна ОС на 64 бита, они собираются получить его или потому что они слышат, что это - последняя и самая большая вещь, будущее вычислений, или просто потому что они не знают различия.

Vista отсутствовала в течение приблизительно 2 лет теперь, и 64-разрядный Windows XP отсутствовал перед этим. В моем уме, который является слишком длинным для главной технологии, такой как Flash, который не будет обновлен, если они хотят держаться за свой рынок. Это может иметь отношение к приему Adobe в Macromedia, и это - знак, что Adobe не чувствует, что Flash является частью их будущего, мне трудно верить, поскольку я думаю, что Flash и DreamWeaver были верхними частями того, что они вышли из Macromedia, но затем почему они еще не обновили его?

3
ответ дан 4 December 2019 в 06:41
поделиться

Их блог Linux/Flash идет некоторым путем для объяснения, почему нет Flash player на 64 бита пока еще. Некоторые являются определенными для Linux, некоторые не.

0
ответ дан 4 December 2019 в 06:41
поделиться

Прежде всего, поддержка и проблема QA. Инженерные работы для создания для 64-разрядного довольно тривиальны для большей части кода, но усилие по тестированию и стоимость поддержки, не уменьшают масштаб того же пути.

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

Для большого количества приложений, преобразовывая в 64-разрядную модель памяти на самом деле не приносит пользы (так как им никогда не нужны больше, чем некоторые ГБ RAM), и может на самом деле сделать вещи медленнее, из-за большего размера указателя (делает каждое поле объекта вдвое более большим).

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

1
ответ дан 4 December 2019 в 06:41
поделиться

Это не столь просто как просто зеркальное отражение переключателя на Вашем компиляторе. По крайней мере, не, если Вы хотите сделать его правильно. Самый очевидный пример - то, что необходимо объявить все указатели с помощью 64-разрядных типов данных. Если у Вас будет какой-либо код, который делает предположения о размере этих указателей (например, тип данных, который выделяет 4 байта памяти на указатель), то необходимо будет изменить его. Все это должно быть сделано в любых библиотеках, которыми Вы пользуетесь, также. Далее при пропавших без вести только некоторых затем, Вы закончите с указателями, являющимися вниз литым и в неправильном местоположении. Указатели не являются единственной липкой точкой, но являются, конечно, самыми очевидными.

2
ответ дан 4 December 2019 в 06:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: