LINUX.ORG.RU

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

 ,


0

1

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

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

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

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

★★★★★

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

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

Блин, ну как же жидко царь срется, когда берется писать код. Вуаля:

void print_string_t(string_t str) {
  write(STDOUT_FILENO, str.begin, str.end - str.begin);
  write(STDOUT_FILENO, ";", 1);
  write(STDOUT_FILENO, "\n", 1);
}
Вывод:
       :-) :-)                   ;
:-) :-)                   ;

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

Блин, ну как же жидко царь срется, когда берется писать код. Вуаля:

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

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

А тебе уже говорили, что ты тупой? На всякий случай напоминаю.

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

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

Впрочем, человек реально больной. Как-то не хорошо получается.

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

Ты можешь сам привести пример такой задачи?

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

Ну можно взять с этой помойки - http://benchmarksgame.alioth.debian.org/u64q/performance.php?test=regexdna - чем-то похоже.

Хотя опять же - все проблемы связанные с высасывания применения днищетекста и регулярок из пальца. Мы разделим текст на строки как дауны, потом их склеим. Не имеющие смысла реплейсы.

В конечном итоге мы видим трупут этой параши в 25мегабайт. Типичные паказатели для вебчика и помойки.

Я уже обоссывал это днище в 10раз скомпилив регулярки руками по-дуански. Могу скомпилить ещё раз руками не по-даунски, если надо.

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

что царь не умеет ни писать код

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

что царь не умеет ни писать код

Из чего это следует?

ни проверять его работоспособность

В целом типичная ситуация - обоссал, адепт основную тему заигнорил, ибо обделался и съехал на другую.

(str.end - 1)

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

человек реально больной

Не пытайся отмазываться. Ты не «больной». Ты тупой и чмошный. И быть таким ничтожеством - твой сознательный выбор.

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

Причем это ему еще повезло

С чем?

что он не оттуда начинает обрезать

Откуда оттуда?

иначе str.end имел бы все шансы уйти за пределы солнечной системы левого края строки

Он уйдёт в любом случае, но это проблема не моя.

А ну и да, trim писал не я, если кто не осилил понять - я просто выкинул оттуда strlen() и днище с интом. И все его проблемы не имеют ко мне никакого отношения.

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

Из чего это следует?

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

eao197 ★★★★★
()

Резюмируя, регистрант с =0 обделался, пытался выехать на том, что я забыл написать там -1 в портянке, которую я вообще не обязан был переписывать, ну это ладно. Второй анонимный балабол пытается приписать мне проблемы трима, который написал изначально не я, в котором я поменял только типы строк.

В итоге - регистрант обоссан, изменение строки было вызвано самим форматом строки, а не нужностью её в реализации. Аноним не мог.

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

Из детских ошибок в коде.

Где там детская ошибка?

Которые элементарно проявляются при первом же запуске «программы» с более-менее осмысленным набором проверочных данных и элементарным контролем за результатом.

Зачем мне это запускать? Я написал там не трим, а «строки».

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

С чем?

С тем, что вам не подсунули строку из одних пробелов.

А ну и да, trim писал не я, если кто не осилил понять - я просто выкинул оттуда strlen() и днище с интом. И все его проблемы не имеют ко мне никакого отношения.

Эпично. Кто же наваял сей шедевр?

string_t trim(string_t str) {
  while(*(str.begin) == ' ') ++(str.begin);
  while(*(str.end) == ' ') --(str.end);
  return str;
}
Неужели смайлик? Он, конечно, идиот, но не настолько же.

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

С тем, что вам не подсунули строку из одних пробелов.

Я написал тебе строки, чтобы показать, что проблема в строках, а не в триме анонима. За сам трим я ничего не говорил и ко мне он отношения не имеет.

Эпично. Кто же наваял сей шедевр?

[code=] static inline char *trim(char *s) { while (isspace(*s)) ++s; int l; if ((l = strlen(s)) > 0) { char *e = s + l - 1; while (isspace(*e)) --e; e[1] = '\0'; } return s; }

static inline char *trim(char *s) { while (isspace(*s)) ++s; while (isspace(*e)) --e; return s; }

Собственно так он и появился на свет. У него там было выне -1 - ктож знал?

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

За сам трим я ничего не говорил и ко мне он отношения не имеет.

