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

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

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

Date: 2006-07-27 06:43 (UTC)
From: [identity profile] dz.livejournal.com
Вот-вот. Я юникс (правда, не сам 6-й, а сделанный на его основе) знал почти наизусть. Очень красивая система. Не помню, уже были там мультиплексные файлы, или нет, но если были - то она была ещё и с точки зрения IPC довольно функциональна. Жаль - забытая концепция. А ведь довольно изящна...

Date: 2006-10-19 14:03 (UTC)
From: [identity profile] dz.livejournal.com
завидую. у меня пока не получается выделять время на такие проекты :)

Date: 2006-08-04 20:42 (UTC)
From: [identity profile] -k-z-.livejournal.com
Я часто думаю: почему корявую и дубовую Джаву чуть ли не в холодильники встраивают, а Ада никому не известна, кроме маньяков? Почему, блин, я только что установил себе в очередной раз Винду и мучаюсь, как бы ее сломать, а Полуось сдохла, не родившись (хот, видит Бог, ресурсов у IBM в те годы было поболе, чем у Гейтса). Елки-палки, ну почему Макнили до сих пор не написал нормального шелла для своей Соляры?! Денег жалко? Программеры повывелись?..

Или существует в этом странном мире закон природы, по которому все стройное и красивое должно быть доступно немногим?

Date: 2006-10-19 14:04 (UTC)
From: [identity profile] dz.livejournal.com
ява-то поизящней ады будет, да и так это на эпоху посовременней.

Date: 2006-10-21 20:16 (UTC)
From: [identity profile] -k-z-.livejournal.com
Ну, насчет изящества спорить не будем: кому-то нравится "Девушка на шаре" Пикассо, кому-то -- "Грации" Ботичелли. Боюсь, что джава у меня всегда ассоциировалась скорее со вторым, чем с первым. Дело вкуса, так или иначе.

А вот насчет "посовременней" -- здесь у меня вопрос: а Вы, уважаемый, спецификацию Ады давно в последний раз видели? Или вообще никогда не видели?

И кроме того, "современность" -- далеко не всегда критерий. Я вот недавно видел ультрасовременный "язык web-программирования", в котором структура исходного текста задается количеством ведущих пробелов в строке: типо, тело цикла должно иметь на два ведущих пробела больше, чем заголовок, и т.п. А если кол-во пробелов, значить, не кратно двум, интерпретатор ругаться будеть. Что ж, подход весьма новый, не спорю.

И надо Вам сказать, что, поработав десяток лет в разработке ERP-систем, я подметил интересную особенность: примерно каждые три года приходит "новая волна" разработчиков (в основном, шибко умные выпускники ВУЗов) -- и таки с чего эти люди начинают? Правильно! С разработки совершенно новых, абсолютно уникальных и архиуниверсальных спецификаций макроязыка многострадальной системы.
Надо ли говорить, что перлы, которые у них выходят, -- перлее перлого?..

Учиться людям надо, конечно, спорить не стану. Сам такой был. Но на сегодняшний момент мое глубокое убеждение таково: если хочешь разработать новый язык, подожди лет десять-пятнадцать. Либо расхочется, либо результат окажется хоть сколь-нибудь съедобен.

Date: 2006-10-22 12:55 (UTC)
From: [identity profile] dz.livejournal.com
Ага, ага. Яву делали идиоты, а Аду - мудрецы. Я видел спеки ады. И тоже восторгался ею в 80-х. Современные - не видел.

Давайте конкретно: вот это в Яве сделано плохо, а в Аде 2006 - хорошо. С удовольствием подискутирую.

Date: 2006-10-22 14:29 (UTC)
From: [identity profile] -k-z-.livejournal.com
Дело не в том, идиоты или мудрецы :)
Дело в том, сколько людей этим занимались, сколько времени они на это потратили и какие ставили перед собой задачи. Насчет последнего добавлю: вещь, которая делается на продажу (т.е., предназначена иметь коммерческий успех) хорошей быть не может в принципе. Она должна быть не хорошей, а привлекательной, а это весьма разные вещи.

