Что это означает, что Squeak работает «идентично» на разных платформах, а Java - нет? - PullRequest
8 голосов
/ 19 марта 2009

Алан Кей отмечает , что «в отличие от Java, [Squeak] работает на всех машинах одинаково - мы изобрели это 20 лет назад». На странице в Википедии также упоминается:

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

Поскольку машины с разными наборами команд, очевидно, не могут запускать идентичные по битам программы, что это означает, когда говорят, что Squeak запускает идентичные по битам программы на разных машинах, а Java - нет?

У меня сложилось впечатление, что скомпилированные классы Java работают одинаково на любой машине на любой JVM, не так ли?

Ответы [ 6 ]

7 голосов
/ 19 марта 2009

Очевидная интерпретация состоит в том, что выполнение одного и того же изображения на разных машинах с одинаковыми входами приведет к тому, что изображение будет эволюционировать через одни и те же битовые комбинации. Этот пост о математике Squeak с плавающей точкой подразумевает, что плавающая точка имеет одинаковое представление на разных платформах. Java требует, чтобы семантика была одинаковой для разных платформ, но допускает денормализованные представления. Библиотека Squeak, используемая Squeak для обеспечения битовой идентичности с плавающей точкой на платформе, - это библиотека Sun, которую также использует Sun JVM, хотя в ней упоминается дальнейшее ограничение ее настройками компилятора.

3 голосов
/ 19 марта 2009

Термин «бит-идентичный» может относиться не только к отсутствию собственного кода, но и к тому, как обрабатываются операции с данными. От платформы к платформе есть тонкая разница, например, в младших значащих цифрах чисел с плавающей запятой из-за различных аппаратных реализаций модуля с плавающей запятой.

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

2 голосов
/ 19 марта 2009

Из документации java.lang.Math :

В отличие от некоторых числовых методов класса StrictMath, все реализации эквивалентных функций класса Math не определены, чтобы возвращать побитовые одинаковые результаты. Это ослабление позволяет реализовать более эффективные реализации, где не требуется строгая воспроизводимость.

2 голосов
/ 19 марта 2009

Бит идентичный означает, что само изображение Squeak может работать на многих платформах, а не только на исходном коде Squeak.

Изображение Smalltalk - это хранилище как кода (в формате байт-кода), так и живых объектов. Код доступен в формате промежуточного байт-кода, который виртуальная машина затем компилирует для машинного кода платформы на лету.

1 голос
/ 19 марта 2009

Он работает на виртуальной машине, как указано в следующем предложении в Википедии. :)

Не уверен, что означает «бит-идентичная» часть по сравнению с Java. У меня сложилось впечатление, что одни и те же файлы классов могут работать на разных машинах, поскольку Java тоже работает на виртуальной машине.

Здесь мы надеемся, что Алан перейдет к теме и прояснит это для нас!

0 голосов
/ 19 марта 2009

Единственное, о чем я могу думать, это то, что он ссылается на тот факт, что Java часто (и C # всегда) «точно вовремя» компилируется на целевом компьютере в собственный код перед его запуском.

...