LINUX.ORG.RU

Существует ли язык высокого уровня, который устойчиво быстрее C?

 ,


0

1

Возможно ли сделать язык программирования, который не будет содержать платформ-зависимых операций, но при этом позволит получить у готовой программы производительность не меньше чем у оптимально написанной программы на C?

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

Так вот, возможно ли сделать такой язык? Если да, то в каком направлении копать?

А может уже существуют такие языки, просто из-за популярности C на них мало кто пишет, поскольку всплывают проблемы совместимости с существующей базой уже готового кода?

★★★★★

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

Тащемта сишник может запилить скрипт-генератор.

Крестовик тоже. Только ему это потребуется в гораздо более редких случаях. И я часто вижу, как в сишных проектах забивают, например, на генерацию обобщенного кода(ибо лишняя сложность), пихая везде просто void *, платя за это оверхедом на доступ, а иногда и лишними выделениями в динамической памяти.

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

Неадекватная особенность языка, от которой шарахаются все разработчики ядер и рантаймов

Так исключения там не нужны.

не говоря уже даже о разработчиках Qt :-)

А QException - это что?

Это тому, кто знает цепепе, но не знает Си.

Это как?

А тот, кто умеет пользоваться Си, тому цепепе, как бы, до лампочки

Я умею Си и писал на нем достаточно долго. Фичи C++ часто довольно полезны. Не вижу смысла от них отказываться.

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

А чему возражать, если и так понятно, что во время компиляции в цепепе ничего толкового сделать нельзя :-)

Давай, покажи мне, как ты пишешь обобщенный код на Си. Впрочем, ты не пишешь. И генераторы кода ты тоже не пишешь. Думаю, что ты копипаст-мастер.

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

Так исключения там не нужны.

Так C++ вообще не нужен :-)

А QException - это что?

Сразу видно ламера, который о Qt лишь слышал на дешёвых форумках :-) Вот, на, тыкаю, читай официальный источник: «Qt itself will not throw exceptions. Instead, error codes are used.» :-)

Это как?

Да вот так. Кому надо постоянно заниматься тем, чтобы оборачивать тонны вызовов C классиками цепепе лишь только потому, чтобы использовать RAII, придерживаясь «хорошего тона цепепе»? Ах да, RAII то теперь нужно придерживаться из-за геморроя под названием «исключения». Понапридумали проблем там, где их нет :-)

Я умею Си и писал на нем достаточно долго.

Не похоже :-)

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

Давай, покажи мне, как ты пишешь обобщенный код на Си.

Т.е. слив засчитан :-) Ничего в цепепе того, что делает программы лучше, а код короче и понятнее, по сравнению с чистым Си, нет :-)

Впрочем, ты не пишешь. И генераторы кода ты тоже не пишешь. Думаю, что ты копипаст-мастер.

:-)

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

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

Мальчик, алё, за оверхеды я бы помолчал :-) За всё нужно платить :-) В т.ч. и бинарником под сотню мегабайт, когда используются шаблоны цепепе :-)

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

Сразу видно ламера, который о Qt лишь слышал

GUI не занимаюсь, есть вещи поинтереснее.

А ты хорошо знаешь Qt? Странно, ведь

Так C++ вообще не нужен

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

Кому надо постоянно заниматься тем, чтобы оборачивать тонны вызовов C классиками цепепе лишь только потому, чтобы использовать RAII, придерживаясь «хорошего тона цепепе»?

Не знаю. Кому?

Ах да, RAII то теперь нужно придерживаться из-за геморроя под названием «исключения».

Нет. RAII удобная концепция работы с ресурсами. Но если тебе больше нравится городить if'ы или писать лапшу с метками и goto, то пожалуйста...

Не похоже

Твоим постам не хватает аргументации

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

В т.ч. и бинарником под сотню мегабайт, когда используются шаблоны цепепе :-)

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

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

Т.е. слив засчитан

Твой? Видимо, да.

Ничего в цепепе того, что делает программы лучше, а код короче и понятнее, по сравнению с чистым Си, нет

Вероятно, ты просто не умеешь «цепепе». Или тебе лень что-то изучать и Си - это твой предел. Многим людям C++ позволяет быстрее и качественнее создавать системы, чем на Си.

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

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

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

А ты хорошо знаешь Qt? Странно, ведь

И цепепе неплохо знаю :-)

С ничем не лучше C++, кроме более простого компилятора.

