должны ли средства разработки учить программистов делать правильно?
С компиляторами языка C всегда будут такие проблемы.
Вопрос такой: можно делать так, что бы средства разработки шли "навстречу" разработчикам - исправляли мелкие ошибки, игнорировали нарушения стандартов. Можно сделать так, что бы они ругались на любое нарушение, приучая программиста к правильным привычкам. Что лучше?
и еще: я вроде слышал о каких-то опциях соответствия стандартам...
С компиляторами любого другого языка тоже.С любым компилятором языка Оберон, например, таких проблем нет. Там компилятор нельзя обмануть.
Можно сделать так, что бы они ругались на любое нарушение, приучая программиста к правильным привычкам.Это лучше.
lint?
Имхо - нужно и то, и другое - взависимости от задачи.
Во время написания прототипа или "одноразовой" задачи - хочется, чтобы средства разработки как можно больше прощали, так как в таких задачах - наиболее важно получить результат, а не обеспечить правильность средств.
При написании релизной версии - хочется, чтобы средства разработки указали, как можно больше потенциональных мест с ошибками.
Соответственно: лучше всего компромисс -наличие нескольких уровней warning-ов.
Я чо-та прихожу к выводу, что одноразовых задач вообще не бывает. Ну то есть чтобы в ней было больше 15 строк, и чтобы я её потом нигде не поиспользовал... Неа, нету. В последние несколько лет, по крайней мере.
К тому же привыкнув писать правильно будешь всегда писать правильно. А отвыкать писать правильно - зло.
А ты стирай сразу, как первый раз используешь.
Тогда в следующий раз сделаешь лучше.
Есть большая задача - на человеко-годы. Эту задачу можно решить разными методами.
Для того, чтобы принять решение - какой метод выбрать - необходимо написать кучу простых прототипов, которые позволяют уже на реальных цифрах оценить эффективность того, или иного подхода.
Причем такие прототипы, хочется запустить как можно раньше - чтобы хотя бы в черновом виде оценить правильность или неправильность выбранного подхода, и при этом не хочется тратить время на полноценную обработку ошибок, не хочется полностью реализовывать все задекларированные методы, не хочется рассматривать все варианты, не хочется иметь полноценной инкапсуляции и т.д.
> К тому же привыкнув писать правильно будешь всегда писать правильно.
Надо стремиться писать правильно, т.е. если есть возможность, то лучше написать правильно. Но если написать правильно возможности нет (она "дорогая" то хочется, чтобы язык позволил написать и "неправильно".
Язык программирования должен позволять программисту застрелиться. А как же иначе
я за возможность опционально позволять/не позволять. Например, va_arg я могу использовать в своих, не известных компилятору целях. Почему он должен меня ограничивать? С другой стороны, ворнинг писать надо - ведь, скорее всего, я просто лажанулся.
text editor --- complicated, cryptic, powerful, unforgiving,
dangerous. TECO, to be precise.>>
---
...Я работаю антинаучным аферистом...
> : Язык программирования должен позволять программисту застрелиться. А как же иначе
Дык. Но! Перед тем как программер сможет собственно застрелиться, ему будет необходимо в ясной и недвусмысленной форме указать компилятору, что он хочет именно застрелиться. Например, unsafe {...}.
---
...Я работаю антинаучным аферистом...
Самый популярный язык - Вижуал Бейсик.
Кроме того, здесь ты один вспомнил про его существование.
Остальные говорили о других языках.
---
...Я работаю антинаучным аферистом...
А я согласен. Самая популярная платформа - это Win32. Не все, кто закончил колледж способны прогать под Win32 на С++ . Что остается, конечно VB. Тем более что там определенные вещи на порядок проще делаются, чем в C++ (не спасают ни MFC, ни ATL/WTL и даже не #import ). Конечно есть еще Delphi, но вроде в Штатах VB более популярный.
Я бы остановился здесь.
В любом случае, считаю популярность ВБ сильно преувеличенной.
Кроме того, мы живём здесь, а не в Штатах, да и в техникумах,
боюсь, не все обучались.
---
...Я работаю антинаучным аферистом...
Просто мне кажется, что на вид технологии сегодня в первую очередь влияют Штаты.
VBA - самый популярный язык программирования
Я бы не стал различать VBA и VB. VBA - это VB, который хостится в Оффисе.
Повторю: мы не в Штатах, да и в техникумах не все из нас обучались.
---
...Я работаю антинаучным аферистом...
IT
А в школе ВБ не изучается --- Паскаль и Си.
Поэтому ВБ --- _нисколько_не_популярен_.
---
...Я работаю антинаучным аферистом...
Спорное утверждение.
Человек все-таки большую часть жизни работает, а не проводит в школе.
И какой-нибудь босс на IT сильнее влияет, чем вчерашний школьник.
А на работе чел скорее юзает VB/VBA, чем C или Паскаль.
Это кроме того, что оно ложно.
Подумай на досуге, почему был так успешен Борланд.
---
...Я работаю антинаучным аферистом...
Ты серьезно считаешь, что борланд сильно повлиял на IT?
Иначе в объявлениях о найме на работу слово "Delphi"
не встречалось бы. А встречается.
Но и это следствие того же влияния образования.
В том числе и школьного.
---
...Я работаю антинаучным аферистом...
Я правильно понимаю, что ты говоришь только про Россию?
---
...Я работаю антинаучным аферистом...
Где еще кроме России так распространен Дельфи?
keyword: delphi - 45 результатов
keyword: Java - 2,322
keyword: visual basic - 620
sql - 3130
Однако обоснованность исходного утверждения это нисколько не затрагивает.
---
...Я работаю антинаучным аферистом...
2322 > 620.
---
...Я работаю антинаучным аферистом...
речь вроде шла про дельфи...
И про то, что влияет на распространённость ЯП.
---
...Я работаю антинаучным аферистом...
> Иначе в объявлениях о найме на работу слово "Delphi" не встречалось бы. А встречается.
> 2322 > 620
(Job.com
keyword: delphi - 45 результатов
keyword: Java - 2,322
keyword: visual basic - 620
sql - 3130)
> Речь шла про ВБ
Ну и что прикажешь думать после такого?
У Borland есть еще продукты под Java. А так конечно Delphi был рульный продукт, только вот не надо было навязывать свою модель компонетов. Надо было под MS, под ActiveX полностью подстраиваться. С тем же VB лучше дружить.
Если я ничего не путаю, в те времена был только несчастный MFC, да ещё непонятно какой (старой) версии. Подстраиваться было не подо что.
Не могу точно сказать, кто там был когда. Когда были первые версии Delphi? Но потом MS активно развивала VB + ActiveX. VB 3.0 уже рулил.
Году в 95-96, наверно. По крайней мере, в этом время появилась Windows 95 и исчез Borland Pascal for Windows
В 95-96 уже рулил и VB, и ActiveX (вроде).
gcc-gcc.gnu.org, является ли это багом. Если это regression с версии 2.х, то его зафиксят. Если лень спрашивать, то положи сюда код, я берусь поглядеть в стандарт и спросить/запостить баг репорт.
Если есть кусок кода, который демонстрирует это поведение, то можно спросить в Пример кода вот такой:
#include <stdarg.h>
void
qqq(va_list args)
{
char *c = va_arg(args, char *);
printf("%s\n", c);
}
void
qqq1(va_list args)
{
va_list args_copy;
va_copy(args_copy, args);
qqq(args);
}
void qqq2(void *v, ...)
{
va_list args;
va_start(args, v);
qqq1(args);
va_end(args);
}
int
main(void)
{
void *v;
qqq2(v, "zhopa");
}
Попытка собрать его на машине с gcc 2.95.2 приводит к "undefined reference to `va_copy'". Тогда я удивляюсь каким же образом этот libol собрался на машине с gcc 2.95.2. Копаю и обнаруживаю там свой собственный va_copy на случай отсутствия системного. Так что тревога оказалось ложной.
---
"Три раза, Ганс, три раза. Запомни, Ганс: три раза."
Оставить комментарий
sergey_m
Столкнулся сегодня со следующей фигней. Есть такая программа - syslog-ng. В принципе программа давно известна, и у неё хорошая репутация, имхо. Некоторые дистрибутивы линукса её используют по умолчанию, вместо обычного syslogd.Оказалось, что если её собрать на FreeBSD 4.11, то она просто падает в кору. Анализ показал, что программа обращается к va_arg не сделав предварительно va_start. va_end она тоже не делает. Сразу встает вопрос, почему же она работает на других ОС, например на FreeBSD 5.3. Оказалось, что дело тут не в ОС, а в компиляторе. То есть gcc 3.4, в отличие от gcc 2.95.2 разрешает программистам вот такие вольности, как нарушение C99.
Я считаю, что это неправильно. Новая версия компилятора позволяет нарушать стандарт без всяких последствий. Таким образом компилятор не создает препятствий в написании кода, который не будет переносим на другие среды, где C99 соблюдается, однако таких поблажек не деляется.