Re[7]: В поисках серебрянной пули...
От: FR  
Дата: 10.08.10 18:52
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Оно нормальное в любом языке этой группы: PHP, Ruby, LUA и пр.

CS>В том смысле что все OOP парадигмы можно реализовать в них с примерно одинаковым уровнем рвотных позывов на сроку текста.

Lua совсем не вписывается со своим табличным ООП.
В PHP тоже вроде не фонтан.

В руби и питоне да вполне хороший, помощнее в некоторых аспектах чем ООП в C++/C#/Java.
Re[8]: В поисках серебрянной пули...
От: c-smile Канада http://terrainformatica.com
Дата: 10.08.10 21:55
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, c-smile, Вы писали:


CS>>Оно нормальное в любом языке этой группы: PHP, Ruby, LUA и пр.

CS>>В том смысле что все OOP парадигмы можно реализовать в них с примерно одинаковым уровнем рвотных позывов на сроку текста.

FR>Lua совсем не вписывается со своим табличным ООП.


Таблицы в Lua как механизм идентичен prototype based inheritance исповедуемых Python и Ruby.
Разница лишь в количестве пальцев требуемых для получения результата.

FR>В PHP тоже вроде не фонтан.


То же самое. +/- запах разве что.

FR>В руби и питоне да вполне хороший, помощнее в некоторых аспектах чем ООП в C++/C#/Java.


Руби, Питон и JS кстати это близнецы братья по внутреннему устройству.
Т.е. динамический OOP во всем своем блеске и нищете. Т.е. руками можно соорудить например любой тип наследования.
Вопрос состоит лишь в физиологических предпочтениях практикующего.

Технически например методы классов в Python могут обходиться без обязательного self в списке параметров. Это явно
наследие прошлого.

На самом деле это проблема — достижение некоего разумного баланса между OOP и функциональным подходом.
Я имею ввиду нотацию в основном так как внутри что Python что JS одно и то же.
Понятно что чистая OOPность и чистая функциональщина как все сугубо абстрактное имеют мало шансов по жизни.
В реалии работает то что находится в золотой середине.
Re[2]: В поисках серебрянной пули...
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 11.08.10 02:57
Оценка: :)))
Здравствуйте, artem_korneev, Вы писали:

_>По-моему, лучше всё-таки освоиться с питоном. Язык очень хороший, несмотря на некоторые синтаксические неудобства. Для разработки на питоне доступны неплохие IDE, питон встроен в качестве скриптового языка во многие приложения (OOo, GIMP и т.д.), плюс помимо "мейнстрима", доступны несколько сторонних реализаций питона — CPython, IronPython, есть "portable"-версии, не требующие установки в системе, Google вот ещё обещает что проект unladen-swallow позволит ускорить питон в разы.. хотя сомнительно. Но всё равно хуже не будет. Для питона имеется инструментарий для получения бинарников, не требующих установленного питона (py2exe). Есть биндинги к большинству GUI библиотек (Qt, wxwidgets, gtk). Вроде как на питоне можно писать под симбиан и какие-то смартфонооси.. но я не пробовал.


По-моему, лучше всё-таки освоиться с Руби. Язык очень хороший, без синтаксических неудобств. Для разработки на руби доступны неплохие IDE, плюс помимо "мейнстрима", доступны несколько сторонних реализаций Руби — jruby, IronRuby, Ruby Enterprise Edition, Rubinius, MacRuby, есть "portable"-версии, не требующие установки в системе, кто-то вот еще обещает что проект MagLev позволит ускорить Руби в разы.. Для Руби имеется инструментарий для получения бинарников, не требующих установленного Руби (orca, раньше еще был rubyscript2exe). Есть биндинги к большинству GUI библиотек (Qt, wxwidgets, Tk, Fox, GTK2, Cocoa). На Руби можно писать под симбиан и какие-то смартфонооси (WM, iPhone, Android) — см. Rhodes.

Re[4]: В поисках серебрянной пули...
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 11.08.10 03:09
Оценка: 12 (1) +1
Здравствуйте, Sheridan, Вы писали:

Z>> Полностью поддерживаю, но уверен, что Шеридана не устроит его быстродействие.


S>Можно поподробнее немного?


Re[9]: В поисках серебрянной пули...
От: FR  
Дата: 11.08.10 03:35
Оценка:
Здравствуйте, c-smile, Вы писали:

CS>Таблицы в Lua как механизм идентичен prototype based inheritance исповедуемых Python и Ruby.


Питон и Руби не исповедуют прототипное наследование. Вообще ООП в них склонирован со Smalltalk и
сильно отличается от прототипных прародитель которых Self хоть и потомок того же Smalltalk но ОО в
нем кардинально переделано.
Другое дело реализация всех этих вещей, да очень сильно похожа во всех динамических языках как раз
в виде таблиц. Но если так рассуждать то и в Си как и Lua есть ООП на структурах и он идентичен
тому что в C++ ведь в ассемблер они одинаково компилируются.

CS>Разница лишь в количестве пальцев требуемых для получения результата.


Угу у Си с С++ также.

FR>>В PHP тоже вроде не фонтан.


CS>То же самое. +/- запах разве что.


Угу навоз и фиалки при правильной концентрации хим. веществ пахнут практически одинаково

FR>>В руби и питоне да вполне хороший, помощнее в некоторых аспектах чем ООП в C++/C#/Java.


CS>Руби, Питон и JS кстати это близнецы братья по внутреннему устройству.


Если чуть подняться от таблиц методов уже проявляются большие различия.

CS>Т.е. динамический OOP во всем своем блеске и нищете. Т.е. руками можно соорудить например любой тип наследования.

CS>Вопрос состоит лишь в физиологических предпочтениях практикующего.

Ну это просто особенности динамики.

CS>Технически например методы классов в Python могут обходиться без обязательного self в списке параметров. Это явно

CS>наследие прошлого.

Так старенький уже питон там есть что найти археологам

CS>На самом деле это проблема — достижение некоего разумного баланса между OOP и функциональным подходом.

CS>Я имею ввиду нотацию в основном так как внутри что Python что JS одно и то же.

Тут не понял причем функциональщина.
Я вижу в питоне и JS два разных типа ООП — классический Smaltallk против прототипного. А ФЯ возможности это
отдельный критерий.
Re[10]: В поисках серебрянной пули...
От: c-smile Канада http://terrainformatica.com
Дата: 11.08.10 04:36
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, c-smile, Вы писали:


CS>>Таблицы в Lua как механизм идентичен prototype based inheritance исповедуемых Python и Ruby.


FR>Питон и Руби не исповедуют прототипное наследование. Вообще ООП в них склонирован со Smalltalk и

FR>сильно отличается от прототипных прародитель которых Self хоть и потомок того же Smalltalk но ОО в
FR>нем кардинально переделано.
FR>Другое дело реализация всех этих вещей, да очень сильно похожа во всех динамических языках как раз
FR>в виде таблиц. Но если так рассуждать то и в Си как и Lua есть ООП на структурах и он идентичен
FR>тому что в C++ ведь в ассемблер они одинаково компилируются.

Я не вижу разницы (принципиальной во всяком случае) между Python:
proto = obj.__bases__

и JavaScript
var proto = obj.obj.__proto__;

Сущность одна и та же, только имена разные.

То же самое на запись. В runtime у объекта можно изменить класс. Просто в JS класс стыдливо называется prototype ибо у автора креативность кончилась к тому моменту ...

В C++ кстати тоже у объекта можно сменить класс в runtime, причем штатными методами.

FR>>>В руби и питоне да вполне хороший, помощнее в некоторых аспектах чем ООП в C++/C#/Java.


CS>>Руби, Питон и JS кстати это близнецы братья по внутреннему устройству.

FR>Если чуть подняться от таблиц методов уже проявляются большие различия.

