Очень низкая скорость работы «родного» Бейсика «Спектрума» (а по среднему показателю в тестах ВМ1-ВМ8 он уступает близкому по мощности процессора Amstrad CPC «всего лишь» в 4 раза) всегда объяснялась примерно так. В 1980 году фирма Синклера выпустила очень дешёвый компьютер ZX80, в котором решила максимально сэкономить на всём, в том числе и на объеме ПЗУ – он был всего 4 килобайта (а ОЗУ – всего 1 (ОДИН!) Кб). Соответственно, разработчики Бейсика для ZX80 были просто вынуждены любой ценой «запихивать» интерпретатор в эти несколько килобайт, пожертвовав всем, чем можно, в том числе и скоростью работы. Естественно, у «гениальных» программистов, нанятых Синклером, в такой объём не поместилась и арифметика с плавающей запятой, поэтому ZX80 мог работать только с целыми числами (что автоматически делало его практически непригодным для любого мало-мальски серьёзного применения, поскольку он не мог заменить даже простейший калькулятор). Тут надо заметить, что, к примеру, первый интерпретатор Бейсика от «Майкрософт», написанный в 1975 году для компьютера «Альтаир» с участием самого Билла Гейтса, тоже занимал всего 4 Кбайта, но, тем не менее, поддерживал вычисления с плавающей запятой и даже умел находить квадратные корни и синусы. Через год Синклер выпустил ещё один сверхдешёвый «шедевр» – ZX81, отличавшийся от предшественника невероятно щедрым подарком для пользователей – объём ПЗУ увеличили аж до 8 килобайт, добавив в основном вполне стандартную для всех остальных производителей возможность работы с вещественными числами и числовыми функциями (типа тригонометрических). Ну а ещё через год случилось подлинное чудо – Синклер выпустил компьютер, имевший целых 16 килобайт ПЗУ и умопомрачительные 16 килобайт ОЗУ (а в более дорогом варианте – вообще 48 килобайт!). И это ещё не всё – новый супер-ПК (а речь идёт, конечно, о нашем ZX Spectrum) имел даже поддержку графики, и не просто графики, а цветной! (ZX80 и ZX81, как вы понимаете, работали только с текстом, поскольку о какой графике может идти речь при штатном объеме ОЗУ в 1 килобайт). Вот только Бейсик у «Спектра», само собой, в целях экономии сильно переделывать не стали – взяли ПЗУ от ZX81, добавили простейшие функции для работы с графикой и ещё чего-то (а часть 16-килобатного ПЗУ осталась вообще незадействованной!) и получили в результате тот самый, мягко говоря, «задумчивый» Бейсик, о котором и идёт речь сейчас.
Всё это вполне похоже на правду (известно, что самого Клайва Синклера компьютеры интересовали мало, и самой главной «функцией» ПК для него была его минимальная себестоимость), но есть в этой истории два загадочных момента. Первое: сам прототип, на «тормознутость» которого обычно «переводят стрелки» поклонники «Спектрума», ZX80, вовсе не отличается особой медлительностью: он выполняет тесты ВМ1-ВМ7 (а ВМ8 для него вообще недоступен по причине отсутствия поддержки сложных функций) в 2 с лишним раза быстрее «Спектрума», показывая результаты чуть ли не на уровне IBM PC. Второе: непонятно, что помешало разработчикам Бейсика для ZX81 реализовать хотя бы среднюю по скорости арифметику с плавающей запятой, имея для этого порядка 3 килобайт памяти (чего должно быть достаточно) и, очевидно, зная о скорости работы других подобных по мощности процессора компьютеров (например, Acorn Atom и Apple II+). Впрочем, поскольку речь шла о разработке Бейсика для самого дешёвого ПК, и на «модернизацию» Бейсика ZX80 выделялись самые минимальные средства, вполне возможно, что программисты просто не стали напрягаться и использовали первые попавшиеся алгоритмы или библиотеки подпрограмм. Тем более что уместить по-настоящему хороший Бейсик в 8 Кбайт ОЗУ, действительно, было непросто (объём ПЗУ у большинства ПК тех лет был не менее 16 Кбайт, достигая в середине 80-х 32-64 килобайт). Ну и в оправдание создателей ZX Spectrum можно напомнить, что этот ПК всё же имел не самый медленный Бейсик: по среднему показателю всех тестов ему уступают и очень популярные 8-битные Atari (имеющие к тому же более быстрый процессор) и даже TI-99/4A, оснащённый 16-битным процессором. А учитывая чисто игровую направленность «Спектрума», придираться к его Бейсику и вовсе нет смысла – в подавляющем большинстве случаев Бейсик был нужен только для загрузки и запуска игр и программ в машинных кодах, и скорость работы самого Бейсика не имела никакого значения.
Если же рассматривать конкретные причины низких показателей «Спектрума» в этих тестах, то их в основном две: чрезвычайно низкая скорость циклов FOR/NEXT (в тесте ВМ1 он отстаёт от большинства 8-битных ПК в 3-4 раза, а от BBC Micro – в 8 раз!), которая сильно снижает показатели ВМ1, ВМ6 и ВМ7 (и, естественно, средний показатель тоже), а также весьма неторопливая вещественная арифметика, особенно вычисление стандартных функций (в тесте ВМ8 отставание от похожего по скорости процессора ПК Amstrad CPC – в 7,5 раз, причём оба ПК имеют одинаковую длину чисел с плавающей запятой (40 бит) и одинаковую точность вычислений).
Таким образом, для радикального ускорения работы Бейсика разработчикам ZX Spectrum, в общем-то, достаточно было просто исправить явный «косяк» с циклами FOR/NEXT и увеличить скорость вычисления сложных функций (логарифмов, синусов и т.п.), использовав какие-то более быстрые алгоритмы (а резерв в этом направлении хорошо показывает Бейсик Amstrad CPC). Тем более, увеличенный в 2 раза (до 16 Кбайт) объем ПЗУ вполне это позволял. Но, к сожалению, ничего этого сделано не было – как мы видим, по скорости выполнения всех тестов Бейсик «Спектрума» совершенно аналогичен Бейсику ZX81, только примерно на 20% медленнее (очевидно, из-за торможения процессора видеоконтроллером). При этом, если ZX80 и ZX81 действительно были сверхдешёвыми ПК, и им многое можно было простить (и Бейсик, и клавиатуру, и проблемы с выводом на экран, и ОЗУ объёмом 1 Кбайт), то «Спектрум» уже стоил значительно дороже и претендовал на роль настоящего домашнего ПК. Но подход его производителя остался прежним: простейшая клавиатура, кое-как «слепленный» Бейсик, минимальный набор разъёмов и т.д.
[свернуть]