Он лучше своим размером, и, следовательно, простотой. Имеется в виду проста языка, а не компилятора. С простым инструментом, который можно относительно легко подстроить под себя работать эффективнее, чем с неповоротливым монстром, стандарт которого содержит больше 1300 страниц :-)

Не знаю. Кому?

Тому, кто использует Сишные либы или вызовы ОС, но по долгу службы использует для этого цепепе. Почти всегда так и происходит. :-)

Нет. RAII удобная концепция работы с ресурсами.

Она удобная в принципе, но в цепепе она реализована через деструкторы, которые не должны генерировать исключения, ибо могут случиться УЖАСНЫЕ ВЕЩИ :-)

Твоим постам не хватает аргументации

Какая тебе ещё аргументация нужна? :-) Некто заикнулся, что в цепепе можно в компайл-тайме проворачивать некие вещи с помощью constexpr и шаблонов, которые в Си делаются только в рантайме. Я же сказал, что в цепепе даже строчку нельзя в компайл-тайме сгенерировать, даже стандартный шаблон basic_regex не умеет регулярку в машкод откомпилить. :-) Чем тебе не аргументация? Но ты же слился после этого, и нет тебя :-)

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

Вероятно, ты просто не умеешь «цепепе». Или тебе лень что-то изучать и Си - это твой предел. Многим людям C++ позволяет быстрее и качественнее создавать системы, чем на Си.

Чем докажешь, что на цепепе ваять быстрее, чем на Си? Где измерения, пустобрёх? :-)

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

Т.е. ты так и не покажешь, чем Си лучше С++? Жаль.

Размером и простотой. Для упоротых повторяю в 3-й раз :-) А ещё и большей гибкостью и эффективностью при работе с теми же банальными строками :-) На basic_string<> без слёз не взглянешь :-)

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

И цепепе неплохо знаю :-)

Непохоже.

Он лучше своим размером, и, следовательно, простотой.

Т.е. убогость выдаем за преимущество?

но в цепепе она реализована через деструкторы, которые не должны генерировать исключения, ибо могут случиться УЖАСНЫЕ ВЕЩИ :-)

И что?

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

Да, можно.

Я же сказал, что в цепепе даже строчку нельзя в компайл-тайме сгенерировать

Дай задачу более конкретную. А то «сгенерировать строчку» можно и на препроцессоре сишном.

даже стандартный шаблон basic_regex не умеет регулярку в машкод откомпилить.

Регулярку в машкод?

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

Чем тебе не аргументация?

Аргументация к чему? Твои аргументы никак не подтверждают твою позицию.

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

Чем докажешь, что на цепепе ваять быстрее, чем на Си?

Фактами. Сконкатенируй строки в рантайме. Да в Си до сих пор нет библиотеки простейших структур данных и алгоритмов. Позор. А нет из-за убогости языка.

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

Размером и простотой. Для упоротых повторяю в 3-й раз

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

А ещё и большей гибкостью и эффективностью при работе с теми же банальными строками

С менее гибок. Ибо мне в C++ доступны все средства, доступные в С. Обратное неверно.

На basic_string<> без слёз не взглянешь :-)

Не смотри. Никто не заставляет в C++ использовать этот класс.

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

Регулярку в машкод?

Речь о том, чтобы не парсить регекспы в рантайме. std::regex так не умеет, а Boost.Xpressive изобретает для этого особый синтаксис:

// Compile time:
sregex rex = (s1= +_w) >> ' ' >> (s2= +_w) >> '!';
// Runtime:
sregex rex = sregex::compile( "(\\w+) (\\w+)!" );
Просто для справки, D или Rust умеют это делать используя стандартный синтаксис на строках.

DarkEld3r ★★★★★
()
Последнее исправление: DarkEld3r (всего исправлений: 1)
Ответ на: комментарий от anonymous

Т.е. убогость выдаем за преимущество?

Для всех нормальных людей простота убогостью не является :-)

И что?

То, что это является серьёзным изъяном в дизайне цепепе :-) Что там выше говорилось про убогость :-)

Да, можно.
Дай задачу более конкретную. А то «сгенерировать строчку» можно и на препроцессоре сишном.

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

Регулярку в машкод?

Да, регулярные выражения в машинный код. По-русски написано :-)

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

Речь о том, чтобы не парсить регекспы в рантайме

Это понятно=) Просто мне показалось странным называть это компиляцией в машкод.

D или Rust умеют это делать используя стандартный синтаксис на строках.

Это, конечно, круто. Но есть ли бенчмарки, где D и Rust опережают С и С++ на этом деле?

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

Да в Си до сих пор нет библиотеки простейших структур данных и алгоритмов. Позор. А нет из-за убогости языка.

Такая библиотека в Си нахрен не нужна :-) Си для программистов, а не для недоучек :-)

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

То, что это является серьёзным изъяном в дизайне цепепе

Аргументируй.

Для всех нормальных людей простота убогостью не является

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

Как это всегда весело наблюдать за адептом цепепе, который взывает к сишному препроцессору, когда в его любимом цепепе если и constexpr и шаблоны

Ты не понял. Я попросил задачу уточнить, ибо ты ее криво сформулировал.

Да, регулярные выражения в машинный код.

Некорректное высказывание.

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

С менее гибок. Ибо мне в C++ доступны все средства, доступные в С. Обратное неверно.

Ты ошибаешься :-) Ты хоть знаешь как работает тот же basic_string<> или vector<>? Видел когда-нибудь как там ведётся работа с памятью? Хоть один аллокатор написал на цепепе, чтобы говорить о гибкости этого уродца? Давай досвидания :-)

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

Такая библиотека в Си нахрен не нужна

Да-да, рассказывай. 100500 раз одно и тоже реализовывать - это же так интересно и продуктивно.

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

А вообще, мы говорили о скорости разработки. Так вот пока ты пишешь и отлаживаешь свои велосипеды, пока ты исправляешь баги с буферами для строк, даже средний крестовик напишет и отладит полезный код схожей сложности и объема.

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

Ты ошибаешься :-)

#include <cstring>

Ты хоть знаешь как работает тот же basic_string<> или vector<>?

Да.

Видел когда-нибудь как там ведётся работа с памятью?

Да.

Хоть один аллокатор написал на цепепе

Да. И контейнеры свои STL-совместимые писал. А что?

чтобы говорить о гибкости этого уродца?

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

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

Аргументируй.

Когда во время освобождения ресурса происходит ошибка, её придётся гасить в деструкторе, не уведомив об этом вызывающий код :-) Цепепе урод :-)

Для всех нормальных людей С является убогим языком.

Для недоучек :-)

Простота компиляции и рантайма важна в некоторых задачах. Но к достоинствам языка Си простота не относится.

Так думают недоучки :-)

Да и много в нем сложностей на ровном месте, один только синтаксис объявлений чего стоит.

Это сложности недоучек :-)

Ты не понял. Я попросил задачу уточнить, ибо ты ее криво сформулировал.

Это не понял, не дано тебе :-)

Некорректное высказывание.

Глазами недоучки :-)

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

средний крестовик напишет и отладит полезный код схожей сложности и объема.

Пока средний крестовик среднего ума будет изучать очередной мегатонный материал про библиотеку типа буст, я уже давно напишу на Си тот код, который мне нужен в текущей задачи :-) Или же возьму таковой из предыдущего проектика :-)

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

Но есть ли бенчмарки, где D и Rust опережают С и С++ на этом деле?

Не знаю. Чисто из интереса хотел посмотреть на benchmarksgame.alioth.debian.org, но сайт у меня не открылся. Ну и D там нет, вроде.

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

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

А ты в С использовать более высокоуровневые крестовые приблуды не в состоянии.

Какие ещё нахрен высокоуровневые крестовые приблуды? Классы что-ли? У меня в Си есть структуры и функции :-) Мне твои классы со всякими virtual override const и проч. хренотенью не нужны :-)

И аналогов их в С не сделать из-за слабой выразительности Си.

Что за бред? Цепепе такой же выразительный, как и Си :-)

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

Когда во время освобождения ресурса происходит ошибка, её придётся гасить в деструкторе, не уведомив об этом вызывающий код

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

Цепепе урод

Нет, все вполне логично. Ты просто неосилятор=)

недоучек
недоучки
недоучек
не дано тебе
недоучки

Аргументация на уровне.

Это не понял

Сформулируй задачу, какую строку тебе нужно сгенерировать.

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

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

Пришло время о..ых историй от копипаст-мастера=)

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

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

Она нужна. Но она не является поводом перехода с крестов на D и Rust=)

И уж никакого отношения к вопросу о C vs C++ это все не имеет.

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

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

Зачем тогда все эти ко-ко-ко про «полезные приблиды цепепе», если даже механизм исключений показал свою ущербность во всей своей красе? :-) Где же твои хвалёные исключения? Давай, пиши сигналы (которые на цепепе или на це пока напишешь - рёхнешься) :-) Или используй монстра типа boost.signals, у которого своих проблем типа «умер адресат» до хрена и больше :-)

Сформулируй задачу, какую строку тебе нужно сгенерировать.