Ну это нюансы, согласись. Big picture всё та же. +/- пара кунштюков в runtime.

CS>>На самом деле это проблема — достижение некоего разумного баланса между OOP и функциональным подходом.

CS>>Я имею ввиду нотацию в основном так как внутри что Python что JS одно и то же.

FR>Тут не понял причем функциональщина.


Ну как минимум first class functions. Ну понятно что это далеко не всё функциональное программирование. Тем не менее.

FR>Я вижу в питоне и JS два разных типа ООП — классический Smaltallk против прототипного. А ФЯ возможности это

FR>отдельный критерий.

Да нет никакого особого отличия в Smaltallk inheritance от JS inheritance. Так — детали, деталюшки.

If you look back at Smalltalk, since you can open a class and add methods, this is effectively the same as what you can do in Javascript.

http://stackoverflow.com/questions/816071/prototype-based-vs-class-based-inheritance
Re[11]: В поисках серебрянной пули...
От: FR  
Дата: 11.08.10 05:52
Оценка:
Здравствуйте, c-smile, Вы писали:


CS>То же самое на запись. В runtime у объекта можно изменить класс. Просто в JS класс стыдливо называется prototype ибо у автора креативность кончилась к тому моменту ...


Понятно что динамика все сильно размывает, но база-то все равно разная.

CS>В C++ кстати тоже у объекта можно сменить класс в runtime, причем штатными методами.


Покажешь?

CS>Ну это нюансы, согласись. Big picture всё та же. +/- пара кунштюков в runtime.


Не соглашусь, метаклассы по моему мощнее на практике, хотя в теории наоборот.
Да и работают метаклассы в том же питоне скорее в аналоге compilе-time в момент загрузки модуля.

FR>>Тут не понял причем функциональщина.


CS>Ну как минимум first class functions. Ну понятно что это далеко не всё функциональное программирование. Тем не менее.


Это понятно, не понятно как это относится к теме разговора

FR>>Я вижу в питоне и JS два разных типа ООП — классический Smaltallk против прототипного. А ФЯ возможности это

FR>>отдельный критерий.

CS>Да нет никакого особого отличия в Smaltallk inheritance от JS inheritance. Так — детали, деталюшки.

CS>

CS>If you look back at Smalltalk, since you can open a class and add methods, this is effectively the same as what you can do in Javascript.

CS>http://stackoverflow.com/questions/816071/prototype-based-vs-class-based-inheritance

Есть различия и огромные, ты в метаклассах питоновских поковыряйся думаю много открытий сделаешь
Re[12]: В поисках серебрянной пули...
От: c-smile Канада http://terrainformatica.com
Дата: 11.08.10 06:41
Оценка: -1 :))
Здравствуйте, FR, Вы писали:

CS>>В C++ кстати тоже у объекта можно сменить класс в runtime, причем штатными методами.


FR>Покажешь?


Да легко:

#include <new>
#include "assert.h"

class A 
{
  int t;
public:
  A(int n):t(n) {} 
  virtual void show() { printf("as A:%d\n",t); }
};

class B 
{
  int t;
  virtual void show() { printf("as B:%d\n",t); }
};

// turn_to<B>(A* obj) changes class of the object 
// that means it just replaces VTBL of the object to VTBL of another class:
template <typename TO_T, typename FROM_T>
  inline void turn_to(FROM_T* p) 
  { 
    assert( sizeof(FROM_T) == sizeof(TO_T));
    ::new(p) TO_T(); 
  }

int main(int argc, char* argv[])
{
  A* hameleon = new A(123);
  hameleon->show();
  turn_to<B>(hameleon);
  hameleon->show();
  return 0;
}


FR>Есть различия и огромные, ты в метаклассах питоновских поковыряйся думаю много открытий сделаешь


