Недавно хотел переходить на C#, но почитав топики типа C# vs VB пришел к выводу, что C# по крайней мере для моих скромных задач (Windows-приложение "для домашнего пользователя") будет пониже уровнем чем VB. Вот, интересует, с теоретической точки зрения, какой язык более высокоуровневый? И в чем вообще измеряется эта высокоуровневость?
Еще как-то спорил с человеком, который убеждал, что C++ выше по уровню чем VB и при этом Лисп выше по уровню чем VB, такое возможно или он просто недолюбливал VB?
Здравствуйте, _Mihail, Вы писали:
_M>Недавно хотел переходить на C#, но почитав топики типа C# vs VB пришел к выводу, что C# по крайней мере для моих скромных задач (Windows-приложение "для домашнего пользователя") будет пониже уровнем чем VB. Вот, интересует, с теоретической точки зрения, какой язык более высокоуровневый? И в чем вообще измеряется эта высокоуровневость?
В длине, вестимо!
_M>Еще как-то спорил с человеком, который убеждал, что C++ выше по уровню чем VB и при этом Лисп выше по уровню чем VB, такое возможно или он просто недолюбливал VB?
У него просто линейка не той системы!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
...то уровень абстракции можно "мерять" только по отношению к чему-то конкретному. К командам процессора, например. Или по отношению к другим абстракциям, которые объявляются в этом случае "низкоуровневыми".
А просто "уровень абстракции" — пустозвонство.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>...то уровень абстракции можно "мерять" только по отношению к чему-то конкретному. К командам процессора, например. Или по отношению к другим абстракциям, которые объявляются в этом случае "низкоуровневыми".
ГВ>А просто "уровень абстракции" — пустозвонство.
Ну, то что всё относительно, это понятно. Но должна же быть какая-то усредненная, общепризнанная точка отсчета, по которой все эту высокоуровневость меряют. Например, сложно найти такой пример, когда ассемблер, окажется выше по уровню, чем C#. Ну а определить кто выше — VB или С#, это фактически тоже самое, только в меньшем масштабе...
Здравствуйте, _Mihail, Вы писали:
ГВ>>...то уровень абстракции можно "мерять" только по отношению к чему-то конкретному. К командам процессора, например. Или по отношению к другим абстракциям, которые объявляются в этом случае "низкоуровневыми".
ГВ>>А просто "уровень абстракции" — пустозвонство.
_M>Ну, то что всё относительно, это понятно. Но должна же быть какая-то усредненная, общепризнанная точка отсчета, по которой все эту высокоуровневость меряют.
Обычно пользуются отсчётом от уровня железа. Низкоуровневые — это ассемблеры, а у высокоуровневых своя классификация (императивные, функциональные, логические и т.п.) Ну, можно выделить ещё "совсем высокоуровневые", то есть, приближённые к языку какой-то предметной области.
_M>Например, сложно найти такой пример, когда ассемблер, окажется выше по уровню, чем C#. Ну а определить кто выше — VB или С#, это фактически тоже самое, только в меньшем масштабе...
А смысл-то какой в этой уровнеметрии? ИМХО, кроме как для споров в курилках её никуда не приткнёшь.
PS.: Впрочем, за всю Одессу не скажу, может быть, кто-то что-то и придумал.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Высокоуровневый означает, что программист меньше заботится о конкретных алгоритмах, использующихся в логике приложения, и больше — о самой логике. В идеале имеем декларативное описание того, что нам хочется видеть, а на выходе получаем готовую систему.
В случае с VB и C#, VB позволяет делать меньше телодвижений при написании ПО, хотя и делает это за счет снижения уровня контроля процесса, поэтому его в приниципе можно считать более высокоуровневым.
Re[2]: Какой язык более высокоуровневый - C# или VB?
Здравствуйте, Пятачок, Вы писали:
П>В случае с VB и C#, VB позволяет делать меньше телодвижений при написании ПО, хотя и делает это за счет снижения уровня контроля процесса, поэтому его в приниципе можно считать более высокоуровневым.
Здравствуйте, _Mihail, Вы писали:
_M>Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>А просто "уровень абстракции" — пустозвонство.
_M>Ну, то что всё относительно, это понятно. Но должна же быть какая-то усредненная, общепризнанная точка отсчета, по которой все эту высокоуровневость меряют. Например, сложно найти такой пример, когда ассемблер, окажется выше по уровню, чем C#. Ну а определить кто выше — VB или С#, это фактически тоже самое, только в меньшем масштабе...
Как general-purpose язык, VB будет повыше уровнем, чем C#. Только давай посмотрим, какой из этого можно сделать вывод.
Ты прав в том, что уровень абстракции действительно имеет значение. Чем меньшим кол-вом операций уровня языка решается задача, тем лучше. Заметь, я выделил слово "решается". Но может и не решиться, или решиться, но очень через "ж". В таком случае два выхода: либо перейти на язык с более низким уровнем абстракции, либо вместо general-purpose языка использовать DSL.
То есть я бы посоветовал тебе сначала точнее определиться с кругом задач, которые ты хочень решать, а потом уже подбирать языковые средства.
-- Андрей
Re[2]: Какой язык более высокоуровневый - C# или VB?
Здравствуйте, prVovik, Вы писали:
V>А можно конкретные примеры снижения телодвижений.
Меня лично больше всего испугали замечания по поводу какой-то усложненной работы с Optional-параметрами в C#. Строчить десятки перегрузок как в .Net Framework или вытворять всякие трюки с проверками параметров, как в VB6 — нет никакого желания.
Ещё непонятности с привязкой событий к методам. Привязка, как я понял, происходит где-то в генеренном коде и говорят, что если метод убрать, она там остается и надо вручную туда лесть и чистить. Ну и т.п. — обработка событий вообще в C# мне кажется на много непонятнее сделана, чем в VB — в VB handler'ы можно выбрать из чекбоксов и не нужно ничего динамически привязывать. Но, конечно, я мельком смотрел, мог чего и не увидеть.
Прошу ногами не бить, если чего напутал, в C# не разбираюсь практически совсем .
Re[4]: Какой язык более высокоуровневый - C# или VB?
Здравствуйте, _Mihail, Вы писали:
_M>Ещё непонятности с привязкой событий к методам. Привязка, как я понял, происходит где-то в генеренном коде и говорят, что если метод убрать, она там остается и надо вручную туда лесть и чистить.
Объясните, а то моя твоя не понимать
_M>Ну и т.п. — обработка событий вообще в C# мне кажется на много непонятнее сделана, чем в VB — в VB handler'ы можно выбрать из чекбоксов и не нужно ничего динамически привязывать.
Я не понял, ты среды разработки меряешь по "высокоуровности" или языки. При чем тут обработка событий, реализованная тем или иным способом в языке и чекбоксы.
_M>Прошу ногами не бить, если чего напутал, в C# не разбираюсь практически совсем .
... << RSDN@Home 1.2.0 alpha rev. 677>>
Re[4]: Какой язык более высокоуровневый - C# или VB?
Здравствуйте, _Mihail, Вы писали:
_M>Меня лично больше всего испугали замечания по поводу какой-то усложненной работы с Optional-параметрами в C#. Строчить десятки перегрузок как в .Net Framework или вытворять всякие трюки с проверками параметров, как в VB6 — нет никакого желания.
На практике совершенно не напрягает. Честно говоря, даже наоборот лучше иногда.
_M>Ещё непонятности с привязкой событий к методам. Привязка, как я понял, происходит где-то в генеренном коде и говорят, что если метод убрать, она там остается и надо вручную туда лесть и чистить. Ну и т.п. — обработка событий вообще в C# мне кажется на много непонятнее сделана, чем в VB — в VB handler'ы можно выбрать из чекбоксов и не нужно ничего динамически привязывать. Но, конечно, я мельком смотрел, мог чего и не увидеть.
Эээээ... ЧЕГО-О-О-О-О???????????????????????????!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Кого чистить???? Там есть в контекстном меню reset, если ты про среду разработки и события в форме
А что в C# нужно привязывать динамически, что в VB можно привязать через GUI системы программирования?
_M>Прошу ногами не бить, если чего напутал, в C# не разбираюсь практически совсем .
Здравствуйте, _Mihail, Вы писали:
_M>Недавно хотел переходить на C#, но почитав топики типа C# vs VB пришел к выводу, что C# по крайней мере для моих скромных задач (Windows-приложение "для домашнего пользователя") будет пониже уровнем чем VB. Вот, интересует, с теоретической точки зрения, какой язык более высокоуровневый? И в чем вообще измеряется эта высокоуровневость? _M>Еще как-то спорил с человеком, который убеждал, что C++ выше по уровню чем VB и при этом Лисп выше по уровню чем VB, такое возможно или он просто недолюбливал VB?
Уровень VB и C# в .NET практически один и тот же, в частности, за счёт того, что они пользуются одной и той же библиотекой .NET framework
Вопрос только в синтаксисе и всё. Вот если ты будешь писать на MS IL, тогда другое дело, это уже будет ниже уровнем.
Re[3]: Какой язык более высокоуровневый - C# или VB?
Здравствуйте, prVovik, Вы писали:
V>Здравствуйте, Пятачок, Вы писали:
П>>В случае с VB и C#, VB позволяет делать меньше телодвижений при написании ПО
V>А можно конкретные примеры снижения телодвижений.
Это прямое следствие того, что С# — статически типизированный язык, в VB же, как в гибридном язаке, можно использовать более лакончиную динамику.
Тем не менее разница в количестве телодвижений не настолько значительна, чтобы рассматирвать ее как критерий выбора между этими языками.
Здравствуйте, _Mihail, Вы писали:
_M>Недавно хотел переходить на C#, но почитав топики типа C# vs VB пришел к выводу, что C# по крайней мере для моих скромных задач (Windows-приложение "для домашнего пользователя") будет пониже уровнем чем VB. Вот, интересует, с теоретической точки зрения, какой язык более высокоуровневый? И в чем вообще измеряется эта высокоуровневость? _M>Еще как-то спорил с человеком, который убеждал, что C++ выше по уровню чем VB и при этом Лисп выше по уровню чем VB, такое возможно или он просто недолюбливал VB?
Высокоуровневость — штука весьма субъективная. В принципе, можно говорить о мощности языка в плане сложности конструкций, которые в нем поддерживаются напрямую, т.е. являются т.н. "first class citizens".
И даже в этом случае ответ будет неоднозначным. Вот, к примеру, если взять язык MSX BASIC, то он с одной стороны выше уровнем, чем С, т.к. в нем есть конструкция PRINT для вывода в консоль и конструкция LINE для рисования линии алгоритмом брезенхема, а в С их нет. С другой стороны, в С есть понятие "функции", а в бейсике его нету. Поэтому там, где в С можно спрятать сложность предметной области за одним вызовом, в бейсике будет шаманство с установкой значений переменных. А в С++ можно определить операторы таким образом, чтобы получить синтаксис рисования линии достаточно близким к бейсику, и при этом без потери общности — там, где в бейсике захардкожен банальный брезенхем, в плюсах может на лету подцепляться реализация из AntiGrain с субпиксельным сглаживанием.
Шаблонам С++ в классическом VB никаких аналогов нет; изображать мало-мальски сходную функциональность придется "на коленке", то есть С++ вроде бы повыше уровнем. Зато в VB программист изолирован от управления памятью, а в плюсах он должен за ней следить сам.
Если сравнивать C# и VB.NET, то высота уровня со всех точек зрения окажется практически одинаковой. Это, грубо говоря, один и тот же язык с немножко разным синтаксисом.
Список "фундаментальных" различий очень-очень мал. Вот Nemerle является языком более высокого уровня по отношению к обоим сравниваемым кандидатам.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[2]: Какой язык более высокоуровневый - C# или VB?
Здравствуйте, Sinclair, Вы писали:
S>И даже в этом случае ответ будет неоднозначным. Вот, к примеру, если взять язык MSX BASIC, то он с одной стороны выше уровнем, чем С, т.к. в нем есть конструкция PRINT для вывода в консоль и конструкция LINE для рисования линии алгоритмом брезенхема, а в С их нет. С другой стороны, в С есть понятие "функции", а в бейсике его нету. Поэтому там, где в С можно спрятать сложность предметной области за одним вызовом, в бейсике будет шаманство с установкой значений переменных. А в С++ можно определить операторы таким образом, чтобы получить синтаксис рисования линии достаточно близким к бейсику, и при этом без потери общности — там, где в бейсике захардкожен банальный брезенхем, в плюсах может на лету подцепляться реализация из AntiGrain с субпиксельным сглаживанием.
Как по мне, то плясать нужно от того, что в С есть указатели и адресная арифметика а Бейсике нет. Это как минимум.
А в общем то, получается, что чем выше уровнем язык, тем сложнее его использовать как универсальный язык
Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Как по мне, то плясать нужно от того, что в С есть указатели и адресная арифметика а Бейсике нет. Это как минимум.
ANS>А в общем то, получается, что чем выше уровнем язык, тем сложнее его использовать как универсальный язык
Может ассемблер и проще использовать как универсальный язык, нежели С, но как-то это непросто получится
Re[4]: Какой язык более высокоуровневый - C# или VB?
Здравствуйте, fmiracle, Вы писали:
ANS>>А в общем то, получается, что чем выше уровнем язык, тем сложнее его использовать как универсальный язык
F>Может ассемблер и проще использовать как универсальный язык, нежели С, но как-то это непросто получится
Можеш попробовать написать драйвер на ассемблере и на FoxPro (достаточно высокоуровневый язык?). Я об этом — любое повышение уровня абстракции неизбежно скрывает мелкие детали. Я же не утверждаю, что это плохо, это просто факт.
Здравствуйте, Sinclair, Вы писали:
S>А в С++ можно определить операторы таким образом, чтобы получить синтаксис рисования линии достаточно близким к бейсику, и при этом без потери общности — там, где в бейсике захардкожен банальный брезенхем, в плюсах может на лету подцепляться реализация из AntiGrain с субпиксельным сглаживанием.
Согласен, на С++ наверно можно реализовать функции, которые реализованы в VB, да ещё подогнать их под свои вкусы. Что там говорить — и VB и студия написаны на C++, можно и их написать, и тот же Nemerle. Только это уже фактически не C++ будет, а опять VB или Nemerle — как ни крути, а придется всё равно расплачиваться падением универсальности, за высокоуровость. Вобщем, прятаться за "потенциальные" возможности высокоуровности языка врятли получится. Поэтому мне кажется C++ в любом случае оказывается ниже по уровню, чем VB.
Re[3]: Какой язык более высокоуровневый - C# или VB?
Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Как по мне, то плясать нужно от того, что в С есть указатели и адресная арифметика а Бейсике нет. Это как минимум.
Это не "как минимум", а очень-очень узкий взгляд на вещи.
К тому же ты что, собрался мерить уровень языка по отсутствию в нем чего-то? Ну тогда С++, к примеру, значительно ниже уровнем, чем С. Т.к. в С нет почти ничего из того, что есть в С++. Это какой-то нездоровый парадокс. И таких парадоксов — море. К примеру, с таким подходом лисп и форт — языки примерно одного уровня.
ANS>А в общем то, получается, что чем выше уровнем язык, тем сложнее его использовать как универсальный язык
Непонятно, с чего бы это. Вот как раз ассемблер x86, к примеру, очень сложно использовать как универсальный язык. Ну-ка, изобрази мне на нем что-нибудь несложное; к примеру — веб-сервер с формз аутентификацией и персонализацией. А вот очень-очень высокоуровневый язык типа Nemerle можно использовать для чего угодно.
В общем, ребяты, низкоуровневость не сводится к возможности написать драйвер. Драйвера к Singularity влет пишутся на любом языке дотнета, в том числе и VB.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.