Подобный языку C без ПУСТОГО УКАЗАТЕЛЯ?

Привет я недавно смотрел старое видео о том, как нулевые указатели были ошибкой за миллиард долларов. Он указывает и на C# и на Java, поскольку они имеют проверки на этапе выполнения, но не полностью устраняют его достаточно, и это несколько понятно. Он также указывает на C однажды, который он чувствует себя, таким образом, уверенным является большой проблемой. Я добираюсь, тот пустой указатель завершил строки, массивы без длины и нескольких других вещей плохи (миллиарды долларов на использовании переполнения буфера), но полностью удалить пустой указатель?

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

Если пустой указатель C так плох затем, почему кто-либо не создал, это - замена? т.е. Haskell хорош, но не может действовать в качестве понижения замены.

6
задан Tim Matthews 31 January 2010 в 21:57
поделиться

3 ответа

Проблема с нулевыми указателями в C заключается в том, что при их ссылании на них программа ведет себя в неопределенных способах, что приводит к «неисчислимому ошибкам, уязвимости и системам системы». Но это не означает идею ценности, которая не является реальной стоимостью, обязательно плохо. Многие языки содержат их; Они называются NULL, NOTE, NAN, UNDEF, NULL, NIL и т. Д. Вам просто нужно иметь четко определенный и надежный способ борьбы с ними.

Я полагаю, что причина, по которой язык «вроде C, но не срасшится на NULL PORTER DEREFERENCING», не видел широкого принятия, состоит в том, что ниша для такого языка будет очень маленькой. Одна из одной руки, у вас есть системные программирование, где вы (якобы) нуждаетесь в жестком контроле над всем, который продолжается и не может позволить компилятору, вставляющую автоматическую проверку нулевого указателя при каждом разведении. С другой стороны, есть приложение и другие менее эффективные критические программирования, где гораздо легче перемещать слой или больше абстракции и в целом забыть о указателях, что приводит к тому, что такие вещи, как Java, C #, Python и другие.

2
ответ дан 17 December 2019 в 07:04
поделиться

Когда вы говорите C как, он идет в том же направлении как и другие. Scala каким-то образом устраняет нули, используя варианты. Тем не менее, вы можете использовать нули. Функциональные языки не имеют нулевых проблем и побочных эффектов, но они не похожи на них. В динамических языках также есть пустые или неопределенные переменные и тому подобное. Это цена, которую вам нужно заплатить за c, как imho.

0
ответ дан 17 December 2019 в 07:04
поделиться

Есть причина, по которой он не был заменен, посмотрите на это с другой стороны, существует такая огромная обширная база программ на C, тысячи и тысячи кода валяться без дела, создание замены вызовет много проблем, так как код необходимо будет обновить, чтобы отразить изменение, поскольку NULL в контексте указателя означает, что вызов не удался и, следовательно, вернуть NULL , чтобы указать условие, что код для работы с указателем не работает. Кроме того, он используется в случае операций FILE * , если файл был недопустимым, будет возвращен NULL . Представьте себе хлопот, если бы весь этот код был изменен, к сожалению, это часть стандарта ANSI C и, следовательно, очень дорогостоящее упражнение с точки зрения $$$, чтобы все это изменить для адаптации к новому соглашению о замене NULL.

Посмотрите этот FAQ по печально известному NULL-указателю, который можно найти в C FAQ .

Изменить: Между прочим, « Я понимаю, что строки с завершающим нулем, массивы без длины и еще кое-что плохое » Это неправильный способ сказать это, поскольку вы путаете эти два ... как Питер Ван Дер Линден, автор книги «Экспертное программирование на C - Секреты глубокого C», нуль с одним l является '\ 0', ноль с двумя l - это NULL! Нет такой вещи, как завершение нулем, которое должно было читаться как завершение нулем, то есть '\ 0', который является заполнителем для обозначения конца строки.

Надеюсь, это поможет, С уважением, Том.

2
ответ дан 17 December 2019 в 07:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: