Asta la Vista, Billy.

А вы знаете, что на форумах снова оживлён чат?
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12
+
-
edit
 

Balancer

Администратор
★★★★★
Mishka> Например, порядок битиков в битовой структуре на Sun и HP/Linux отличается.

А какое отношение порядок битов имеет к стандарту языка? :) Или, например, к тому, что sizeof(char) не всегда 1? :) Как стандарт языка ни меняй, порядок байтов архитектур от этого не изменится...
… чтобы понять рекурсию, нужно сперва понять рекурсию …  

Mishka

Координатор
★★★★★
au> Вы очевидно не понимаете что винда делается с другими приоритетами, в частности DRM и т.п. около-контентными вещами. Им чихать на то как быстро или медленно работает их софт. Не прогресс, качество и т.п., а бабло сейчас, бабло завтра и бабло всегда — вот их приоритет. Рынок глубоко и крепко подсажен на винду, и мелкософт диктует рынку свои правила. Причём вплоть до террора собственных клиентов, что в любом нормальном рынке было бы безумием. Потому что рынок на крючке.

ИМХО, MS уже попало же в свою ловушку. Они как бы сторонники поддержки copyright-а, но своего. А тут пришлось уступать в угоду больших дядей от RIAA, MPAA, Sony и т.д. Потому как, если те начнут вякать и подавать в суд, что MS сделал ОС, которая позволяет легко копировать авторские работы (и начихать им на тот же закон в США о праве на копировании для себя или справедливом использовании), то с MS они срубят не мало. Совсем не мало. Вот и пришлось ОС под эти DRM извращать. Они, вроде, уже и сами не рады. Но поздно. Они вошли в братство, из которого живыми не выпускают. :) И уже пожинают плоды. Тут опубликовали, что продажи виндов и линя выросли, а юниха — на прежнем уровне или слегка упали.
Потерялась подпись. (С) Brab Нашедшего прошу вернуть за небольшое вознаграждение ... переслаными байтами.  
+
-
edit
 

Mishka

Координатор
★★★★★
Mishka>> Например, порядок битиков в битовой структуре на Sun и HP/Linux отличается.
Balancer> А какое отношение порядок битов имеет к стандарту языка? :) Или, например, к тому, что sizeof(char) не всегда 1? :) Как стандарт языка ни меняй, порядок байтов архитектур от этого не изменится...
Прямое. Вот напиши структуру из битиков, инициализируй первый. А потом посмотри, где оно в целом будет. По стандарту С (и всех С++, т.к. это часть взята из С), структура из битиков — это определение целого (int) для битового доступа к его частям. Так вот у разных компиляторов это дело считают с разных концов. Стандартом не определяется, отдано на откуп реализаторам. У нас дурка была по этому поводу — компилим Sun cc — не работает с программами, которые на HP-UX, Linux, Windows. А компилим gcc — работает как милая.
Потерялась подпись. (С) Brab Нашедшего прошу вернуть за небольшое вознаграждение ... переслаными байтами.  
+
-
edit
 

Balancer

Администратор
★★★★★
Mishka> Стандартом не определяется, отдано на откуп реализаторам.

Так вот тут ответ и кроется. Соответственно, твой вариант уже не будет написан в рамках стандарта.
… чтобы понять рекурсию, нужно сперва понять рекурсию …  
+
-
edit
 

Mishka

Координатор
★★★★★
Mishka>> Стандартом не определяется, отдано на откуп реализаторам.
Balancer> Так вот тут ответ и кроется. Соответственно, твой вариант уже не будет написан в рамках стандарта.
Это именно в рамках стандарта, т.к. последний не нарушен. И все тесты на проверку стандарта такая программа пройдёт.
Потерялась подпись. (С) Brab Нашедшего прошу вернуть за небольшое вознаграждение ... переслаными байтами.  
+
-
edit
 

Balancer

Администратор
★★★★★
Mishka> И все тесты на проверку стандарта такая программа пройдёт.

Это не метод оценки :) Или мы пишем только то, что явно оговорено в стандарте, или переносимости у нас не будет вообще ни на каком языке. Вспомним пресловутый (i++ + i++) ? :)
… чтобы понять рекурсию, нужно сперва понять рекурсию …  
+
-
edit
 

Kernel3

Опытный
★★☆
Mishka>> И все тесты на проверку стандарта такая программа пройдёт.
Balancer> Это не метод оценки :) Или мы пишем только то, что явно оговорено в стандарте, или переносимости у нас не будет вообще ни на каком языке. Вспомним пресловутый (i++ + i++) ? :)
Именно что вспомним :) В стандарте явно оговорено, что результат в этом случае не определён :)
Broken Windows® cures my ills and makes me feel alright... ©  
+
-
edit
 

Mishka

Координатор
★★★★★
Mishka>> И все тесты на проверку стандарта такая программа пройдёт.
Balancer> Это не метод оценки :) Или мы пишем только то, что явно оговорено в стандарте, или переносимости у нас не будет вообще ни на каком языке. Вспомним пресловутый (i++ + i++) ? :)

Битовые структуры явно оговорены в стандарте. Ну, и при оценке программы — "в рамках стандарта" — это стандартный термин, обозначающий, что программа стандарта не нарушает. А при твоём методе оценки нельзя пользоваться бинарным вводом-выводом, т.к. переносимость страдает. Я тебе найду 1001 особенность, которой нельзя пользваться. Надо только стандарт прошерстить на фразу "implementation specific". :) Начиная с того, что длина имени переменной не определена в стандарте, а сказано, что длина имени переменно должна быть достаточна. Т.е., в приципе, можно сделать 1 символ. :P По твоей методе выходит, что переменными пользоватьс нельзя.
Потерялась подпись. (С) Brab Нашедшего прошу вернуть за небольшое вознаграждение ... переслаными байтами.  

Kernel3

Опытный
★★☆
yacc> Балансеру, насчет С++ был у меня такой случай: есть некий нешаблонный базовый класс с виртуальной ф-ией, и есть шаблонный класс-наследник с переопределенной этой ф-ией. Ф-ия кидает искючение. Где-то есть цикл по некому контейнеру указателей на базовый класс с ловлей исключения. На g++ 3.2 исключение там не ловилось, хотя должно было ( по стандарту ), при этом у VC++6.0 все работало правильно. Или что-то хитрее было, типа переопределенная ф-ия в шаблонном классе вызывала некую ф-ию, реализованную в базовом классе и та кидала исключение. Но проблемы были.
У меня был случай повеселее: VC++ 7.1 (.NET 2003) не вызвал перегруженный оператор приведения к типу у класса (по ссылке или указателю - уже не помню), к которому применили C-style typecast. Т.е. C-style cast отработал как reinterpret_cast, а не static_cast. На GCC аналогичного глюка не было. И, по моим наблюдениям, он в общем и целом всё-таки стандарту соответствует получше, чем Visual C++.
Broken Windows® cures my ills and makes me feel alright... ©  
Это сообщение редактировалось 05.12.2007 в 19:05
+
-
edit
 

Balancer

Администратор
★★★★★
Ладно, уломали, у Си/Си++ всё плохо на уровне стандартов :D Но как это в "GPL-кабалу загоняет" - всё равно не раскрыто :D
… чтобы понять рекурсию, нужно сперва понять рекурсию …  
+
-
edit
 

Kernel3

Опытный
★★☆
Balancer> Ладно, уломали, у Си/Си++ всё плохо на уровне стандартов :D
Да нет, просто они посложнее байткодовых и скриптовых игрушек :P Зато позволяют решать более широкий спектр задач :)
Balancer> Но как это в "GPL-кабалу загоняет" - всё равно не раскрыто :D
А это уже не интересно :F
Broken Windows® cures my ills and makes me feel alright... ©  
+
-
edit
 

Balancer

Администратор
★★★★★
Kernel3> Зато позволяют решать более широкий спектр задач :)

Ещё более широкий спектр задач решает ассемблер :)

...

Спектр применения микроскопа более широкий, чем молотка. Но это не повод забивать гвозди микроскопом :D
… чтобы понять рекурсию, нужно сперва понять рекурсию …  
+
-
edit
 

Mishka

Координатор
★★★★★
Balancer> Ладно, уломали, у Си/Си++ всё плохо на уровне стандартов :D Но как это в "GPL-кабалу загоняет" - всё равно не раскрыто :D
Кстати, стандарт не говорит, что sizeof(char)=1, но он говорит, что sizeof(char) &le sizeof(int) &le sizeof(long), ЕМНИП. :)
Потерялась подпись. (С) Brab Нашедшего прошу вернуть за небольшое вознаграждение ... переслаными байтами.  