Боюсь, конкретной дискуссии не выйдет: я почти не писал на Аде (разве что на Oracle PL/SQL, а это скорее пародия, чем реализация языка) и уж совсем чуть-чуть писал на Джаве. А дискутировать, исходя из прочитанных по диагонали спецификаций, -- занятие странное.

Если интересно, посмотрите сюда: http://langs.icf.bofh.ru/ada/0/ (http://langs.icf.bofh.ru/ada/0/)
Чтобы понять, что к чему, достаточно прочесть вводную и просмотреть оглавление. Русскоязычных ресурсов по Аде 2005 я не нашел, к сожалению.

Могу сказать, впрочем, на чем я основываюсь в своих предпочтениях. Листинг Ады в общих чертах может прочесть и понять ЛЮБОЙ, кто хоть когда-нибудь хоть на чем-нибудь писал. Листинг Джавы без специальных средств просмотра (подсвечивающих, сворачивающих/разворачивающих блоки и т.п.) прочесть вообще невозможно. Исходя, опять же, из своего опыта, я рискну утверждать, что программист в среднем тратит 25% времени на написание кода и 75% -- на чтение. И очень распространенная среди программистов иллюзия, что "это проще написать заново, чем править и отлаживать" (с которой все как один руководители пытаются бороться и никто не может ничего сделать), проистекает именно из того, что писать-то просто, а вот прочесть потом без полбанки -- никак. Особенно, если читает не тот, кто писал.

Так вот. При создании Ады одно из главных условий формулировалось так: это должен быть язык, предназначенный не для того, чтобы на нем было удобно писать, а для того, чтобы его было удобно читать.

Date: 2006-10-22 17:36 (UTC)
From: [identity profile] dz.livejournal.com
Что именно Вы не смогли прочесть из написанного на Джаве? Что именно сделано в Аде для лёгкой читаемости?

Date: 2006-10-23 01:11 (UTC)
From: [identity profile] -k-z-.livejournal.com
> Что именно Вы не смогли прочесть из написанного на Джаве?

Блестящий вопрос. Признайтесь: у Вас ведь долгие часы размышлений ушли на то, чтобы поставить его столь остроумно и столь ребром? ;)

Date: 2006-10-23 05:46 (UTC)
From: [identity profile] dz.livejournal.com
1. Там есть и второй, если этот не катит.

2. Можно изложить своё понимание проблем Явы с читаемостью кода и иным образом. Если оно есть.

Дополнительный вопрос - правда ли, что возможность переопределения семантики операций улучшает читаемость программ? Или наоборот?

Date: 2006-10-23 07:13 (UTC)
From: [identity profile] dz.livejournal.com
me too. Это я к тому, что в отношении Явы явно декларированы действия, направленные на улучшение читаемости - в частности, запрет на переопределение операций. В Аде же переопределение присутствует.

Date: 2006-10-23 07:23 (UTC)
From: [identity profile] dz.livejournal.com
PS: а что это за тип? :)

Date: 2006-10-23 13:21 (UTC)
From: [identity profile] -k-z-.livejournal.com
Да тип как тип.
Скалярный, составной, с вариантной частью....

Date: 2006-10-22 17:43 (UTC)
From: [identity profile] dz.livejournal.com
Посмотрел туда. Не смешно. Это можно сравнивать с С++ уровня 85-го года. С Явой это сравнивать можно примерно как велосипед с мерседесом.

- "объекты" без конструкторов и деструкторов
- эксепшны без параметров
- reflections?
- annotations?
- встроенная сериализация? Впрочем, откуда она без reflections.
- вы хотя бы 10% СТАНДАРТНОЙ библиотеки хотя бы J2SE (про ЕЕ не говорю) видели? Где тип "множество"? map? где классы для работы с электронной почтой? Где аналог сервлетов и JSP?

Я могу продолжить этот список строк на тысячу.

Несерьёзно.

Date: 2006-10-23 01:09 (UTC)
From: [identity profile] -k-z-.livejournal.com
А-аа, так у нас изящество языка определяется функциональностью стандартной библиотеки? Это тоже ново.

Что ж, в таком случае, самым изящным боевым искусством в мире является борьба Сумо. Спроить с этим -- несерьезно, Вы правы.

