1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|||||||||||
1 | |||||||||||
Assembler или C++09.06.2013, 22:05. Показов 14387. Ответов 31
Метки нет (Все метки)
Вечер добрый.
Подскажите, завязался тут такой "спор". В блоге, программист из Латвии, который пишет свою ОС, привёл два примера работы на C/C++ и Assembler: The C function:
Но некоторые программисты пишут, что нужно на assembler. Так как быть и на чём начать писать и в какой стороне двигаться -- С++ или Assembler, для ядра, хотя бы.
0
|
09.06.2013, 22:05 | |
Ответы с готовыми решениями:
31
Что быстрее assembler или c++ Assembler & Delphi (или С) Ошибка в Assembler или, возможно, DOS/ |
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
|
|
09.06.2013, 23:16 | 2 |
Это смотря на каком уровне вы владеете этими языками. Ядро бы я лично писал бы на асме.
Добавлено через 29 секунд а модули, на чистом С. Без ++)
0
|
6 / 6 / 2
Регистрация: 21.05.2013
Сообщений: 47
|
|
10.06.2013, 00:08 | 3 |
YYwww,
Не по теме: зачем изобретать велосипед? я за асм (для ядра), он всё таки побыстрее будет
0
|
840 / 478 / 58
Регистрация: 18.09.2012
Сообщений: 1,688
|
|
10.06.2013, 00:11 | 4 |
IronnMann, это как написать)) можно и на asm завернуть.
0
|
10.06.2013, 08:45 | 6 | ||||||||||||||||||||||||||||||
Примеры демонстрируют совершенно разные вещи - пример на Си показывает функцию, а на асме - вызов этой функции. В связи с этим вопрос - в чем собственно вопрос?
Добавлено через 1 минуту Если имеется ввиду ядро ОС, то тот же линух на Си написан. Там есть ассемблер, но его ничтожно мало по сравнению с объемом Си кода. Добавлено через 2 минуты
Добавлено через 12 минут Вот проверил в MinGW. Из такого кода
Для тех, кто ничего не понял, поясню, компилятор сделал такой код
2
|
Ушел с форума
|
|
10.06.2013, 11:24 | 7 |
Сообщение было отмечено как решение
Решение
* Ассемблер жестко привязан к платформе.
Написав программу под одну платформу, вы делаете ее почти непортируемой на другие. Даже между "родственными" платформами, такими как, например, IA-32 и AMD64, существует много принципиальных различий - разные размеры указателей, разные наборы регистров, разные соглашения о передаче параметров и т.д. Это значит, что для поддержки 32-битной и 64-битной версий программы придется иметь две кодовые базы. С++ эта проблема тоже затрагивает, но не в такой степени, и многие программы, написанные на C++, могут быть успешно портированы на другие платформы простой перекомпиляцией кода. * Ассемблер практически не развивается как отдельный язык и лишен библиотечной поддержки. Сталкиваясь с некоторыми, пусть даже и типовыми задачами, вам с большой вероятностью придется писать свое решение с нуля, а это может оказаться очень и очень затратным. Для С++, напротив, имеется огромное количество библиотек на все случаи жизни, используя которые, вы экономите значительное количество времени и сил. * Ассемблер, по своей натуре, имеет очень слабую поддержку языка в плане обеспечения корректности и безопасности кода. Фактически, все что есть - это макросы, да и то не везде. Все остальное необходимо будет изобретать самому. С++, в противовес, имеет встроенные языковые средства, с помощью которых можно контролировать надежность кода и обеспечивать различные гарантии. * Вопреки распостраненному мнению, использование ассемблера в 99% не сделает вашу программу быстрее. Современные компиляторы достаточно умны и умеют оптимизировать код значительно лучше человека, не говоря уже о том, что делают они это намного быстрее и точнее. Некоторые компиляторы, такие как Intel C++ Compiler, умеют оптимизировать код под конкретную модель процессора, существует также двухпроходная оптимизация (Profile-Guided Optimization), рассчитанная на сбор информации о конкретных сценариях использования программы и улучшения по максимуму критических участков кода, а еще масса различных инструментов профилирования и т.п., доступных только для C, C++ и других языков высокого уровня. Все это говорит отнюдь не в пользу ассемблера. И многим программистам, деятельность которых сводится к сборке программ из готовых библиотечных компонентов, от знания ассемблера ни жарко, ни холодно. С другой стороны, в некоторых прикладных областях знание ассемблера не просто прихоть, а жизненно важная необходимость, я могу сходу назвать, как минимум, три такие области: системное программирование, обработка цифровых сигналов, встраиваемые системы. Также существует мнение, что школу ассемблера, или другого низкоуровневого языка, в любом случае нужно пройти. Человек, который это сделал, лучше понимает происходящее "за кадром", да и вообще ему потом "сам черт не страшен". Я с этим полностью согласен.
7
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
10.06.2013, 12:06 [ТС] | 8 |
Я совершенствую знания С++, думаю, что от С++ до С не такая большая пропасть, как С++ и Pascal, например.
Assembler я ещё не знаю, но эту проблему легко решить, так как всё равно придётся его учить. Университет. Просто я читаю статьи кто и как что пишет, но кто-то пишет, что "если написать ОС полностью на Ass, то это просто чудо! Пример тому ОС Minuet". Если я не ошибаюсь, то там приводили пример почему Ass лучше C ядра\ОС, т.е., ошибок компиляции или что-то там, не буду врать, не внимательно прочитал и не углублялся в вопрос разницы. Вот, получается, мне нужен вопрос "разницы", что лучше, как лучше, где лучше, на чём лучше? IronnMann, Не по теме: затем, что нужна особая ОС для специальных нужд, не думаю, что коммерческого плана, распространения на десятки-сотни-тысячи-миллионы компов -- только для одной программы, только для 1 компьютера. Ну и для практики, разве нет? :) Вопрос именно в этом -- длина кода, как написал в той блоге программист, его не то чтобы поразила, а даже удивила. И ведь для простой такой строчки на С, как много надо на Asm, да? Так вот и вопрос -- при каком языке работа ОС будет наилучшим образом быстрее. Даже не зависимо от длины кода. ВНИМАНИЕ: при условии, что это не будет ОС похожа на семейство Unix или iOS, это будет вообще минимализированная "вещь", даже ОС то трудно назвать, которая будет использовать всё устройство компа и несколько программ. Думаю, даже антивируса не будет в этой ОС как программы-приложения или вообще программы. Минимализм, товарищи, это всё минимализм Убежденный, Вы привели хорошие доводы в пользу С\С++, однако: Вот и всё. Даже не нужно "хранение файлов, картинок, музыки", даже музыку (звуковую карту) не особо нужно.
0
|
Ушел с форума
|
|
10.06.2013, 12:23 | 9 |
При решении чисто практических задач на ассемблере Вы сильно потеряете в скорости.
Я уже писал выше - работа программиста часто сводится к тому, чтобы разбить задачу на типовые моменты, найти для них готовые библиотечные компоненты и собрать это все в единую работающую систему. Для C++ таких библиотек навалом, для ассемблера - нет. Поэтому пока ассемблерщик будет с головой погружен в раскапывание спецификаций, изобретение своих велосипедов, в кропотливую наладку и поиск ошибок, его коллеги ускачут далеко вперед и займутся новыми интересными делами. Нет, ну если мы рассматриваем такие экзотические области, как написание своей операционки или программирование своего спутника для отправки на орбиту Юпитера, то я с Вами согласен - надо, надо использовать ассемблер
1
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
10.06.2013, 16:17 [ТС] | 10 |
Убежденный, вот смотрите что будет:
Мне нужно реализовать программу. Эта программа для конкретной задачи. Она, программа, будет обрабатывать данные, выдавать результаты, практически даже не думать. Хотя и "мыслительную" часть процесса планирую сделать. Эту программу я пишу на С++, так как его пока что я знаю, дабы время не терять. (Возможно, параллельно) Я хочу написать для это конкретной программы ОС, которая бы использовала "потенциальные возможности" программы в полную мощь. Т.е., обработка данных, работа с файлом\файлами, анализ, поиск и тд и тп - всё в пределах одной конкретой задачи, которая может быть разбита на несколько модулей\подзадач. И вот вопрос был связан с этим: на каком языке мне лучше писать ОС, вообще, как бы ОС с нуля нулевого, т.к., эта ОС для конкретной задачи и она должна работать в основном с конкретной задачей, даже не отвлекаясь на что-либо постороннее. Т.е., взять к примеру Wimdows - рабочий стол загрузи, файловую систему загрузи, антивирус на целое ядро, чтобы систему не грузил, какие-то виджеты, время, календарик, какая-нибудь внутренняя проверка, ещё что-ниубдь, брендмауэр -- это всё, почти всё, конечно, можно отключить, но даже из-за графического интерфейса и большой загруженности в ОС других библиотек, скорость передачи и обработки данных немного ниже, я считаю. Поэтому, я хочу реализовать свою ОС, которая минимально использует "ресурсы", у которой даже календаря не будет, не говоря уже о файловой систему, максимум часы. И она будет под определённую программу. Т.е., ОС-программа. И вот тут, мне бы хотелось уточнить: на каком языке лучше начать писать это всё, чтобы получить максимально эффективную работу процессора, скорости обработки информации и тд и тп. И даже если это будет ассемблер, то в дальнейшем, я не против переписать с С++ на ассемблер программу, которая бы идеально подходила к уже имеющейся ОС (и, в следствии чего, немного переделать ОС). Вот такие вот дела.
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
10.06.2013, 17:11 | 11 |
Гвоздь забить можно камнем, молотком и кувалдой. Чем именно выбирать Вам.
Если интерпретировать это на Asm/C/C++. То так: 1. Асм нужно использовать там где надо (для этого и придумали ассемблерные вставки), так как писать крупный проект на асме радости Вам не доставит. 2. Си и С++ стоит использовать с умом. Некоторые вещи вам нужно будет написать на чистом Си, чтобы соблюсти определенную переносимость (POD типы, соглашение вызовов и т.д.). Но в целом использовать С++, чтобы не велосипедить, а решать поставленную задачу. Есть такое выражение: "Чрезмерная оптимизация вредна". Напишите это на С++, добейтесь стабильной работы, а потом оптимизируйте узкие участки на Си и/или Асме.
2
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
10.06.2013, 17:27 [ТС] | 12 |
Т.е., определённой разницы один и тот же код, который выполняет (допустим) 5+2= ??? - хоть на С, С++ или ASM разницы никакой? (ну, кроме кол-ва строк).
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
10.06.2013, 17:32 | 13 |
Все более или менее "нормальные" компиляторы смогут оптимизировать код, даже о таком о котором вы и бы не подумали оптимизировать. Но читаемость, а значит в дальнейшем и поддержка, лучше на с/с++, чем на асме.
1
|
10.06.2013, 17:43 | 14 |
Не по теме: Если программиста удивляет, что один и тот же код на ассемблере занимает больше строк, чем на Си, то скорее всего это и не программист вовсе :D Так в твоем первом посте на Си показана функция, а на асме только ее вызов и очистка стека, т.е. самой функции нет. На сколько я понял ты взял этот код из блога какого-то "программиста", который даже не смог разобраться какой ассемблерный код (идентичный сишному) нужно вставить в свой блог. Исходя из всего этого могу сказать, что не нужно читать блог этого "программиста из Латвии":) Добавлено через 4 минуты Если 5 и 2 это константы времени компиляции, то сишный компилятор просто стразу посчитает 5+2=7 и вставит ответ в код. А если 5 и 2, например, вводятся с клавиатуры, то разницы нет. Хотя правильней написать, что есть (например переменные будут расположены на стеке, т.е. лишнее время на чтение/запись), НО когда в дело влезет оптимизатор, то он вполне может расположить эти переменные на регистрах, поэтому можно сказать, что разницы нет.
1
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
10.06.2013, 19:22 [ТС] | 15 |
stima, получается, ОС на С++ из ваших выводов? (А то чувствую, что всё про программу говорим, которую и так на С++ собираюсь писать, т.к. ASM ещё не знаю).
Kastaneda, Не по теме: Верю, тот программист решил полностью на С++, вроде бы, писать свою ОС и она будет там что-то коммерческой. Может быть, это я сам зря на программиста наговарию, он не испугался и не удивился, просто привл несколько вариантов, сколько строчек на С и ассемблере и говорит "мол, вот так вот, мол". Ну раз так, то так.
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
10.06.2013, 19:30 | 16 |
2YYwww Вы вообще загрузчик писать будете? Или уже Grab использовать? Ну кернел все равно Вам придется писать на Си, а что-то более высокоуровневое можно и на С++.
0
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
10.06.2013, 21:23 [ТС] | 17 |
stima,
Ядро хочу своё написать. Для теории и практики, так сказать. Т.е., теоретическая часть, в виде "Таненбаум Современные Операционные Системы" и иже с ним -- это я тоже буду изучать. Причём детально и глобально.
0
|
503 / 352 / 94
Регистрация: 22.03.2011
Сообщений: 1,112
|
|
10.06.2013, 21:51 | 18 |
Удачи, многие начинали)) не многие закончили.
0
|
1 / 1 / 0
Регистрация: 06.06.2013
Сообщений: 67
|
|
10.06.2013, 22:47 [ТС] | 20 |
stima, спасибо, надеюсь, ОС-подобное существо появиться, года так через 3-4. Это дело бросать не хочу, чисто из наглости.
Kastaneda, не совсем понял вопрос. Простите, я ещё нахожусь на стадии "планирование и сбор информации по ОС" и не на всё могу ответить.
0
|
10.06.2013, 22:47 | |
10.06.2013, 22:47 | |
Помогаю со студенческими работами здесь
20
Можно ли по названию платы,или по чипу,или по соккету,определить,поддерживает плата ХР или нет? Intel или AMD? R9-290 GAMING 4G или N780 или SLI? Комп за овер 50к Перевод байтов, или килобайт, или мегабайт, или гигабайт другие единицы измерения Получить из строки всё до пробела или запятой или точки или восклицательного знака Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |