Каким должен быть язык программирования? Анализ и критика Описание языка Компилятор
Отечественные разработки Cтатьи на компьютерные темы Компьютерный юмор Новости и прочее

О хранении данных в стеке, вместо заключения

Идеи о хранении объектов переменной длины в стеке одолевали автора этих строк давно.
Уолтер Брайт
Уолтер Брайт
Раньше этот стек виделся программным, т.к. не было ясности с реализацией на низком уровне. Теперь же всё это видится достаточно элементарным и лежащим на поверхности. Однако не понятно, почему такие решения не встречаются в языках программирования. Возможно, недостаточно широк круг знакомых автору языков и компиляторов. Но языки со статической типизацией из верхних строк рейтинга не размещают объекты и типы переменной длины в стеке. А языки с динамической типизацией работают с «кучей» по определению.

            Так почему стеком пренебрегают? Почему с целого класса языков программирования не сняли «родовое проклятие»? Можно понять, когда речь идёт о давно разработанном C: нужна обратная совместимость. Языку C++ нужна обратная совместимость с C. Но Уолтер Брайт, автор языка D, имел перед созданием этого языка многолетний опыт разработки компиляторов для C++. Он мог внести в язык такие возможности. Андерс Хейлсберг имел за плечами опыт создания Object Pascal и Delphi. Да, той самой Delphi, визуальные компоненты которой по умолчанию размещаются в «куче». Даже если они имеют фиксированный размер. Но в разработанном Хейлсбергом C# проглядывают старые подходы. Почему очевидные выгоды использования стека не прельстили столь уважаемых специалистов? Это не поддаётся объяснению.
Андерс Хейлсберг
Андерс Хейлсберг

Почитайте ещё:

Опубликовано: 2014.07.27, последняя правка: 2018.10.29    15:59

ОценитеОценки посетителей
   █████████████████ 7 (38.8%)
   ████████████ 5 (27.7%)
   █████ 2 (11.1%)
   ██████████ 4 (22.2%)

Отзывы

✅  2016/03/25 01:25, rst256          #0 

С умеет. Давно и в ручную

✅  2016/05/12 10:47, utkin          #1 

Вы задаете вопрос в пустоту, риторически, в тоже время указываете авторов, кому адресуется вопрос. Вы не пробовали искать данных людей и задавать вопрос им? В свое время я работал в журнале «ПРОграммист» и имел опыт общения с известными людьми. Тогда была идея брать интервью у всяких известных ученых, инженеров и программистов. Так в последнем (или предпоследнем, не помню уже) выпуске мы взяли интервью у Мигеля де Икаса, разработчика mono и gnom. Переписку вел я, с использованием гугло-переводчика. Конечно, желающих дать интервью было мало, но многие отвечали на письмо, типа: «нет не могу, я занят» или «не имею такого желания» и т.д. Среди опрашиваемых был Гвидо Ван Россум, автор Питона, и Юкихиро Мацумото, автор Руби. Попробуйте уточнить вопросы напрямую у создателей.

✅  2016/05/12 11:40, Автор сайта          #2 

Как-то не приходило такое в голову. Наверное потому, что они для нас — небожители, к которым и подступиться страшно :) А тут ещё и языковый барьер. Представьте, я им задам вопрос: «А почему вы так не сделали?». Но они спросят: «А как?». И тогда для них надо будет перевести весь цикл статей. А это ещё дополнительная работа. Но кое-кто из отечественных небожителей это всё читал и посоветовал оформить на это патент.

✅  2016/05/12 12:47, utkin          #3 

Вот продумайте как задать вопросы. И задайте. Ну например, не почему Вы так не сделали, а почему Вы сделали ИМЕННО ТАК, а не иначе? Ну а насчет небожителей — обычные люди и корректно отвечают.

✅  2016/05/12 12:52, utkin          #4 

Ссылка на интервью: http://procoder.info/index.php/entry/intervyu-s-migelem-de-ikasa/

Обычный человек просто о себе.

✅  2016/05/12 14:14, Автор сайта          #5 

Было бы интересно бы интересно поговорить на такие темы с кем-то из наших, «равных» Брайту или Хейлсбергу. В каком-то приближении можно считать таковым Евгения Александровича Зуева. Но он не делал новых языков, он сделал C++, наиболее близкий к стандарту. Значит, ему нечего ответить, он же придерживался стандартов. А кому ещё у нас задать такой вопрос — я даже не знаю. Может быть, авторам книг по компиляции. Но они, скорее, теоретики. Даже не теоретики, а толкователи уже готовых теорий, своих теорий что-то у них не видно.

P.S. А журнал всё, каюк?

✅  2016/05/12 14:34, utkin          #6 

Задайте вопрос именно разработчикам.

✅  2016/05/12 18:27, utkin          #7 

Увы, да. По крайней мере в том виде, каким он был ранее

✅  2016/07/25 09:00, Michael          #8 