Kernel3

Опытный
★★☆
Mishka> Кстати, стандарт не говорит, что sizeof(char)=1, но он говорит, что sizeof(char) &le sizeof(int) &le sizeof(long), ЕМНИП. :)
Он говорит, что char должен быть достаточным, чтобы вмещать ASCII. Т.е. может быть и 7 бит, в принципе :) :)
Broken Windows® cures my ills and makes me feel alright... ©  

Mishka

Координатор
★★★★★
Kernel3> У меня был случай повеселее: VC++ 7.1 (.NET 2003) не вызвал перегруженный оператор приведения к типу у класса (по ссылке или указателю - уже не помню), к которому применили C-style typecast. Т.е. C-style cast отработал как reinterpret_cast, а не static_cast. На GCC аналогичного глюка не было. И, по моим наблюдениям, он в общем и целом всё-таки стандарту соответствует получше, чем Visual C++.

У меня такое впечатление, что VC прав в этом случае. Дома посмотрю стандарт. Особенно, если это касается указателей, а не референсов.
Потерялась подпись. (С) Brab Нашедшего прошу вернуть за небольшое вознаграждение ... переслаными байтами.  

Kernel3

Опытный
★★☆
Mishka> У меня такое впечатление, что VC прав в этом случае. Дома посмотрю стандарт. Особенно, если это касается указателей, а не референсов.
Не, точно не прав:

5.4 Explicit type conversion (cast notation) [expr.cast]
1 The result of the expression (T) cast-expression is of type T. The result is an lvalue if T is a reference
type, otherwise the result is an rvalue. [Note: if T is a non-class type that is cv-qualified, the cv-qualifiers
are ignored when determining the type of the resulting rvalue; see 3.10. ]
2 An explicit type conversion can be expressed using functional notation (5.2.3), a type conversion operator
(dynamic_cast, static_cast, reinterpret_cast, const_cast), or the cast notation.
cast-expression:
unary-expression
( type-id ) cast-expression
3 Types shall not be defined in casts.
4 Any type conversion not mentioned below and not explicitly defined by the user (12.3) is ill-formed.
5 The conversions performed by


— a const_cast (5.2.11),

— a static_cast (5.2.9),

— a static_cast followed by a const_cast,

— a reinterpret_cast (5.2.10), or

— a reinterpret_cast followed by a const_cast,


can be performed using the cast notation of explicit type conversion.

Порядок вроде как оговорён :) Другое дело, что код, о котором я говорил, был достаточно хитрым, и я сейчас его не воспроизведу. Т.е. запутаться компилятору там, в общем-то, было где :)
Broken Windows® cures my ills and makes me feel alright... ©  

Vale

Сальсолёт
★★★★★
А какого черта было пудрить компилятору мОзги?...
 

Mishka

Координатор
★★★★★
Я не зря говорил про указатели. На них static_cast работает как reinterpret_cast. Это дурка именно с указателями.

4.10 Pointer conversions [conv.ptr]

1 A null pointer constant is an integral constant expression (5.19) rvalue of integer type that evaluates to zero. A null pointer constant can be converted to a pointer type; the result is the null pointer value of that type and is distinguishable from every other value of pointer to object or pointer to function type. Two null pointer values of the same type shall compare equal. The conversion of a null pointer constant to a pointer to cv-qualified type is a single conversion, and not the sequence of a pointer conversion followed by a qualification conversion (4.4).

2 An rvalue of type “pointer to cv T,” where T is an object type, can be converted to an rvalue of type “pointer to cv void.” The result of converting a “pointer to cv T” to a “pointer to cv void” points to the start of the storage location where the object of type T resides, as if the object is a most derived object (1.8) of type T (that is, not a base class subobject).

3 An rvalue of type “pointer to cv D,” where D is a class type, can be converted to an rvalue of type “pointer to cv B,” where B is a base class (clause 10) of D. If B is an inaccessible (clause 11) or ambiguous (10.2) base class of D, a program that necessitates this conversion is ill-formed. The result of the conversion is a pointer to the base class sub-object of the derived class object. The null pointer value is converted to the null pointer value of the destination type.

