Здравствуйте, B.F.AngelLab, Вы писали:
BFA>Великолепные перспективы. Начнете с младшего ангела. Большие перспективы карьерного роста — можете дорасти до архангела
Рождается новый browser и в связи с этим несколько вопросов.
Сначала о тех фичах которые есть:
1) HTML/XHTML и CSS — level 2.1 (не всё) + level 3 (не все, всякие полезные штуки оттуда)
см. здесь и здесь.
2) Градиетнтный background, expandable image (например закругленные бордюры и пр.), см. здесь. Поддержка alpha канала.
3) %% units — позволяют делать vertical alignment и flex в стиле XUL. здесь
4) flow:horizontal — размещение блоков слева направо в контейнерах (flow:vertical — стандартное поведение DIV контейнера — сверху вниз)
5) Кроме поддержки position:relative/absolute/fixed добавлено также position:popup — создание не блокирующих popup окон типа menu и tooltip.
6) lightweight frames — например absolute div в контейнере может быть рамещен поверх дочернего frame.
<frameset> аналогичен <iframe> т.е. может быть включен в любое место HTML (а не как отдельная сущность)
7) display: inline-block из CSS2.1 имплементирован — кстати ни один броузер из большой тройки эту фичу так и не поддерживает (за искл. частично IE).
8) CSS атрибут behavior:name-of-js-object. Где name-of-js-object есть JS конструкция
Здравствуйте, c-smile, Вы писали:
CS>Рождается новый browser и в связи с этим несколько вопросов.
CS>И один принципиальный вопрос про JS:
CS>Пользуется ли народ кострукциями prototype в быту?
Да конечно, это вообще-то основа JavaScript ... Прототипированный язык
MyObject.prototype=
{
field = 100,
MyFunction = function(){"some";}
}
Получается что-то типа объекта в других языках. Далее прототипы используются для наследования, то есть один прототип служит основой для другого прототипа, а нужные свойства и функции добавляются.
Ох блин, когда-то давно я интересовался судьбой javascript 1.5 там очень много нехватающих лично мне вещей было реализовано, но боюсь так просто не вспомню Будет время — гляну, мож чего вспомню ...
Отступление: А дебаггер будет? Мне очень нравиться DomInspector из мозиллы ...
CS>Кстати есть конструкция property (то же что и function только вызов ея устроен по другому. )
Вот это обязательно!
[skip]
CS>Если кто дочитал до этого места — большое человеческое спасибо. Комментарии очень нужны.
Здравствуйте, c-smile, Вы писали:
CS>Рождается новый browser и в связи с этим несколько вопросов.
"... Выключите свет, они на свет лезут!!!" (с) один анекдот
Личего личного
Здравствуйте, Andir, Вы писали:
A>Здравствуйте, c-smile, Вы писали:
CS>>Пользуется ли народ кострукциями prototype в быту? A>Да конечно, это вообще-то основа JavaScript ... Прототипированный язык
Я не про то. Естественно JS прототипированный.
Я немного про другое: вот в этом примере:
MyObject.prototype=
{
field = 100,
MyFunction = function(){"some";}
}
Как создается объект класса MyObject что такое этот MyObject объект или функция?
В моем варианте функция/конструктор MyObject и является prototype
function MyObject()
{
this.field = 100,
}
MyObject.MyFunction = function(){"some";} // прицепили метод
MyObject.MyCommonVar = "some"; // прицепили свойство общее для всех instance порожденных с пом MyObjectvar myObject = new MyObject();
myObject.MyFunction();
Я не понимаю зачем нужно было вводить отдельное свойство prototype.
В моем варианте myObject.__proto__ === MyObject
В JS myObject.__proto__ === MyObject.prototype
Более того в JS myObject.constructor === Object-internal-ctor ,
я ожидал что это должно быть myObject.constructor === MyObject
Вообще это мрак как это сделано в JS....
Вот я и спрашиваю этим кто-то реально пользуется.
Кто-нибудь может привести фрагмент реального скрипта со словом prototype?
A>Отступление: А дебаггер будет? Мне очень нравиться DomInspector из мозиллы ...
Там не только дебаггер будет. Планируется CSS inspector:
При наведении мыши на элемент можно будет увидеть все его CSS атрибуты с конкретным указанием
из какого definition/css конкретное свойство каскадировалось. И еще много чего на эту тему.
Броузер позиционируется как инструментальный.
CS>>Кстати есть конструкция property (то же что и function только вызов ея устроен по другому. ) A>Вот это обязательно!
Здравствуйте, c-smile, Вы писали:
CS>Я не понимаю зачем нужно было вводить отдельное свойство prototype.
function MyObjectBase(){}
MyObjectBase.prototype = {} // Some prototype;function MyObject(){}
MyObject.prototype = new MyObjectBase(); // Наследование
MyObject.prototype.NewFunction = function() {} // Some new functionality
Прототипирование это, что каждый объект создаётся по некоторому прототипу, в том числе и наследование реализуется через прототипирование.
Далее динамическое расширение существующего объекта тоже возможно только через прототипы.
Плюс я понять не могу, о чём ты говоришь, когда про функции объекта говоришь:
function MyObject() {/* конструктор объекта */ }
// Прототип объекта
MyObject.prototype =
{
field = 100, // default value
MyFunction: function() { print(this.field); }
}
var myObj1 = new MyObject(); // Cоздаём новый экземпляр объекта
myObj1.field = 1;
var myObj2 = new MyObject(); // Cоздаём новый экземпляр объекта
myObj2.field = 2;
myObj1.MyFunction(); // Печатает 1
myObj2.MyFunction(); // Печатает 2
myObj2.MyFunction = function() { print("Hello World!");} /* Переопределяем функцию экземпляра */
myObj2.MyFunction(); // Печатает Hello, World!
Как такое реализовать без прототипов я даже не представляю. Приведи пример, может я неправильно понимаю ?
CS>Вот я и спрашиваю этим кто-то реально пользуется. CS>Кто-нибудь может привести фрагмент реального скрипта со словом prototype?
Я в исходники выкладывал EventFramework ...
A>>Отступление: А дебаггер будет? Мне очень нравиться DomInspector из мозиллы ...
CS>Там не только дебаггер будет. Планируется CSS inspector: CS>При наведении мыши на элемент можно будет увидеть все его CSS атрибуты с конкретным указанием CS>из какого definition/css конкретное свойство каскадировалось. И еще много чего на эту тему. CS>Броузер позиционируется как инструментальный.
Бороться с мозиллой боюсь на этом фронте будет тяжеловато
A>function MyObject() {/* конструктор объекта */ }
A>// Прототип объекта
A>MyObject.prototype =
A>{
A> field = 100, // default value
A> MyFunction: function() { print(this.field); }
A>}
A>var myObj1 = new MyObject(); // Cоздаём новый экземпляр объекта
A>myObj1.field = 1;
A>var myObj2 = new MyObject(); // Cоздаём новый экземпляр объекта
A>myObj2.field = 2;
A>myObj1.MyFunction(); // Печатает 1
A>myObj2.MyFunction(); // Печатает 2
A>myObj2.MyFunction = function() { print("Hello World!");} /* Переопределяем функцию экземпляра */
A>myObj2.MyFunction(); // Печатает Hello, World!
A>
A>Как такое реализовать без прототипов я даже не представляю. Приведи пример, может я неправильно понимаю ?
А если так?
function MyObject() { this.somefield = 10; }/* конструктор объекта он же и прототип!*/ }
MyObject.field = 100, // default value
MyObject.MyFunction = function() { print(this.field); }
var myObj1 = new MyObject(); // Cоздаём новый экземпляр объекта
myObj1.field = 1;
var myObj2 = new MyObject(); // Cоздаём новый экземпляр объекта
myObj2.field = 2;
myObj1.MyFunction(); // Печатает 1
myObj2.MyFunction(); // Печатает 2
myObj2.MyFunction = function() { print("Hello World!");} /* Переопределяем функцию экземпляра */
myObj2.MyFunction(); // Печатает Hello, World!
MyObject.MyFunction = function() { print("Hello Universe!");} /* Переопределяем функцию для всех остальных экземпляров класса */
A>Я в исходники выкладывал EventFramework ...
О! вот спасибо!
Это где-то реально используется?
Кто-нить видел живые активные библиотеки где это используется?
A>Бороться с мозиллой боюсь на этом фронте будет тяжеловато
Зачем бороться? Надо жить рядом.
Мой броузер это моно exe файл размером примерно 900к несжатых.
Инсталятора не требует. Ткнул — поехали.
А это работать вообще будет? Ведь таким образом определяемые функции это как статические функции в C++, то есть ни о каком this и речь идти не может.
CS>
CS>function MyObject() { this.somefield = 10; }/* конструктор объекта он же и прототип!*/ }
CS>MyObject.field = 100, // default value
CS>MyObject.MyFunction = function() { print(this.field); }
CS>var myObj1 = new MyObject(); // Cоздаём новый экземпляр объекта
CS>myObj1.field = 1;
CS>var myObj2 = new MyObject(); // Cоздаём новый экземпляр объекта
CS>myObj2.field = 2;
CS>myObj1.MyFunction(); // Печатает 1 У объекта myObj1 нету функции MyFunction ... она есть только у MyObject
CS>myObj2.MyFunction(); // Печатает 2
CS>myObj2.MyFunction = function() { print("Hello World!");} /* Переопределяем функцию экземпляра */
CS>myObj2.MyFunction(); // Печатает Hello, World!
CS>MyObject.MyFunction = function() { print("Hello Universe!");} /* Переопределяем функцию для всех остальных экземпляров класса */
CS>
A>>Я в исходники выкладывал EventFramework ...
CS>О! вот спасибо! CS>Это где-то реально используется? CS>Кто-нить видел живые активные библиотеки где это используется?
Ну на rsdn есть поиск, кто-то да использовал ... А я постоянно его пользую в корпоративных системах на web-интерфейсе.
Ещё примеров валом в мозилле, там же все механизмы расширения JavaScript используют.
CS>Мой броузер это моно exe файл размером примерно 900к несжатых. CS>Инсталятора не требует. Ткнул — поехали.
Вот это круто А системы расширения какие-то подразумеваются?
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, Aquary, Вы писали:
A>>Личего личного
CS>Угу. Я уже сейчас по тестам бью Оперу в разы
В разы!?!?! Это круто!
CS>А уж по цене подвано — бесплатный броузер будет.
Это вы один делаете?
Здравствуйте, c-smile, Вы писали:
CS>Вот я и спрашиваю этим кто-то реально пользуется. CS>Кто-нибудь может привести фрагмент реального скрипта со словом prototype?
Здравствуйте, korzhik, Вы писали:
CS>>А уж по цене подвано — бесплатный броузер будет. K>Это вы один делаете?
На этой фазе, да, один.
"Лужу, паяю, ЭВМ починяю".
Где-то через недели две потребуются например дизайнеры "морды лица"
т.е. нужно соорудить — базовый скин + раскладку основного окна.
Нужна также имплементация всяких диалогов settings и пр. HTML/CSS/JS
В моем JS (c-smile downgraded into ECMAScript) есть persistence — т.е. в принципе все можно сделать на голом JS.
Все у кого есть желание / возможности — welcome — e-mail: news@terrainformatica.com.
CS>>А если так? A>А это работать вообще будет? Ведь таким образом определяемые функции это как статические функции в C++, то есть ни о каком this и речь идти не может.
Уже работает.
Мужики, я четко знаю как устроено наследование в JS потому как заимплементировал его перерыв соотв. стандарты и пр. Т.е. я не спрашиваю "как?" а наоборот "почему?".
Почему в качестве прототипа используется специальный подобъект
MyObject.prototype а не сам MyObject ? Ведь и Function (MyObject) и Object (MyObject.prototype) есть
"вешалки для свойств" совершенно идентичные и даже более того:
class Function: public Object {} в терминах C++.
Т.е. мой вопрос архитектурно-философский.
CS>>Мой броузер это моно exe файл размером примерно 900к несжатых. CS>>Инсталятора не требует. Ткнул — поехали.
A>Вот это круто А системы расширения какие-то подразумеваются?
Да. Но только т.н. windowless extensions в виде "native behaviors"
назначаемых объекту через CSS. В движке h-smile на котором строится browser есть понятие
view master css — css который грузится для всех документов.
Здравствуйте, anonymous, Вы писали:
A>Здравствуйте, c-smile, Вы писали:
CS>>Вот я и спрашиваю этим кто-то реально пользуется. CS>>Кто-нибудь может привести фрагмент реального скрипта со словом prototype?
A>подробно про прототипы: A>http://www.dklab.ru/chicken/nablas/39.html A>http://www.dklab.ru/chicken/40.html
Некоторые посылки в этих статьях вызывают сомнения.
Например:
Итак, вывод: прототипы объектов доступны по цепочке obj.constructor.prototype.constructor.prototype..., а не obj.prototype.prototype, как можно понять из многих руководств по JavaScript в Интернете. Конструктором объекта может быть только объект встроенного класса (обычно это Function).
Кроме того что статьи имхо окончательно запутывают проблему.
Я же пытаюсь упростить проблему выкинув промежуточные "prototype".
если охота понять зачем нужен prototype или еще что-то по ДжаваСкрипту, скачай стандарт ECMA-262 (ECMAScript) где-то с www.ecma.ch по-моему.
и все вопросы отпадут. детальнее чем там нигде нету
Здравствуйте, yxiie, Вы писали:
Y>если охота понять зачем нужен prototype или еще что-то по ДжаваСкрипту, скачай стандарт ECMA-262 (ECMAScript) где-то с www.ecma.ch по-моему. Y>и все вопросы отпадут. детальнее чем там нигде нету
спасибо.но это было первое с чего я начал.
еще раз повторю вопрос:
Почему
myObjectInstance.__proto__ указывает на MyObject.prototype
а не на MyObject просто?
Зачем для каждой функции (класса) MyObject создается специальный подобъект MyObject.prototype
Почему для этого не используется сам MyObject.
В Java (не script) и в других OOP языках есть тольуо две сущности: instance и class
Не морочь себе голову ИМХО. Есть уже интерпритатор готовый? Прикурчивай по минимуму и начинай тестировать. Если важно это дело с прототипами, то оно всплывет. Попроси народ накидать нетривиальных примеров использования javascript и пробуй.
Я правда не очень понимаю, как ты собираешься его прикручивать. ДОМ-то твой не настоящий, а что за javascript без ДОМа?
ОФФ: I'll be back. В смысле проект мой, занимающий почти все мое свободное время, близиться к концу.
РМ>Не морочь себе голову ИМХО. Есть уже интерпритатор готовый? Прикурчивай по минимуму и начинай тестировать. Если важно это дело с прототипами, то оно всплывет. Попроси народ накидать нетривиальных примеров использования javascript и пробуй.
Посмотрел я на SEE engine (ECMAScript) и понял лучше бы его автор и не писал.
Байткода нет. GC фактически тоже нет. Мрак.
В общем делаю downgrade с-smile до уровня JS
РМ>Я правда не очень понимаю, как ты собираешься его прикручивать. ДОМ-то твой не настоящий, а что за javascript без ДОМа?
Ложится один в один практически. обертки просто надо написать.
c-smile — компилируемый поэтому comptibility прослойки пишутся на нем и транслируются в байткод.
Т.е. можно выбирать программно IE flawor / Gecko flawor.
Здравствуйте, yxiie, Вы писали:
Y>Здравствуйте, c-smile, Вы писали:
Y>ты заметь, что в JavaScript нет явных определений class. Y>именно через prototype это эмулируется
В Веб Программировании народ воспринимает JS как данность и снаружи.
Я же смотрю на это дело изнутри. С точки зрения имплементации.
Так вот с точки зрения имплементации лишний prototype в имплементации.
сажает производительнось значительно. Без него все прекрасно ложится и пртототипирование
и эмуляция ООП и т.д.
Вот я и думаю кому это было нужно — замедлять производительность?
Чей-то злой умысел или как?
Здравствуйте, c-smile, Вы писали:
CS>c-smile — компилируемый поэтому comptibility прослойки пишутся на нем и транслируются в байткод. CS>Т.е. можно выбирать программно IE flawor / Gecko flawor.
Да теперь то уж и просто по спецификации можно по идее...
Здравствуйте, c-smile, Вы писали: CS>Ага! Ну ка, ну ка.... подробности?
Многое выкладывать здесь немогу, поскольку по этому проекту идет оформление патентов, но в кратце могу сказать, что мы пересматриваем в первую очередь подход к интернет безопасности и удобство пользования интернетом в целом (не только браузинг).
BFA>>Было бы интересно пообщаться. CS>Интересно пришла ли мне пора общаться с ангелами или нет?
Мощные маркетинговые решения и великолепное финансовое положение говорят за это
CS>Имхо имечко вы себе выбрали оченно двусмысленное, особенно для запада.
В общем да... Но по нашим тестам плюсов именно такого имени намного больше, чем минусов.
CS>Особенно angel-jobs.com звучит просто караул!
Великолепные перспективы. Начнете с младшего ангела. Большие перспективы карьерного роста — можете дорасти до архангела
BFA>>АСЯ: 103577986 CS>Кто такая "АСЯ" ?
icq.com
pototype сделан для того, чтобы каждый объект не держал в себе копию методов, ведь при копировании такого объекта:
a.some=function () {...}
будут копироваться и методы. а если их много? очень много? вот для этого и придумали pototype.
так что не надо думать, что ты умнее ECMA они придумывали стандарт не исходя из каких=то эфимерных целей, а исходя из практической реализации, так что pototype думаю придется делать однозначно
Здравствуйте, c-smile, Вы писали:
CS>Я заметил как ты понимаешь. Давно. CS>Сходи например сюда: http://c-smile.sourceforge.net/
не знаю, что я там должен был увидеть, но я посмотрел
скриптовый язык симпатичный, но итнересует скорость работы вирт.машины, в сравнении скажем с perl, lua, python. тесты делели?
и еще один момент интересует — он что, правда public domain?
Здравствуйте, yxiie, Вы писали:
Y>Здравствуйте, c-smile, Вы писали:
Y>pototype сделан для того, чтобы каждый объект не держал в себе копию методов, ведь при копировании такого объекта: Y>a.some=function () {...} Y>будут копироваться и методы. а если их много? очень много? вот для этого и придумали pototype.
В моем варианте instances тоже не содержат методов:
function MyObject() { }
MyObject.myClassMethod = function() { alert("ku-ku"); } // цепляем метод к "классу"
var a = new MyObject();
a.myClassMethod(); // выдаст alert(ku-ku)
JavaScript для того чтобы достичь точно того же использует:
function MyObject() { }
MyObject.prototype.myClassMethod = function() { alert("ku-ku"); }
var a = new MyObject();
a.myClassMethod(); // выдаст alert(ku-ku)
Зачем нужен prototype?
Y>так что не надо думать, что ты умнее ECMA они придумывали стандарт не исходя из каких=то эфимерных целей, а исходя из практической реализации, так что pototype думаю придется делать однозначно
Мда...
Вопрос не в том делать или нет. "Каждый солдат должен знать свой маневр" что бы достичь результата самым эффективным образом. Вот мне и интересно — в чем смысл такого решения.
Для справки JavaScript родился в Нетскейп. Автор (основной?): Вальдемар Хорват (Waldemar Horvat)
К сожалению не могу найти его e-mail. Все которые в инете — дохлые.
А ECMA как например Госстандарт России сама(само) ничего не придумывает.
Здравствуйте, yxiie, Вы писали:
Y>скриптовый язык симпатичный, но итнересует скорость работы вирт.машины, в сравнении скажем с perl, lua, python. тесты делели?
Нет. Некогда было. Теоретически одно из самых быстрых решений.
Y>и еще один момент интересует — он что, правда public domain?
блин, я уже устал
в предидущем посту я объяснил. ладно, попробую показать на пальцах...
если идет обращение к полю или методу и объект его не содержит — идет поиск в свойстве prototype, таким образом как-бы достигается реализация таких вещей как class и object.
это класс:
function MyClass() {
this.field=4;
}
MyClass.prototype.method=function () {
trace(this.field);
}
Здравствуйте, c-smile, Вы писали:
CS>Здравствуйте, yxiie, Вы писали:
Y>>скриптовый язык симпатичный, но итнересует скорость работы вирт.машины, в сравнении скажем с perl, lua, python. тесты делели?
CS>Нет. Некогда было. Теоретически одно из самых быстрых решений.
практика показывает, что теория часто сильно отличается от практики
тесты посмотреть было бы очень интересно.
я помню тоже начинал изучение С++ с написания JavaScript-подобного интерпретатора, только я еще извращался, прикрутил классам перегрузку операторов, препроцессор
но это не важно, важно то, что скорость исполнения по тестам оказалась во много раз ниже того же пхп 4.0.3
так что советую сделать тесты, чтобы серьезно попуститься (ну или очень воспрять духом)
и что примечательно — не нашел вообще никакой доки, хоть это пожалуй вполне свойственно public domain вещам
Здравствуйте, c-smile, Вы писали:
CS>На самом деле c-smile это практически JavaScript v.2.0 CS>Нормальные классы, наследование и пр.
CS>См. например http://www.mozilla.org/js/language/evolvingJS.pdf
CS>Единcтвенно что не имплементировано в нем так это ограничители типов JS 2.0:
CS>var num:Number = 22;
меня больше интересует виртуальная машина (если она действительно хорошая).
там на сайте написано, что он легко интегрируется в С++ программы. насколько это так? (легко)
дело в том, что у меня уже есть своя архитектура, со встроенными типами, рефлексией и.т.д., а вот нормальную вирт. машину с продвинутой оптимизацией писать как-то влом..., поэтому пока скрипты и не прикручиваю.
Здравствуйте, yxiie, Вы писали:
Y>меня больше интересует виртуальная машина (если она действительно хорошая). Y>там на сайте написано, что он легко интегрируется в С++ программы. насколько это так? (легко) Y>дело в том, что у меня уже есть своя архитектура, со встроенными типами, рефлексией и.т.д., а вот нормальную вирт. машину с продвинутой оптимизацией писать как-то влом..., поэтому пока скрипты и не прикручиваю.
С PHP веселая песня вообще-то. У него нет garbage collector. Вообще.
Т.е. VM создается на момент исполнения запроса и уходит вся скопом вместе с аллоцированной памятью. Что не для каждй задачи подходит. Но зато действительно шустро — malloc это просто mem += len;
Ты разберись что тебе надо сначала.
Если принципиально эффективность то можно и JavaVM (не javascript) прикрутить — исходников в инете море. Рекомендую JamVM