Date: 2006-10-23 05:43 (UTC)
From: [identity profile] dz.livejournal.com
1. Изящество языка определяется изяществом (читаемостью) написанного на нём кода. Изящество кода в значительной степени проистекает из качества библиотеки. Пишут не на языке, а на языке, библиотеке и стандартных, публично доступных пакетах. На улице 2006-й год.

2. Вы изящно опустили и ответы на вопросы, касающиеся собственно языка.

Date: 2006-10-23 13:07 (UTC)
From: [identity profile] -k-z-.livejournal.com
Вот на это, собственно, я изначально и сетовал: что хорошая библиотека и масса методологических разработок сделана на основе языка, синтаксис которого мне представляется недостаточно проработанным.

Библиотека, действительно, беспрецедентная, не спорю. А в остальном... Единственное, что мне в джаве действительно очень понравилось -- это обработка исключений, и, в частности, необходимость явно объявлять, кто что выбрасывает. Ну, и насчет семантики операций Вы тоже правы.

Не нравится мне, конкретно, следующее:
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. Но менее корявой Джава от этого не становится.


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


Date: 2006-10-23 20:10 (UTC)
From: [identity profile] dz.livejournal.com
В общем, увы, Вы просто не знаете Яву. Это непривычный Вам синтаксически, но весьма изящный, продуманный и крайне практичный язык.

Date: 2006-10-23 20:46 (UTC)
From: [identity profile] -k-z-.livejournal.com
М-да... Давненько я уже не спорил, что лучше: Си или Паскаль... Когда-то ведь обещал себе, что не буду больше ни в коем случае, т.к. ровно половина участников такого спора знает Си, а ровно вторая половина -- см. ниже.

> В общем, увы, Вы просто не знаете Яву

Тут Вы забыли добавить одну достаточно важную вешь.
Предлагаю ничью. Если не согласны, забирайте победу :)


Date: 2006-10-24 11:37 (UTC)
From: [identity profile] dz.livejournal.com
Вы уж меня извините, но на Аде я попрограммировал в (кажется) 1986-м. И, поскольку Intel почему-то прочил его в системные языки для iAPX 432, довольно много времени посвятил этому языку. И, как я уже говорил, тоже с него фанател. Так что - увы - не могу сказать, что я его не знаю. :(

Мы можем продолжить дискуссию - Вы не ответили на большинство моих вопросов.

Date: 2006-10-22 14:31 (UTC)
From: [identity profile] -k-z-.livejournal.com
Да, вот еще что.
Дискуссия не получится еще и по той причине, что 50% того, что сделано в Аде, в Джаве не сделано вообще. Ни хорошо, ни плохо :)

Date: 2006-10-22 17:36 (UTC)
From: [identity profile] dz.livejournal.com
А именно?

Date: 2006-10-24 11:38 (UTC)
From: [identity profile] dz.livejournal.com
Например, я просил уточнить, что именно не сделано в Джаве из того, что есть в Аде.

Date: 2006-10-30 10:11 (UTC)
From: [identity profile] dz.livejournal.com
Что ява и Ада/С++ по отношению к задаче написания ядра ОС (класса Юникса) полярны - безусловно и не требует даже обсуждения. Действительно, как инструмент для ЭТОЙ задачи Ява - категорически неверный инструмент.

Неужели кто-то рассматривает её в таком качестве? Не верю.

Что до Джоела, то он отчасти просто страдает ностальгией, примерно как пианисты, которые заставляют детей обязательно играть на тяжёлой клавиатуре - не осознавая того, что это просто их привычка.

Отчасти же он прав.

Но.

Множество людей под словами "операционная система" понимают не операционную систему, а операционную систему класса Юникса и Виндовс ЭнТи.

А это не одно и то же.

Если смотреть на яву не снаружи, а изнутри, то выясняется, что вокруг этого языка решено настолько до хрена СИСТЕМНЫХ проблем, до которых "классические" ОС даже не добрались, что тезис "на яве нельзя написать ОС" оказывается ОЧЕНЬ сомнительным.

Да - Яве нужен 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#. :(

А драйвера удобнее писать на С, это факт. Ну - или на Аде.