Чтобы выделять/освобождать память в куче нужно вызывать аллокатор, да и указатель через что-то же надо передавать, а число регистров ограничено. А в случае стека это просто инкремент/декремент, а если с отдельными стеками для данных и возвратов, то нет и потенциальных уязвимостей + появляется возможность очень просто возвращать несколько значений.
Я немного удивился, когда узнал что компиляторы до сих пор поддерживают такой синтаксис:
int main(argc, argv)
int argc;
char *argv[];
Но так уже почти никто не пишет.
Еще неявный int был убран из C99, но от компиляторов больше варнинга ничего не увидишь. И так тоже не пишут.
В принципе кроме самого Си ничего больше устаревшего нет, даже флаги у компиляторов за много лет те же остались.
З.Ы. Почему то в старых сорцах сорцах постоянно вижу выражение у return в скобках, несовместимости конечно никакой нет, но просто интересно, зачем так делали? Это синтаксис раньше такой был? Или это чтобы return можно было макросом заменить?
Арифметическое отрицание значения INT_MIN — неопределенное поведение => арифметическое отрицание не может быть валидной конструкцией (а так же вообще все арифметические операции, при которых может произойти переполнение).
Фи, ваш жаваскрипт не на всякой платформе работает.
Лучше на форте, где его только не реализовали, его тут недавно даже на МК-161 портировали.
Вот где кроссплатформенность! ;)
Транслятор более общее понятие. Интерпретатор тоже транслятор.
Я всё-таки прочитал статью и посмотрел примеры, тут вообще нет никакого «транслятора» кроме самого сишарпа. Тут просто генератор кода (да и название статьи намекает ;). Код генерируется вызовами методов из этой либы. Вот если писать компилятор, то эта либа может пригодиться для бэкэнда.
Забавная цепочка: C# компилируется в дотнетовский байткод, затем этот байткод JIT'ится в нативный и исполняется, им генерируется ассемблерный листинг, который сперва препроцессируется и только после транслируется в код для AVR.
P.S. Почему-то принял вас за автора, видимо из-за похожего строения ника :)
Как-то так?
Хотя, тут языки с динамической типизацией считают плохими для обучения, а в форте типизации вообше никакой…
Но почему-то кроме фортеров никто так не делает.
J:
load 'primitives'
NB. получает последовательность, возвращает следующий элемент
next =: tally - 1 + curtail indexoflast tail
NB. добавляем следующий элемент к последовательности x-1 раз
vanEck =: dyad def '(, next)power(x - 1) y'
NB. любуемся
echo 100 vanEck 0
Я немного удивился, когда узнал что компиляторы до сих пор поддерживают такой синтаксис: Но так уже почти никто не пишет.
Еще неявный int был убран из C99, но от компиляторов больше варнинга ничего не увидишь. И так тоже не пишут.
В принципе
кроме самого Синичего больше устаревшего нет, даже флаги у компиляторов за много лет те же остались.З.Ы. Почему то в старых сорцах сорцах постоянно вижу выражение у return в скобках, несовместимости конечно никакой нет, но просто интересно, зачем так делали? Это синтаксис раньше такой был? Или это чтобы return можно было макросом заменить?
В крестах такого нет.
Еще по-моему в крестах нет __VA_ARGS__.
Вобщем кресты — говно.А без видюхи эти ваши вычисления как работать будут? Фортран вроде как ориентирован на эффективную обработку массивов.
Арифметическое отрицание значения INT_MIN — неопределенное поведение => арифметическое отрицание не может быть валидной конструкцией (а так же вообще все арифметические операции, при которых может произойти переполнение).
Интересно, те кто это говорят когда-нибудь видели J?
К тому, что я тупой.Просто почему-то подумал, что в питончике переменная цикла видна только внутри цикла. Можете не обращать внимания.Лучше на форте, где его только не реализовали, его тут недавно даже на МК-161 портировали.
Вот где кроссплатформенность! ;)
Я всё-таки прочитал статью и посмотрел примеры, тут вообще нет никакого «транслятора» кроме самого сишарпа. Тут просто генератор кода (да и название статьи намекает ;). Код генерируется вызовами методов из этой либы. Вот если писать компилятор, то эта либа может пригодиться для бэкэнда.
Забавная цепочка: C# компилируется в дотнетовский байткод, затем этот байткод JIT'ится в нативный и исполняется, им генерируется ассемблерный листинг, который сперва препроцессируется и только после транслируется в код для AVR.
P.S. Почему-то принял вас за автора, видимо из-за похожего строения ника :)