vak: (Default)
[personal profile] vak
Тексты ядра Unix V6 (Sixth Edition) - весьма познавательное чтиво. Гениальность в простоте. До этого считалось, что операционная система - это что-то очень сложное и запутанное. Но Unix V6 можно прочитать и понять за один вечер - всю систему, с потрохами.

Система разработана в 1975 году. До появления MS-DOS оставалось 6 лет.

Существует сайт - The Unix Tree - где лежит много интересных старых текстов.

Date: 2006-10-23 20:09 (UTC)
From: [identity profile] dz.livejournal.com
1. Большинство программистов в мире в тот момент писали на Си. Делать язык, непохожий на Си - напрашиваться на проблемы.

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 для Ады - нереально.