C++ и статическая типизация это прошлый век

Сможешь ...

Как вы думаете ...

ты уж определись)

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

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

А занимать оптимизацией машинного кода под различные архитектуры — дело тех, кто разрабатывает компиляторы.

Я не утверждаю, что всё нужно писать на asm. Я говорю, что ещё есть много областей применения этого языка( вирусы то на чём писать? :) ), так что сказать, что он умер — ничего не сказать.

Кстати, MenuetOS написана полностью на asm( fasm ), вроде везде работает.

да, в C мы можем обратиться к любой области памяти и выполнить код оттуда, если ОС позволит это сделать

Болтавня ничего не стоит. Покажите нам код. (с)

И этот код( который на асме был) не просто обращается к программе в каком-то участке памяти, эта программа меняет свой код прямо «на лету»( nop — пустой оператор, его код — 90h, таким образом затирается выход из программы, в результате сообщение показывается. Ещё этот приём используется как заламывание рук отладчикам ).

в реальных проектах подобных неявных вещей должно быть минимум

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

мы говорили про реальные оси, которые кем-то используются и развиваются.

MenuetOS ~ поделка студента, не имеющая никакого отношения к unix-подобным системам. и написана, как верно подметил selevit — ради «фана».

Болтавня ничего не стоит. Покажите нам код. (с)
не вижу смысла доказывать тебе очевидное. еще раз говорю, все, что можно реализовать на ассемблере — можно реализовать и на C. это аксиома.

эта программа меняет свой код прямо «на лету»(
Это называется полиморфной программой. И насчет вирусов, опять же, причем здесь ассемблер?
http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%BB%D0%B8%D0%BC%D0%BE%D1%80%D1%84%D0%B8%D0%B7%D0%BC_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%B2%D0%B8%D1%80%D1%83%D1%81%D0%BE%D0%B2

так что сказать, что он умер — ничего не сказать.

разве я говорил, что он умер?)

MenuetOS ~ поделка студента, не имеющая никакого отношения к unix-подобным системам. и написана, как верно подметил selevit — ради «фана».

ну я знаю, что не относится к UNIX, я просто привёл пример ОС, которая написана на асме и работает на разных архитектурах.

это аксиома

нет, это гипотеза, которую выдвинули вы, так что доказывайте. :)

И насчет вирусов, опять же, причем здесь ассемблер?

Самые «хорошие» вирусы можно написать только на языках низкого уровня, опять же по причинам того, что они лёгкие и максимально быстрые.

Mayday, ты вообще откуда взялся? :)

я просто привёл пример ОС, которая написана на асме и работает на разных архитектурах.

на каких разных архитектурах она работает? поддерживается только x86 и все.

нет, это гипотеза, которую выдвинули вы, так что доказывайте. :)

нет, это аксиома, которую ты пытаешься оспорить.
C позволяет осуществлять произвольный доступ к памяти, работать напрямую с устройствам ввода/вывода и периферией, оперировать регистрами процессора.
Для тонких оптимизаций (именно оптимизаций) по конкретную архитектуру можно использовать вставки ассемблерного кода. тем не менее, реализация любого функционала возможна на чистом C.
более того, в C есть человеческие конструкции, которые позволяют реализовывать циклы, ветвления без заебов с метками. Кашу из jmp-ов в более-менее серьезных проектах поддерживать — это ад.

Самые «хорошие» вирусы можно написать только на языках низкого уровня, опять же по причинам того, что они лёгкие и максимально быстрые.

вообще смешное утверждение. т.е. по твоему, самый хороший вирус — который ничего не делает? легкий же.

Mayday это я, просто буквой ошибся в нике.

разве я говорил, что он умер?)

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

C позволяет осуществлять произвольный доступ к памяти

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

нет, это аксиома, которую ты пытаешься оспорить.

Ну раз это аксиома, то приведите пример(код). Да и откуда вообще эта аксиома?

более того, в C есть человеческие конструкции, которые позволяют реализовывать циклы, ветвления без заебов с метками. Кашу из jmp-ов в более-менее серьезных проектах поддерживать — это ад.

Причём здесь каша из jmp'ов?

вообще смешное утверждение. т.е. по твоему, самый хороший вирус — который ничего не делает? легкий же.

Нет, но всё же вирус должен быть лёгким и быстрым, а никакой компилятор не сделает вам такой код. Если вирус должен выполнять одни и те же функции, то вирус, написанный прямыми руками на ассемблере, явно выигрывает перед вирусом написанным тем же человеком на С.

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

я не пытался доказать, что он не нужен. Нужен он разработчикам компиляторов, чтобы транслировать более высокоуровневый код в машинные команды.

не спорю, что это возможно и в 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-шник своей программы, а не устанавливать среду исполнения целиком, вместе с библиотеками и дополнительными модулями, плюс свой ма-а-аленький скриптик.

Будущее за c# и Java? Не думаю. По крайней мере, пока байт-код не будет обрабатываться на аппаратном уровне.

Когда байт-код будет обрабатываться на аппаратном уровне, он уже перестанет быть байт-кодом, а превратится в чистый машинный код. Кстати, а почему не альтернатива? Но это вопрос уже к 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-файла.

Кнут велик... и очень тяжёл. На столько велик и тяжёл, что даже сам не может дописать свою книгу ))

К своему стыду, я так и не смог целиком осилить «Искусство программирования». Читается очень тяжело. И выглядит очень теоретически: многие вещи сложно привязываются к реальным условиям и языкам программирования. Хотя, конечно, классику читать полезно.

я начал читать книгу Кнута «Искусство программирования» 1-й

Тоже недавно начал, дошёл только до Математической индукции, на дальше меня не хватило :с

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.