D шаблоны: самый прохладный взлом [закрывается]

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

22
задан 3 revs, 3 users 100% 8 August 2012 в 01:50
поделиться

8 ответов

С точки зрения прямого самого прохладного я должен был бы сказать, что PyD Kirk McDonald (и другая подобная привязка), поскольку они имеют, делают к огромному объему работы в обнаружении и обработке большого количества различных типов, а также поколения сложного кода.

Тем не менее PyD только побеждает, потому что БЛЕЙД технически использует CTFE, не шаблоны.

На большем количестве личного сообщения, D шаблоны получили широкое применение в моем исследовательском проекте. Это - платформа моделирования, где модули могут определить свои собственные частные типы данных. Представление нового пользовательского типа к платформе требует одной строки кода, который создает синтаксический анализатор XML для типа, а также связал сетевой код сериализации/десериализации.

8
ответ дан 29 November 2019 в 03:37
поделиться

тип произвольной точности Это генерирует код ASM во время компиляции (прежде чем компилятор сделает)

9
ответ дан BCS 29 November 2019 в 03:37
поделиться

DParse в инструментах Scrapple является шаблонным парсером-генератором. Однако ldc является единственным компилятором D с функционирующим GC времени компиляции (но даже тогда это имеет пару странно случайных катастрофических отказов). Я играл с ним немного, и можно сделать некоторые интересные вещи как парсинг файла конфигурации и материал, но пока GC времени компиляции не является полностью рабочим, Вы не можете сделать больших вещей.

8
ответ дан bmeck 29 November 2019 в 03:37
поделиться

Мост D/Objective-C использование обрабатывает по шаблону, чтобы позволить Вам управлять объектами Какао в D.

7
ответ дан Ferruccio 29 November 2019 в 03:37
поделиться

Моим избранным был бы ElemType и KeyType от tools.base:

template ElemType(T) {
  alias typeof((function() {
    foreach (elem; Init!(T)) return elem; assert(false);
  })()) ElemType;
}

template KeyType(T) {
  alias typeof((function() {
    foreach (key, elem; Init!(T)) return key; assert(false);
  })()) KeyType;
}
6
ответ дан FeepingCreature 29 November 2019 в 03:37
поделиться

объединенная шаблонная структура типа (Это привычка позволяют Вам совершать ошибки единицы.)

6
ответ дан BCS 29 November 2019 в 03:37
поделиться

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

6
ответ дан 2 revs 29 November 2019 в 03:37
поделиться

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

5
ответ дан 29 November 2019 в 03:37
поделиться
Другие вопросы по тегам:

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