Все зависит от уровня абстракции. Я в свое время (pre-tiscript) проводил исследование для себя и как-то они все уложились в одну категорию.
Фичи одни и те же. Детали само собой разные.
Re[13]: В поисках серебрянной пули...
От: FR  
Дата: 11.08.10 07:01
Оценка: +1 -1
Здравствуйте, c-smile, Вы писали:

CS>>>В C++ кстати тоже у объекта можно сменить класс в runtime, причем штатными методами.


FR>>Покажешь?


CS>Да легко:


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

FR>>Есть различия и огромные, ты в метаклассах питоновских поковыряйся думаю много открытий сделаешь


CS>Все зависит от уровня абстракции. Я в свое время (pre-tiscript) проводил исследование для себя и как-то они все уложились в одну категорию.

CS>Фичи одни и те же. Детали само собой разные.

Похоже ты смотрел слишком издалека.
Re[3]: В поисках серебрянной пули...
От: Mamut Швеция http://dmitriid.com
Дата: 11.08.10 12:59
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Здравствуйте, artem_korneev, Вы писали:


_>>По-моему, лучше всё-таки освоиться с питоном. Язык очень хороший, несмотря на некоторые синтаксические неудобства. Для разработки на питоне доступны неплохие IDE, питон встроен в качестве скриптового языка во многие приложения (OOo, GIMP и т.д.), плюс помимо "мейнстрима", доступны несколько сторонних реализаций питона — CPython, IronPython, есть "portable"-версии, не требующие установки в системе, Google вот ещё обещает что проект unladen-swallow позволит ускорить питон в разы.. хотя сомнительно. Но всё равно хуже не будет. Для питона имеется инструментарий для получения бинарников, не требующих установленного питона (py2exe). Есть биндинги к большинству GUI библиотек (Qt, wxwidgets, gtk). Вроде как на питоне можно писать под симбиан и какие-то смартфонооси.. но я не пробовал.


DM>По-моему, лучше всё-таки освоиться с Руби. Язык очень хороший, без синтаксических неудобств. Для разработки на руби доступны неплохие IDE, плюс помимо "мейнстрима", доступны несколько сторонних реализаций Руби — jruby, IronRuby, Ruby Enterprise Edition, Rubinius, MacRuby, есть "portable"-версии, не требующие установки в системе, кто-то вот еще обещает что проект MagLev позволит ускорить Руби в разы.. Для Руби имеется инструментарий для получения бинарников, не требующих установленного Руби (orca, раньше еще был rubyscript2exe). Есть биндинги к большинству GUI библиотек (Qt, wxwidgets, Tk, Fox, GTK2, Cocoa). На Руби можно писать под симбиан и какие-то смартфонооси (WM, iPhone, Android) — см. Rhodes.


DM>


Ага, только сегодня где-то у меня пробегала ссылка: http://www.kevingisi.com/2010/08/09/so-you-want-to-be-a-ruby-dev.html

Итак, вы хотите начать учить Руби. Ну, хватайте себе копию и — вперед. Только вот, какой Руби... 1.8.6, 1.8.7, 1.9.1 или 1.9.2... Есть еще JRuby, Ruby Enterprise Edition, Rubinius... И все они немного разные


Ну и т.п. Веселая статья


dmitriid.comGitHubLinkedIn
Re[4]: В поисках серебрянной пули...
От: FR  
Дата: 11.08.10 13:17
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Ну и т.п. Веселая статья


Ну в питоне тоже весело 2.x vs 3.x
Хотя с выходом 2.7 уже понятно что он базовый.
Re[14]: В поисках серебрянной пули...
От: c-smile Канада http://terrainformatica.com
Дата: 11.08.10 16:22
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, c-smile, Вы писали:


CS>>>>В C++ кстати тоже у объекта можно сменить класс в runtime, причем штатными методами.


FR>>>Покажешь?


CS>>Да легко:


FR>Хак чистейший, полагается на общепринятую реализацию виртуальных методов.


Умммм... где конкретно-то хак? Нет там никакого хака.

