Существует ли язык с RAII + Касательно подсчета, который не имеет небезопасного указателя arithmetric?

RAII = Приобретение Ресурса является Инициализация

Касательно подсчета = "GC бедного человека"

Вместе, они довольно мощны (как касательно - считал 3D объект, содержащий VBO, который он бросает, освобождает, когда это - деструктор, назван).

Теперь, вопрос - RAII существует на каком-либо языке помимо C++? В частности, язык, который не позволяет указатель arithmetric / переполнение буфера?

6
задан CharlesB 3 January 2018 в 15:01
поделиться

5 ответов

-

PERL 5 имеет подсчет и деструкторов, которые гарантированы, когда все ссылки выпадают вне области действия, поэтому Raii доступен на языке, хотя большинство программистов Perl не используют термин.

и Perl 5 не выставляют необработанные указатели на код Perl.

Perl 6, однако, имеет настоящий сборщик мусора, и фактически позволяет переключаться сборщик мусора; Таким образом, вы не можете положиться на вещи, которые собираются в каком-либо конкретном порядке.

Я считаю, что Python и Lua используют ссылку.

2
ответ дан 8 December 2019 в 18:36
поделиться

D имеет RAII, но все еще имеет арифметику указателей :( Но, на самом деле, вы не обязаны его использовать. Пожалуйста, обратите внимание, что заставить D работать для меня было занозой в заднице, так что, пожалуйста, говорите с нами.

3
ответ дан 8 December 2019 в 18:36
поделиться

В то время как не совсем Raii, Python имеет с оператором , а C # имеет оператор .

3
ответ дан 8 December 2019 в 18:36
поделиться

PERL, Python (C), PHP и TCL относятся к ссылке и имеют механизмы для уничтожения объекта после его ссылочного отчета до нуля, что может произойти, как только переменная выходит из объем. Встроенные типы выделяются автоматически. Пользовательские классы имеют способ определить деструктор, который призван при выпуске.

Существуют некоторые краевые случаи: глобальные переменные могут не быть выпущены до тех пор, пока не могут быть выпущены конец и круговые ссылки, до конца (хотя PHP недавно не реализовал GC, который обрабатывает этот случай, и Python 2 добавлен детектор цикла).

2
ответ дан 8 December 2019 в 18:36
поделиться

Python (стандартный cpeython, а не варианты, как Jython, Nonalen Naight и Ironpython) использует ссылку для его объектов.

С этим он также имеет Raii и (в основном) детерминированную мусорную коллекцию. Например, это предполагается работать детерминистративно закрывающие файлы:

def a():
   fp = open('/my/file', 'r')
   return fp.read()

Примечание FP.close () никогда не вызывается. Как только FP выходит из охвата, объект должен быть уничтожен . Тем не менее, есть некоторые случаи, когда детерминированная финализация не гарантируется, например, в том, что в

  • что-то бросает исключение, и Traceback в настоящее время обрабатывается, или для него хранятся ссылка (Примечание SYS.LAST_TRACEBACK Сохраняет последнюю трассировку)
  • Циклические ссылки существуют в объекте, вызывая счетчик ссылки, чтобы не перейти на ноль

, в то время как Python теоретически имеет детерминированную финализацию, лучше четко закрыть любые ресурсы, где можно исключить Как и Иорор или тому подобное) может привести к тому, чтобы объект остаться в жизни.

2
ответ дан 8 December 2019 в 18:36
поделиться
Другие вопросы по тегам:

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