Автор Тема: Возможно ли исправить дефекты языка си?  (Прочитано 5895 раз)

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
В реализации компиляторов си, нет проверки границ массива, даже статического.

Данную проверку невозможно реализовать? К примеру размер статического массива вычислить можно. С динамическим массивом поможет функция msize. Почему в компиляторах не реализуют данные проверки?

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Возможно ли исправить дефекты языка си?
« Ответ #1 : Ноябрь 30, 2012, 04:44:37 pm »
В реализации компиляторов си, нет проверки границ массива, даже статического.

Данную проверку невозможно реализовать? К примеру размер статического массива вычислить можно. С динамическим массивом поможет функция msize. Почему в компиляторах не реализуют данные проверки?
В тьюринг-полном языке невозможно на этапе компиляции в общем случае проверить выход за границу даже статического массива.
Y = λf.(λx.f (x x)) (λx.f (x x))

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Возможно ли исправить дефекты языка си?
« Ответ #2 : Ноябрь 30, 2012, 04:46:05 pm »
В реализации компиляторов си, нет проверки границ массива, даже статического.
А динамические проверки в Си есть. По крайней мере в некоторых реализациях при некоторых опциях.

Вообще, зачем Си, если есть C++? ;-)
Y = λf.(λx.f (x x)) (λx.f (x x))

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Возможно ли исправить дефекты языка си?
« Ответ #3 : Ноябрь 30, 2012, 04:58:29 pm »
Так в книжках по языкам и пишут, язык си, с++ не проверяет границы массива, и далее будьте внимательны не допускайте такие ошибки, сразу становится спокойно. :o

А в каких компиляторах?

Я имею ввиду проверку как в паскале.

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Возможно ли исправить дефекты языка си?
« Ответ #4 : Ноябрь 30, 2012, 05:13:41 pm »
Так в книжках по языкам и пишут, язык си, с++ не проверяет границы массива, и далее будьте внимательны не допускайте такие ошибки, сразу становится спокойно. :o
Если кто-то в С++ использует Сишные недомассивы, то он сам себе злобный буратин.

А в каких компиляторах?

Я имею ввиду проверку как в паскале.
Ну, как минимум я подобное помню в вижуал-штудии в debug-mode.

Кстати, а как в Паскале? В каком паскале? Скажем в Обероне проверок нет :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Возможно ли исправить дефекты языка си?
« Ответ #5 : Ноябрь 30, 2012, 05:22:41 pm »
Так в книжках по языкам и пишут, язык си, с++ не проверяет границы массива, и далее будьте внимательны не допускайте такие ошибки, сразу становится спокойно. :o
Если кто-то в С++ использует Сишные недомассивы, то он сам себе злобный буратин.

А в каких компиляторах?

Я имею ввиду проверку как в паскале.
Ну, как минимум я подобное помню в вижуал-штудии в debug-mode.

Кстати, а как в Паскале? В каком паскале? Скажем в Обероне проверок нет :-)

турбо паскаль, фри паскаль, при ошибке выдаёт в каком файле в какой строке ошибка. Для скорости проверку можно отключить.
В конкретном компиляторе нет или в стандарте языка?


valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Возможно ли исправить дефекты языка си?
« Ответ #6 : Ноябрь 30, 2012, 05:25:19 pm »
В конкретном компиляторе нет или в стандарте языка?
У Оберона нет стандарта :-) Есть сообщение о языке. Там про границы массивов нет ничего. Также как и про деление на ноль например.

Впрочем, в мире паскаля и производных (кроме Ады) довольно наплевательски к стандартам относятся даже если они есть :-) Вот какому стандарту соответствует турбо-паскаль? ;-)
Y = λf.(λx.f (x x)) (λx.f (x x))

DIzer

  • Гость
Re: Возможно ли исправить дефекты языка си?
« Ответ #7 : Ноябрь 30, 2012, 05:26:12 pm »
В реализации компиляторов си, нет проверки границ массива, даже статического.

Данную проверку невозможно реализовать? К примеру размер статического массива вычислить можно. С динамическим массивом поможет функция msize. Почему в компиляторах не реализуют данные проверки?
В тьюринг-полном языке невозможно на этапе компиляции в общем случае проверить выход за границу даже статического массива.
  ;D ;D ;D ;D ;D

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Возможно ли исправить дефекты языка си?
« Ответ #8 : Ноябрь 30, 2012, 05:56:42 pm »
Выправленный Си существует. Очевидно же это Объерон!  ;D

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Возможно ли исправить дефекты языка си?
« Ответ #9 : Ноябрь 30, 2012, 09:04:09 pm »
Выправленный Си существует. Очевидно же это Объерон!  ;D
о_О А разве это не Cyclone?
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Возможно ли исправить дефекты языка си?
« Ответ #10 : Ноябрь 30, 2012, 09:06:27 pm »
Выправленный Си существует. Очевидно же это Объерон!  ;D
о_О А разве это не Cyclone?
Который умер :-)
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Возможно ли исправить дефекты языка си?
« Ответ #11 : Ноябрь 30, 2012, 09:20:32 pm »
Выправленный Си существует. Очевидно же это Объерон!  ;D
о_О А разве это не Cyclone?
Который умер :-)
И что с того? Что мешает кому-надо оживить его? ))
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…