"общепринятую реализацию виртуальных методов" — это то на чем основаны все имплементации COM и Cobra.
Во вском случае COM имеет дуальные бинарно совместимые имплементации в C++ и C.
Вот на этом факте я и основываюсь.

FR>Ну и смены типов нет, просто пересоздание объекта в той же области памяти где был старый.


Смена класса (замена VTBL) есть. Пересоздание объекта — нет. Я же специально значение member variable вывел — оно не изменилось.
Метод не без ограничений, но вполне себе работоспособный в рамках области применения.

FR>>>Есть различия и огромные, ты в метаклассах питоновских поковыряйся думаю много открытий сделаешь


CS>>Все зависит от уровня абстракции. Я в свое время (pre-tiscript) проводил исследование для себя и как-то они все уложились в одну категорию.

CS>>Фичи одни и те же. Детали само собой разные.

FR>Похоже ты смотрел слишком издалека.


Ты говоришь : вишня и черешня это небо и земля. Я говорю вишня и черешня это косточковые.
И мы оба по своему правы. Но используем разные таксономии.
Re[15]: В поисках серебрянной пули...
От: FR  
Дата: 11.08.10 17:07
Оценка:
Здравствуйте, c-smile, Вы писали:

FR>>Хак чистейший, полагается на общепринятую реализацию виртуальных методов.


CS>Умммм... где конкретно-то хак? Нет там никакого хака.


Да там по стандарту наверняка UB.

CS>"общепринятую реализацию виртуальных методов" — это то на чем основаны все имплементации COM и Cobra.

CS>Во вском случае COM имеет дуальные бинарно совместимые имплементации в C++ и C.
CS>Вот на этом факте я и основываюсь.

Угу завязка на реализацию. Даже под винды можно на какой-нибудь gcc который на com кладет налететь.

FR>>Ну и смены типов нет, просто пересоздание объекта в той же области памяти где был старый.


CS>Смена класса (замена VTBL) есть. Пересоздание объекта — нет. Я же специально значение member variable вывел — оно не изменилось.


Ну добавь B() : t(456) {} и будет тебе изменение.
Тут чистое пересоздание с помощью placement new и больше ничего.

CS>Метод не без ограничений, но вполне себе работоспособный в рамках области применения.


По моему стремновато.

FR>>Похоже ты смотрел слишком издалека.


CS>Ты говоришь : вишня и черешня это небо и земля. Я говорю вишня и черешня это косточковые.

CS>И мы оба по своему правы. Но используем разные таксономии.

Угу, только ты говоришь все фрукты одинаковы
Re[4]: В поисках серебрянной пули...
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 11.08.10 17:08
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Итак, вы хотите начать учить Руби. Ну, хватайте себе копию и — вперед. Только вот, какой Руби... 1.8.6, 1.8.7, 1.9.1 или 1.9.2... Есть еще JRuby, Ruby Enterprise Edition, Rubinius... И все они немного разные


По сути, в языке есть только две немного отличающиеся версии — 1.8 и 1.9. Все сторонние реализации совместимы с одной из них или являются форком одной из них.
Re[16]: В поисках серебрянной пули...
От: c-smile Канада http://terrainformatica.com
Дата: 11.08.10 18:57
Оценка: 9 (1)
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, c-smile, Вы писали:


FR>>>Хак чистейший, полагается на общепринятую реализацию виртуальных методов.


CS>>Умммм... где конкретно-то хак? Нет там никакого хака.


FR>Да там по стандарту наверняка UB.


Так точно или это ты так предполагаешь?

CS>>"общепринятую реализацию виртуальных методов" — это то на чем основаны все имплементации COM и Cobra.

CS>>Во вском случае COM имеет дуальные бинарно совместимые имплементации в C++ и C.
CS>>Вот на этом факте я и основываюсь.

FR>Угу завязка на реализацию. Даже под винды можно на какой-нибудь gcc который на com кладет налететь.


"gcc который на com кладет" это тебя нагло обманули.
На GCC очень даже хорошо можно с COM работать. И имплементировать оные IUnknown derived интерфейсы. grep на IUnknown в конце концов.

