Apr. 20th, 2017



Из книги Питер Дарман "Парфянин. Ярость орла".
Из блога френда [livejournal.com profile] alknew

Царь Дарий – сущая змея! – резко бросил отец.
– Почему ты так говоришь, отец? – удивленно спросил я.
– Потому что он хочет изменить империи [Парфянская империя] и стать вассалом Рима.
Я был поражен, что кто-то мог захотеть выйти из состава Парфии.
– Да нет же! Зачем ему это?
Отец придержал коня и повернулся лицом ко мне:
– Затем, сын мой, что легче и удобнее быть слугой Рима, чем царем в Парфии. Пока царь Дарий готов лизать сапоги какому-нибудь римскому губернатору, он может спокойно пребывать в своем золоченом дворце и не беспокоиться о сохранении царства.
– А зачем ему это?

Read more... )
...
Всё уже было.
Многажды раз


Цитирую:

"У знакомого завтра День рождения. Его мать, 75 лет от роду, решила сделать сыну подарок - купить новый телефон.
Короче, купила она в Связном Samsung Galaxy A7 почти за 30к рублей. И так не дешевый девайс, так еще и на "услуги" прилипла.
Так и хочется сжечь тех, кто учит прыщавых консультантов разводить на бабло людей.
Какой эпический недомозг мог придумать такие цены, на совершенно никому не нужные "услуги"?
Я когда увидел цены в чеке, решил что это шутка, а вот и нет"



Этих людей, которые вот это делают - надо уничтожать, давить. Это не люди вообще.

Оригинал взят у [livejournal.com profile] avva в немного старины
(эта запись может быть интересна программистам)

1. Последняя версия GW-BASIC от Майкрософта - 1987 года - лежит на этом сайте. Там же можно скачать документацию языка и всех встроенных функций, хотя удобнее это читать здесь. Это был мой первый язык программирования, не считая калькуляторов - если точнее, я учился на варианте MSX-BASIC для Ямахи. GW-BASIC прекрасно запускается внутри DosBox. Все работает.

Напомню разницу между ним и гораздо более популярным поздним QBasic: в GW-BASICе обязательны номера строк и нет блоков кода или сабрутин: точнее, последние, конечно, реализуются с помощью команд GOSUB/RETURN, но их невозможно объявить командой SUB или вызывать по имени. QBasic это по сути дела язык структурированного программирования, просто похожий по синтаксику на Бейсик; GW-BASIC по духу есть классический Бейсик как его придумали в середине 60-х.

2. Недавно возник и ширится феномен "фантазийных консолей", среди которых самая заметная - Pico-8. Это как бы эмулятор несуществовавшей на самом деле никогда игровой консоли, с типичными для начала-середины 80-х ограничениями по памяти, резолюции "экрана" и цветам. У него нет, однако, своего вымышленного "процессора" с машинным кодом, вместо этого код пишется на Lua. Я сам еще не пробовал, но собираюсь посмотреть, выглядит симпатично.

3. Несколько лет назад мне попадался код ранней версии Паскаля 1973 г. - исходники компилятора, который в частности сам себя компилирует. Помню, что эти файлы были непричесаные - в них есть несколько мелких ошибок, и даже если поправить их, современный FreePascal их не понимает - несколько идиом в языке изменились. Сегодня мне попался отличный сайт, где во-первых эти файлы доведены до ума (The P2 Compiler), а во-вторых выложена версия еще более раннего варианта Паскаля, упрощенной версии 1972 г. - Pascal-S.

Обе эти версии компилируют Паскаль во внутренний байт-код, который потом интерпретируют. Вторая особенно миниатюрна, и код компилятора легко можно прочитать и понять. Автор страницы рассказывает на ней об очень забавной "ошибке", которую он обнаружил в компиляторе Pascal-S. Численная переменная в исходном коде во время интерпретации байт-кода хранится в виде variant record - паскалевского аналога union в C, т.е. в одном и том же месте хранится либо целое число, либо действительное, либо булевое значение итд. в зависимости от типа. Нужно проверить тип, чтобы знать, что именно хранится и как с ним обходиться. Так вот, когда компилятор видит одноместную операцию - (минус) в применении к целому или действительному типу, он генерирует байткодовую инструкцию 36, которая всегда применяет минус к целому значению переменной, не проверяя ее тип. Т.е. по идее, если определить переменную с плавающей точкой X, и написать -X, то во время интерпретации скомпилированного кода программа должна сгенерировать отрицание целого значения, которое она "прочитает" там, где записано на самом деле действительное, и выйдет бред.

Но при этом все работает!

Оказалось, что в компьютере CDC 6600, для которого это все писалось, было хитрое представление чисел с плавающей точкой. Машинное слово в нем занимало 60 бит, первые 48 была мантисса, потом 11 бит экспоненты, а последний бит - *знак* экспоненты. Кроме того, в этом компьютере отрицательные числа представлялись с помощью ones'-complement, а не two's-complement, как принято сегодня. Для изменения знака числа надо было полностью его инвертировать, и все. В результате число с плавающей точкой вело себя для некоторых операций подобно целому. Если сделать вид, что оно целое, и инвертировать, то мантисса отдельно инвертируется, экспонента отдельно тоже, но и *знак* экспоненты - отдельный бит, специально для этого добавленный - тоже, и поэтому значение экспоненты не изменится. Красиво!

В CDC-6600 было вообще немало интересных вещей. Например, работа с памятью там обычно была устроена так: были регистры X0-X7 и A0-A7. Помещение любого значения в один из регистров A1-A5 автоматически вело к считыванию из памяти по этому адресу в соответствующий регистр X1-X5 - не нужно было отдельной инструкции для работы с памятью. Помещение любого значения в регистры A6,A7 вело соответственно к записи в память по этому адресу содержимого X6 или X7. Это объясняет, почему руководство по ассемблеру CDC-6600 "посвящается A6 и A7, без которых ничего из полученного в данной книге нельзя было бы сохранить". Вся документация есть тут: http://ygdes.com/CDC/cdc6600.html

Это заставило меня задуматься о том, что неплохо бы "фантазийные консоли" подобно упомянутой выше Pico-8 писать также для вымышленных "странных" архитектур. Я никогда не работал с машиной на основе ones'-complement - было бы интересно попробовать. Скажем, с 14-битным машинным словом, что дает 16K ячеек памяти (но в каждой ячейке лежит 14 бит). Настоящим ассемблером, вдохновленным реальными старыми машинами, а не просто Lua. И так далее.

Profile

notes4myfamily

April 2017

S M T W T F S
      1
23 4 5 6 78
9 10 11 12 13 1415
16 17 18 19 20 2122
23 24 25 26 27 2829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 28th, 2017 10:56 am
Powered by Dreamwidth Studios