Здравствуйте, B0FEE664, Вы писали:
m2l>>Не хочу убеждать, что это прям супер-надо. Но, если ты с таким не сталкивался, сделай скидку на то, что кому-то может быть надо. И категоричные утверждения, что давайте всё напишем на С++ иногда упираются в отсутствие опыта с другими технологическими стеками.
BFE>Меня не надо убеждать — я просто понять хочу. Допустим у нас вообще нет операционной системы. Можно ли без операционной системы сделать запускаемый (статически слинкованый) экзешник на C? Можно, я делал. Можно ли без операционной системы сделать запускаемый экзешник на C++? Такого я не делал — у меня не было такой задачи. Быстрый поиск показывает, что есть операционная система написанная на C++, что, как бы, намекает на. BFE>Я не вижу причин из-за которых невозможно написать приложение на С++, которое бы не нуждалось в операционной системе. Так что такое "run-time языка"?
Вобщем-то написать приложение запускающееся "без всего" это скорее требование к компилятору/линкеру чем к языку. Надо получить на выходе нативный для процессора код, используюший только прерывания БИОС из стороннего, а на чём оно изначально написано какая разница.
Здравствуйте, Pyromancer, Вы писали:
P>Вобщем-то написать приложение запускающееся "без всего" это скорее требование к компилятору/линкеру чем к языку. Надо получить на выходе нативный для процессора код, используюший только прерывания БИОС из стороннего, а на чём оно изначально написано какая разница.
Не совсем, если язык интерпретируемый, то в общем случае так не получится.
Здравствуйте, B0FEE664, Вы писали:
BFE>Именно. Я не понимаю, что ещё такое "run-time языка".
Дополнительный код, добавляемый компилятором для реализации части механизмов языка.
Я понимаю всё запутанность, с учётом, что компилятор вроде-как и генерирует код и какая разница, что он там нагенерировал больше этого кода. Но смысл в том, что обычный код — это только процессор и память. А код рантайма, обычно ещё выполняет взаимодействие с программным окружением. Мне сложно это сформулировать, что бы кто-то не придрался, потому как границы в целом размыты и я менее критичен доцента в плане выбора языков.
m2l>>А почему это надо ответ простой. Когда мы пишем тоже ядро ОС или драйвер для него, или прочие низкоуровневые штуки — то штатный рантайм языка программирования оказывается неработоспособен. Он-то расчитан на работу с операционной системой, а не на то, что программа сама является операционной системой. BFE>Это откуда следует? BFE>У меня такое впечатление, что вы путаете API системы с чем-то ещё. Возьмём, к примеру, функцию fopen — она не будет работать в C если операционная система не имеет файловой системы. Так в чём отличие от C++?
Элементарно. Когда ты, пишешь на С++ и создаешь объект, под него должна быть выделена память, для этого нужен алокатор, алокатор памяти — часть run-time, и чтобы выделить тебе условные 20-байт на объект он сначала дергает API операционной системы, что бы у неё получить эту память. Код драйвера — VirtualAlloc / mmap нету — драйвер не работает. При этом создание объектов — часть языка, "language support library" — по нотации их стандарта С++. В случае Си, тупо нет динамической память, которую должен выделять компилятор (либо он делает это на стеке, либо malloc — которую можно отключить, просто убрав этот заголовочный файл).
Понимаешь? Ты не можешь убрать из С++ создание объектов — это одна из ключевых частей языка. А для их создания нужна "language support library" (тот самый run-time). И его почти нельзя убрать.
m2l>>И второй аспект — рантайм делает скрытую работу, и это усложняет написание кода и не всегда допустимо в принципе. BFE>Это так, но ведь это совсем другой аспект.
Да, но даже не знаю какой из них важней. В конце концов рантайм можно и свой подставить (пусть и проще выбрать другой язык). А факт скрытой работы останется.
m2l>>Где-нибудь в планировщике, дернутом с высоким IRQL, например нельзя делать какие-то вещи (те же исключения создавать) — и программист должен явно понимать, во что будет откомпилирован код. BFE>И что? Например, может для C быть запрещена динамическая аллокация памяти. Можно ли при этом писать программу на C? Можно. И на С++ можно. В чём разница? В исключениях? Ну так их можно не использовать.
В этом-то и разница. В С динамическая алокация памяти — отключаемая фича, её наличие не влияет на язык. В С++ — динамическая аллокация памяти — неотъемлемая часть языка (по стандарту, раздел 21 "Language support library").
m2l>>Не хочу убеждать, что это прям супер-надо. Но, если ты с таким не сталкивался, сделай скидку на то, что кому-то может быть надо. И категоричные утверждения, что давайте всё напишем на С++ иногда упираются в отсутствие опыта с другими технологическими стеками.
BFE>Меня не надо убеждать — я просто понять хочу. Допустим у нас вообще нет операционной системы. Можно ли без операционной системы сделать запускаемый (статически слинкованый) экзешник на C? Можно, я делал. Можно ли без операционной системы сделать запускаемый экзешник на C++? Такого я не делал — у меня не было такой задачи. Быстрый поиск показывает, что есть операционная система написанная на C++, что, как бы, намекает на. BFE>Я не вижу причин из-за которых невозможно написать приложение на С++, которое бы не нуждалось в операционной системе. Так что такое "run-time языка"?
Вспоминая Microsoft с их проектом Singularity — где ОС была написана на C# (не то что рантайм, а целый сборщик мусора) — а смысл писать ОС на С++, если можно на Java, Go или Python?
Я не разделяю критичность доцента. Но, просто нужно знать несколько разных языков и иметь опыт написания приложений на них, что бы такие вопросы не возникали.
Здравствуйте, CreatorCray, Вы писали:
m2l>>Просто потому, что RTTI, new/delete, исключения и т.д. и т.п. — это и есть рантайм. CC>В библиотеках будут только функции-хелперы, и их там будет весьма немного. Существенную часть реализации этих фич будет таки генерировать компилятор.
m2l>>Это буквально часть языка. Всё-таки C++ без new/delete — это не совсем обычный C++? CC>Надо таки заметить что на самом деле в самих имплементациях new/delete кода с гулькин нос — это тупо врапперы над системным аллокатором. CC>А вот частью самого языка будет тот код, который генерит компилятор для вызова конструкторов и десттрукторов. И он не библиотечный а именно что генерируемый по месту.
Я бы отнёс этот код к рантайму языка. Но это сугубо ИМХО.
m2l>>Когда мы пишем тоже ядро ОС или драйвер для него, или прочие низкоуровневые штуки — то штатный рантайм языка программирования оказывается неработоспособен. CC>Да банально берётся заточенный под кернел рантайм. Понятие "штатный" довольно размыто. Есть API+ABI а реализация уже какая захочешь.
Это возможно. Но справедливости ради, в небольших кусочках ОС даже кернет рантайм будет не приемлем и понадобиться асм.
m2l>> Он-то расчитан на работу с операционной системой, а не на то, что программа сама является операционной системой. CC>Это примерно как std, стандартная либа чтоб можно было сразу что то лабать. Хош пользуйся, хош — нет.
Это часть языка по его спецификации (Language support library & etc).
m2l>>И категоричные утверждения, что давайте всё напишем на С++ иногда упираются в отсутствие опыта с другими технологическими стеками. CC>
Здравствуйте, Marty, Вы писали:
M>C++ без new и delete — тот же самый C++. Просто не используются какие-то библиотеки
Так он и без class и template — тот же самый С++. "Просто не используются какие-то библиотеки"
m2l>>Не хочу убеждать, что это прям супер-надо. Но, если ты с таким не сталкивался, сделай скидку на то, что кому-то может быть надо. И категоричные утверждения, что давайте всё напишем на С++ иногда упираются в отсутствие опыта с другими технологическими стеками.
M>Вот тут не понял твою позицию
доцент чрезмерно критичен. ИМХО в С нет уникальных свойств, делающих его незаменимым любым другим языком. Просто, в некоторых задачах он кажется чуть более предпочтительным остальных языков и не более.
Здравствуйте, m2l, Вы писали:
m2l>Понимаешь? Ты не можешь убрать из С++ создание объектов — это одна из ключевых частей языка. А для их создания нужна "language support library" (тот самый run-time). И его почти нельзя убрать.
Хм, интересно, как это я пять лет писал под STM32 на плюсах... Вот если бы ты мне раньше рассказал, то я точно бы на плюсах не смог бы писать, пришлось бы на сишечке мучаться...
А наш загрузчик, который умеет обновлять прошивку по UART/CAN, занимает до 1 кб/2ух (в зависимости от STMки) — тоже на плюсах написан, опять же — по незнанию
Здравствуйте, m2l, Вы писали:
CC>>Это примерно как std, стандартная либа чтоб можно было сразу что то лабать. Хош пользуйся, хош — нет. m2l>Это часть языка по его спецификации (Language support library & etc).
Здравствуйте, m2l, Вы писали:
M>>C++ без new и delete — тот же самый C++. Просто не используются какие-то библиотеки m2l>Так он и без class и template — тот же самый С++. "Просто не используются какие-то библиотеки"
Классы и шаблоны сами по себе не зависят ни от каких библиотек
Здравствуйте, m2l, Вы писали:
m2l>Элементарно. Когда ты, пишешь на С++ и создаешь объект, под него должна быть выделена память, для этого нужен алокатор, алокатор памяти — часть run-time, и чтобы выделить тебе условные 20-байт на объект он сначала дергает API операционной системы, что бы у неё получить эту память. Код драйвера — VirtualAlloc / mmap нету — драйвер не работает. При этом создание объектов — часть языка, "language support library" — по нотации их стандарта С++. В случае Си, тупо нет динамической память, которую должен выделять компилятор (либо он делает это на стеке, либо malloc — которую можно отключить, просто убрав этот заголовочный файл).
Мне кажется ты путаешь создание объектов и выделение памяти в куче.
Эти действия ортогональны. Сконструировать объект ты можешь на любом куске памяти — на стеке или где-то как-то выделенной, неважно какими средствами.
Да, без средств стандартной библиотеки будет некомфортно, но мы без нее столько лет жили и ничего так, программы работали
_____________________
С уважением,
Stanislav V. Zudin
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Мне кажется ты путаешь создание объектов и выделение памяти в куче. SVZ>Эти действия ортогональны. Сконструировать объект ты можешь на любом куске памяти — на стеке или где-то как-то выделенной, неважно какими средствами.
SVZ>Да, без средств стандартной библиотеки будет некомфортно, но мы без нее столько лет жили и ничего так, программы работали
Некоторые товарищи, типа Тёмчика, плюсы не осилили, но мнение имеют
Здравствуйте, Marty, Вы писали:
M>А наш загрузчик, который умеет обновлять прошивку по UART/CAN, занимает до 1 кб/2ух (в зависимости от STMки) — тоже на плюсах написан, опять же — по незнанию
Здравствуйте, m2l, Вы писали:
M>>А наш загрузчик, который умеет обновлять прошивку по UART/CAN, занимает до 1 кб/2ух (в зависимости от STMки) — тоже на плюсах написан, опять же — по незнанию
m2l>Слово почти такое незаметное?
Это ты о чем? В твоей простыне вроде его не было, но если и было — то да, оно такое незаметное
Здравствуйте, Marty, Вы писали:
M>Классы и шаблоны сами по себе не зависят ни от каких библиотек
new и delete сами по себе не зависят ни от каких библиотек
Ты о чём хочешь поспорить со мной сразу в трех ветках?
Здравствуйте, m2l, Вы писали:
M>>Классы и шаблоны сами по себе не зависят ни от каких библиотек m2l>new и delete сами по себе не зависят ни от каких библиотек
m2l>Потому что ты не совсем понимаешь, что такое run-time языка. В твоём примере на С++ мы получим файл со статически слинкованым рантаймом. Просто потому, что RTTI, new/delete, исключения и т.д. и т.п. — это и есть рантайм. Это буквально часть языка. Всё-таки C++ без new/delete — это не совсем обычный C++?
m2l>Ты о чём хочешь поспорить со мной сразу в трех ветках?
Здравствуйте, Stanislav V. Zudin, Вы писали:
SVZ>Мне кажется ты путаешь создание объектов и выделение памяти в куче. SVZ>Эти действия ортогональны. Сконструировать объект ты можешь на любом куске памяти — на стеке или где-то как-то выделенной, неважно какими средствами.
Нет, я имею ввиду именно создание объектов в куче. И я хорошо понимаю, что для class-name var-name компилятор постарается выделить место в стеке (и ты же помнишь, что это возможно не для всех классов?). Но, С++ в котором есть только классы создаваемые на стеке — это весьма своеобразный огрызок. Элементарные list, string, regexp, exception — это всё исчезает. И получается подмножество от С++, причем с явным креном аккурат в общую часть С и С++. Теже new/delete — часть языка. Да можно и без них. Но какой тогда вообще смысл в С++?
SVZ>Да, без средств стандартной библиотеки будет некомфортно, но мы без нее столько лет жили и ничего так, программы работали
Я не из мгу и мне пофиг. Я лишь попытался объяснить что такое рантайм в С++ и зачем он нужен. Если не прав — поправляй это.
Здравствуйте, Marty, Вы писали:
m2l>>Ты о чём хочешь поспорить со мной сразу в трех ветках?
M>Спорить о профнепригодности с профнепригодным?
Ничего страшного, это пройдёт
Я отвечаю на вопрос B0FEE664 "что такое run-time языка" и какие ограничения могут возникать из-за этого рантайма.
А ты не отвечаешь ни на чей вопрос, а навешиваешь ярлыки и пытаешься оскорбить.
У нас форум вроде чтобы помогать друг друга, а не самоутверждаться? Ну так помоги B0FEE664 разобраться с тем, что такое run-time языка — или не мешайся другим.
Здравствуйте, Marty, Вы писали:
m2l>>Слово почти такое незаметное?
M>Это ты о чем? В твоей простыне вроде его не было, но если и было — то да, оно такое незаметное
Понимаешь? Ты не можешь убрать из С++ создание объектов — это одна из ключевых частей языка. А для их создания нужна "language support library" (тот самый run-time). И его почти нельзя убрать.
Выделил жирным.
Слушай, а как же ты стандарт С++ читал, если четыре предложения не осилил? Или твой уровень знаний С++ не предполагает чтение его стандарта? Типа коллега научил писать "int main" я и пишу?
Здравствуйте, Marty, Вы писали:
M>Здравствуйте, m2l, Вы писали:
m2l>>Понимаешь? Ты не можешь убрать из С++ создание объектов — это одна из ключевых частей языка. А для их создания нужна "language support library" (тот самый run-time). И его почти нельзя убрать.
M>Хм, интересно, как это я пять лет писал под STM32 на плюсах...
Очевидно, ты линковался с минимальным рантаймом под STM32 который был написано не тобой.
Здравствуйте, m2l, Вы писали:
m2l>Я бы отнёс этот код к рантайму языка.
Его нет в runtime library языка, это код, который компилятор генерит для конструкций языка.
m2l>Но справедливости ради, в небольших кусочках ОС даже кернет рантайм будет не приемлем и понадобиться асм.
Asm надо только там, где нельзя логику выразить средствами языка, например RDMSR. И то в нынешнее время с добавлением интринсиков даже асм стал не нужен.
m2l>Это часть языка по его спецификации
Нет. Всё то, что можно написать на этом же языке, не является частью языка.
m2l>Тебя смутило слово "иногда"?
Меня смутило отстуствие слова "иногда" перед словом "категоричные".
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, m2l, Вы писали:
M>>Классы и шаблоны сами по себе не зависят ни от каких библиотек m2l>new и delete сами по себе не зависят ни от каких библиотек
Таки надо имплементация определённых функций. Их конечно можно прямо у себя и написать, но всё же.
Тогда как классам и шаблонам не надо вообще ничего со стороны.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока