Как различные языки еще обрабатывают “свисание”?

Да, мусор должен обрабатываться детерминистическим образом в системах реального времени.

Один из подходов заключается в планировании определенного количества времени для сборки мусора во время каждого выделения памяти. Это называется «сборка мусора на основе работы». Идея заключается в том, что при отсутствии утечек распределение и сбор должны быть пропорциональными.

Другой простой подход («сборка мусора на основе времени») заключается в планировании определенной доли времени для периодической сборки мусора, независимо от того, нужна она или нет.

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

7
задан casperOne 6 April 2012 в 17:55
поделиться

8 ответов

За исключением использования пространственно-зависимых языков (например, Python, как вы сказали), я не понимаю, почему любая разумная интерпретация будет соответствовать самому внешнему блоку if .

Некоторые языки запрещают эту потенциальную двусмысленность посредством:

  1. Требование фигурных скобок для всех блоков и
  2. Предоставление специального "else if" "синтаксис, обычно elsif , elif или elseif .
6
ответ дан 6 December 2019 в 15:29
поделиться

Если бы какой-либо язык сделал это (кроме языков, ориентированных на отступы), он должен был бы попасть в один из списков «какой язык худший».

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

3
ответ дан 6 December 2019 в 15:29
поделиться

В Python вы не можете быть двусмысленным. Либо у вас есть

 if (x > 0):
   if (y > 0):
     print "hello"
 else:
   print "world"

, либо

 if (x > 0)
   if (y > 0)
     print "hello"
   else:
     print "world"

. Отступ показывает, какое «if» соответствует «else». [Примечание: как бы я ни старался, я не могу заставить «else» в первом примере правильно выстроиться под первым «если».]

На всех языках, которые я видел, которые допускают эту конкретную двусмысленность, «else» соответствует самому последнему «если». Возможно, это не относится ко всем когда-либо существовавшим языкам. Обычно при написании парсера проще всего сопоставить «else» с ближайшим «if» в стеке.

Аналогичный вопрос: каков результат 5 - 2 + 1? Это 4 или 2? Лично я всегда использую круглые скобки, когда пишу (x - y) + z или x - (y + z), потому что я никогда не могу вспомнить, в каком направлении пойдет синтаксический анализатор.

1
ответ дан 6 December 2019 в 15:29
поделиться

В Perl фигурные скобки не являются обязательными, что помогает нам избежать таких проблем:

if ($x > 0) {
    if ($y > 0) {
        print "hello"
    }
    else {
        print "world"
    }
}

по сравнению с

if ($x > 0) {
    if ($y > 0) {
        print "hello"
    }
}
else {
    print "world"
}

IIRC, большинство руководств стиля C требуют / рекомендуют фигурные скобки для циклов и условных выражений.

2
ответ дан 6 December 2019 в 15:29
поделиться

C # делает «правильные» вещи. Интеллектуальный отступ Visual Studio также автоматически помещает его в нужное место:

if (x > 0)
    if (y > 0)
        Console.WriteLine("hello");
    else
        Console.WriteLine("world");

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

1
ответ дан 6 December 2019 в 15:29
поделиться

Принцип работы C # заключается в том, что он сопоставляет операторы else в порядке используемых операторов else.

то есть

if (x == 1)
    if (y == 1)
        Console.WriteLine("Hello");
    else
        Console.WriteLine("World");
else
    Console.WriteLine("All your base are belong to us.");

, однако, если вы хотите изменить положение else.

if (x == 1)
{
    if (y == 1)
        Console.WriteLine("Hello World");
}
else
    Console.WriteLine("All your base are belong to us.");
1
ответ дан 6 December 2019 в 15:29
поделиться

Большинство языков будут соответствовать else с самым внутренним if , и это действительно единственное разумное решение для компилятора, не чувствительного к пробелам. . Многие IDE, как упоминает Джефф, форматируют код в соответствии со структурой, но на самом деле использование фигурных скобок вокруг всех блоков кода - очень разумный способ справиться с этим.

0
ответ дан 6 December 2019 в 15:29
поделиться

Если он не соответствует самому последнему if, либо все становится бессмысленным, либо вы не можете сопоставить другие if. Это (единственная реальная альтернатива, которую я могу себе представить) не имело бы смысла:

if(first)
    if(second)
        if(third)
            doFirst();
        else
            doSecond();
        else
            doThird();

что слишком уж чертовски.

0
ответ дан 6 December 2019 в 15:29
поделиться
Другие вопросы по тегам:

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