Если мне не изменяет память, компиляторы Алгол-60 хранили в куче только _own_ массивы переменной длины (own — аналог static в C). "Обычные массивы" с неизвестными заранее границами хранились в фрейме блока, примерно как в gcc. Им было проще: стандарт не заставлял их возвращать массивы из процедур-функций. Самое заковыристое для реализации в Алгол-60 — это передача параметров по имени и эти мутные _own_ массивы.

Добавить свой отзыв

Написать автору можно на электронную почту
mail(аt)compiler.su

Авторизация

Регистрация

Выслать пароль

Карта сайта


Содержание

Каким должен быть язык программирования?

Анализ и критика

●  Устарел ли текст как форма представления программы

●  Русский язык и программирование

●  Многоязыковое программирование

Синтаксис языков программирования

Синтаксический сахар

●  Некоторые «вкусности» Алгол-68

●  «Двухмерный» синтаксис Python

●  Почему языки с синтаксисом Си популярнее языков с синтаксисом Паскаля?

●  Должна ли программа быть удобочитаемой?

●  Стиль языка программирования

●  Тексто-графическое представление программы

●●  Разделители

●●  Строки программы

●●  Слева направо или справа налево?

●  Комментарии

●●  Длинные комментарии

●●  Короткие комментарии

●●  Комментарии автоматической генерации документации

●●  Нерабочий код

●●  Помеченные комментарии

●  Нужны ли беззнаковые целые?

●  Шестнадцатиричные и двоичные константы

●  Условные операторы

●  Переключатель

●  Циклы

●●  Продолжение цикла и выход из него

●  Некошерный «goto»

●  Изменение приоритетов операций

●  Операции присвоения и проверки на равенство. Возможно ли одинаковое обозначение?

●  Так ли нужны операции «&&», «||» и «^^»?

●  Постфиксные инкремент и декремент

●  Почему в PHP для конкатенации строк используется «.»?

●  Указатели и ссылки в C++

●●  О неправомерном доступе к памяти через указатели

●  Обработка ошибок

●  Функциональное программирование

●●  Нечистые действия в чистых функциях

●●  О чистоте и нечистоте функций и языков

●●  Макросы — это чистые функции, исполняемые во время компиляции

●●  Хаскелл, детище британских учёных

●●  Измеряем замедление при вызове функций высших порядков

●●  C vs Haskell: сравнение скорости на простом примере

●●  Уникальность имён функций: за и против

●●  Каррирование: для чего и как

●●  О тестах, доказывающих отсутствие ошибок

●  Надёжные программы из ненадёжных компонентов

●●  О многократном резервировании функций

●  Оценка надёжности функции с несколькими реализациями

●  Использование памяти

●  Почему динамическое распределение памяти — это плохо

●  Как обеспечить возврат функциями объектов переменной длины?

●●  Типы переменного размера (dynamically sized types, DST) в языке Rust

●●  Массивы переменной длины в C/C++

●●  Размещение объектов в стеке, традиционный подход

●●  Размещение объектов переменной длины с использованием множества стеков

●●  Размещение объектов переменной длины с использованием двух стеков

●●  Реализация двухстековой модели размещения данных

●●  Двухстековая модель: тесты на скорость

●●  Изменение длины объекта в стеке во время исполнения

●●  Размещение объектов переменной длины с использованием одного стека

●  Можно ли забыть о «куче», если объекты переменной длины хранить в стеке

●  Безопасность и размещение объектов переменной длины в стеке

●  Массивы, структуры, типы, классы переменной длины

●  О хранении данных в стеке, вместо заключения

●  Реализация параметрического полиморфизма

Описание языка

Компилятор

Отечественные разработки

Cтатьи на компьютерные темы

Компьютерный юмор

Новости и прочее




Последние отзывы

2024/11/02 02:09 ••• Иван
Энтузиасты-разработчики компиляторов и их проекты

2024/11/01 12:11 ••• ИванАс
Русской операционной системой должна стать ReactOS

2024/10/28 00:00 ••• alextretyak
Продолжение цикла и выход из него

2024/10/27 21:54 ••• ИванАс
Новости и прочее

2024/10/27 14:01 ••• Автор сайта
О русском ассемблере

2024/10/19 23:12 ••• Автор сайта
Русский язык и программирование

2024/10/25 01:34 ••• Владимир
Оценка надёжности функции с несколькими реализациями

2024/09/29 23:40 ••• Автор сайта
Десятка худших фич C#

2024/09/29 13:10 ••• Автор сайта
ЕС ЭВМ — это измена, трусость и обман?

2024/09/22 21:08 ••• Вежливый Лис
Бесплатный софт в мышеловке

2024/09/05 17:44 ••• Автор сайта
Правила языка: алфавит

2024/09/04 00:00 ••• alextretyak
Циклы

2024/09/02 22:24 ••• Автор сайта
Постфиксные инкремент и декремент