FR>>>Ну и смены типов нет, просто пересоздание объекта в той же области памяти где был старый.


CS>>Смена класса (замена VTBL) есть. Пересоздание объекта — нет. Я же специально значение member variable вывел — оно не изменилось.


FR>Ну добавь B() : t(456) {} и будет тебе изменение.


А ты не добавляй. И не будет тебе изменение. Причем по спецификации.

FR>Тут чистое пересоздание с помощью placement new и больше ничего.


Термин "пересоздание" мне не известен. Есть "конструирование по месту" которое четко специфицировано что делает в C++.
Если members не инициализируются явно то их значение не меняется. И это ж-ж-ж неспроста.

А "пересоздание" это твоя ментальная модель такая. Советую её пересмотреть.

CS>>Метод не без ограничений, но вполне себе работоспособный в рамках области применения.


FR>По моему стремновато.


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

Вот мы и выяснили откуда блондинки происходят.

FR>>>Похоже ты смотрел слишком издалека.


CS>>Ты говоришь : вишня и черешня это небо и земля. Я говорю вишня и черешня это косточковые.

CS>>И мы оба по своему правы. Но используем разные таксономии.

FR>Угу, только ты говоришь все фрукты одинаковы


Это не я так говорю. Это ты так читаешь.
Re[17]: В поисках серебрянной пули...
От: FR  
Дата: 11.08.10 19:15
Оценка:
Здравствуйте, c-smile, Вы писали:

FR>>Да там по стандарту наверняка UB.


CS>Так точно или это ты так предполагаешь?


Предполагаю конечно. Я не знаток стандарта.
Но даже я вижу что для объекта A не вызываются деструкторы.
И если в классах есть не POD члены:

#include <new>
#include <stdio.h>
#include "assert.h"
#include "string"

class A 
{
  std::string t;
public:
  A(const char *n):t(n) {} 
  virtual void show() { printf("as A:%s\n", t.c_str()); }
};

class B 
{
  std::string t;  
  
  virtual void show() { printf("as B:%s\n",t.c_str()); }
};

// turn_to<B>(A* obj) changes class of the object 
// that means it just replaces VTBL of the object to VTBL of another class:
template <typename TO_T, typename FROM_T>
  inline void turn_to(FROM_T* p) 
  { 
    assert( sizeof(FROM_T) == sizeof(TO_T));
    ::new(p) TO_T(); 
  }

int main(int argc, char* argv[])
{
  A* hameleon = new A("123");
  hameleon->show();
  turn_to<B>(hameleon);
  hameleon->show();
  return 0;
}


то все не так работает как тебе хочется.


FR>>Угу завязка на реализацию. Даже под винды можно на какой-нибудь gcc который на com кладет налететь.


CS>"gcc который на com кладет" это тебя нагло обманули.

CS>На GCC очень даже хорошо можно с COM работать. И имплементировать оные IUnknown derived интерфейсы. grep на IUnknown в конце концов.

С gcc с com я работал еще с версией 2.x вполне возможно сейчас классы там и совместимы с com моделью, тогда нам пришлось
писать сишные обертки для com иначе виртуальная таблица не стыковалась.

FR>>Ну добавь B() : t(456) {} и будет тебе изменение.


CS>А ты не добавляй. И не будет тебе изменение. Причем по спецификации.


Угу, а кто-то после меня добавит и будет глюк и тоже по спецификации.

FR>>Тут чистое пересоздание с помощью placement new и больше ничего.


CS>Термин "пересоздание" мне не известен. Есть "конструирование по месту" которое четко специфицировано что делает в C++.

CS>Если members не инициализируются явно то их значение не меняется. И это ж-ж-ж неспроста.

Меняется если эти члены не POD смотри код выше.

FR>>По моему стремновато.


CS>Глупые родители говорят своим чадам что острый ножик это стремно.

