Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
В уродский неэффективный ассемблерный код.Вы не согласны с тем, что ассемблерный (а точнее, машинный) код, полученный в рещультате компиляции высокоуровневой программы является уродским? Во всяком случае по сравнению с ассемблерным кодом написанном вручную.
Таким образом, никуда не деваясь физически, ассемблер исчез из IT индустрии.См. сноску. Речь идет о прикладной IT-индустрии, а не о системном программировании. Тестовый редактор сейчас на ассемблере никто не пишет.
А вот на счёт эффективности я не согласен — современные компиляторы достаточно «умны» чтобы сгенерировать относительно быстрый код.
> Я просто не согласен с той фразой, что переход на новый уровень происходит совсем без увеличения накладных расходов.
а кто это говорил? я не видел; в любом случае — это глупость ...
>[программа на высокоуровневом языке компилируется] в неэффективный ассемблерный [или машинный] код.
Похоже о ассемблере вы знаете только название
Я спорю с superhabra, который утверждает, что программы на высокоуровневых языках всегда более эффективны, чем низкоуровневые ассемблерные
[программа на высокоуровневом языке компилируется] в неэффективный ассемблерный [или машинный] код.Т.е. я хотел показать, что в большинстве случаев (хоть и не всегда), программа, написанная на высокоуровневом языке менее эффективна, чем низкоуровневая; т.к. накладные расходы перехода на новый уровень абстракции снижают эффективность.
Похоже о ассемблере вы знаете только название.Возможно, если бы Вы ответили нормально, а не применили демагогический прием «Ad hominem», то Ваша истинная мысль стала бы ясна.
Я спорю с superhabra, который утверждает, что программы на высокоуровневых языках всегда более эффективны, чем низкоуровневые ассемблерные
Можно так же задавать вопросы — почему, например, JavaScript / Python / Ruby и т.д. написаны не на ассемблере? А что? — было бы быстрее в разы.Не были бы. Сам по себе ассемблер — не гарантия скорости. Большая и сложная программа на нём будет менее эффективна — просто внимания не хватит оптимально всё писать. Посмотрите рассказы про современные JavaScript-машины и подумайте — сколько лет вы бы отлаживали подобную систему на ассеблере и какой реальный выигрыш вы бы получили.
Относительно верхней абстракции? (мы имеем в виду скорость выполнения, а не скорость разработки).Скорость исполнения чего? Давайте не сравнивать сферических коней в вакууме. Простой интерпретатор, написанный на ассемблере против JIT'а проиграет с вероятностью 99%. И даже JIT, написанный на ассемблере (и потому не включащий в себя многих оптимизаций) проиграет JIT'у, написанному на C/C++.
Еще какая гарантия, поскольку верхняя абстракция используется эту нижнюю внутри себя с многочисленных проверками, чтобы уменьшить монотонные операции.Если вы запрограммируете один и тот же алгоритм — то да. Но так задача не стоит. Вам приходится сравнивать сложный, хитрый алгоритм, написанный на C/C++/Java/Python с простым, бесхитростным на ассемблере. Либо с плохо написанным кодом на ассемблере (потому что после нескольких миллионов строк вы либо вообще забудете что вы там замышляли вначале, либо начнёте халтурить). В обоих случаях ассеблерная версия, с большой вероятностью, проиграет.
В очередной раз повторяю — основная идея усиления абстракций — убыстрить разработку, жертвуя ресурсами (но с верой и знанием, что то, для чего разрабатывается абстракция — тоже развивается).Есть ещё одна сторона у медали, которую вы упорно не желаете замечать. Использование высокоуровненого кода позволяет менять нижележащий код на основе взаимодействия кода с реальными миром (посмотрите на досуге как работает profile-based optimization и JIT не говоря уже о всяких ATLAS'ах), а то, что вы породите на более низком уровне — будет статично. И во многих случаях (но, разумеется, не всегда) вещь, порождённая на низком уровне будет проигрывать за счёт своей статичности.
Это как? Мне реально интересно. Я правильно понимаю — Си-транслятор, написанный на асме (при этом Си-шные обертки внтри себя имеют по несколько десятков ассемблерных вставок, чтобы предусмотреть «все случаи жизни») быстрее того же самого асма (того же самого! а не того, который был был при Рамзесе-III написан и не учитывал новые возможности железа).Того же самого не бывает! В этом весь прикол. JIT и PBO порождают код «на лету» и потому могут обогнать статический ассемблерный код! И вы не сможете написать «правильный» код, который смог бы с этим бороться потому что вариантов — бесконечное число (на самом деле конечно, конечное — но разница между гуголом и бесконечностью невелика). Конечно вы можете на ассемблере написать код, который будет порождать реальный код на основании некоторых таблиц, но… тогда реальная программа у вас окажется зашитой вот в этих самых таблицах — и это и будет ваш язык высокого уровня. С чем боролись, на то и напоролись!
При этом, несомненно, JIT добавляет в интерпретируемость приближение с компилируемым скоростям.Есть задачи на которых JIT обгоняет и PBO и ассемблер. Сейчас пока таких не много, но как повернётся дело в будущем? Посмотрим…
Ладно, не охота мне разводить спор, но по-любому — заточенные под одно и тоже железо асм будет быстрее си (при этом оба компилируемые) и уж тем более они оба будут быстрее интерпретируемой сущности (хоть и JIT-оптимизатором).Вот нифига подобного! JIT видит программу в целом и видит поток её исполнения — и может на основе этого знания делать соотвествующие оптимизации. Например: у вас в программе подгружается модуль работы с джойстиком. В каком-то месте вызываются функции, зависящие от типа джойстика. Но JIT замечает что в реально запущенной программе джойстик — только один. И этот вычисляемый переход (весьма дорогой на современных CPU) можно заменить на безусловный (стоимость которого стремится к нулю). JIT может это сделать так как он знает что других джойстиков в программе нет, а буде они появятся — программа будет перекомпилирована. PBO тоже может заметить такие вещи и хотя ему придётся подстраховаться (код будет состоять из двух команд: проверка на тип джойстика и переход «на медленную часть функции» если тип «неправильный»), но код всё равно будет быстрее чем то, что вы напишите руками на ассемблере!
Другой вопрос, если говорить только лишь о динамических, интерпретируемых сущностях — так для этого, повторю, эти оптимизаторы (JIT и т.д.) создавались, чтобы быть быстрее.Это самоочевидно. Но вы забываете что кроме динамических, интерпретируемых задач есть динамический мир! У большинства компьютеров только одна клавиатура — но воткните в USB-порт сканер штрих-кодов и их станет две! Ассемблерной программе нужно всё это учитывать и на все эти проверки уходит время, а JIT и, в меньшей степени, PBO могут «срезать углы» — за счёт того, что они могут отследить редкие, нестандартные, случаи и в этом случае сделать всё ну очень медленно, но зато в 99.9% случаев они будут обгонять ассемблер.
#ifdef CONFIG_TEST int a = 10; #endif
А на каком этапе (какой большой ИИ заложен в различные версии JIT?) определяется, что модуль с джойстиком можно выбросить из кода?На этапе исполнения. Когда несколько раз вызывается одна и та же функция из одного места в программе JIT может решить что она и дальше так будет вызываться. Если в принципе функция виртуальная (то есть на-final), но в реальности есть только одна реализация то JIT может выкинуть эту виртуальность.
я забыл написать самое важное действие — дальше джойстик подключается во время работы программы (с уже выкинутыми кусками кода для работы с джойстиком) иJIT забывает всё что он ранее накомпилировал. У него появляется новый класс и предположение что вызов на самом деле статический становится неверно. Когда этот же кусок кода скопилируется второй раз — он уже будет отрабатывать события, связанные с джойстиком.
что значит «может решить»? А если функция 99 раз вызвалась так, а вот на сотый — по-другому?А та же самая фигня что и в спекулятивном исполнении в процессоре: JIT должен гарантировать что «если что» созданных им код всё откатит и случайные неправильные изменения исправит.
JIT, анализирует какой-то главный условный блок, а потом может удалить все остальные блоки кода, завязанные на это условие (я так понимаю). Т.е. однозначное детерминированы участки. А решения «авось будет, авось нет» — такого JIT не делает.Делает. И Sun'овская Java делает и V8 делает. Грубо говоря один-два самых распространённых варианта он может вставить в код, остальное — в медленно исполняющуюся подпрограмму. Если эта подпрограмма слишком часто вызывается — всё перекомпилируется. Или нет. В зависимости от результатов профайлера.
Действительно, при мощностях современного железа, уменьшение эффективности сгенерированного кода относительно не заметно. Но это не значит, что ухудшения нет!Не значит. Но тут тоже срабатывает эффект масштаба: отличный вылизанный ассемблерный код к моменту выхода твоего творения в свет (через годы, а то и десятилетия) будет однозначно хуже того, что сгенерирует компилятор ибо железо со временем меняется и оно затачивается под компилятор, а не под ручной ассембленый код. Простейший пример: набор инструкций x86 содержит операции работы со строками — но на соврменных процессорах гораздо быстрее сделать обычный цикл и просто набором mov'ов всё скопировать! Хотя на старых процессорах было наоборот.
Какие годы? Вы о чём?О разработке ПО, однако. В выходящих сейчас «новых» продуктах зачастую сидит код даже не из 90х, а и из 80х. За это время микроархитектура успевает смениться кардинально.
Когда я смотрю в то, что GCC генерит под PowerPC, иногда чуть ли не слёзы наворачиваются.А вы уверены, что то, что породите вы и что будет вам казаться красивым и замечательным будет реально хорошо работать на будущих поколениях PowerPC? Да даже и на нанешнем: PowerPC бывают разные и то что хорошо для суперскаляра вполне может оказаться не самым лучшим вариантом для какой-нибудь простой версии.
1) Предпочитаю не работать на проектах, срок разработки которых > 2 лет. Я не мазохист.Я правильно понял что:
1. Вы не пользуетесь операционной системой.
2. Вы не пользуетесь ни C, Perl'ом, Python'ом и JavaScript'ом.
3. Вы не создаёте серъёзных проектов, которыми будут пользоваться миллионы людей.
Простите, а какое отношение вся ваша деятельность имеет к IT? Мне кажется что вы либо кривите душой и выдаёте желаемое за действительное (наиболее вероятный подход), либо всё ваше программирование — это какие-то жёсткий embed, который, конечно, важен, но составляет ничтожную часть IT.
2) Я пишу под конкретную фиксированную платформу. Пишу здесь и сейчас, а не в будущем под несуществующие архитектуры. Временные рамки обозначены.То есть это всё-таки embed? Ну так если всё что вы делаете — выпуск гвоздей, то не нужно рассуждать о строительстве домов и современной архитектуре.
Вы не согласны с тем, что ассемблерный (а точнее, машинный) код, полученный в рещультате компиляции высокоуровневой программы является уродским? Во всяком случае по сравнению с ассемблерным кодом написанном вручную.А вы видели то, что порождает современный компилятор? Вот реально? Мне — доводилось (когда в нём глюки начинаются). Да, есть и уродские места, но зачастую возникает ощущение чуда. Простейший пример (просто наобум из головы):
Ещё смешнее, что автор статьи путает ассемблерный код и машинный.См. 1-ю сноску.
Автор прав в том, что HTML/CSS/JS — это устаревшая технология. Не фактически, но морально.Я рад, что Вы со мной согласились, но я имел в виду как-раз противоположенное :-)
Будущее всё-таки за виртуальными машинами — будь то .NET или JVM или аналогичное решение от AdobeПолностью согласен. Но, пусть этой виртуальной машиной будет браузер!
Windows стала востребована позднее, когда массово стали закупать 386-е машины, а так то она с середины 80-х существует. Да и это разного класса продукты — TurboVision библиотека, каких тогда были десятки.У вас в этом месте каша. Да, Windows появилась раньше Turbo Vision — но это была библиотека плюс кучка демо-программ. Aldus Pagemaker поставлялся с Windows, а не наоборот! А вот уже Windows NT — это другая история. Это была полноценная операционка, но она появилась заметно позже Turbo Vision…
Нет, это у вас в этом месте каша. Windows никогда не была просто библиотекой. До полной операционной системы есть не хватало загрузчика, и загрузчиком выступала DOS.Ну тогда с тем же успехом можно сказать что и GEM и DESQview/X и куча других подобных оболочек — это всё были разные операционки.
Короче говоря, учите матчасть. И по поводу NT — посмотрите на копирайт во время загрузки. С удивлением обнаружите там 1985-2001 (если речь идёт об XP).Ага. А Solaris вообще от 70х годах пишет. Значит ли это что в 70е годы кто-то мечтал от SPARC'е?
Ну вот как это у Вас получается? TurboVision уступили место Windows… Вы не поверите, но TurboVision появилась после Windows.Я имею в виду вот что:
И, кстати. Зачем Вы держитесь за HTML/CSS/JavaScript, как инструменты разработки вебприложений? Вам нравится писать низкоуровневый код?В этой статье я как раз хотел показать, что HTML/CSS/JS-код не является низкоуровневым!
[Turbo Vision] и Windows — это продукты разного класса Странно, что приходиться писать такие элементарные вещиГде я сравниваю Windows и Turbo Vision?
Вот я и интересуюсь — для чего надеетесь? Зачем держитесь за то, что уже морально устарело?Подробнее в этом комментарии.
Вам и интересно писать yet another чего-то тамПоскольку я руководитель небольшой фирмы, я не могу позволить использовать у нас технологию, просто, чтобы «писать yet another чего-то». Мы используем эту технологию из-за ее мощности, гибкости, удобства (ну и на красоту тоже нельзя не обращать внимание :-) ).
Имитация стека и вызов функций относятся не к епархии ассемблера, а к архитектуре. В процессорах Intel, начиная с 8086, стек присутствовал, и были соответствующие инструкции для работы с ним.Стек присутствует не во всех процессорах. В старых процессорах Intel и Motorolla стека не было. Однако, потом для этих процессоров были созданы ассемюлеры, в которых стек эмулировался, позволяя программисту писать код так, как будто в процессоре стек есть. Поправьте меня, где я не прав.
CAL и RET были чисто ассемблерными командами, и не для всех процессоров имели аналог в машинных кодах.Всю эту информацию Вы почерпнули из книг. Вероятно, очень классических. Стека и функций не было на старых процессорах — это да.… С 60-х такой проблемы нет у программистов. :)Но, все же, это, показывает, что имитация стека в ассемблерах для старых процессоров не является чушью :-)
Он просто ни при чём.Этот пример вот о чем:
Это показывает, что на ассемблере [без стека, как я понимаю] Вы не писали, но где-то прочитали, как оно было.Я как-то писал на ассемблере для микроконтроллера, на котором стека не было (так просто ради развлечения, не углубляясь). Но, да, для нормальных компьютеров я на ассемблере без стека никогда не писал (но, читал об этом), Вы правы.
И это я уже не говорю об антимайкрософтовской идеологии
Конечно, ASP.NET не ограничивается одними серверными контролами. ASP.NET — очень могучая, производительная, надежная технология, использующая всю мощь .NET Framework. Однако, многие разработчики используют ASP.NET именно из-за серверных контролов.
<font color = "" size = "">Традиционное ASP.NET меня сильно раздражает — впечатление такое, что старались переманить разработчиков GUI-приложений, делая вид, что веб ничем не отличается.Полностью согласен. Сама по себе ASP.NET и .Net вообще — очень мощная технология.
… тогда пощупаю MVC.
Но попытка применить к web десктопную windows-овскую GUI парадигму с помощью ASP.NET контролов — это выглядит ужасно!
Поэтому, ASP.NET MVC Framework — это большой шаг вперед!
Но, знаете, я очень не уверен, что все ASP.NET разработчики перейдут на MVC. Ведь модель ASP.NET контролов настолько является настолько родной, привычной и понятной для тех, кто привык к Visual Basic / Delphi парадигме: кинул контрол на форму → щелкнул два раза мышкой → написал обработчик и все дела…
Когда я смотрю на HTML/CSS/JS-код сгенерированный ASP.Net (особенно ранних версий), мне становится страшно :-) Чего только__VIEWSTATEстоит!
Но, надо отдать Микрософту должное: от версии к версии, генерируемый ASP.NET-контролами xHTML код становится все менее уродливым. В последней версии код уже является полностью валидным, и довольно семантичным. Я написал об этом в 6-й сноске.
А вот отделение javascript от html — в коде, который автоматом генерируется на сервере… Ну, чёрт его знает. На мой взгляд, на серверную логику это никак не влияет.Ну вот, мы и пришли к общему мнению :-)
А вы посмотрите на любой генерированный код любого развитого фреймворка. Он везде страшный.Большинство современных MVC фреймворков заполняют данными некий шаблон. Но шаблон то этот сверстан вручную!
даёшь возвращение к ручной вёрстке.Да, я выступаю за ручную верстку!
var objTree1 = new Tree ($("ulMyList"))var objMenu1 = new ContextMenu ($("ulMyList"))dynamic class A {
function test() {}
}
var a = new A();
var b = new B();
a.test === b.test; // false!Prototype.js был написан теми, кто не знает JavaScript, для тех, кто не знает JavaScript
Prototype создавался под RoR
По поводу ассемблера. Никуда он не пропал. Программирование простых систем на ассемблере как было, так и осталось. Может действительно чуть меньше.Еще раз повторю:
Я склонен думать, что HTML — это все-таки действительно язык разметки гипертекста, со всеми вытекающими.Сам по себе XHTML — действительно только язык разметки гипертекста.
Более того, xHTML является даже более гибким и высокоуровневым языком построения интерфейса, чем многие другие. Ведь именно потому, что xHTML хранит лишь данные, а не внешний вид и функциональность интерфейсного элемента, делает интерфейсы гораздо более универсальным.
Т.е., в одной ситуации, один и тот же элемент ведет себя как дерево, в другой — как меню, в третьей — как обычный список. При этом, xHTML код интерфейса остается неизменным.
Мы даже можем превратить дерево в контекстное меню, а контекстное меню в список прямо на лету, без перезагрузки страницы, просто динамически заменив таблицу стилей!
В каком еще языке разметки интерфейса так можно?!


