OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Вторник, 10 Декабрь, 2019 08:51

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 5 ] 
Автор Сообщение
СообщениеДобавлено: Четверг, 18 Февраль, 2010 08:25 

Зарегистрирован: Пятница, 24 Апрель, 2009 16:28
Сообщения: 531
Откуда: Москва
Выделено: viewtopic.php?p=43145#p43145

Валерий Лаптев писал(а):
Меня удивляет, почему этого до сих пор не сделали? Это даже не компилятор, это редактор должен следить, БЛИН!!!!!!!!
В Visual Studio 2008 для C# так и сделано (для остальных языков просто не знаю).


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 18 Февраль, 2010 08:30 

Зарегистрирован: Суббота, 07 Март, 2009 15:39
Сообщения: 3124
Откуда: Астрахань
Peter Almazov писал(а):
Валерий Лаптев писал(а):
Меня удивляет, почему этого до сих пор не сделали? Это даже не компилятор, это редактор должен следить, БЛИН!!!!!!!!
В Visual Studio 2008 для C# так и сделано (для остальных языков просто не знаю).

Для Бейсика - все по умолчанию обнуляется. Для С++ - нифига не сделано. Хотя предупреждение компилятор выдает.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 18 Февраль, 2010 17:36 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Peter Almazov писал(а):
Валерий Лаптев писал(а):
Меня удивляет, почему этого до сих пор не сделали? Это даже не компилятор, это редактор должен следить, БЛИН!!!!!!!!
В Visual Studio 2008 для C# так и сделано (для остальных языков просто не знаю).


Народ, остыньте. Проблема инициализации не в том чтобы отследить факт инициализации, а в том, чтобы она была сделана не более одного раза, а это алгоритмически неразрешимо.

То что сделано в C# есть перестраховка, там из-за этого некоторые переменные приходится не один раз инициализировать (что снижает производительность).

Пример:

Следующий код на C# не скомпилируется:

MyStruct x;
if (!TryInit1(ref x) && !TryInit2(ref x) && !TryInit3(ref x))
{
Init4(ref x);
}

Вместо него придётся написать такой:

MyStruct x;
if (!TryInit1(out x) && !TryInit2(out x) && !TryInit3(out x))
{
Init4(out x);
}

а если переменная объявлена как out то код процедур TryInit1, TryInit2, TryInit3 не скомпилируется пока в ней x не проинициализируют. Таким образом, в C# переменная x будет инициализироваться в этом случае от одного до четырёх раз.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 18 Февраль, 2010 18:55 
Модератор
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9163
Откуда: Россия, Орёл
Это может хорошо на уровне оборудования решаться, при тегированной памяти. Спец. тег "неопределено" - и всё. Проц реагирует прерыванием.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: Четверг, 18 Февраль, 2010 23:34 

Зарегистрирован: Четверг, 08 Май, 2008 19:13
Сообщения: 975
Откуда: Киев
Какие-то излишние сложности с объявлением переменных могут повылезать. Да и хотелось бы не в рантайме такие ошибки ловить.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 5 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2019, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB