LINUX.ORG.RU

[ненависть,термины] Почему некоторые считают С/С++ языками низкого уровня?


0

1

Собственно сабж.

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

http://ru.wikipedia.org/wiki/%D0%9D%D0%B8%D0%B7%D0%BA%D0%BE%D1%83%D1%80%D0%BE...

http://ru.wikipedia.org/wiki/%D0%AF%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B...

«Высокоуровневый язык программирования — язык программирования, разработанный для быстроты и удобства использования программистом.»

dmitry_vk ★★★
()

Если пользоваться строгим определением, то их можно отнести к ЯВУ. Но по сути, C - это DSL для работы с памятью.

dmitry_vk ★★★
()
Ответ на: комментарий от hibou

>Это ассемблер с макросами потому что. )

А Lisp - это ассемблер с s-выражениями, C# это то же MSIL, Python это ассемблер с утиной типизацией. Я понимаю, что так можно что угодно сказать.

pathfinder ★★★★
() автор топика

Вообще стоило бы всем кто говорит, что «плюсы это низкоуровневый язык», прописать лечебное написание на ассемблере более или менее сложной программы. Тогда они поймут, что С++ очень и очень высокоуровневый язык, он очень многое делает за программиста.

pathfinder ★★★★
() автор топика
Ответ на: комментарий от pathfinder

А тем, кто говорит, что плюсы - высокоуровневый язык, стоит хоть раз попробовать С#. Это как небо и земля.

hibou ★★★★★
()
Ответ на: комментарий от hibou

>А тем, кто говорит, что плюсы - высокоуровневый язык, стоит хоть раз попробовать С#. Это как небо и земля.

Ты это так говоришь, будто я не пишу на C#. На фоне того «небо и земля», это ваше «небо и земля» - незначительное различие.

pathfinder ★★★★
() автор топика

> С++

низкого уровня

ты наркоман штоле, ####?!

anonymous
()
Ответ на: комментарий от pathfinder

Говорить, что плюсы низкоуровневый язык - это точно так же как утверждать что Си объектно-ориентированный ))

Си не объектно-ориентированный? Ога, скажи это Торвальдсу и создателям агломерации библиотек GTK. )

О чем я? Да о том, что спор бесполезен.

hibou ★★★★★
()

А почему вы собственно говорите о C/C++ как об одном языке? Это два разных языка, с совершенно разными парадигмами и «уровнями низкоуровневости».

hydraulicbrakefluid
()

Товарищи Керниган и Ричи считают, что: «Язык “C” - это язык относительно низкого уровня.» (дословная цитата)

Так что ТСу навернуть говна и вместо вики освежить реальные знания.

fool_anon
()

Вообще любой язык, в котором выражения вроде

"a" + "b" = "ab" 
1000000000 * 5 = 5000000000 
(2 / 3) * 3 = 2

(с поправкой на синтаксис) не истинны, не может считаться современным ЯВУ, имхо.

Legioner ★★★★★
()

откуда пошла эта мода

Ибо существует более 2х «уровней». В своё время C++ был в «верхней» половине списка. Но она с тех пор изрядно выросла, «середина» поднялась и теперь он в нижней.

DonkeyHot ★★★★★
()

C/C++ - самый низкоуровневый из языков высокого уровня. Так нормально?

Лично я классифицирую так:

низкий уровень - работа с памятью, зависимость от системы и оборудования и т.д. (си);

средний уровень - кроссплатформенность, нет работы с памятью, но статическая типизация (ява, сишарп);

высокий уровень - интерпретируемые языки с динамической типизацией (пхп, питон).

vurdalak ★★★★★
()

> Низкоуровневый язык программирования — язык программирования, близкий к программированию непосредственно в машинных кодах. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Это позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка (обычно английских).

Это как раз и есть уровень С++. Чего тебе не нравится?

ugoday ★★★★★
()
Ответ на: комментарий от vurdalak

Почему статическую типизацию вы относите к более низкому уровню, нежели динамическую? По-моему это просто разные подходы к программированию, со своими плюсами и минусами. Динамическая типизация позволяет проще писать обобщённые методы, статическая типизация позволяет отлавливать ряд ошибок на этапе компиляции и может давать компилятору больше информации для оптимизации.

Legioner ★★★★★
()
Ответ на: комментарий от ugoday

Нет, ты не прав. Это уровень ассемблера определённой архитектуры. Операторы С++ однозначно на машинный код не заменяются.

PolarFox ★★★★★
()
Ответ на: комментарий от ugoday

