LINUX.ORG.RU

Линус Торвальдс о предупреждениях в GCC


0

0

Линус Торвальдс достаточно нелестно отозвался о некоторых опциях показа предупреждений (warnings) в GCC, говоря о том, что реализация многих из них просто не учитывает желания программиста и реальные проблемы. Тем неменее, некоторые из предупреждений очень полезны и используются при сборке ядра. Линус также отметил, что язык C не совершенен и для написания абсолютно безопасного кода он бы выбрал Паскаль.

>>> Подробности

★★★★★

Проверено: Teak ()
Ответ на: комментарий от wRAR

>Ну лозунг "Инструмент под задачу" тут, кажется, не очень популярен...

Это, наверное, для тех, кто мало работал над созданием разноплановых задач в разных предметных областях. Иногда (для меня по крайней мере) лучше потратить 2-3 недели на подбор и изучение подходящего средства и потом более эффективно выполнить работу, чем осознать это тогда, когда большая часть работы уже сделана.

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

> Длиной в 255 символов максимум?

Открой для себя freepascal :) Правда, там это реализовано несколько... странно (во избежание 5.1 :) )

acheron ★★★★
()

Нет, это уже надоело! Линус - ЛАМО! Нужно слушать Столмена, а не его. Линус - не авторитет больше. У него одни ошибки последнее время. То ему гном не нравится, теперь gcc не нравится. Интересно, много ли его "полезного" кода в ядре?

anonymous
()

Весь флейм из-за кривого перевода!! Линукс наоборот ОПУСТИЛ паскаль!

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

>Интересно, много ли его "полезного" кода в ядре?
больше чем твоего! ;)

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

> полная чушь по моему... на С можно писать абсолютно безопасный код.

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

anonymous
()

Где-то тута у меня Фаронов завалялся. В двух томах. )))) Придется вспоминать.

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

> длиной в 255 символов максимум? Ню-ню. (И не надо сравнивать это с PString или как оно там называется - не помню уже - давно дело было - в С++ тоже всякие хитрые классы имеются)

AnsiString и WideString не какие-то хитрые классы, а базовые строковые типы в Delphi/FP. Физически переменная этих типов представляет собой указатель на область памяти, а по адресу (-1) от этого указателя хранится длина в байтах (AnsiString) или словах (WideString) указываемой области памяти. Такая структура очень удобнаю

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

>Физически переменная этих типов представляет собой указатель на область памяти, а по адресу (-1) от этого указателя хранится длина в байтах (AnsiString) или словах (WideString) указываемой области памяти.

Где хранится "длина в байтах" - это уже детали реализации, на них полагаться нет смысла и даже вредно. Есть функция length() - ею и следует пользоваться (тем более, что она, скорее всего, является inline и к лишнему оверхеду не приводит).

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

Линус не будет писать на Паскале никогда, так как паска (paska) по фински - дерьмо. Поэтому финики Паскаль и не учат :)

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

>Линус не будет писать на Паскале никогда, так как паска (paska) по фински - дерьмо. Поэтому финики Паскаль и не учат :)

Линус - швед и родной язык его - шведский

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

> Линус не будет писать на Паскале никогда, так как паска (paska) по фински - дерьмо.

А по-русски, думаешь, лучше? ".pas - кал". :D И ничего, учат и прутся. :)

ero-sennin ★★
()
Ответ на: комментарий от idoreallyhatespam

>блин, переводчик - дебил =)

>If I wanted a language that didn't allow me to do anything wrong, I'd be using Pascal.

+1

birdie ***** (*) (29.11.2006 19:35:05)
Проверено: Teak (*) 29.11.2006 19:35:51

szh ★★★★
()

Бугого! Да в паскале все уродливо by default. Не касаясь астральных миров и тонких материй ответьте: нравится ли вам уродливый синтаксис, все эти begin|end, Procedure-Function, даже return нормального нет. FunctionName:= result_value - как грцца, ужоснах.

slackerr
()

Может быть это был вовсе и не Линус?! А Может быть его просто зомбировали или шантажировали?!

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

> ага а Kylix как тогда линкуется к QT а?

через костыль - с одной стороны плюсовый, с другой сишный