Вы, анонимные цари, хорошо устроились: сначала высрали говно, вас в него макнули, вы начали съезжать, мол, код не ваш.

Речь про вот этот шедевр: тыц. Этот эпически говняный trim был написан царем и не имеет никакого отношения к trim-у от смайлика. И над этим тримом здесь и стебутся.

eao197 ★★★★★
()

Прибейте кто-нибудь тред! Это позорище на первом месте в топе.

Хотя, скоро само от нас закроется.

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

Вы, анонимные цари, хорошо устроились: сначала высрали говно, вас в него макнули, вы начали съезжать, мол, код не ваш.

Всмысле? Ты совсем что-ли тупо? Хотя ты уже опущенный, в целом это бесполезно и обделался ты уже с изменением строки, ну ладно. Авось ты когда-то станешь человеком:

Это

string_t trim(string_t str) {
  while(*(str.begin) == ' ') ++(str.begin);
  while(*(str.end) == ' ') --(str.end);
  return str;
}

Есть это:

static inline char *trim(char *s)
{
     while (isspace(*s)) ++s;
     int l;
     if ((l = strlen(s)) > 0) {
          char *e = s + l - 1;
          while (isspace(*e)) --e;
          e[1] = '\0';
     }
     return s;
}

Которое было сокращено до:

static inline char *trim(char *s)
{
     while (isspace(*s)) ++s;
          while (isspace(*e)) --e;
     return s;
}

В котором я зыбл добавить -1, т.к. это вообще не моя проблема и не моя задача.

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

Этот эпически говняный trim был написан царем и не имеет никакого отношения к trim-у от смайлика.

Ога, ога. 100% написан.

И над этим тримом здесь и стебутся.

Опять же, ничтожество своё мнение считает за ноль настолько, что уже подсознательно пытается прятаться за «мы».

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

В котором я зыбл добавить -1, т.к. это вообще не моя проблема и не моя задача.

Не считая, что «это» не «есть это», даже не считая «забыл добавить -1», есть еще и проблема с обработкой строк из одних пробелов.

ЗЫ. Вы даже не поняли, где нужно делать -1.

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

А зачем там её прибавлять? Она там не нужна. end указывает не на конец, а за конец, т.е. на 0...10(последний символ *9), если строка из 10 символов, то 10-0 будет 10.

strlen(str) + str

Если от результата отнять str, то будет strlen(str) - не?

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

end указывает не на конец, а за конец

после последнего --(str.end) str.end указывает на последний значимый символ - на скобочку от смайлика. Поэтому end - begin ровно на 1 меньше, чем реальная длина строки. Ты не прав.

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

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

Никаких проблем нет. Если там одни пробелы - оно обделается на втором цикле. Он не отработает без -1, а мой код был написан без -1.

В конечном итоге ты опять попал в вилку. Либо ты признаешь, что -1 не моя ошибка(я там уже кидал код с -1 - у тебя есть шанс съехать благодаря ему) и обедлываешься с первым уличением и тогда работает второе, но второе это уличение анонима, а если не согласен, то ты обделываешься щас.

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

после последнего --(str.end) str.end указывает на последний значимый символ - на скобочку от смайлика. Поэтому end - begin ровно на 1 меньше, чем реальная длина строки. Ты не прав.

А какое это отношение имеют к print? Это проблема трима, опять же. Так же - он не может указывать на скобочку, ибо он не работает.

В чём конкретно я не прав?

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

Никаких проблем нет.

Ok, вам виднее. У меня ваша программа на строке из одних пробелов падает из-за того, что str.end становится меньше str.begin. А потом вы делаете (end - begin). Отсюда и проход по памяти.

Но у вас проблем нет, все хорошо, прекрасная маркиза.

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

В чём конкретно я не прав?

В том что программа от смайлика работает, а твоя программа не работает.

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

В том что программа от смайлика работает, а твоя программа не работает.

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

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

Ok, вам виднее. У меня ваша программа на строке из одних пробелов падает из-за того, что str.end становится меньше str.begin.

Он не может стать меньше, ибо второй цикл не работает, как ты уже выяснил в первой свой попытке.

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

А уж падать она не может никак. Даже если предположить, что оно станет(если ты добавишь туда -1 и обосрёшься с первым высером), то никак упасть внутри write() не может - по определению.