62

Licensed to /Mikhail Evstiounin
ANSI Store order #X221533 Downloaded: 11/29/2005 8:24:54 AM ET
Single user license only. Copying and networking prohibited
 


5.2.9 Static cast [expr.static.cast]

1 The result of the expression static_cast<T>(v) is the result of converting the expression v to type T. If T is a reference type, the result is an lvalue; otherwise, the result is an rvalue. Types shall not be defined in a static_cast. The static_cast operator shall not cast away constness (5.2.11).

2 An expression e can be explicitly converted to a type T using a static_cast of the form
static_cast<T>(e) if the declaration “T t(e);” is well-formed, for some invented temporary variable
t (8.5). The effect of such an explicit conversion is the same as performing the declaration and initialization and then using the temporary variable as the result of the conversion. The result is an lvalue if T is a reference type (8.3.2), and an rvalue otherwise. The expression e is used as an lvalue if and only if the initialization uses it as an lvalue.

3 Otherwise, the static_cast shall perform one of the conversions listed below. No other conversion
shall be performed explicitly using a static_cast.
4 Any expression can be explicitly converted to type “cv void.” The expression value is discarded. [Note: however, if the value is in a temporary variable (12.2), the destructor for that variable is not executed until the usual time, and the value of the variable is preserved for the purpose of executing the destructor. ] The lvalue-to-rvalue (4.1), array-to-pointer (4.2), and function-to-pointer (4.3) standard conversions are not applied to the expression.

5 An lvalue of type “cv1 B”, where B is a class type, can be cast to type “reference to cv2 D”, where D is a class derived (clause 10) from B, if a valid standard conversion from “pointer to D” to “pointer to B” exists (4.10), cv2 is the same cv-qualification as, or greater cv-qualification than, cv1, and B is not a virtual base class of D. The result is an lvalue of type “cv2 D.” If the lvalue of type “cv1 B” is actually a sub-object of an object of type D, the lvalue refers to the enclosing object of type D. Otherwise, the result of the cast is undefined. [Example:
struct B {};
struct D : public B {};
D d;
B &br = d;
static_cast<D&>(br); // produces lvalue to the original d object
—end example]

6 The inverse of any standard conversion sequence (clause 4), other than the lvalue-to-rvalue (4.1), array-topointer (4.2), function-to-pointer (4.3), and boolean (4.12) conversions, can be performed explicitly using static_cast. The lvalue-to-rvalue (4.1), array-to-pointer (4.2), and function-to-pointer (4.3) conversions are applied to the operand. Such a static_cast is subject to the restriction that the explicit conversion does not cast away constness (5.2.11), and the following additional rules for specific cases:

74

Licensed to /Mikhail Evstiounin
ANSI Store order #X221533 Downloaded: 11/29/2005 8:24:54 AM ET
Single user license only. Copying and networking prohibited.

 ISO/IEC ISO/IEC 14882:2003(E)

5 Expressions 5.2.9 Static cast

7 A value of integral or enumeration type can be explicitly converted to an enumeration type. The value is unchanged if the original value is within the range of the enumeration values (7.2). Otherwise, the resulting enumeration value is unspecified.

8 An rvalue of type “pointer to cv1 B”, where B is a class type, can be converted to an rvalue of type “pointer to cv2 D”, where D is a class derived (clause 10) from B, if a valid standard conversion from “pointer to D” to “pointer to B” exists (4.10), cv2 is the same cv-qualification as, or greater cv-qualification than, cv1, and B is not a virtual base class of D. The null pointer value (4.10) is converted to the null pointer value of the destination type. If the rvalue of type “pointer to cv1 B” points to a B that is actually a sub-object of an object of type D, the resulting pointer points to the enclosing object of type D. Otherwise, the result of the
cast is undefined.

9 An rvalue of type “pointer to member of D of type cv1 T” can be converted to an rvalue of type “pointer to member of B of type cv2 T”, where B is a base class (clause 10) of D, if a valid standard conversion from “pointer to member of B of type T” to “pointer to member of D of type T” exists (4.11), and cv2 is the same cv-qualification as, or greater cv-qualification than, cv1.63) The null member pointer value (4.11) is converted to the null member pointer value of the destination type. If class B contains the original member, or is a base or derived class of the class containing the original member, the resulting pointer to member points to the original member. Otherwise, the result of the cast is undefined. [Note: although class B need not contain the original member, the dynamic type of the object on which the pointer to member is dereferenced
must contain the original member; see 5.5. ]