> отличия минимальны. см соседнюю тему

Во втором питоне точно так же. Он тоже язык низкого уровня?

>>> 2/3*3.0
0.0
PolarFox ★★★★★
()
Ответ на: комментарий от Legioner

>Почему статическую типизацию вы относите к более низкому уровню, нежели динамическую?

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

vurdalak ★★★★★
()
Ответ на: комментарий от dmitry_vk

>разработанный для быстроты и удобства использования программистом

[fat]VB и HiAsm?[/fat]

devl547 ★★★★★
()

Низко-/высокоуровневость языка - понятие относительное.

twosev ★★
()
Ответ на: комментарий от vurdalak

>средний уровень - кроссплатформенность ... (ява, сишарп);

Ох, про яву, что-то тут где-то типа разницы между «как хотелось разрабам языка» и «что получилось в действительности». (Кроссплатформенность почему-то всегда с оговорками. «Среднний уровень кроссплатформенности», как среднебольничная температура) Ну а шарп такой кроссплатформенный... Без всех библиотечных дотнетовских вкусностей, его небось как шарп-то некоторые неготовы воспринимать. «%Наша Ъ-Ынтырпрайз поделка% не идет на этой вашей моне? Мона не нуна!» (c) Ну и, например, http://forum.sources.ru/index.php?s=1727fb25df013d85a408ed72962b098e&showtopi...

П.С. Одной из фич си в свое время как раз была заявлена кроссплатформенность. Сколько тут наивной веры, сколько «осознанного маркетинга», а сколько реальной переносимости, наверное, не нужно объяснять. (Ну и в жабе с шарпом идеологически все вроде бы верно, а по сути - издевательство.)

slackwarrior ★★★★★
()
Ответ на: комментарий от slackwarrior

>Ну а шарп такой кроссплатформенный...

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

vurdalak ★★★★★
()
Ответ на: комментарий от PolarFox

Во-первых, к вопросу о высокоуровневых языках.

 
CL-USER> (* (/ 2 3) 3) 2 
CL-USER> (* (/ 2 4) 3) 3/2 
CL-USER> (* (/ 2 4) 3.0) 1.5 
CL-USER>
 

А, во-вторых, попробую объяснить свою мысль иначе. Попробуй взглянуть на С++ — код. Посмотри, там же постоянно приходится объяснять компилятору где-как память выделять, где-как память зачищать, какой указатель на какую область памяти указывает и как, значением какого типа, интерпретировать байты, лежащие в памяти. Это чисто низкоуровневые пляски над реальным железом.

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

ugoday ★★★★★
()
Ответ на: комментарий от vurdalak

> Вот когда я создаю переменную, не думая о том, какой тип ей указать - это упрощение написания кода.

РТФМ, РТФМ и ещё раз РТФМ. В статически типизированном по самое ой-ой-ой хаскелле всё именно так и есть.

ugoday ★★★★★
()
Ответ на: комментарий от Jetty

>Под кросплатформеностью вы подразумеваете Windows7-XP-Vista ?

.NET - Mono

vurdalak ★★★★★
()
Ответ на: комментарий от hibou

> скажи это Торвальдсу и создателям агломерации библиотек GTK. )

я бы этим создателям уши бы поотрывал

vasily_pupkin ★★★★★
()

неосиляторы считают ЯВУ только языки с горбатым коллектором, потому что зайоб-вает распихивать объекты по контейнерам вручник.

ACR
()

Да потому, что первый просто portable assembler, а второй — portable assembler, но с извращениями.

Sectoid ★★★★★
()
Ответ на: комментарий от ugoday

А, во-вторых, попробую объяснить свою мысль иначе. Попробуй взглянуть на С++ — код. Посмотри, там же постоянно приходится объяснять компилятору где-как память выделять, где-как память зачищать, какой указатель на какую область памяти указывает и как, значением какого типа, интерпретировать байты, лежащие в памяти. Это чисто низкоуровневые пляски над реальным железо

Работа с памятью в C++ - удел писателей чего-то очень обобщенного типа контейнеров, либо ацких оптимизаторов. Ну или людей, которые не любят читать книги. В моем проекте на >300 кб я сейчас grep'ом нашел 3 слова delete :) - и то legacy, убрать надо.

Прочитайте про boost smart pointers (скоро будут в стендарте) на досуге. И не говорите о том, чего не знаете.

ratatosk
()

Если для вас это языки высокого уровня, то вы просто дегенерат, микроб.

anonymous
()
Ответ на: комментарий от vurdalak

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

