Почему кодом не “управляли” от запуска? [закрытый]

Это добавит все элементы в списке 2 к комбо. Ничего общего с выбранным предметом в этот момент.

Private Sub Command3_Click()
  Dim i As Integer

  Combo1.Clear
  For i = 1 To ListView2.ListItems.Count
    Combo1.AddItem (ListView2.ListItems(i).Text))
  Next i
End Sub 
8
задан Gabriele Petronella 2 November 2013 в 18:04
поделиться

14 ответов

Давайте подумаем об этом из первых принципов.

Управляемая платформа предоставляет относительно изолированную область для запуска программного кода, созданного из языка высокого уровня, в форму, более подходящую для выполнения платформа (байт-коды IL). В нем также есть такие полезные функции, как сборка мусора и загрузка модулей.

Теперь подумайте о собственном приложении - ОС предоставляет относительно изолированную область (процесс) для запуска программного кода, который создается из языка высокого уровня в форму, более подходит для выполнения платформой (коды операций x86). Также есть такие полезные функции, как управление виртуальной памятью и загрузка модулей.

Разницы не так много, я думаю, что причина, по которой мы в первую очередь управляли платформой, заключается просто в том, что она облегчает кодирование платформы. Это должно сделать код переносимым между операционными системами, но MS не заботился об этом. Безопасность - это часть управляемой платформы, но она должна быть частью ОС, например. Ваше управляемое приложение может записывать файлы и тому подобное, как обычный процесс. Ограничение, которое является функцией безопасности, не является аспектом управляемой платформы, которая не существует на native.

В конечном счете, они могли бы поместить все эти управляемые функции в набор native dll и отказаться от идеи промежуточный байт-код, вместо этого JIT-компиляция в нативный код. «Управляемые» функции, такие как GC, легко возможны на собственных кучах - см. Пример Boehm C ++.

Я думаю, что MS сделала это отчасти потому, что это облегчало написание компилятора, и отчасти потому, что именно так была создана Java .NET очень наследник Java, хотя бы по духу), хотя Java сделала это таким образом, чтобы сделать возможным кросс-платформенное кодирование, чего-то не волнует MS.

Итак, почему мы не получили управляемый код с самого начала - потому что все, что вы упоминаете как часть ' управляемый код, являются родным кодом. Сегодня управляемые платформы - это просто дополнительная абстракция поверх уже абстрагированной платформы. В языках высокого уровня добавлено больше функций для защиты от вас, переполнения буфера остались в прошлом, но нет никаких причин, по которым они не могли быть реализованы в C, когда C был впервые изобретен. Просто они не были. Возможно, задним числом кажется, что эти функции отсутствовали, но я уверен, что через 10 лет мы будем спрашивать, «почему C # не реализовал явно полезную функцию XYZ, как у нас сегодня»

что-то, о чем MS не заботится.

Итак, почему мы не получили управляемый код с самого начала - потому что все, что вы упоминаете как часть «управляемого» кода, является нативным кодом. Сегодня управляемые платформы - это просто дополнительная абстракция поверх уже абстрагированной платформы. В языках высокого уровня добавлено больше функций для защиты от вас, переполнения буфера остались в прошлом, но нет никаких причин, по которым они не могли быть реализованы в C, когда C был впервые изобретен. Просто они не были. Возможно, задним числом кажется, что эти функции отсутствовали, но я уверен, что через 10 лет мы будем спрашивать, «почему C # не реализовал явно полезную функцию XYZ, как у нас сегодня»

что-то, о чем MS не заботится.

Итак, почему мы не получили управляемый код с самого начала - потому что все, что вы упоминаете как часть «управляемого» кода, является нативным кодом. Сегодня управляемые платформы - это просто дополнительная абстракция поверх уже абстрагированной платформы. В языках высокого уровня добавлено больше функций для защиты от вас, переполнения буфера остались в прошлом, но нет никаких причин, по которым они не могли быть реализованы в C, когда C был впервые изобретен. Просто они не были. Возможно, задним числом кажется, что эти функции отсутствовали, но я уверен, что через 10 лет мы будем спрашивать, «почему C # не реализовал явно полезную функцию XYZ, как у нас сегодня»

t мы получаем управляемый код с самого начала - потому что все, что вы упоминаете как часть «управляемого» кода, является нативным кодом. Сегодня управляемые платформы - это просто дополнительная абстракция поверх уже абстрагированной платформы. В языках высокого уровня добавлено больше функций для защиты от вас, переполнения буфера остались в прошлом, но нет никаких причин, по которым они не могли быть реализованы в C, когда C был впервые изобретен. Просто они не были. Возможно, задним числом кажется, что эти функции отсутствовали, но я уверен, что через 10 лет мы будем спрашивать, «почему C # не реализовал явно полезную функцию XYZ, как у нас сегодня»

t мы получаем управляемый код с самого начала - потому что все, что вы упоминаете как часть «управляемого» кода, является нативным кодом. Сегодня управляемые платформы - это просто дополнительная абстракция поверх уже абстрагированной платформы. В языках высокого уровня добавлено больше функций для защиты от вас, переполнения буфера остались в прошлом, но нет никаких причин, по которым они не могли быть реализованы в C, когда C был впервые изобретен. Просто они не были. Возможно, задним числом кажется, что эти функции отсутствовали, но я уверен, что через 10 лет мы будем спрашивать, «почему C # не реализовал явно полезную функцию XYZ, как у нас сегодня»

Сегодня управляемые платформы - это просто дополнительная абстракция поверх уже абстрагированной платформы. В языках высокого уровня добавлено больше функций для защиты от вас, переполнения буфера остались в прошлом, но нет никаких причин, по которым они не могли быть реализованы в C, когда C был впервые изобретен. Просто они не были. Возможно, задним числом кажется, что эти функции отсутствовали, но я уверен, что через 10 лет мы будем спрашивать, «почему C # не реализовал явно полезную функцию XYZ, как у нас сегодня»

Сегодня управляемые платформы - это просто дополнительная абстракция поверх уже абстрагированной платформы. В языках высокого уровня добавлено больше функций для защиты от вас, переполнения буфера остались в прошлом, но нет никаких причин, по которым они не могли быть реализованы в C, когда C был впервые изобретен. Просто они не были. Возможно, задним числом кажется, что эти функции отсутствовали, но я уверен, что через 10 лет мы будем спрашивать, «почему C # не реализовал явно полезную функцию XYZ, как у нас сегодня»

были реализованы в C, когда C был впервые изобретен. Просто они не были. Возможно, задним числом кажется, что эти функции отсутствовали, но я уверен, что через 10 лет мы будем спрашивать, «почему C # не реализовал явно полезную функцию XYZ, как у нас сегодня»

были реализованы в C, когда C был впервые изобретен. Просто они не были. Возможно, задним числом кажется, что эти функции отсутствовали, но я уверен, что через 10 лет мы будем спрашивать, «почему C # не реализовал явно полезную функцию XYZ, как у нас сегодня»

6
ответ дан 5 December 2019 в 04:30
поделиться

Я бы сказал, что в значительной степени это было сопротивление изменениям в сочетании с ложным восприятием неэффективности сбора мусора, что задержало принятие GC и связанных с ним методов. Конечно, модель сегментированной памяти с мертвым мозгом на Intel 8086 не помогла продвинуть разумное управление памятью на ПК.

-1
ответ дан 5 December 2019 в 04:30
поделиться

Best answer to this question is, IMHO, nobody had an idea of managed code at that time. Knowledge actually evolves over time. As compared to fields like architecture or agriculture, computer science is a very young field. So the collective knowledge about the field is also young and will evolve over time. Perhaps in a few years we come across some new phenomenon and someone will be asking the same question, "why didn't somebody think of XYZ beofore?".

0
ответ дан 5 December 2019 в 04:30
поделиться

Ответ становится яснее - люди не были созданы для написания программ. Машины должны делать это и позволять нам расслабиться, играя в pacman.

0
ответ дан 5 December 2019 в 04:30
поделиться

Для чего я стою, я прочитал несколько статей для своего класса по вычислительным языкам (одна из них - CAR Hoare, а другая - Николас Вирт), отстаивая, в частности, это в 60-х и 70-х годах.

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

Хоар упоминает идею «компилятора проверки». Насколько я могу судить, это по сути компилятор, который выполняет статический анализ. Для него это был популярный метод, который не удался (или, по крайней мере, не решал столько проблем, сколько предполагалось решить). Его решением было сделать языки программирования более безопасными, создав управляемый код (или, по крайней мере, так он выразился бы в современных терминах).

Я мог бы представить, что, как только C (а затем и C ++) завоевал популярность, Идея управляемого кода была практически мертва. Дело не в том, что Си был плохим языком, просто он должен был быть языком ассемблера, а не языком программирования приложений.

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

Не то чтобы С был плохим языком, просто он был предназначен для ассемблера, а не для языка прикладного программирования.

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

Не то чтобы С был плохим языком, просто он был предназначен для ассемблера, а не для языка прикладного программирования.

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

0
ответ дан 5 December 2019 в 04:30
поделиться

Я думаю, что, как и большинство вопросов: «Почему у нас не было Х в программировании Y лет назад», ответ - это скорость / распределение ресурсов. При ограниченных ресурсах им нужно было управлять как можно более эффективно. Тип управления общего назначения, связанный с управляемым кодом, был бы слишком ресурсоемким, чтобы быть полезным для приложений, критичных к производительности того времени. Это также является частью того, почему сегодняшний критичный к производительности код по-прежнему пишется на C, Fortran или ассемблере.

