C++ и статическая типизация это прошлый век
Отщеплен от топика Функции с переменным количеством параметров
Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.
ты уж определись)
Я тоже считаю, что ассемблер знать полезно (ради понимания того, как все работает на этом уровне). но писать на нем что-то серьезное — только ради фана.
C
изначально задумывался, как обертка на ассемблером, упрощающая жизнь разработчикам.А занимать оптимизацией машинного кода под различные архитектуры — дело тех, кто разрабатывает компиляторы.
Я не утверждаю, что всё нужно писать на asm. Я говорю, что ещё есть много областей применения этого языка( вирусы то на чём писать? :) ), так что сказать, что он умер — ничего не сказать.
Кстати, MenuetOS написана полностью на asm( fasm ), вроде везде работает.
Болтавня ничего не стоит. Покажите нам код. (с)
И этот код( который на асме был) не просто обращается к программе в каком-то участке памяти, эта программа меняет свой код прямо «на лету»(
nop
— пустой оператор, его код — 90h, таким образом затирается выход из программы, в результате сообщение показывается. Ещё этот приём используется как заламывание рук отладчикам ).Ну иногда у твоей программы должна быть защита от взлома, особенно это важно в больших проектах. Здесь нехило может помочь ассемблер.
мы говорили про реальные оси, которые кем-то используются и развиваются.
MenuetOS ~ поделка студента, не имеющая никакого отношения к unix-подобным системам. и написана, как верно подметил selevit — ради «фана».
разве я говорил, что он умер?)
ну я знаю, что не относится к
UNIX
, я просто привёл пример ОС, которая написана на асме и работает на разных архитектурах.нет, это гипотеза, которую выдвинули вы, так что доказывайте. :)
Самые «хорошие» вирусы можно написать только на языках низкого уровня, опять же по причинам того, что они лёгкие и максимально быстрые.
Mayday, ты вообще откуда взялся? :)
на каких разных архитектурах она работает? поддерживается только x86 и все.
нет, это аксиома, которую ты пытаешься оспорить.
C
позволяет осуществлять произвольный доступ к памяти, работать напрямую с устройствам ввода/вывода и периферией, оперировать регистрами процессора.Для тонких оптимизаций (именно оптимизаций) по конкретную архитектуру можно использовать вставки ассемблерного кода. тем не менее, реализация любого функционала возможна на чистом C.
более того, в C есть человеческие конструкции, которые позволяют реализовывать циклы, ветвления без заебов с метками. Кашу из
jmp
-ов в более-менее серьезных проектах поддерживать — это ад.вообще смешное утверждение. т.е. по твоему, самый хороший вирус — который ничего не делает? легкий же.
Mayday это я, просто буквой ошибся в нике.
Вы всячески пытались доказать, что ассемблер больше нигде не нужен.
Именно, что только к памяти, но чтобы начать выполнять программу именно с этого участка... Да и программа не о произвольном доступе к памяти, а о изменении своего кода во время выполнения, хотя и выполнение кода, находящегося где-то далеко далеко в памяти, в ассемблере тоже возможна, не спорю, что это возможно и в
C
, но гораздо труднее и медленнее.Ну раз это аксиома, то приведите пример(код). Да и откуда вообще эта аксиома?
Причём здесь каша из
jmp
'ов?Нет, но всё же вирус должен быть лёгким и быстрым, а никакой компилятор не сделает вам такой код. Если вирус должен выполнять одни и те же функции, то вирус, написанный прямыми руками на ассемблере, явно выигрывает перед вирусом написанным тем же человеком на С.
я не пытался доказать, что он не нужен. Нужен он разработчикам компиляторов, чтобы транслировать более высокоуровневый код в машинные команды.
голословное утверждение.
потому что в ассемблере нет циклов и ветвлений, а есть переходы по меткам, через которые все это и реализуется.
Почему он выиграет?) И чем в данной ситуации вирус отличается от любой другой программы?
в общем, я не вижу смысла объяснять что-то человеку, который слепо пытается обосновать свою абсурдную точку зрения, не воспринимая никак очевидную аргументацию оппонента.
Так же вы пытались доказать, что на этом область применения ассемблера заканчивается, я же пытаюсь доказать, что это не так.
Мне показалось, или мы говорим не о циклах в С и асм, а совсем о другом, так что ваша тирада, о «Каше из jmp-ов» здесь «ни к селу, ни к городу».
Тем, что в вирусах требуется максимальная скорость и минимальный размер, а для создания кода, удволетворяющего этим критериям, идеально подходит язык ассемблера.
Мне кажется, что я приводил примеры, возможно, некоторые из них не совсем удачные, признаю.
Ещё мне на секунду показалось, что вы согласились с тем, что никакой суперсовременный компилятор не сможет создать оптимальный код. Только потому что никакой компилятор никогда не знает намерений программиста.( по-моему, пример кода мигания светодиода это прекрасно доказал, или нет? )
Просто проигнорирую это.
Вы так ни разу и не привели доказательства вашей гипотезы :с ( именно гипотезы, но никак ни аксиомы, в крайнем случае — теоремы ) А вот «Всё, что написано на языке высокого уровня, можно написать на языке низкого уровня» — вот это теорема, которая легко доказывается, возможно, это даже аксиома.
P.S.: тем не менее, я нашёл точку соприкосновения моего «абсурдного» мнения с вашим:
Примерно тоже самое я имел ввиду, когда писал про «большие проекты, где нехило может помочь ассемблер», только я привёл пример защиты от взлома.
не имею больше желания продолжать дискуссию, ввиду того, что моя оппонент идиот.
последнее, что интересует:
Кем требуется? Для чего?
Колоссально! Ни как не ожидал такой эффект от собственного поста %-О
Мой пост был откровенно провокационным... не не до такой же степени! :-)
Отвечая porshe, я бы сказал, что C и C++ обременены пережитками прошлого. И если от pure-C ждать особо нечего, то C++ — язык с ООП-амбициями и в его развитии я бы ожидал переход к полной объектной модели. Но тренд идет явно не в эту сторону. Похоже, что пару стандартов спустя, С++ превратится в монстра, понимать которого будут только создатели компиляторов.
Будущее за c# и Java? Не думаю. По крайней мере, пока байт-код не будет обрабатываться на аппаратном уровне. Пока существует прокладка в виде виртуальной машины, байт-код будет проигрывать по производительности машинному коду. Надеюсь вы с этим спорить не будете? Хотя, конечно, есть соображения кроссплатформенности, скорости разработки и пр.
Ассемблер. «Слухи о моей смерти несколько преувеличены» (с) Марк Твен.
Скорее всего в ближайшем будущем баланс использования языков программирования сохранится в нынешнем виде.
Прочитав бурную дискуссию, я бы сказал, что для каждой задачи надо выбирать подходящий инструмент. Для чего-то оптимальным будет С, для чего-то — ассемблер, а для чего-то Java.
Ведь ни кто в здравом уме не будет рассматривать ассемблер в качестве языка для клиентского веб-скрипта.
А на счёт ассемблера... вспомнились пара случаев из практики.
Попал я работать в одну контору, где использовалась ОС, в которой из языков, кроме ассемблера, не было ничего (по крайней мере в той конфигурации оси, которая была у меня). Пришлось кодить на ассемблере (благо знал!). И достаточно сложные программы.
Случай второй. В вышеупомянутой оси не было возможности запустить программу на исполнение из произвольного каталога. Только из системного. Пришлось написать программу RUN. Эта программа копировала кусок себя в верхние адреса памяти, передавала управление на этот кусок, а он, в свою очередь, загружал в память другую программу из указанного каталога и передавал не неё управление. Такое можно написать на С? Лично я — сомневаюсь.
Отвечая Фтьiкай, я бы сказал, что лично для меня было бы здорово, если бы для Ruby (или Perl) существовал бы не только интерпретатор, но и нормальный (!) компилятор. Perl — моя старая любовь, а Ruby, я считаю, — достойный наследник perl-5. (Есть ещё, правда, perl-6, но, мне кажется, до его релиза я не доживу. Да и не всё в нём мне нравится.)
Кстати, в perl-5 количество и тип фактических параметров не контролируется. Функция должна сама позаботиться от расшифровке своих параметров. Однако ООП в perl-5 — в зачаточном состоянии ((
Интерпретатор — это, конечно, здорово. Но хотелось бы (а) увеличить скорость работы программ и (б) копировать с компа на комп 1 exe-шник своей программы, а не устанавливать среду исполнения целиком, вместе с библиотеками и дополнительными модулями, плюс свой ма-а-аленький скриптик.
Когда байт-код будет обрабатываться на аппаратном уровне, он уже перестанет быть байт-кодом, а превратится в чистый машинный код. Кстати, а почему не альтернатива? Но это вопрос уже к Intel и сотоварищи ))
Внимательно слежу за диалогом с самого начала. Имею сожаление, что на Timus-e не доступен язык Ассемблера. В противном случае, вместо того чтобы разбрасываться словами
Maydan (она же Mayday) смогла бы показать насколько могут быть эффективны программы на С перед Ассемблером :))) and vice versa.
Но суть в другом...
Здесь на форуме была дискуссия о том какая ОС лучше Windows или Linux (Cranium, selevit & porshe в курсе о чем я). Так вот, тема языков программирования сродни той дискуссии, один хвалит одно, а другой другое и не видно конца и края. А включить свой «серый процессор» и принять (или понять) то, что каждый из языков создавался под какие-то свои нужды и легко (но не при помощи «супер грамотных» компиляторов), а в руках грамотного программиста может быть использован в любой области программирования, я смотрю даже самых быстрых битовых операций не хватает:)))
В конечном то результате, если у кого-то из Вас получится написать программу «искусственного интеллекта» на С, С++ или Ассемблере, а может быть всех вместе да еще с РНР и JavaScript в придачу, вот где будет «бомба» (it was joke about artificial intellect but maybe they will unite their efforts and do it after all that :))))
Ребята, «кодите», изучайте новые для Вас языки программирования, не ссорьтесь и не забывайте, что именно в этом случае Вы, может быть, изобретете что-нибудь лучшее чем С или Ассемблер и объединив усилия сделаете прорыв в программировании, в чем искренне, всем нам, желаю удачи.
P.S. Кстати, двумя днями ранее я начал читать книгу Кнута «Искусство программирования» 1-й том. Сейчас в голове одна мысль бросить все к чертовой матери.:(((
Звучит как новая «Разминка для мозгов» :).
Нет, porshe, это не новая «разминка для мозгов». Не знаю, как для linux, а для Винды такое написать не получится. Если только для голого MS-DOS в виде com-файла.
Кнут велик... и очень тяжёл. На столько велик и тяжёл, что даже сам не может дописать свою книгу ))
К своему стыду, я так и не смог целиком осилить «Искусство программирования». Читается очень тяжело. И выглядит очень теоретически: многие вещи сложно привязываются к реальным условиям и языкам программирования. Хотя, конечно, классику читать полезно.
Тоже недавно начал, дошёл только до Математической индукции, на дальше меня не хватило :с