Тексты 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-07-27 06:43 (UTC)no subject
Date: 2006-10-19 13:22 (UTC)no subject
Date: 2006-10-19 14:03 (UTC)no subject
Date: 2006-10-29 12:49 (UTC)no subject
Date: 2006-08-04 20:42 (UTC)Или существует в этом странном мире закон природы, по которому все стройное и красивое должно быть доступно немногим?
no subject
Date: 2006-08-07 15:59 (UTC)no subject
Date: 2006-10-19 14:04 (UTC)no subject
Date: 2006-10-21 20:16 (UTC)А вот насчет "посовременней" -- здесь у меня вопрос: а Вы, уважаемый, спецификацию Ады давно в последний раз видели? Или вообще никогда не видели?
И кроме того, "современность" -- далеко не всегда критерий. Я вот недавно видел ультрасовременный "язык web-программирования", в котором структура исходного текста задается количеством ведущих пробелов в строке: типо, тело цикла должно иметь на два ведущих пробела больше, чем заголовок, и т.п. А если кол-во пробелов, значить, не кратно двум, интерпретатор ругаться будеть. Что ж, подход весьма новый, не спорю.
И надо Вам сказать, что, поработав десяток лет в разработке ERP-систем, я подметил интересную особенность: примерно каждые три года приходит "новая волна" разработчиков (в основном, шибко умные выпускники ВУЗов) -- и таки с чего эти люди начинают? Правильно! С разработки совершенно новых, абсолютно уникальных и архиуниверсальных спецификаций макроязыка многострадальной системы.
Надо ли говорить, что перлы, которые у них выходят, -- перлее перлого?..
Учиться людям надо, конечно, спорить не стану. Сам такой был. Но на сегодняшний момент мое глубокое убеждение таково: если хочешь разработать новый язык, подожди лет десять-пятнадцать. Либо расхочется, либо результат окажется хоть сколь-нибудь съедобен.
no subject
Date: 2006-10-22 12:55 (UTC)Давайте конкретно: вот это в Яве сделано плохо, а в Аде 2006 - хорошо. С удовольствием подискутирую.
no subject
Date: 2006-10-22 14:29 (UTC)Дело в том, сколько людей этим занимались, сколько времени они на это потратили и какие ставили перед собой задачи. Насчет последнего добавлю: вещь, которая делается на продажу (т.е., предназначена иметь коммерческий успех) хорошей быть не может в принципе. Она должна быть не хорошей, а привлекательной, а это весьма разные вещи.
Боюсь, конкретной дискуссии не выйдет: я почти не писал на Аде (разве что на Oracle PL/SQL, а это скорее пародия, чем реализация языка) и уж совсем чуть-чуть писал на Джаве. А дискутировать, исходя из прочитанных по диагонали спецификаций, -- занятие странное.
Если интересно, посмотрите сюда: http://langs.icf.bofh.ru/ada/0/ (http://langs.icf.bofh.ru/ada/0/)
Чтобы понять, что к чему, достаточно прочесть вводную и просмотреть оглавление. Русскоязычных ресурсов по Аде 2005 я не нашел, к сожалению.
Могу сказать, впрочем, на чем я основываюсь в своих предпочтениях. Листинг Ады в общих чертах может прочесть и понять ЛЮБОЙ, кто хоть когда-нибудь хоть на чем-нибудь писал. Листинг Джавы без специальных средств просмотра (подсвечивающих, сворачивающих/разворачивающих блоки и т.п.) прочесть вообще невозможно. Исходя, опять же, из своего опыта, я рискну утверждать, что программист в среднем тратит 25% времени на написание кода и 75% -- на чтение. И очень распространенная среди программистов иллюзия, что "это проще написать заново, чем править и отлаживать" (с которой все как один руководители пытаются бороться и никто не может ничего сделать), проистекает именно из того, что писать-то просто, а вот прочесть потом без полбанки -- никак. Особенно, если читает не тот, кто писал.
Так вот. При создании Ады одно из главных условий формулировалось так: это должен быть язык, предназначенный не для того, чтобы на нем было удобно писать, а для того, чтобы его было удобно читать.
no subject
Date: 2006-10-22 17:36 (UTC)no subject
Date: 2006-10-23 01:11 (UTC)Блестящий вопрос. Признайтесь: у Вас ведь долгие часы размышлений ушли на то, чтобы поставить его столь остроумно и столь ребром? ;)
no subject
Date: 2006-10-23 05:46 (UTC)2. Можно изложить своё понимание проблем Явы с читаемостью кода и иным образом. Если оно есть.
Дополнительный вопрос - правда ли, что возможность переопределения семантики операций улучшает читаемость программ? Или наоборот?
no subject
Date: 2006-10-23 06:02 (UTC)no subject
Date: 2006-10-23 07:13 (UTC)no subject
Date: 2006-10-23 07:23 (UTC)no subject
Date: 2006-10-23 13:21 (UTC)Скалярный, составной, с вариантной частью....
no subject
Date: 2006-10-23 13:56 (UTC)Кватернион - это четырехмерный аналог комплексного числа (которое двумерное).
no subject
Date: 2006-10-22 17:43 (UTC)- "объекты" без конструкторов и деструкторов
- эксепшны без параметров
- reflections?
- annotations?
- встроенная сериализация? Впрочем, откуда она без reflections.
- вы хотя бы 10% СТАНДАРТНОЙ библиотеки хотя бы J2SE (про ЕЕ не говорю) видели? Где тип "множество"? map? где классы для работы с электронной почтой? Где аналог сервлетов и JSP?
Я могу продолжить этот список строк на тысячу.
Несерьёзно.
no subject
Date: 2006-10-23 01:09 (UTC)Что ж, в таком случае, самым изящным боевым искусством в мире является борьба Сумо. Спроить с этим -- несерьезно, Вы правы.
no subject
Date: 2006-10-23 05:43 (UTC)2. Вы изящно опустили и ответы на вопросы, касающиеся собственно языка.
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)Мы можем продолжить дискуссию - Вы не ответили на большинство моих вопросов.
no subject
Date: 2006-10-22 14:31 (UTC)Дискуссия не получится еще и по той причине, что 50% того, что сделано в Аде, в Джаве не сделано вообще. Ни хорошо, ни плохо :)
no subject
Date: 2006-10-22 17:36 (UTC)no subject
Date: 2006-10-24 11:38 (UTC)no subject
Date: 2006-10-29 12:32 (UTC)У меня к Джаве похожая претензия. Она уводит программиста от ощущения связи с хардвером. Теряется точка опоры. Что у процессора есть стек, регистры, память. Что процесс выполнения - он не абстрактный, а за ним стоит вполне конкретное железо. Это как виртуальная фортепианная клавиатура, как бесконтактный секс. :)
Джавовский программист никогда не сможет написать операционную систему, тут Джоэл прав. И даже не поймет, зачем она вобще нужна. :(
Ада как язык, конечно, погрубее будет. Но у нее есть эта связь, опора на хардвер. Причем получше, чем у Си/Cи++. Там другой минус - определенная тяжеловесность runtime, все-таки Си++ легче.
no subject
Date: 2006-10-30 10:11 (UTC)Неужели кто-то рассматривает её в таком качестве? Не верю.
Что до Джоела, то он отчасти просто страдает ностальгией, примерно как пианисты, которые заставляют детей обязательно играть на тяжёлой клавиатуре - не осознавая того, что это просто их привычка.
Отчасти же он прав.
Но.
Множество людей под словами "операционная система" понимают не операционную систему, а операционную систему класса Юникса и Виндовс ЭнТи.
А это не одно и то же.
Если смотреть на яву не снаружи, а изнутри, то выясняется, что вокруг этого языка решено настолько до хрена СИСТЕМНЫХ проблем, до которых "классические" ОС даже не добрались, что тезис "на яве нельзя написать ОС" оказывается ОЧЕНЬ сомнительным.
Да - Яве нужен JVM, реализованный на другом языке. Примерно как 13 тысячам строк исходника Юникса v6 были нужны несколько сот строк на ассемблере. Чтобы взлететь.
А дальше... ты во главу угла задачи по написанию ОС ставишь слово "хардвер". А я (и авторы явы) - "система". Оно, в целом, понятно, почему - ты много работаешь с железом - какая-то особенная системность при работе с кодом одного конкретного устройства несущественна, нет проблем сочетаемости кода и взаимодействия компонент, созданных разными разработчиками в разных местах и в разное время.
Для С++ использовать ТРИ внешние библиотеки - достижение, ПЯТЬ - война, ДЕСЯТЬ - нереально. То есть - реально ТОЛЬКО если они все в исходниках, ты потратил месяц на их склеивание, и работают они только с твоим кодом, но не друг с другом. И лучше - в сингл треде. А иначе - месяц через месяц ловли куска битого стека. Стека одного треда, битого другим, конечно.
И для сравнения:
JAMon.jar
ant-antlr-1.6.5.jar
antlr-2.7.5H3.jar
asm-attrs.jar
asm.jar
c3p0-0.9.1-pre6.jar
cglib-2.1.3.jar
commons-beanutils.jar
commons-collections-2.1.1.jar
commons-dbcp-1.2.1.jar
commons-digester.jar
commons-fileupload.jar
commons-lang-2.0.jar
commons-logging-1.0.4.jar
commons-pool-1.3.jar
commons-validator.jar
displaytag-1.0.jar
dom4j-1.6.1.jar
ehcache-1.1.jar
ejb3-persistence.jar
hibernate-annotations.jar
hibernate3.jar
hsqldb.jar
jakarta-oro.jar
jakarta-regexp-1.3.jar
javaee.jar
javax.servlet.jar
jdbc2_0-stdext.jar
jta.jar
log4j-1.2.11.jar
mysql-connector-java-3.1.13-bin.jar
org.mortbay.jetty.jar
org.mortbay.jmx.jar
struts-menu-2.3.jar
struts.jar
Это я взял список библиотек от относительно небольшого явского проекта.
Из них половина знают друг про друга или не знают, но могут взаимодействовать - потому, что вокруг Явы простроено много стандартизованных интерфейсов, которые реализуются там и сям. В малтитреде, отмечу.
Это огромный объем работы других людей, который ты получаешь на халяву, с документами (а больльшинство - с исходниками), они весьма продуманы, сочетаемы и вся эта херня реально работает.
Я такого не видел НИГДЕ.
Поэтому, кстати, глупо сравнивать яву как именно ЯЗЫК с другими языками. Уже неважно, какой там язык - ценность не в синтаксисе, пунктуации или коллинг конвеншне.
Ценность Явы - в потрясающей проработке интерфейсов, правил игры, стандартов на подходы в разработке, в библиотеках, в качественных разработчиках - в инфраструктуре.
Увы, я не знаю НИ ОДНОГО инструмента, который бы был хотя бы БЛИЗОК к этому.
Правда, знаю, какой скоро будет: C#. :(
А драйвера удобнее писать на С, это факт. Ну - или на Аде.