Тексты Unix V6
2006-07-26 22:17Тексты ядра Unix V6 (Sixth Edition) - весьма познавательное чтиво. Гениальность в простоте. До этого считалось, что операционная система - это что-то очень сложное и запутанное. Но Unix V6 можно прочитать и понять за один вечер - всю систему, с потрохами.
Система разработана в 1975 году. До появления MS-DOS оставалось 6 лет.
Существует сайт - The Unix Tree - где лежит много интересных старых текстов.
Система разработана в 1975 году. До появления MS-DOS оставалось 6 лет.
Существует сайт - The Unix Tree - где лежит много интересных старых текстов.

no subject
Date: 2006-10-23 13:07 (UTC)Библиотека, действительно, беспрецедентная, не спорю. А в остальном... Единственное, что мне в джаве действительно очень понравилось -- это обработка исключений, и, в частности, необходимость явно объявлять, кто что выбрасывает. Ну, и насчет семантики операций Вы тоже правы.
Не нравится мне, конкретно, следующее:
1. Неудобоваримый си-подобный синтаксис, регистрочувствительность.
2. Всего лишь одна модель передачи параметров подпрограмм.
3. Странные, скажем так, правила приведения численных типов.
4. Не менее странное поведение операций битового сдвига.
5. Совершенно недостаточные средства работы с необъектными типами. Либо надо было делать классами все, как в SmallTalk, либо дать нормальные возможности работы с не-классами, как в Аде или Object Pascal.
Больше навскидку не вспомню. Просто помню, что когда читал, много плакалъ.
И еще, кстати, я не вполне понимаю, зачем, собственно, понадобилась эта несчастная виртуальная машина? Иначе чем маркетинговыми соображениями объяснить не могу никак. Ежику же понятно, что версий JVM все равно будет столько, сколько target-платформ -- так почему не обойтись обычным компилятором и разными версиями runtime-библиотек?
Теперь что конкретно мне нравится в Аде.
1. Про читаемый синтаксис уже говорили.
2. Про модели передачи параметров: in, out, in/out и access.
3. Конструкторы/деструкторы у объектов там есть, Вы просто не нашли. И управление временем жизни экземпляров -- тоже есть, причем сделано, на мой вкус, яснее и эффективнее, чем джавовский сборщик мусора. См. "controlled types".
4. Разные мелочи вроде "and then", "or else" и т.п. Очень повышает и читаемость, и надежность.
5. Раздельная компиляция спецификаций и тел пакетов.
6. Очень продуманные средства управления областями видимости.
7. Средствам работы с многозадачностью посвящен целый большой раздел.
И т.п. Причем речь, напомню, идет про стандарт десятилетней давности.
И еще раз: я совершенно не имею в виду, что Аду надо вот сейчас взять и на ней писать то, что пишут под J2EE. Но менее корявой Джава от этого не становится.
no subject
Date: 2006-10-23 20:09 (UTC)2. Изящность - это не когда много, а когда мало, но вполне достаточно. Я бы и эту модель попробовал дополнительно ограничить.
3. Что странного?
4. (Бог мой. Что это. Зачем это. Это из прошлого века.) Что странного?
5. Необъектные типы - издержка практичности. Зато язык в состоянии конкурировать с Си по эффективности.
Про VM - тем, что одна программа (а не один исходник) реально работает везде. Этого, кстати, никто кроме явы так и не достиг. Да и с одним исходником мало, кто справится. Ибо разные платформы - это не только разный процессор. А и, например, разный синтаксис имён файлов. Много ли языков в состоянии с этим хоть как-то бороться?
1. Это Ваша привычка к Паскалевскому синтаксису. Для большинства программистов на планете синтаксис явы куда более читаем.
1а. Читаемость программы в языках без качественной обработки исключений - это оксиморон, потому что вся программа сводится к
if( Error == myFunction(xxx) )
{
deallocate that
kill this
log that fucking error
retunr Error;
}
и так по всему коду - на одну осмысленную строку десять технических.
Я уж молчу о том, что в языке без исключений (адские исключения не считаются - не параметризованы) практически НЕЛЬЗЯ использовать функции как функции.
2. Это - наследие необъектности языка. Практической потребности в out параметрах в оо языках нет. Если нужен out параметр, то программа плохо спроектирована.
3. Увы, любая схема, при которой либо нужно явно удалять объект, либо он может сдохнуть и ссылка на него станет невалидной СИЛЬНО усложняют программирование. Я полагаю, вы не работали на языках с GC. После них от ручного управления памятью тошнит конкретно. До полного неприятия.
4. мелочи, ага. for( Cell s : cells ) { /* process cell */ } поглавнее будет. Ибо сокращает код и повышает читабельность в разы.
5. Зачем? (Я уж молчу о том, что я забыл давно про компиляцию - она происходит где-то между набором строки и нажатием на Ctrl-S как-то незаметно для меня.)
6. всё сосёт, включая яву. Хочу явное управление видимостью.
7. неужели и в библиотеке есть контейнеры, которые сериализуют обращения к себе? И отрабатывают исключения при итерации по модифицированному из другого треда контейнеру? То, что есть в Аде, покрывается ключевым словом serialized, методами засыпания на объекте/пробуждения класса Object и классами, порождёнными от Thread. А есть ещё много за пределами.
И, как я уже говорил, масса вещей в Яве находится просто за пределами хотя бы осознанных авторами Ады задач, не говорю уж об их решениях. Представить себе, например, hibernate для Ады - нереально.
no subject
Date: 2006-10-23 20:10 (UTC)no subject
Date: 2006-10-23 20:46 (UTC)> В общем, увы, Вы просто не знаете Яву
Тут Вы забыли добавить одну достаточно важную вешь.
Предлагаю ничью. Если не согласны, забирайте победу :)
no subject
Date: 2006-10-24 11:37 (UTC)Мы можем продолжить дискуссию - Вы не ответили на большинство моих вопросов.