Не я забочусь о типах, а типы обо мне :) И это далеко не ограничевается проверкой корректности.

Если интересно про типы - посмотрите Agda2 и Epigram2. Это языки весьма сферические в вакууме, так, игрушки для ума скорее, но они статически типизированы и пипец, какие высокоуровневые.

ratatosk
()
Ответ на: комментарий от pathfinder

>Это ассемблер с макросами потому что. )

А Lisp - это ассемблер с s-выражениями,

Нет.

C# это то же MSIL,

Не знаю.

Python это ассемблер с утиной типизацией.

Нет

Я понимаю, что так можно что угодно сказать.

С - «кроссплатформенный» ассемблер.

Waterlaz ★★★★★
()
Ответ на: комментарий от ratatosk

Прочитайте про boost smart pointers

вообще восхитителен тот факт, что любители плюсов с одной стороны всячески критикуют рантаймы с GC, и с другой - легко и непринуждённо засовывают в рантайм своего проекта самый примитивный из существующих GC

jtootf ★★★★★
()
Ответ на: комментарий от vurdalak

>средний уровень - кроссплатформенность, нет работы с памятью, но статическая типизация (ява, сишарп);

высокий уровень - интерпретируемые языки с динамической типизацией (пхп, питон).

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

Waterlaz ★★★★★
()
Ответ на: комментарий от vurdalak

>>Почему статическую типизацию вы относите к более низкому уровню, нежели динамическую?

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

Не имеет отношения к типизации.

Waterlaz ★★★★★
()
Ответ на: комментарий от vurdalak

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

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

Как можно не задумываться о типе переменных, кстати, я не совсем понимаю.

Ну а так в большинстве случаев вывод типов позволяет не указывать его явно.

Legioner ★★★★★
()
Ответ на: комментарий от jtootf

вообще восхитителен тот факт, что любители плюсов с одной стороны всячески критикуют рантаймы с GC, и с другой - легко и непринуждённо засовывают в рантайм своего проекта самый примитивный из существующих GC

Во первых - я не любитель плюсов. Приходится. Или, если хотите, профессионал. :)

Во вторых, я ничего не критикую. А подсчет ссылок в подавляющем большинстве случаев достаточен и весьма эффективен.

ratatosk
()
Ответ на: комментарий от ratatosk

Во вторых, я ничего не критикую. А подсчет ссылок в подавляющем большинстве случаев достаточен и весьма эффективен.

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

С ними лучше, чем без них, но забыть про управление памятью не получится.

Legioner ★★★★★
()
Ответ на: комментарий от Legioner

smart pointers медленнее чем нормальный GC,

Сферически в вакууме - да, но учитывая, что счетчик создается не на каждый чих, а как правило, на целый объект, и работа с ним идет только при копировании или удалении, не так все и плохо. А учитывая, что C++ вообще язык не самый медленный, то проблем с производительностью и вовсе нет.

п.с. разговоры про высокоуровневость, кстати, мне вообще до фени.

ratatosk
()
Ответ на: комментарий от Legioner

неудобно работать с такими ссылками в мультипоточных приложениях).

С ними лучше, чем без них, но забыть про управление памятью не получится.

Забыть не получается только благодаря хорошей памяти :)

Да и с многопоточность нету никаких проблем - счетчики атомарны.

А циклы попадаются относительно редко в прикладных программах.

ratatosk
()
Ответ на: комментарий от ratatosk

> Прочитайте про

Про С++ я знаю ровно столько, чтобы не желать про него знать ничего больше. Код, выкладываемый на этом форуме, ужасен, отвратителен и низкоуровнев. Этого достаточно.

ugoday ★★★★★
()
Ответ на: комментарий от ratatosk

п.с. разговоры про высокоуровневость, кстати, мне вообще до фени.

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

Legioner ★★★★★
()
Ответ на: комментарий от ugoday

Код, выкладываемый на этом форуме, ужасен, отвратителен и низкоуровнев. Этого достаточно.

Как в анекдоте - говно ваш Битлз, мне вчера Рабинович по телефону напел.

ratatosk
()
Ответ на: комментарий от Legioner

Ну а к чему тогда писать, что умные указатели, якобы, позволяют забыть про работу с памятью?

Я про них написал, возражая, что выделения-удаления - едуиственная забота C++-программиста. Да и помнить, что взаимные ссылки не надо делать через smart-pointers - не очень много мозга отъедает. Кстати, в этом случае есть weak_ptr - чтобы еще подольше не вспоминать :)

ratatosk
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.