LINUX.ORG.RU

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

 ,


0

1

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

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

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

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

★★★★★

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

Да не переживай ты так, конечно цепепе более высокоуровневый.

Вопрос не в переживаниях, а в том, с кем приходится общаться: с пердуном в лужи или нет?

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

что на Си можно просто взять и писать

велосипед. Вместо того, чтобы писать что-то полезное.

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

Пользователь не узнает о том, что его строка не была скопирована внутрь экземпляра Str, если второй malloc внутри str_init сбойнет.

Смотря какой пользователь :-) Ты бы заменил size_t на какой-нибудь int и проверял бы на -1 :-) Ну, к примеру. А дятел и исключения ловить не будет в цепепе :-) Так что проблемы личного характера :-)

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

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

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

Царь.

если второй malloc внутри str_init сбойнет.
malloc
сбойнет

Спс, посмеялся.

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

Царь.

велосипед. Вместо того, чтобы писать что-то полезное.

Ога, посмеялся. Можно мне увидеть что-то полезное от тебя, либо от другого адепта?

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

Смотря какой пользователь

Вы сами. Вы же это написали так, что никаких инструментов себе не оставили.

А судя по фразе:

А дятел и исключения ловить не будет в цепепе

про исключения в C++ вы не имеете представления. Что не удивительно, учитывая ваши нежные чувства к Common Lisp и C.

Лишний раз подтверждая известный факт, что больше всего C++ ругают те, кто про него ничего не знает.

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

Вы сами. Вы же это написали так, что никаких инструментов себе не оставили.

Ой, да ладно, херню пороть :-) Нужен был бы мне этот код в реале, продумал бы этот элементарный и очевидный нюанс :-) Начитался что-ли про исключения в конструкторах? Я тоже о них знаю :-)

про исключения в C++ вы не имеете представления. Что не удивительно, учитывая ваши нежные чувства к Common Lisp и C.

Я знаю и C, и цепепе и Common Lisp и ещё много чего :-)

Лишний раз подтверждая известный факт, что больше всего C++ ругают те, кто про него ничего не знает.

Я думал, что наоборот - ругают его те, кто хорошо его знает, и знает альтернативы ему :-)

anonymous ()
Ответ на: комментарий от anonymous
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>

char *
string_concat(const char *s1, const char *s2) {
    char *r;
    size_t l1 = strlen(s1),
           l2 = strlen(s2);
    
    if (r = malloc(l1 + l2 + 1)) {
        memcpy(r     , s1, l1    );
        memcpy(r + l1, s2, l2 + 1);
    }
    
    return r;
}

int main() {
    char *s = string_concat("You're do", "ing it wrong");
    
    assert(strlen(s) == 21);
    
    printf("%s\n", s);
    
    free(s);
    
    return 0;
}
anonymous ()
Ответ на: Царь. от anonymous

Re: Царь.

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

А от тебя?

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

Нужен был бы мне этот код в реале, продумал бы этот элементарный и очевидный нюанс

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

Я знаю и C, и цепепе и Common Lisp и ещё много чего :-)

C++ из этого списка можете вычеркнуть.

Я думал, что наоборот - ругают его те, кто хорошо его знает, и знает альтернативы ему :-)

Ну, про C вы тоже думали, что на нем проще программировать, чем на C++. А вот поди ж ты, обосрались...

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

Начитался что-ли про исключения в конструкторах? Я тоже о них знаю

И что ты о них знаешь?

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

Можно и так, очень чисто :-) Но размер строк придётся отдельно хранить :-) Отсюда следует оверхед - будет лишний вызов strlen() когда нужен будет размер. Но это фигня :-)

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

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

Чепуха :-)

C++ из этого списка можете вычеркнуть.

Обоснуй :-)

Ну, про C вы тоже думали, что на нем проще программировать, чем на C++. А вот поди ж ты, обосрались...

Где? :-)

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

Обоснуй

Что тут обосновывать, если ты не умеешь C++? Впрочем и по поводу С есть ряд сомнений, ибо пишешь ты на Си никак сишник.

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

И что ты о них знаешь?

Ступай мимо :-)

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

Ступай мимо

Так и запишем, что ничего. Но знаешь, что об этом говорят.

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

Что тут обосновывать, если ты не умеешь C++?

С чего ты взял? :-)

Впрочем и по поводу С есть ряд сомнений, ибо пишешь ты на Си никак сишник.

Да мне пох как кто я пишу :-)

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

Так и запишем, что ничего. Но знаешь, что об этом говорят.

А что там знать то, клоун? :-)

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

Обоснуй :-)

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

Где? :-)

Я предполагал, что только здесь, чуть выше по теме. Но, видимо, это с вами произошло еще где-то.

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

ты мне показываешь цитатку, где я такое заявлял.

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

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

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

В общем взбзднуть ты взбзднул, а крыть нечем :-)

Я предполагал, что только здесь, чуть выше по теме. Но, видимо, это с вами произошло еще где-то.

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

anonymous ()
Ответ на: Очевидный С++ от next_time

Царь.

С++, как минимум, не может медленнее С, если приоритетна задача максимальной оптимизации.

Не может, ибо ты некомпетентен, а тот, кто компетентен на С++ не пишет.

Просто потому, что С — подмножество (с крайне незначительными оговорками) С++

Ни один «приоритетна оптмизация» не будут ваять её на помойкакрестах, которые захламляют всё и вся своим убогим рантаймом. С нерабочим void * - сишка нахрен никому нен ужна.

Однако, в С++ сделано несколько шагов в отношении выноса вычислений из рантайма в компилтайм.

Опять же - ты некомпетентен. Никакого реального применения этому нет - это раз.

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

А самое интересное, что в компилтайме вдруг перестаёт работать всё то, что отличает кресты от си.

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

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

Помимо этого, в С++ есть поддержка исключений.

Ога, а в сишке их нет - вот это новость.

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

Посмеялся с этой херни. И какую «оптимизацию» он получит - ты конечно же не скажешь. И что там за ветка - так же.

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

Ты мне оптимизацию назови, балаболка.

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

Ога, только почему-то ты на помойке, а всё на сишке.

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

мкашкапомойка к сишке не имеет никакого отношения. Опять же, для некомпетентной балаболки есть какой-то мистический «си» - что он из себя представляет никто не знает.

Компилтайм случислся у пацана. Я даю тебе шанс показать мне мощь компилтайма - вперёд. Реальное применение в студию.

anonymous ()
Ответ на: Re: Царь. от anonymous

Re: Царь.

Скудоумное недоумение ты совсем что-ли отбитый? Ну давай я тебя мокну в дерьмо, в очередной раз:

велосипед. Вместо того, чтобы писать что-то полезное.

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

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

Жрать дерьмо.

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

а крыть нечем

Вам кажется, что нечем. Мне же кажется, что потраченное время попросту никогда не окупится.

то про тебя ведь тоже можно сделать выводы

Всегда пожалуйста.

Мне удобнее программировать на C++, чем на C, о чем я и говорю. И могу подтвердить примерами. В отличии от.

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

А что там знать то

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

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

Да не переживай ты так, конечно цепепе более высокоуровневый. Где-то на полсантиметра, лол.

До С++11 так и было. Сейчас это разный уровень. Я себе написал аналог Guile на С++14, так с ним код пишется почти как родной, в отличие от лапши на Guile.

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

Да вроде нечего. Вот и интересно, зачем ты это упомянул.

Ну там был упрёк, дескать, как же это так бедного пользователя обделили информацией о неуспешном копировании строк :-) Имелось в виду, что в цепепе конструктор basic_string<> сгенерит исключение и пользователь узнает о фэйле копирования строки :-) Но это бугага, ибо если malloc() вернёт NULL, то там уже никакая проверка не спасёт от неминуемого коллапса :-)

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

Я себе написал аналог Guile на С++14, так с ним код пишется почти как родной, в отличие от лапши на Guile.

Не понял, что ты написал? :-) Интерпрератор Guile? :-)

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

Но это бугага, ибо если malloc() вернёт NULL, то там уже никакая проверка не спасёт от неминуемого коллапса :-)

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

Если у вас фейл на аллокации памяти приводит к коллапсу, то вовсе не обязательно, что это у всех так. Даже на Linux-е. Не говоря уже про другие платформы.

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

Если у вас фейл на аллокации памяти приводит к коллапсу, то вовсе не обязательно, что это у всех так. Даже на Linux-е. Не говоря уже про другие платформы.

Ну и что же ты будешь делать со своим любимым bad_alloc-объектом в любимом catch-блоке? :-)

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

Ну и что же ты будешь делать со своим любимым bad_alloc-объектом в любимом catch-блоке? :-)

Отправит SMS с текстом «Беда! Беда! Беда! Всё пропало!».

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

Отправит SMS с текстом «Беда! Беда! Беда! Всё пропало!».

Не отправит - в системе кончилась память :-)

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

Сильно зависит от того, где именно этот catch. Бывает всякое.

Не обманывайся :-) Если память кончилась, процесс обречен :-)

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

Сильно зависит от того, где именно этот catch. Бывает всякое.

И вообще, какое отношение new имеет к malloc()? :-) new вовсе не обязан вызывать malloc() :-) Ты обделался :-)

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

Если у вас фейл на аллокации памяти приводит

Больше не к чему докопаться? Бедные сипиписты, как же у вас бомбит. Лучшие умы сотни человекочасов убили на шаблонную магию, а тут приходит какой-то смайлик и за 10 минут выкатывает рабочую реализацию, к которой все претензии - а вот он не проверил malloc!!11

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

Если память кончилась

Глупость продемонстрировала очередной горизонт.

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

а тут приходит какой-то смайлик и за 10 минут выкатывает рабочую реализацию

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

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

Не понял, что ты написал? :-) Интерпрератор Guile? :-)

Библиотеку для связывания кода на разных языках. Guile был задуман в том числе для этого, но сфейлился. По очевидным причинам, т.к. схема почти никому не нужна, а писать на С под Guile то еще «удовольствие». А у меня и поддержка Python и JS уже есть, и «низкоуровневый» код на С++ выглядит как код, а не как лапша в случае с C и Guile. На самом деле есть и более важные плюшки, но пока проект в разработке я он них умолчу. А так да, во многом получился чуть ли не отдельный ЯП, во многом похожий на Python, только более компактный и без отдельного синтаксиса.

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

Глупость продемонстрировала очередной горизонт.

Если это глупость и память не может кончится, то malloc() всегда возвращает не NULL :-) А значит глупость - это твоя претензия-взбздос про возможный фэйл malloc() :-) Ч.т.д. :-)

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

Бедные сипиписты, как же у вас бомбит.

По поводу чего должно бомбить?

а тут приходит какой-то смайлик и за 10 минут выкатывает рабочую реализацию

lol

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

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

Библиотеку для связывания кода на разных языках.

Не понял опять :-) Т.е. код на других языках выражается через цепепе? :-)

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

Если это глупость и память не может кончится

Глупость в том, что я продолжаю здесь вам что-то объяснять. Но попробую еще раз. Проблемы с malloc-ом (или с new в C++) могут быть не из-за того, что память кончилась от слова совсем. А от того, что ее меньше, чем приложение хочет запросить. Например, свободно 2GiB памяти, а приложение зачем-то просит 3GiB. Критичен ли отказ выдать 3GiB или не критичен, тут уж нужно смотреть по ситуации.

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

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

Это в какой же такой системе при наличии свободных двух гигов памяти malloc вернет NULL если 3 гига запросишь?

Пока ты не включишь ulimits хрен тебе malloc NULL вернет!!!

И хватит мозги пудрить! Врать нехорошо.

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

Например, свободно 2GiB памяти, а приложение зачем-то просит 3GiB.

Это проблема приложения :-) В случае той самой примитивной реализации выше по треду, если приложение передаст в str_init сверхдлинную строку, то это ошибка приложения :-)

Критичен ли отказ выдать 3GiB или не критичен, тут уж нужно смотреть по ситуации.

По факту в Linux отказа не будет :-) Хоть 500 Гб проси :-)

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

Не переживай, когда процесс вывалится - заметишь по-любому :-)

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

Это в какой же такой системе при наличии свободных двух гигов памяти malloc вернет NULL если 3 гига запросишь?

32-х битовой?

Пока ты не включишь ulimits хрен тебе malloc NULL вернет!!!

Еще у одного проблемы с логикой?

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

32-х битовой?

Это с какого перепоя в 32-битной системе size_t вдруг станет иметь тип int32_t?

Еще у одного проблемы с логикой?

Ты, похоже, вообще необучаем...

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

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

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

Это с какого перепоя в 32-битной системе size_t вдруг станет иметь тип int32_t?

Понятно, что вы меня считаете тупицей, но все-таки, объясните плиз, с чего вы вдруг связали size_t, int32_t, 32-бита и 3GiB в такую замысловатую конструкцию?

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