CS>Умные объясняют что острый ножик это хорошо, с ним можно смастерить много полезных вещей. Но неаккуратное использование может приводить к нежелательным последствиям.

Угу а до альфы центавра ровно 4.36 световых лет.

FR>>Угу, только ты говоришь все фрукты одинаковы


CS>Это не я так говорю. Это ты так читаешь.


Похоже тебе ругаться не с кем, ладно пока.
Re[17]: В поисках серебрянной пули...
От: . Великобритания  
Дата: 11.08.10 21:30
Оценка:
On 11/08/10 21:57, c-smile wrote:
> FR>Ну добавь B() : t(456) {} и будет тебе изменение.
> А ты не добавляй. И не будет тебе изменение. Причем по спецификации.
По спецификации неинициализированные переменные содержат неспецифированное значение. Оно не обязано быть тем, что было в участке памяти до этого. Скажем, в каком-нибудь debug режиме память может заполняться guard-значениями.
Posted via RSDN NNTP Server 2.1 beta
но это не зря, хотя, может быть, невзначай
гÅрмония мира не знает границ — сейчас мы будем пить чай
Re[18]: В поисках серебрянной пули...
От: c-smile Канада http://terrainformatica.com
Дата: 12.08.10 04:00
Оценка: 3 (1)
Здравствуйте, ., Вы писали:

.>On 11/08/10 21:57, c-smile wrote:

>> FR>Ну добавь B() : t(456) {} и будет тебе изменение.
>> А ты не добавляй. И не будет тебе изменение. Причем по спецификации.
.>По спецификации неинициализированные переменные содержат неспецифированное значение. Оно не обязано быть тем, что было в участке памяти до этого.

Так. Давай показывай пальцем где написано что placement new обязан или хотя бы может менять member variables locations.

Он про них ничего не знает. Конструктор — знает и инициализирует только то что ты явно попросил.
С++ есть системный язык в том смысле что исповедует "design philosophy in which conflicts between performance and safety were generally resolved in favor of performance". Всякого рода копирования и иницализации стоят денег.

.>Скажем, в каком-нибудь debug режиме память может заполняться guard-значениями.


Это про placement new? Это какой такой компайлер занимается произвольной модификацией данных (которые принадлежат приложению).

В случае just new — runtime может делать все что угодно с памятью которую он *еще не отдал* тебе.
То же самое с delete — runtime в своем праве делать все что угодно с памятью *после того* как ты *явно* вызвал delete.

Какой-то детский сад право слово. Одному что-то мерещется, другому просто стрёмно...
Ну даваете уже пункты стандрта что-ли...

placement new это средство для джедаев: http://www.parashift.com/c++-faq-lite/dtors.html#faq-11.10
Не знаешь для чего оно и как оно работает — не используй. И всё на этом.
Re[17]: В поисках серебрянной пули...
От: night beast СССР  
Дата: 12.08.10 04:10
Оценка:
Здравствуйте, c-smile, Вы писали:

FR>>>>Хак чистейший, полагается на общепринятую реализацию виртуальных методов.


CS>>>Умммм... где конкретно-то хак? Нет там никакого хака.


FR>>Да там по стандарту наверняка UB.


CS>Так точно или это ты так предполагаешь?


Есть гарантии, что выравнивание у этих типов одинаковое?
Re[18]: В поисках серебрянной пули...
От: c-smile Канада http://terrainformatica.com
Дата: 12.08.10 04:14
Оценка:
Здравствуйте, night beast, Вы писали:

NB>Здравствуйте, c-smile, Вы писали:


FR>>>>>Хак чистейший, полагается на общепринятую реализацию виртуальных методов.


CS>>>>Умммм... где конкретно-то хак? Нет там никакого хака.


FR>>>Да там по стандарту наверняка UB.


CS>>Так точно или это ты так предполагаешь?


NB>Есть гарантии, что выравнивание у этих типов одинаковое?


В конкретном случае где это используется — да, есть гарантия совместимости в смысле ABI.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.