Но у вас проблем нет, все хорошо, прекрасная маркиза.

Ты просто врёшь, что я могу ещё сказать.

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

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

Чем он кривой? Работает быстрее буста, это было показано. Единственная ошибка этого смайлика в том, что он взял int вместо size_t при вызове strlen().

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

Даже если предположить, что оно станет(если ты добавишь туда -1 и обосрёшься с первым высером), то никак упасть внутри write() не может - по определению.

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

string_t string(char * str) { return (string_t){str, strlen(str) + str};}

string_t trim(string_t str) {
  while(*(str.begin) == ' ') ++(str.begin);
  while(*(str.end) == ' ' || !(*str.end)) --(str.end);
  return str;
}
В этом виде начинают обрезаться пробелы справа. Но т.к. у себя в trim-е вы никак не соотносите значения begin и end между собой, то уменьшение end меньше begin спокойно происходит на строке из одних пробелов. Что и вылазит затем внутри write.

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

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

Как я понял все попытки рассказать мне о том, что у меня что-то не правильно не удались? Ладно.

А с чего это она не работает? Конкретнее. Где и как она не работает? Единственная моя проблема, что я решил просто скопипастить трим, чтобы вы не ныли, что его нет. Но мне было лень и я его скопипастил криво - бывает. В целом, как я уже 10раз писал - трим ко мне никакого отношения не имеет, я не писал, не пытался и моя программа делает совершенно другое. Она выводит строки по двум указателям и создаёт строки из сишных. Остальное меня не волнует и к моей программе никакого отношения не имеет.

Изначальный код вообще не работает, ибо тримит 100500 раз уже отримленную строку, вернее вторая часть у него так же неработает уже на второй итерации.

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

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

Интересно, есть вообще вменяемые программисты на чистом Си?

Конечно. Но на LOR-е они пишут как регистранты. А вот вменяемых анонимов, которые пишут на чистом Си, походу, не бывает.

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

А с чего это она не работает? Конкретнее. Где и как она не работает?

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

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

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

Он кукарекал про то, что в память по некому адресу трим записал 0 и что исходную строку полученную в результате malloc() это не изменило. Все понятно.

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

Чем не вменяемый код на Си?

Вопрос был про вменяемых программистов, а не про вменяемый код.

Некий смайлик ведет себя как идиот, что не позволяет воспринимать его как вменяемого программиста.

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

на LOR-е они пишут как регистранты

Все полтора человека, ага.

А вот вменяемых анонимов, которые пишут на чистом Си, походу, не бывает

4.2, бывают - я, и еще кого-то видел :D Не в этом треде, конечно.

// другой мимоаноним

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

Некий смайлик ведет себя как идиот, что не позволяет воспринимать его как вменяемого программиста.

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

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

ведет себя как идиот

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

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

Работает быстрее буста, это было показано.

Не было. Кроме того на больших строках он еще и проиграет.

Единственная ошибка этого смайлика в том, что он взял int вместо size_t при вызове strlen().

Он не заметил, что менял исходную строку. Впрочем это уже можно считать придиркой.

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

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

Ну так а другой-то информации и нет. Говорит ерунду, от написания кода либо съезжает, либо пишет какое-то корявство. Ничего другого про него не известно.

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

Должен заметить, что в этом треде все идиоты. Да, и я, раз пишу сюда :(

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

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

А он должен?

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

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

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

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

царь это анонiмус, только в другой фазе. анонимные психиатры лора это давно поняли.

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

Он не заметил, что менял исходную строку. Впрочем это уже можно считать придиркой.

Не знаю, чем это можно считать, но трим написан верно и эффективно. Лично я не верю, что он не знал о том, что меняет исходную строку, когда присваивал 0 в своей же функции.

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

трим написан верно и эффективно

Только вызывать его 10M раз было бессмысленно, если после первого вызова пробелы с одного конца были уже отсечены. Или с обоих концов, не помню уже.

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

пишет какое-то корявство

Да какое корявство? Нормальный код на Си. Скажи, что там не так уже что-ли. Кроме предположений о якобы что он не заметил что строку меняет. Но это же чушь.

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

Только вызывать его 10M раз было бессмысленно, если после первого вызова пробелы с одного конца были уже отсечены.

Ну хз для чего. Наверное для того, чтобы замеры по time-у выполнить. Не знаю.

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