SQL запрос: auto q = query(«SELECT :a, :b, :c»)(«a», 1)(«b», 2)(«c», 3) хочу чтобы этот вызов компилятор превратил в «SELECT 1, 2, 3» :-) Давай, удачи :-)

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

Какие ещё нахрен высокоуровневые крестовые приблуды?

Перегрузка функций, пространства имен, RAII, классы, шаблоны, исключения, стандартная библиотека и т.п.

У меня в Си есть структуры и функции

У меня в C++ они тоже есть.

Цепепе такой же выразительный, как и Си

Но почему-то на нем можно написать обобщенные библиотеки, а на Си - нет.

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

И уж никакого отношения к вопросу о C vs C++ это все не имеет.

Поэтому я и сказал «просто для справки».

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

если даже механизм исключений показал свою ущербность

Нет, не показал.

Давай, пиши сигналы

Зачем? Они уже написаны. Но если будет нужно, напишу. Проблемы какие? И главное, каким боком тут Си?

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

Перегрузка функций, пространства имен, RAII, классы, шаблоны, исключения, стандартная библиотека и т.п.

Всё это неудобоносимый балласт с огромной горой нюансов и полной рекой камней :-)

Но почему-то на нем можно написать обобщенные библиотеки, а на Си - нет.

Пиши на здоровье обобщённые библиотеки :-) Кому они нужны только, кроме тебя, не «копипастер-мастера»? :-) Гыгы :-)

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

SQL запрос: auto q = query(«SELECT :a, :b, :c»)(«a», 1)(«b», 2)(«c», 3) хочу чтобы этот вызов компилятор превратил в «SELECT 1, 2, 3»

Тут все должно быть в compile-time или значение параметров в рантайме может задаваться?

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

Всё это неудобоносимый балласт с огромной горой нюансов и полной рекой камней

Аргументируешь-то ты это чем? Тем, что сам не справляешься с этим?

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

Тут все должно быть в compile-time или значение параметров в рантайме может задаваться?

Тут же написаны уже в тексте программы константы. Так что чисто компилятором :-) Смотри, не перегрейся :-)

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

Смотри, не перегрейся :-)

Да тут вроде не от чего=) Правильно ли я тебя понял, что тебе фактически нужен форматтер строк времени компиляции?

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

Аргументируешь-то ты это чем? Тем, что сам не справляешься с этим?

Справляться - это значит бороться, а не эффективно работать :-) Тот, кто предпочитает эффективно работать, тому излишние проблемы и препятствия ни к чему. Поэтому во многих крупных проектах, в тех же постгресах или линуксах, где когда-то пробовали цепепе, выпилили его нахрен и вздохнули с облегчением :-)

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

Правильно ли я тебя понял, что тебе фактически нужен форматтер строк времени компиляции?

Нормальная формулировка, меня устроит :-) Можешь запилить ct_printf(«SELECT %s, %s, %s», 1, 2, 3) времени компиляции :-)

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

Справляться - это значит бороться, а не эффективно работать

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

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

И именно поэтому ему не нужен Си.

Поэтому во многих крупных проектах, в тех же постгресах или линуксах, где когда-то пробовали цепепе

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

Код там, кстати, не очень=)

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

Поэтому во многих крупных проектах

Вполне используют C++.

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

В линуксе толком кресты не пробовали.

Этого хватило, чтобы раскусить засаду :-)

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

Они просто пишут лучшую в мире СУБД с открытым исходным кодом и не заморачиваются об использовании C++ :-) Правда, когда ГЦЦ перешёл на C++, один из главных разрабов таки заикнулся про C++. Но только за использование самых элементарных его возможностей - по сути деструкторов. Никаких исключений и прочей классовой хрени :-) Но это уже, по сути, тот же Си :-)

Код там, кстати, не очень=)

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

Код там, кстати, не очень=)

Аргументируй :-) А то ты так много раз просил аргументации, что хочется теперь посмотреть на твою :-)

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

Да тут вроде не от чего=) Правильно ли я тебя понял, что тебе фактически нужен форматтер строк времени компиляции?

Ну что там с форматтером строк времени компиляции на цепепе? :-) Ты там не перегрелся ещё? :-) А то беспокоюсь за тебя :-)

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

Ну что там с форматтером строк времени компиляции на цепепе?

Ну не буду же я в рабочее время код для тебя писать=) Будет время - возьмусь.

Ты там не перегрелся ещё?

Да я не брался даже. Погугли решения пока, можешь их покритиковать=)

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