Короткий ответ: если ваша проблема требует стека, то встроенная в язык/аппаратное обеспечение, вероятно, будет намного быстрее, чем вы могли бы написать.
Давайте подумаем, что «бессобый язык» будет be.
Исходный язык Fortran не имел понятия стека. Все, что вы могли написать, было одной большой основной программой. Тогда было обнаружено невероятно полезным, чтобы иметь возможность писать подпрограммы и называть их, чтобы они были добавлены вместе с функциями, возвращающими значения. Однако, поскольку я лично обнаружил, что у вас есть MAIN, вызывайте подпрограмму A, и это вызывает B, а затем каким-то образом B снова вызовет A снова, угадайте, что? Машина «зависает в обратном цикле», потому что, когда A попытается вернуться к MAIN, вместо этого она вернется в B, которая вернется к A и так далее. У него не было возможности вспомнить больше чем одну вещь, чтобы вернуться.
Так что для некоторых проблем в этом Fortran вы не смогли решить проблему, не написав свой собственный стек. То есть у вас будет массив и целочисленная переменная, отслеживающая, что делать дальше, индексируя в этот массив, , и вы закончите тем, что впоследствии стало называться «push» и «pop», ,
Было установлено, что это так полезно, оно было построено на более поздних языках. Существуют различные способы сделать это. Прежде чем машины начали иметь встроенный стек, такие языки, как PL/1, могли бы эффективно создавать стек в виде связанного списка записей активации, которые постоянно выделяются и удаляются. (Не очень эффективно, но это сработало.)
Итак, если ваш язык не имеет стека, и вы пытаетесь решить определенные проблемы, вам придется вырезать свой собственный стек из живого языка, потому что проблема просто требует Это. Примером такой проблемы является прохождение дерева по глубине.
Итак, если вы можете это сделать, это язык «без штанов» или нет?
Языки C, C++ и Pascal сами по себе не содержат стека, у них нет прямых конструкций программирования, связанных с стеком. Это целевой машинный язык x86, который создается компилятором, который использует операции стека. – buc
Нет, эти языки имеют вызовы подпрограмм на основе стека. Я не вижу, как любой из них можно считать без штабелирования. Тем не менее, компилятор Watcom C использовал регистры в качестве вершины своего стека, просто чтобы сделать вызовы/возврат быстрее. – shawnhcorey
@shawnhcorey: только реализации имеют это; ни стандарты C, ни C++ не требуют реализации на основе стека. – Mat