В ASP.NET работа идет с высокоуровневым Windows API и серверными контролами (меню, вкладками, деревьями), которые затем компилируется в HTML, CSS и JavaScript, так же как программа на C++ компилируется в ассемблер.Чем Вас не устраивает это сравнение? Действительно, на «высокоуровневой» страница, описанная с помощью ASP.Net контролов затем автоматически «компилируется» в результирующий xHTML/CSS/JS — код, со в всеми вытекающими после автоматической генерации кода последствиями.
Кроме того, ваши тезисы про «уродский ассемблерный код» так же считаю несостоятельными.Вы не согласны с тем, что код, сгенерированный автоматически хуже (некрасивее, сложнее для чтения, менее эффективен), чем код написанный вручную?
отличный оптимизированный код, который в большинстве случаев будет лучше того, что напишет средней руки программист.Когда я смотрю на HTML/CSS/JS-код сгенерированный ASP.Net (особенно ранних версий), мне становится страшно :-) Чего только
__VIEWSTATE стоит!тем более нет никакой «компиляции в HTML, CSS и JavaScript»Генерация низкоуровневого кода (HTML/CSS/JS) на основе высокоуровневого (ASP.NET) — это и есть «компиляция» (или «трансляция», если быть пуристом). Разве не так?
про mvc framework в котором вообще нет серверных контролов вы видимо не знаете вовсеКонечно, я знаю про ASP.NET MVC Framework :-) Но на момент написания тезисов статьи (а они были приурочены к началу работы над HTML5, см. аннотацию), ее еще не было. Но, опять же, ASP.NET MVC говорит о том, что модель ASP.NET контролов не идеальна…
какой Windows API?Речь идет не о Win16/Win32/Win64 API. Речь идет о том, что web-разработчики ASP.NET используют тот же самый API (базовые классы .Net Framework), что и Windows-разработчики .Net. Но, согласен, сформулировано некорректно. Убрал, пока не переформулирую.
Дело не только в железе, но и в компиляторах, те же C++ компиляторы эволюционировали очень сильно. Они выжимают и из нового и из старого железа намного больше, чем раньше.Действительно, скорость выполнения программ возросла не только из-за увеличения мощности железа, но и благодаря повышению эффективности компиляторов.
Я не думаю, что xHTML может не угнаться за ходом технологий. Это ведь частный случай XML, а значит в любой момент можно добавить элементы разметки для медиа-контента, розширить инструментарий для структурирования данных и т.д.Конечно, xHTML — это подмножество XML и чисто теоретически ничего не стоит добавить в него новый элемент (для контрола, медиаконтента и т.д.)
Интерфейсы развиваются по большей части косметически.
Традиционное ASP.NET меня сильно раздражает — впечатление такое, что старались переманить разработчиков GUI-приложений, делая вид, что веб ничем не отличается.Полностью согласен.
Но, в xHTML нет столь нужных для современных web-приложений тегов, таких как вкладки, меню, деревья, календари и т.д.
На всякий случай: деревья — это вложенные списки, а календари — таблицы.
<font> и т. д.<font>, 1-пиксельных картинок и т. д.Пожалуйста, не пишите, что разработчики выбирают ASP.NET из-за " «псевдовысокоуровневые» серверные ASP.Net-контролы."
JavaScript убивает уродская реализация массивов.
Неделю назад реализация «очереди объектов»
array.unshift (element) — добавляет в очередь array элемент element.var element = array.shift () — извлекает из очереди array элемент и присваивает его переменной element.И даже jQuery мне ничем не помог.
Средствами чистого xHTML/CSS/JS нельзя создать 3D графику, векторную анимацию, управлять звуком, хранить большие объемы данных на стороне клиента…
Средствами чистого xHTML/CSS/JS нельзя создать 3D графику, векторную анимацию, управлять звуком, хранить большие объемы данных на стороне клиента…
И поэтому, разработчикам приходится вручную описывать эти вкладки, меню и деревья с помощью мешанины низкоуровневых xHTML тегов: таблиц со сложными объединенными ячейками, внутри которых вложенные таблицы с большим количеством тегов и декоративных картинок для обрисовки веток.
Слёзы на глаза наворачиваются) Особенно учитывая что фонт не используют и таблицами не верстают
Непонятно, о чем статья. Не вижу трагедии в том, что html — язык разметки, он им ведь и создавался. Что предлагает автор для предотвращения ужасного апокалипсиса делать конкретно мне? Конкретно веб-разработчику?
<font> — в этом.Что предлагает автор для предотвращения ужасного апокалипсиса делать конкретно мне? Конкретно веб-разработчику?Я пытаюсь показать необычайную мощь стандартных xHTM/CSS/JS как средства построения интерфейса при правильном их понимании и использовании.
особенно учитывая галимый бред про стек, умножение и вызовы (-:
Стек присутствует не во всех процессорах. В старых процессорах Intel и Motorolla стека не было. Однако, потом для этих процессоров были созданы ассемблеры, в которых стек эмулировался, позволяя программисту писать код так, как будто в процессоре стек есть.
<Также, как и не было в старых ассемблерах команд деления.>
Насчет вызова функций я точно не уверен. Но, по-моему, командыCALиRETбыли чисто ассемблерными командами, и не для всех процессоров имели аналог в машинных кодах.
Но, на всякий случай, пока заменил другой «фишкой» продвинутого ассемблера — использованием макросов. «Фишкой», которая стала не нужной высокоуровневым разработчикам. Также, как станут не нужными многие «фишки», облегчающие разработку front-end разработчикам, если xHTML/CSS/JS-код будет генерироваться автоматически…
Стека и функций не было на старых процессорах — это да.Правда, вы все правы, это было очень и очень давно…
ассемблер, говорите, умер? а у вас телефон есть? или стиральная машина, которую программировать можно?
См. сноску. Речь идет о мейнстримной прикладной IT-индустрии, а не о системном программировании. Тестовый редактор на ассемблере пишут только эстеты, вроде разработчиков KolibriOS.
Но это уже искусство, а не IT-индустрия.
Дерево — это не мешанина таблиц, вложенных таблиц, тегов <font> и картинок.
Какие таблицы, какой, черт возьми, <font>!По-моему семантичный и высокоуровневый в данном случае разные вещи.
я всегда дерево списком представлял — куда уж проще-то, да и многие реализации дерева тоже формируют список.Сделать дерево на основе списка — не такая уж и тривиальная задача. Я имею в виду, конечно, не просто дерево, а дерево с ветками, как на рисунке:
это не «низкоуровневый подход», это руки кривые

Пример 1:
В более высокоуровневом языке программирования C++ операции деления соответствует одна конструкция языка – оператор «/».
В более низкоуровневом ассемблере (не во все, конечно) операции деления соответствует множество ассемблерных команд.
Пример 2:
В более высокоуровневом языке разметки SVG круг описывается соответствующей конструкцией:<circle cx="200px" cy="200px" r="100px" />
В более низкоуровневом «языке разметки» растрового файла этот круг описывается множеством точек.
Еще один момент против использования большинства новх технологий — скорость.А вот здесь я не совсем согласен…
сайты, которые реализуют RIAВ статье идет речь только о web-приложениях (прикладных программах, а не сайтах).
Спасибо автору заметки, я открыл для себя FlexНа здоровье! Всегда рад помочь хотя бы одному
$(id) впервые появилась именно в нем…можно поинтересоваться, в чем prototype лишил javascript красоты и гибкости?Самое основное — Prototype.js провоцирует использование в JS совершенно чуждого ему класс-ориентированного программирования.
Вообще, такое ощущение, что автор хочет, чтобы веб так и остался на основе HTML, который он выучил ещё в школе:)Я хочу показать, что в стандартной связке xHTML/CSS/JS гораздо больше возможностей для построения интерфейсов, чем считают многие разработчики.
Тогда зачем вы написали столько много букв в этой статье?Эта статья не только «о создании богатого пользовательского интерфейса средствами xHTML/CSS/JS».
Лучше бы сразу написали научно-популярную статью «о создании богатого пользовательского интерфейса средствами xHTML/CSS/JS» (и без всяких сравнений ассемблеров и С++).
И все таки высокоуровневые языки сначала транслируются в ассемблер, а потом уже в машинный код. Взять тот же gccДа, но не всегда.
Консольная библиотека для построения интерфейсов, которая использовалась в продуктах Borland, называлась Turbo Vision.Да. Я упомянул «Turbo Vision» в тегах к статье.
Очень неплохая ООП библиотека«Turbo Vision» — не просто неплохая библиотека, «Turbo Vision» была гениальной!
HTML уже превратился в ассемблер.А вот с этим я совсем не согласен.
Любой код, сгенерированный программно (машинный код, сгенерированный компилятором; xHTML/CSS/JS код сгенерированный Word'ом или ASP.Net) будет хуже, уродливее и медленнее, чем код написанный и вылизанный программистом вручную.Это аксиома? Проверять не пробовали? Попробуйте на досуге написать что-нибудь, что обгонит, скажем ATLAS. Желательно — на процессоре, который ещё будет в продаже не только в атрикварном магазине когда вы закончите…
Это аксиома?Нет это не аксиома. Но в большинстве случаев, сгенерированный код действительно менее эффективен, чем написанный вручную.
мне кажется заголовок статьи слегка переврали :)Почему? Действительно, если клиентские языки разработки (xHTML/CSS/JS) перестанут развиваться, то их могут ждать две трагические судьбы:
Вэб уже бессмертенНу, здесь идет речь не о Вебе вообще, или даже всем всем Интернете, а о клиентских web-технологиях: xHTML/CSS/JS.
От физической гибели технологий xHTML/CSS/JS уже давно спасают поисковикиДа, действительно, неумение поисковиков индексировать Flash, PDF и т.д. сыграло xHTML на пользу.
You don't need to learn JavaScript.
Такой подход возникает, если относиться к xHTML как к языку визуальной разметки. Секрет же в том, что xHTML является языком не визуальной, а логической разметки[…]
якобы «уродского ассемблерного кода, сгенерированного компилятором» (современные компиляторы намного эффективнее программиста оптимизируют код)Даже современные компиляторы далеко не всегда генерируют более эффективный код, по сравнению с кодом, написанным вручную. Иначе, сейчас просто не было бы нужды писать ассемблерные программы для маломощных устройств.
и заканчивая WinAPI в ASP.NETЕще раз повторю: речь идет не о Win16/Win32/Win64 API. Речь идет о том, что web-разработчики ASP.NET используют тот же самый API (базовые классы .Net Framework), что и Windows-разработчики .Net. Но, согласен, сформулировано некорректно.
Что касается конкуренции с Flash/Flex и Silverlight это скорее преувеличение.В xHTML сейчас действительно присутствуют ряд существенных мультимедийных ограничений при реализации web-технологий основными браузерами.
Закат Веба?