1
ответ дан 5 December 2019 в 04:30
поделиться

Почему мы просто не строили самолеты и космические корабли сразу, вместо того, чтобы возиться с лошадьми и повозками и всем этим утомительным материалом?

1
ответ дан 5 December 2019 в 04:30
поделиться

Говоря о вашем вопросе о том, почему на компьютерах отсутствуют механизмы защиты на уровне управляемого кода, а не почему виртуальные машины не могут работать на медленном оборудовании (это уже объяснялось в других статьях). Короткий ответ - это так. Процессоры были спроектированы таким образом, чтобы при возникновении плохого кода исключение не повредило систему. Windows, как известно, плохо это обрабатывает, но есть и другие ОС. Unix передает его как сигналы, так что программы завершаются без остановки системы. Действительно, независимо от того, выполняете вы управляемый код или нет, исключение нулевого указателя приведет к тому же самому результату - к завершению программы. Виртуальная память гарантирует, что программы не будут связываться с другим кодом, поэтому все, что они могут сделать, - это навредить себе. Все это не нужно, если вы знаете, что делаете. Если я хочу содержать свою мебель в чистоте, я просто не бросаю на нее еду. Мне не нужно покрывать мой дом пластиком, я просто должен быть осторожен. Если вы неаккуратный кодер, лучшая виртуальная машина в мире не спасет вас, она просто позволит вам запустить небрежный код без шума. Кроме того, перенос кода прост, если вы используете правильную инкапсуляцию. Когда вы хороший программист, управляемый код не очень помогает. Вот почему не все используют его. Это просто вопрос предпочтений, а не лучше / хуже.

Что касается безопасности во время выполнения, компилятор P-кода не может предсказать, чего не может машинный код, и ничего, с чем может справиться интерпретатор управляемого кода. что ОС не может (или не делает) уже. Материнские платы с дополнительными шинами,

3
ответ дан 5 December 2019 в 04:30
поделиться

По той же причине Почему не было поездов 300 лет назад. По той же причине почему не было сотовых телефонов 30 лет назад. По той же причине, по которой у нас до сих пор нет телепортационной машины.

Технология развивается с течением времени, это называется эволюцией.

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

4
ответ дан 5 December 2019 в 04:30
поделиться

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

Первый компьютер, который я использовал, был Sinclair ZX Spectrum в 1982 году. Он имел меньше ОЗУ (16 КБ), чем размер одного шрифта Windows сегодня. И это было относительно недавно, в эпоху домашних компьютеров. До середины 1970-х годов идея иметь компьютер в вашем доме была немыслима.

10
ответ дан 5 December 2019 в 04:30
поделиться

Просто для записи, мы никогда не собирали сборку вручную. Мы вручную собираем код на ассемблере. Теперь, когда все ясно ...

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

Итак, первые автомобили были безопасны при авариях, потому что они были медленными. Первые компьютеры были безопасны, потому что они не были t. В сети.

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

Это упрощение, но я думаю, что оно лежит в основе. Тогда нам это не нужно, потому что компьютеры не были подключены к сети.

7
ответ дан 5 December 2019 в 04:30
поделиться

На самом деле, управляемый код существует очень давно. Рассмотрим:

  • LISP
  • Smalltalk
  • BASIC (оригинальный вариант)

Все предоставленные среды, подобные операционной системе, защищали использование от памяти и других проблем управления ресурсами. И все они были относительными сбоями (BASIC действительно преуспел только тогда, когда были представлены такие функции, как PEEK & POKE, которые позволяли вам связываться с базовой системой).

11
ответ дан 5 December 2019 в 04:30
поделиться

Managed code built in security etc. has been around for a long time.

There just wasn't room for it in the original PC platform and it never got added in later.

The venerable IBM mainframe has has protected addressing, untouchable kernal libraries, role based security etc. etc. since the 70s. Plus all that Assembler code was managed by a sophisticated (for the time) change management system. (Univac, Burroughs etc had something similar.)

Unix had fairly decent security built in from the beginning (and it hasn't changed very much over the years).

So I think this is very much a windows/web space problem.

There has never been a mainframe virus! Most of the financial transactions in the world pass through these systems at some point so its not as if they werent an attractive target.

The internal IBM mail system did host the first 'trojan' though!

18
ответ дан 5 December 2019 в 04:30
поделиться

В 1970 году стоимость памяти была около $ 1 / бит (без инфляции). Вы не можете позволить себе роскошную уборку мусора с такими затратами.

2
ответ дан 5 December 2019 в 04:30
поделиться
Другие вопросы по тегам:

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