anonymous
()

На самом деле, паскаль быстрый, и нет никаких переполнений буферов. Жаль что убогий. :(

anonymous
()

birdie - flamebot. Ты хоть новость пойми, перед тем как публиковать. А Теак, тоже- метнулся подтверждать.

Линус пишет, что если бы ему нежен был язык, который запрещат всё неправильное, то он выбрал бы паскал.

Это принципиально противополжное тому, как ты перевёл.

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

>А внятно ответить чем ЯЗЫК паскаль в реализации FP/Delphi плох сможете?
Слущай суда, больной брат анаимус. Иди поеж ухи и сдохни.
Object Pascal имеет совсем отдалённое сходство с Пасцалем от Вирта. Больной моск это ниасилит, но может в следующей жизни ты будешь жабой и твой пердёж в лужах буду доставлять людям радость...

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

> AnsiString и WideString не какие-то хитрые классы, а базовые строковые типы в Delphi/FP. Физически переменная этих типов представляет собой указатель на область памяти, а по адресу (-1) от этого указателя хранится длина в байтах (AnsiString) или словах (WideString) указываемой области памяти. Такая структура очень удобнаю

То есть все реальные и труЪ пацаны массивы от (-1) отсчитывают на самом-то деле?

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

>AnsiString и WideString не какие-то хитрые классы, а базовые строковые типы в Delphi/FP. Физически переменная этих типов представляет собой указатель на область памяти, а по адресу (-1) от этого указателя хранится длина в байтах (AnsiString) или словах (WideString) указываемой области памяти. Такая структура очень удобнаю

Спасибо за объяснение )

Только вот всё равно всё упирается в производительность - на С всё равно будет быстрее. А за быстроту платим неотлавливаемостью багов ;) e.g. с такой вещью столкнулся - есть char** = {"email1@abc.def", "email2@abc.def"... NULL}. Пишу функцию stringArrayToString, которая выбирает все адреса из этого char**, добавляет к ним \n ну и \0 в конце (предварительно посчитав, сколько точно байтов понадобится для этого дела) - всё это сохраняется в char*. Сижу, пишу прочие вещи (типа соединения по smtp), рефакторю немного (многие memset'ы заменил на * = NULL, запускаю прогу и вижу что Паша дорефакторился. Ни с того ни с сего программа вылетает в segfault на gethostbyname (по крайней мере так мне говорил gdb). Проверяю - вроде всё нормально - для всех переменных память выделена и отмемсеттина, убираю gethostbyname - прога вылетает на 1 функцию раньше. Причиной оказалось то, что кое-где (в другом месте, даже не в том файле где был gethostbyname) я не сделал memset / char* a=0 - в итоге в а помещался мусор, к которому что-то ещё и конкатенировалось. Как мне объяснили знающие люди, из-за того что все переменные содержатся в одном heap'e, это может приводить к вот таким нестандартным ситуациям - вопрос к знатокам - в вышеприведённой ситуации как-нибудь можно было отловить сей баг gdb?

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

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

Что быстрее? strlen(s) в C быстрее, чем length(s) в Pascal???

Led ★★★☆☆
()

>Праально! И вааще нехер маны читать: если че не можешь сделать всегда зови меня -- лишние деньги не помешают

Хе, хе. Сиди и жди когда тебя позовут как холуя-шабашника.

anonymous
()

Да нафиг они нужны эти языки? Ненужная надстройка. Сразу exec ляпать в hex редакторе.

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

> Линус умеет делать флеймопровокационные заявления ;) Как будто специально для ЛОР.

"If I wanted a language that didn't allow me to do anything wrong, I'd be using Pascal."

Линус тут не причем - а вот birdie - безграмотный провокатор.

-10

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

> + Настоящая модульность, а не ее имитация с помощью #include

man SML

> + Развитая система типов и их конструирования.

man Haskell

> Перегрузка операторов в FP ЕСТЬ.

Паскаль - чуть более строгий переносимый ассемблер, чем С.

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

>+ Настоящая модульность, а не ее имитация с помощью #include Чем uses crt; существенно отличается от #include <crt.h> && gcc -lcrt moo.c ?

