Здравствуйте. Поспорили мы тут с одним человеком на тему уровня Си. Я утверждаю что Си - язык низкоуровневый, ведь на нём пишут драйвера, ядра для ОС и подобные этому вещи. На том же Delphi такое не попишешь. Он же утверждает что Си - высокоуровневый, а низкоуровневый лишь ассемблер. Кто из нас прав? =) P.S. В доказательство товарищь приводит цитату из какой-то книги Абеля: " хотя большинство специалистов в области программного обеспечения ведут разработки на языках высокого уровня,таких как паскаль или си,что проще при написании программ,наиболее мощное и эффективное программное обеспечение полностью или частично написано на языке ассемблера. Языки высокого уровня были разработаны для того,чтобы избежать специальной технической особенности конкретных компьютеров. Язык ассемблера,в свою очередь,разработан для конкретной специфики компьютера или точнее для специфики процессора. Следовательно,для того,чтобы написать программу на ассемблере для конкретного компьютера,следует знать его архитектуру... " Но толи автор здесь С с С++ путает, толи я что-то в корне не так понимаю.
друг твой в чемто прав) но native-coding это низкоуровневое программирование, та что единого мнения по этому вопросу быть не может) http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F_%D0%B2%D1%8B%D1%81%D0%BE%D0%BA%D0%BE%D0%B3%D0%BE_%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D1%8F
Всё относительно. бинарные коды -> асм -> Си Форт -> c++ -> управляемый код / интерпретируемый код в моем понимании шкала уровней абстракции примерно такая. и они(языки) высоко/низкоуровневые относительно друг друга.
Согласен с цитатой, но всё же чёткой линии высокого и низкого уровня нет,хотя мне кажется C++ правильнее отнести к высокому.
Четкая линия есть. Асм - низкоуровневый. всё остальное(Си и более) - высокоуровневые. Главная особенность в том, что в высокоуровненых языках ты не должен заботиться о том, каким образом данные передаются в функции, не должен заботиться над тем какие регистры процессора юзать, также то, как будут располагаться переменные в стеке и какие регистры процессора должны быть сохранены при использовании определенных функций, также при составлении условий, тебе не нужно думать о том, что и как сравнивать, где знаковые переменные, где беззнаковые. где целый, где дробные. В языках высокого уровня это всё просчитывается автоматически. И записывается по общей схеме. В языках низкого уровня - ты сам должен выполнять эту работу. И главное - язык высокого и низкого уровня - его уровень не зависит от того что ты будешь на нем писать. Потому что дрова можно было и на Делфи писать. Также их можно и на С и на С++ писать. Собственно говоря на любом другом компилируемом языке, дающего непосредственно машинный код. Именно по этому языки низкого уровня - это тока ассемблеровидные языки. ну и отчасти опкоды тоже можно к ним причислить, потому что когда то и их юзали. А вот языки высокого уровня - это те которые дают тебе возможность не задумываться над тем на какой платформе будет выполняться код и под какую ОС. Хороший пример этого - Си - ты можеш не знать как в ОС осуществляется создание файла, а использовать функцию fopen Т.е. языки выс. уровня имеют небольшую прослойку между системными командами(системные вызовы, WinAPI), которая дает большую независимость от конкретной платформы, но за это расплачиваешься скоростью работы, потому как идут дополнительные операции. Тем более что любой высокоуровневый язык дает тебе возможность быстро выполнять некоторые действия, которые в низкойровневых языказ занялибы много время на разработку. Прмиером этого может быть функции Си (gets), Delphi (readln) которые довольно сложно сделать на асме юзая WInAPI b чтобы они работали быстро.
P.S. 2 sn0w Тут ты чуть наверное путаешь. native - низкоуровневое по отношению к ОС, а не к созданию кода.
я и привел линк на википедию, просто у меня вызывает некоторое смущение как это назвать когда например приходиться использовать naked функции в юзермоде. уж не говорю о ядре. - это все касательно си а не си++ кроме того, там заявлено что высокоуровневым языком могут считаться языки умеющие манипулировать структурными объектами. но, этож и макроассемблер может.
Не знаю что ты кому хочешь доказать, но твой друг прав а ты нет. Эволюция языков программирования выглядит следующим образом: Машинный код (те самые 0 и 1)-> низкоуровневые языки программирования (ассемблеры assembly languages, мнемокод) -> высокоуровневые (c, c++, pascal, basic) -> скриптовые (почти все написаны на c, это php, python, perl, ruby)
Нет четкого и однозначного определения, так что вы оба проиграли. А википедия в таких холиварных вопросах имеет не более авторитета, чем накаченная силиконам ТП в области квантовой физики. Первое определение - это соответствие 1 оператором языка 1 команды для исполняющей среды. Тогда только ассемблерЫ. И кстати по этому определению многие ассемблеры являются... высокоуровневыми Т.к. 1 их команда выполняет несколько операций. Второе - уровень абстракции. Тут уже нет четкого разграничения, т.к. есть как и наличие, так и отсутствие признаков. По моему мнению он гораздо более низкоуровневый, чем высокоуровневый. Так что чтобы прекратить срач, еще раз заявлю. Нет однозначного определения. Иначе бы ответ на этот вопрос был бы ясен сразу из определения.
лично я считаю, что языки высокого уровня - те, которые, когда ты пишешь на них - ты не думаешь о регистрах, памяти, и.т.д. - то есть начиная с С++ (ООП), делфи и т.д. Си - чисто низкий уровень (имхо)
А че, в си обязательно о них заботиться? че за лажа???? четкие границы есть!!!! при споре учитывалось то, что Асм - в чистом виде, и Си - в чистом виде. Про макроассемблеры, С++ или С# никто не говорил. Это диалекты!
тяжелый вопрос ... похоже на него и ответа нет и быть не могет ... наверно есть низкий уровень... это прямо кодить в шестнадцатиричном редакторе а все остальные лишь приближение то есть высокие!
Ну как сказать. Да, в си, при написании системных приложений, довольно часто бывает, что без отладчика никак не обойтись
Если в одном языке рождается другой то основной сразу на низкоуровневый переходит получается ? например C# на основе языка C, Delphi на основе языка Pascal, Java... Ну косвенно тоже на основе языка C.
Всетаки, что не думайте а c и с++ ЯЗЫК ВЫСОКОГО УРОВНЯ ПРОГРАММИРОВАНИЯ. http://ru.wikipedia.org/wiki/Высокоуровневый_язык_программирования Мне кажется и дальше эта тема дисскусии не подлежит.
Не подлежит, конечно. Умных людей всегда хватает. Си - язык низкого уровня. Ну и бред. Каждый останется при своем мнении. Просто все сейчас в основном среда делает, открыв Борланд, например, не нужно описывать классы окна для его создания. Да и вообще, много чего делать не обязательно! А все, что мудово, для наших новомодных "программистов" - это низкий уровень кодинга)))))) Завтра и JavaScript - тоже станет низкоуровневым...
Википедия не авторитет в холиварных вопросах, т.к. каждый дурак может изменить статью. Тебе рано об этом говорить, т.к. ты два абсолютно разных языка считаешь одним )) Как и тебе. Каким образом билдер относится к C?)