бизнес и академия
Mar. 25th, 2007 03:38 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
На следующей неделе готовлю популярную лекцию по Unix, Linux сетям и т.д. Вчера делал слайды по истории Unix. Это, конечно, только одна из сюжетных линий, но разница в подходах между академией и бизнесом уже прослеживается.
Вот Multics. Создавался консорциумом MIT + Bell Labs + General Electric. Во главе был MIT (уже хотя-бы потому, что при развале консорциума проект остался там), академическая составляющая была сильна. Планку поставили заоблачную: много пользователей, защита, разделение времени. Проект получился сложным и невыполнимым. На его обломках возник упрощенный одно-пользовательский вариант -- Unix, ставший большим коммерческим успехом. Еще большим успехом стали CP/M и DOS, разработанные еще позже (а значит тоже с использованием опыта Multics и Unix), но только еще более упрощенные.
Такое положение дел мне кажется довольно универсальным. Люди в академии имеют тенденцию ставить себе запредельные цели. Эти цели (часто) не достигаются и (тоже часто) не достижимы вообще. Коммерчески успешные проэкты, по отношению к академическим, как правило, отличаются в сторону упрощения, снижения планок. С другой стороны, они строятся из академических обломков. Построенных, в свою очередь, на деньги бизнеса (как, например, в консорциуме, создававшем Multics).
Тоесть да, круговая порука. ;-) Но все-же стратегии постановки планок стабильно разные.
Вот Multics. Создавался консорциумом MIT + Bell Labs + General Electric. Во главе был MIT (уже хотя-бы потому, что при развале консорциума проект остался там), академическая составляющая была сильна. Планку поставили заоблачную: много пользователей, защита, разделение времени. Проект получился сложным и невыполнимым. На его обломках возник упрощенный одно-пользовательский вариант -- Unix, ставший большим коммерческим успехом. Еще большим успехом стали CP/M и DOS, разработанные еще позже (а значит тоже с использованием опыта Multics и Unix), но только еще более упрощенные.
Такое положение дел мне кажется довольно универсальным. Люди в академии имеют тенденцию ставить себе запредельные цели. Эти цели (часто) не достигаются и (тоже часто) не достижимы вообще. Коммерчески успешные проэкты, по отношению к академическим, как правило, отличаются в сторону упрощения, снижения планок. С другой стороны, они строятся из академических обломков. Построенных, в свою очередь, на деньги бизнеса (как, например, в консорциуме, создававшем Multics).
Тоесть да, круговая порука. ;-) Но все-же стратегии постановки планок стабильно разные.
no subject
Date: 2007-04-01 12:07 am (UTC)Garbage collector, согласен, в первых версиях Явы был отстойным... Но с тех пор в этой области произошел такой прогресс (кстати, в рамках академии, вот страничка одной из групп (http://www.cs.utexas.edu/users/oops/papers.html)), что, по сравнению с GC, явное распределение malloc/free просто отдыхает по производительности (если только программист не предпримет героических усилий по его оптимизации). Сборка мусора -- это как раз и есть шаг вперед по сравнению с явным распределением, причем, как с точки зрения удобства, так и с точки зрения производительности (потому что в современных GC память освобождается массово, без явного обхода каждого ее кусочка).
C# тоже использует сборку мусора. Да, начали, конечно, они уже с того момента, когда прогресс, стимулированный потребностями Java, привел к написанию очень эффективных сборщиков мусора. Потому, конечно, уже с первой версии C# сборка мусора была не узким местом, а наоборот ключом к повышению производительности. Но сборщики мусора в современных версиях Java не хуже, а может и лучше.
Powershell... ;-) Кстати, типично для Microsoft-овских "инноваций", когда изобретение старого велосипеда выдается за немалый прогресс. Даже не "технический", а не меньше чем "фундаментальный" ! ;-)
Замечательно, что, наконец, в Windows появилась (правда пока только экспериментальная ;-) возможность писать скрипты на C-подобном языке, хоть что-то похожее на readline и на tab completion. Но в Unix этому всему уже столько лет... ;-)) И шеллов явовских обьектно ориентированных, со всеми этими прибамбасами уже столько, что их и перечислить, наверное, может только Google (http://www.google.com/search?q=Java+Shell&ie=UTF-8&oe=UTF-8). Там и легковесные, и тяжеловесные, и обьектно-ориентированные, вообще любые... Вот beanshell (http://www.beanshell.org/manual/contents.html), например...
Мне, например, bash хватает, а держать запущенной явовскую виртуальную машину неохота (она все-таки требует довольно много ресурсов по сравнению с программами, написанными на чистом C). Единственная потенциальная "инновация", которую тут может сделать Microsoft -- загружать свой дотнет runtime сразу при запуске системы. Тогда да, пользователю будет _казаться_ что программы на C и на дотнете примерно равнозначны по производительности. В этом, наверное, одна из причин -- почему для Висты требуется столько памяти. Но Jvm тоже можно загружать сразу. Можно загружать, можно не загружать...
И наконец, язык, в который стихийно добавляются все ставшие buzzwords концепции по-моему как раз очень плох. Красота языка -- когда минимум концепций позволяет кратко записать максимум информации. Иначе очень быстро наступает комбинаторный взрыв вариантов написания одного и того-же кода. И это делает жизнь человека, которому приходится читать и поддерживать этот код гораздо тяжелее.
К.Л.М.
no subject
Date: 2007-04-01 07:27 pm (UTC)-- Нет, не начнётся!
... и начался флейм"
Ну и ладно, тоже интересное и познавательное занятие.
1) Все эти много слов в Ваших первых трёх абзацах стремятся замаскировать и изничтожить простое утверждение: в момент появления дотнета жава сосала. Ну как можно серьёзно говорить о перспективах языка, в котором сборка мусора подвешивает программу на десятки секунд, а то и минут? С тем же успехом можно было бы память и вовсе не освобождать, save state and reload было бы быстрее для толстого клиента или IDE, отдельные хипы для каждого треда (дискардящиеся по завершении) более или менее обеспечили бы потребности серверных приложений.
И тут -- о чудо! -- появляется дотнет с нормальным GC, и C#, который такой же как жава, но лучше (проперти, там, автоматический boxing/unboxing), и обнаруживается качественное отличие: C# может заменить С++ почти всюду! Ain't it a major achievement?
2) Вообще я не очень понимаю смысла сравнивать дотнет и JVM в контексте опенсорса. И то, и то является продуктом сугубо корпоративного R&D. Отличия появляются в стандартных библиотеках, которые в дотнете разработаны программистами микрософта, а в жаве (и на этом закончилась моя единственная попытка написать на ней Hello World), точнее в эклипсе образца 2005 года, есть замечательная табличка 3х3, где в первой строчке стоят аналоги винформ (Qt, Swing, SWT), затем ещё три варианта Application Framework и адаптеров БД. Такой выбор меня как-то обескуражил, а первый попавшийся жавапрограммер усугубил замешательство, заявив что лично он использует Swing, но он -- говно полное.
Круто, чё.
3) Вот beanshell, например
---
ыыы. Почитал падиаганале половину спецификаций этого beanshell. Неудачный гибрид жавы и жаваскрипта, зато с командной строкой.
Ещё раз: есть в хороших шеллах такая штука, пайп, pipe, обозначается значком "|". Очень продуктивная в плане написания скриптов. Так вот, в PowerShell по пайпам гоняются объекты, а не текст. Стандартизованность всего и вся тоже способствует.
mount "HKCR" "Registry" "HKCR"
cd HKCR:\CLSID
ls | foreach {$key = $_; foreach($p in $key.Property) {if ($p -eq "nLxxQf") {$key}}} | rm -Recurse
rm HKLM:\Software\Licenses -Recurse
rm $env:temp\*.tmp
3) Красота языка -- когда минимум концепций позволяет кратко записать максимум информации.
---
The Perl folks have this Perl Haiku competition each year. It's a nifty idea, and it's pretty amazing that you can write useful seventeen-syllable programs.
I tried it with Java once, and produced a valid Java haiku:
ArrayList myListOfInt = new ArrayList();
which, spoken aloud, reads:
ArrayList of Int
my list of int, equals new
ArrayList of Int
Maybe it's just me, but I find it pretty farging depressing that a simple declaration like that can be haiku-sized in Java.
(c) Стиви (http://steve-yegge.blogspot.com/2006/10/egomania-itself.html)
Если вы всё-таки прочитаете документ по ссылке (http://download.microsoft.com/download/5/8/6/5868081c-68aa-40de-9a45-a3803d8134b8/csharp_3.0_specification.doc), то, возможно, увидите, что все эти новые фичи были добавлены вовсе не в силу их баззвордности, а потому что они действительно позволяют кратко, читаемо и без лишней семантики записать максимум информации.
Более того, я вам забавный челлендж предлагаю: сформулируйте на Своём Любимом Языке (whatever it is) аналог следующей формулировки на ЭпплСкрипте: "set bar to messages of foo whose read status is false", предполагая, что всё, что нужно, дано (в разумных пределах). В терминах второго шарпа я это сформулировал без лишней семантики (и почти без синтасического мусора), но, кстати, не с первого раза, ибо моск довольно сильно отравлен сишной парадигмой.
4) Лучше б Mono занялись, честное слово =) Они как-то на втором шарпе пока застряли, а ведь в третьем тот же XUL используется и вообще всё клёво.
no subject
Date: 2007-04-01 08:47 pm (UTC)Ничего я не пытался замаскировать и сказал ровным счетом то, что я сказал. Причем, там каждое слово имеет значение (ну, значения могло быть и больше, но я в 3 часа ночи писал все-таки ;-).
К моменту появления дотнета _все_ проблемы со сборкой мусора в Java были давным давно решены.
Ява не разрабатывался изначально ни для Enterprise, ни для серверных приложений. С чего Вы это взяли ? Ява разрабатывался как язык приложений для интернета, в котором учавствуют машины разной архитектуры (а потому важна платформная независимость). Это потом он стал популярным в Enterprise и на серверах, но это уже отдельная песня.
brainfuck тоже может заменить c++ всюду. Но я не понимаю -- зачем вообще нужно c++ чем-то заменять ?
2) Я не сравниваю дотнет и Яву, у меня и в мыслях такого не было. Я на C# никогда не программировал и не собираюсь. С чего бы мне сравнивать ? Ничего кроме общеизвестного я о дотнете и не говорил, типа того, что там используется сборка мусора.
Просто Вы высыпали сюда кучу заблуждений относительно истории Явы и ее возможностей. О том, что будто-бы в дотнете есть какие-то новые по сравнению с Явой вещи. Перечисленное Вами есть в Яве, и было, когда дотнета еще и в помине не было. Кроме того, в Яве есть гораздо больше -- то, ради чего он создавался: платформная независимость.
3) Вообще лично для меня совсем не очевидно, что при передаче обьектов между программами пайпы имеют смысл. Тоесть мне понятно Ваше возбуждение, что вот-вот в Windows появятся вожделенные пайпы о которых так много говорили и даже на самом Microsoft ! Но мне с ними приходится уже давно сталкиваться каждый день.
Понимаете, пайп -- одномерная структура (и в плане реализации и в плане использования). Поток байт. Да, можно наворотить синтаксический сахар и создать видимость, что передаются какие-то записи с полями, типа обьекты. Но в Unix уже пол века проблемы разбить передаваемый через пайп текст на записи и выделить поля не существует. Народ это делает постоянно и даже не замечает.
Если расширять пайпы, сохраняя их одномерный синтаксис (программа слева, пайп, программа справа), ничего нового кроме "скрытого" парсинга не получится. Если-же выйти за рамки одномерной концепции (чтобы новое таки получилось), разрешить присоединять к программе несколько структурированных потоков от разных источников -- получим функции, принимающие несколько потоков аргументов и сообщений. Функции в beanshell есть.
А пайпы были в Unix уже, наверное, пол века. Если они Вам нужны -- запустите bash. Зачем ждать пока Microsoft инновационно создаст для Вас какой-то благословленный и "стандартизованный" Powershell. Берем bash, и вот они -- ПАЙПЫ ! :-))
3) Не сорите, пожалуйста, здесь текстовым мусором. Понятно, что благодаря изобретенному в Microsoft (да что там мелочиться, небось самим благословенным Билли Гейтсом ! ;-) методу Copy&Paste сегодя есть возможность скопировать сюда Ваши любимые анекдоты с анекдот.ру, приколы с bash.org, новости с ленты и т.д. Но, поверьте, читать это у меня желания нет.
4) Я думаю, что потребности в проекте mono не было и нет. С другой стороны, в компании Novell так не думают и решили вести этот проэкт. Это их право, мне остается только приветствовать, когда коммерческие компании вкладывают средства в разработку Свободных Программ.
К.Л.М.
no subject
Date: 2007-04-01 09:15 pm (UTC)2) Перечисленное Вами есть в Яве, и было, когда дотнета еще и в помине не было
---
нука-нука? Когда в жаве появились проперти? Когда в жаве появился foreach (1.5, я знаю, через сколько лет после выхода первого шарпа?), когда в жаве появится автоматический boxing/unboxing? когда в жаве появится type inference?
3а) вот-вот в Windows появятся -- уже появилось вообще-то. И я уже им пользуюсь. Да, униховый пайп -- одномерная штука. Да, можно говорить, что передача по пайпу объектов -- это синтаксический сахар и "видимость" (на самом деле нифига не видимость, ботать разницу между filter и function в PowerShell). Но то, что луниксоиды пишут между пайпами разнообразные грепы и не замечают этого -- это не аргумент против того, что не пиша таких грепов можно добиться повышенной продуктивности. Даже на контраргумент больше похоже, честно говоря. "Скрытый Парсинг", муахаха. Его _нет_. Вообще нет парсинга, поймите это. Очередной коммандлет выплёвывает объекты, другой коммандлет их принимает и смотрит на их поля, безо всякого парсинга. Say you want a revolution?
3b) у Вас немножко глаза перекосило, Вы отнесли павершелловский скрипт ко второму третьему пункту (сорри, попутал) и не прочитали сам второй третий пункт. Зря, перечитайте. Самоё в нём интересное это:
я вам забавный челлендж предлагаю: сформулируйте на Своём Любимом Языке (whatever it is) аналог следующей формулировки на ЭпплСкрипте: "set bar to messages of foo whose read status is false", предполагая, что всё, что нужно, дано (в разумных пределах). В терминах второго шарпа я это сформулировал без лишней семантики (и почти без синтасического мусора), но, кстати, не с первого раза, ибо моск довольно сильно отравлен сишной парадигмой.
no subject
Date: 2007-04-01 10:30 pm (UTC)2) Я не сказал, что есть ВСЕ из перечисленного. Многое есть. Остальное можно добавить, если бы оно было нужно. Да что Вы ко мне пристали с этим C# в конце концов ? Если бы в Java было _все_ как в C#, он был бы C#. Как я Вам говорил с самого начала, добавлять в язык все подряд -- путь заведомо порочный.
Но если хотите -- вот, пожалуйста: язык программирования D (http://www.xakep.ru/post/32779/default.asp). Там уже добавили практически все, что есть в C# и еще десять раз по столько. Нужно Вам это ? Тогда скачивайте (http://www.digitalmars.com/d/index.html) и программируйте на здоровье ! Есть и front end к компилятору gcc (http://dgcc.sourceforge.net/).
3) Ну, нет и нет. Какая разница. Особенностей реализации powershell я не знаю и знать не хочу. Но скажу Вам по секрету, что даже при выполнении RPC делается сериализация и парсинг, да еще (в некоторых протоколах) не просто парсинг, а парсинг XML.
Да, если пайпы в PowerShell работают только локально -- можно обойтись и без парсинга. Но в Unix, кстати, есть еще fifo и sockets, через последние можно точно также прозрачно общаться и с другими компьютерами (http://unixjunkie.blogspot.com/2006/01/two-cool-bash-tricks.html).
3) Это что флажки Вы хотите установить по какому-то критерию ? Это уже называется "формулировать" ! ;-)) Под "сишной парадигмой" Вы понимаете, что после ключевого слова if условие нужно писать в скобках ? :-)))
К.Л.М.
no subject
Date: 2007-04-01 11:00 pm (UTC)----
Между _сегодняшними_ сборщиками мусора в жаве и дотнете действительно разница очень туманная, АФАИК в жавовском можно задавать разные параметры, не знаю, правда, насколько это полезно. Но это опять же запутывание вопроса, извините, я всё-таки хочу прямо сказать, что
Жавовский GC на момент выхода дотнета СОСАЛ.
А, следовательно, сосала и вся жава, потому что язык с GC, который _так_ работает, сосёт.
2) Я видел язык программирования D. Я даже видел Nemerle. Не нужно меня пугать разными словами, я их и так знаю. И я знаю, что на шарпе я прогаю безумно эффективно по сравнению с С, на котором я тоже много прогал и под разные платформы, включая микропроцессоры. Исчо раз повторю: давайте вы вначале прочитаете описание, а потом будете критиковать его по пунктам, типа что данный пункт -- это "всё подряд, buzzword", его можно было бы и не добавлять. Общие слова сосут хуже жавы.
3) Гыгыгы. Что происходит с моим каналом -- меня не ебёт, извините. Я -- программист, меня волнует тот язык, на котором я общаюсь с ОСью. И в нём, поверьте, нет никаких сериализаций/десериализаций, в нём я прошу дать мне процесс с именем *explorer*, и получаю, во всей его процессной полноте. Могу ему приорити понизить, могу команду какую послать. Могу килл сделать.
3б) Я что-то не понимаю. Я Вам дал корректную строчку на ЭпплСкрипте. Вы её можете переписать на Своём Любимом Языке? Это прямой вопрос, возможные ответы: "Да, могу, вот так >...<" или "нет, не могу".
no subject
Date: 2007-04-01 11:30 pm (UTC)В Яве "сосал" (это чтобы Вам было понятно) только первый GC в версии 1.0. Потом в этой области произошли значительные улучшения.
Что касается Вашего эклипса... Вот мне интересно. Вы действительно думаете, что я должен ответить Вам за тот эклипс в каком-то там году ? В котором, как Вы говорите, Вы нажали на кнопку и он... Сколько там он собирал мусор ? Я уже почти запомнил... :-)))
Нет, мой друг. Я Вас таки забаню. Вам нужно остыть.
До свидания.
К.Л.М.