Ты о такой вещи как пространства имен слышал?

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

> Проверяю - вроде всё нормально - для всех переменных память выделена и отмемсеттина, убираю gethostbyname - прога вылетает на 1 функцию раньше. Причиной оказалось то, что кое-где (в другом месте, даже не в том файле где был gethostbyname) я не сделал memset / char* a=0 - в итоге в а помещался мусор, к которому что-то ещё и конкатенировалось. Как мне объяснили знающие люди, из-за того что все переменные содержатся в одном heap'e, это может приводить к вот таким нестандартным ситуациям - вопрос к знатокам - в вышеприведённой ситуации как-нибудь можно было отловить сей баг gdb?

Паше советую посмотреть на valgrind (http://valgrind.org/), как раз помогает находить такие проблемы, а также умеет много чего еще.

ssvb
()

Это что, шутка такая,да? очередная.. ;-)

MiracleMan ★★★★★
()

каменты на лоре жжут как всещда...

ос на паскале - не труЪ, паскаль сакс. а почему?

да патамучто так не круто. а вот Си это круто. это наше фсои.

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

>Очень много программистов просили в свое время Вирта расширить Паскаль для целей прикладного профессионального программирования. Однако Вирт отвечал: "Я создал Паскаль для обучения студентов программированию и менять в нем ничего не нужно. Иначе это будет другой язык"

дедушка Вирт - молодец :)))

сделал кубики, чтобы дети учили буквы, только некоторые дети, выучив буквы, продолжают составлять слова из кубиков даже в преклонном возрасте :))))

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

> + Нормальные строки, а не уродские как в Си. Половина проблем с безопасностью и разных тупых багов из-за только из-за строк.

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

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

> Нет там никаких нормальных строк. Нормальные строки - это, скажем, в Perl6 (но писать ядро на Perl я ни в коем случае не предлагаю). В любом случае, "строка", состоящая из байт а не символов - это не строка.

Java рулит! ;)

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

> Java рулит! ;) Если бы. Столько воды в виде всяких оберток писать - этом редкий язык сможет похвастаться, наверное.

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

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

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

> И в добавок: а почему надо вручную указывать с какими либами прогу линковать? Почему компилятор сам не может этого выявить?

Месье прикидывается идиотом? Что такое компилятор, и что такое - линковщик?

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

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

Нет, а кроме шуток, налицо явная избыточность. Мне, по большому счёту, не нужны ни заголовочные файлы, ни линковка. :) Мне надо библиотечные функции заюзать, и только. Почему я не могу просто сделать import stdio, и чтоб умный компьютер сам догадался, что там куда прилинковать и заинклудить? :)

ero-sennin ★★
()

имеем 210мб файл где столбиком целые числа.
необходимо узнать сумму всех цифр
pascal
====== stlp.pp ======= компилить fpc любым
var i : integer;
sum,t : longint;
ss : string;
begin
sum:=0;
while not eof(input) do
begin
readln(input,ss);
val (ss,t,i);
if i<>0 then halt(1);
inc(sum,t);
end;
writeln (sum);
end.
======================
c++
==============
#include <iostream.h>
int main(void)
{
int i,s;
i = 0;
while (cin >> s)
{ i=i+s; }
cout << i;
cout << endl;
return 0;
}
=====================
время выполнения
с++ версия
real 3m18.872s
user 3m17.920s
sys 0m0.520s

pascal
real 0m7.971s
user 0m7.390s
sys 0m0.320s

что мне сказать компилятору c++ чтоб быстрее работал?

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

>> c++ ============== #include <iostream.h> int main(void) { int i,s; i = 0; while (cin >> s) { i=i+s; } cout << i; cout << endl; return 0; }

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

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

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

а в чем именно проблема, не потрудитесь прокомментировать?

// wbr

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

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

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

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

>> а в чем именно проблема, не потрудитесь прокомментировать?

догадайся когда наступит переполнение переменной...

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

> догадайся когда наступит переполнение переменной...

это так принципиально влияет на скорость исполнения теста?

// wbr

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

>> это так принципиально влияет на скорость исполнения теста?

а где я про скорость говорил? :-)

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