Форум сайта python.su
ShamanОчень часто встречаются эти, которые знают язык “C/C++”. Потом пишут какую-нибудь быдлятину, профессора вузов.
Там же и знать особо нечего. :)
const char *f(a) char a; {return 0;}
char *f(a) int a; {return 0;}
Отредактировано py.user.next (Май 1, 2017 09:08:43)
Офлайн
Я всего лишь подразумевал большую простоту чистого С в сравнении с Питоном, у которого тот же самострел определяется только по факту.
Кстати, почему нужно считать ошибкой то, что компилятор пропускает?
Офлайн
ShamanОшибкой оно становится тогда когда вы в документации одно написали а оно делает другое.
Кстати, почему нужно считать ошибкой то, что компилятор пропускает?
Офлайн
doza_andВот именно! Но не раньше.
Ошибкой оно становится тогда когда вы в документации одно написали а оно делает другое.
Офлайн
ShamanЭто если ты стандарт прочитал. Он довольно-таки математически написан, то есть очень точно. Но стандарт надо читать, а на это нужно время. Никто не читает, а потому делает ошибки, не зная, например, что длинные числа в константах могут просто обрезаться. То есть ты пишешь, например “int a = 123451234512345;” а попадает туда “56789”. Откуда? То есть компилятор тебе всё скомпилировал, никаких ошибок нет. Вот я такую фигню как-то разгребал на форуме на одном. Не было понятно, откуда-то ошибка и всё. Вот оказалось, что обрезается эта фигня, если не помещается. То есть это нужно знать, какого размера в битах допустимы числовые константы. Иначе она тихонько будет фигню какую-то выполнять.
Я всего лишь подразумевал большую простоту чистого С в сравнении с Питоном
ShamanСам компилятор может быть не очень хорошо реализован и просто не знать всех этих нюансов. Поэтому есть вот эти анализаторы, которыми прогоняешь код и они отлавливают такие вещи. Я вот нашёл баг тогда в gcc, в функции printf() или scanf() по-моему, и написал в багтрекер им, и где-то через года два они мне написали туда, что баг исправлен теперь в связке с таким-то другим багом. То есть сам компилятор тоже может упускать что-то. Это было именно копание в стандарте, какой-то редкий нюанс, который я, изучая стандарт, сразу же проверял на практике.
Кстати, почему нужно считать ошибкой то, что компилятор пропускает?
Офлайн
py.user.nextНу так не нужно же впихивать невпихуемое.
обрезается эта фигня, если не помещается
py.user.nextТам есть статус завершения операции.
А в сишнике такого нет, просто будет читать мусор и выдавать тебе
Офлайн
Shaman
Там есть статус завершения операции.
#include <stdio.h>
int main(void)
{
FILE *fp;
int c;
int ret;
fp = fopen("file.txt", "r");
ret = putc('x', fp);
printf("putc(): %d\n", ret);
while ((c = getc(fp)) != EOF) {
printf("read %d\n", c);
}
printf("ferror(): %d\n", ferror(fp));
fclose(fp);
return 0;
}
[guest@localhost c]$ cat file.txt
abc
[guest@localhost c]$ .ansi t.c -o t
[guest@localhost c]$ ./t
putc(): -1
read 97
read 98
read 99
read 10
ferror(): 1
[guest@localhost c]$
#!/usr/bin/env python3
f = open('file.txt')
f.write('x')
f.read()
f.close()
[guest@localhost c]$ ./t.py
Traceback (most recent call last):
File "./t.py", line 4, in <module>
f.write('x')
io.UnsupportedOperation: not writable
[guest@localhost c]$
Отредактировано py.user.next (Май 1, 2017 12:01:28)
Офлайн
Окей.
А если сравнить объёмы стандартных библиотек и количество поддерживаемых парадигм? Или хотя бы количество типов потоковых объектов?
Офлайн
ShamanНу, в питоне ничего знать не надо особо. То есть я сам, бывает, учусь прямо из питона каким-то сложным вещам, потому что и в документации всё разжёвано (не сравнить с RFC, их тоже читаю иногда), и само устройство этих средств довольно просто, ими легко пользоваться, и исходники есть (я как-то смотрел алгоритм base64 прямо в них (сам его написал, а потом сравнивал с питонячьим - удобно учиться так)). А в сишнике, например, чтобы сделать потоки, надо много чего прочитать и нужны какие-то примеры, и не один пример. А в питоне документация приводит примеры и они все простые - через пять минут у тебя уже пул потоков работает какой-нибудь там. Я вот регулярки учил в питоне, а до этого они казались сложными (там ведь несколько видов, где-то есть средства, где-то нет средств). Поэтому хорошо с питона начинать программировать, так как в нём знать ничего не надо.
А если сравнить объёмы стандартных библиотек и количество поддерживаемых парадигм? Или хотя бы количество типов потоковых объектов?
Отредактировано py.user.next (Май 2, 2017 01:57:33)
Офлайн
C С приходится знать не про язык, а про операционку и предметную область. Так это нормальная ситуация ведь.
Офлайн