10 An rvalue of type “pointer to cv1 void” can be converted to an rvalue of type “pointer to cv2 T,” where T is an object type and cv2 is the same cv-qualification as, or greater cv-qualification than, cv1. A value of type pointer to object converted to “pointer to cv void” and back to the original pointer type will have its original value.
 


a static_cast (5.2.9) ссылается на 5.2.9, там clause 8, учитывая, что указателей всё есть и переопределить нельзя, а оттуда на 4.10 clause 3.

Для reference всё немного по другому.
Потерялась подпись. (С) Brab Нашедшего прошу вернуть за небольшое вознаграждение ... переслаными байтами.  

Mishka

Координатор
★★★★★
Vale> А какого черта было пудрить компилятору мОзги?...
Это не пудрить. С++, действительно очень мощный и тяжёлый язык. Для того, кто знает и понимает эту мощь — лафа. Выражать можно очень много и компактно. Разбираться другим немного тяжело. :) Но он же nightmare для компиляторщиков. И не только синтаксически — это из С пришло, но и семантически. Более того, правила поиска приведения видов (то, что обсуждается здесь) оно примерно из 38 пунктов (или около того, ЕМНИП), если всё свести вместе.
Потерялась подпись. (С) Brab Нашедшего прошу вернуть за небольшое вознаграждение ... переслаными байтами.  

Kernel3

Опытный
★★☆
Mishka> Я не зря говорил про указатели. На них static_cast работает как reinterpret_cast. Это дурка именно с указателями.
Mishka> Для reference всё немного по другому.
Ага. И если там были всё-таки ссылки, то неправ именно VC++ :)
Broken Windows® cures my ills and makes me feel alright... ©  

Kernel3

Опытный
★★☆
Vale> А какого черта было пудрить компилятору мОзги?...
Иногда нужно :) В тот раз это была работа с "умными" указателями собственной реализации.
Broken Windows® cures my ills and makes me feel alright... ©  

yacc

Опытный

Balancer> Ладно, уломали, у Си/Си++ всё плохо на уровне стандартов :D Но как это в "GPL-кабалу загоняет" - всё равно не раскрыто :D
Да как тебе сказать. Не совсем в явном виде загоняет. Но палки в колеса ставит. Т.е. ты должен выложить программу с билдовыми скриптами ( по условиям лицензии ). Формально там не указана конкретная версия компилятора, с которой он будет собираться ( указана, скажем, минимальная ). Т.е. человек может взять и более свежий либо наоборот более старый ( выше миимального, ну уж какой у него есть), на котором она не соберется. И хотелось бы тебе сосредоточится на функциональности, но поддержка тебе ноги косить будет - задолбают, если захочешь не просто разок выложить то, что получилось, а чтобы у продукта была жизнь. А если будешь вести команду разработчиков, которые согласяться по доброй воле поправить коды чтобы и на других ОС тоже это работало ( а если продукт полезный то такие найдутся ).... Лучше уж на Java либо ( если уж совсем альтруист ) - под BSD - она же не запрещает тебе исходные коды выложить :) Либо можно послать пользователей нафиг и спокойно делать дальше то, что через годик может оказаться бесполезным - сама среда Линукс ( компиляторы, другие библиотеки ) тоже за это время на месте не стояли. Просто байт-кодовые языки дают бОльшую стабильность.

P.S. http://www.linux-online.ru/about/articles/detail.php?ID=879 - забавная статья. Рекомендую почитать и подумать :)
 

Vale

Сальсолёт
★★★★★
The Register зажигает

Взято тут

У вас нет разрешения просмотреть разрешения, но вы можете поменять разрешения. Вам все понятно?

Это не подделка.
 

yacc

Опытный

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

Vale

Сальсолёт
★★★★★
Почти там же День рождения Висты : мрачновато оно как-то...
 
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12

в начало страницы | новое
Поиск
Настройки
Персональное
Новости сайта
Статистика
Яндекс.Метрика



 
Сайт работает на сервере ETegro Technologies