Оберон-технология: особенности и перспективы |
Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение.
Всего в теме 6256 сообщений
Добавить свое сообщение
Отслеживать это обсуждение Обсуждение из раздела Школа ОБЕРОНА
№ 1136 28-11-2006 09:42 | |
Ответ на »сообщение 1135« (Андрей Хохлов)
___________________________
>>>Немного не по теме, кто-нибудь из знатоков ЕС-IBM/360 может объяснить следующий пример на PL/I:
Это скорее не к языку, а к аппаратуре :)
На многих АЦПУ плохо различались 0 и 6.
Вместо 1/100 получить 1/160 можно было очень просто.
№ 1135 28-11-2006 08:38 | |
2Img - не цепляйтесь к убогому.
То что можно проверить - должно быть проверено (и Оберон здесь не безгрешен), но к сожалению очень многое проверить нельзя.
Немного не по теме, кто-нибудь из знатоков ЕС-IBM/360 может объяснить следующий пример на PL/I:
S=1.0;
N=100;
H=S/N;
Насчет типов не уверен, скорее всего S - вешественное, N - целое
(возможно с указанной точностью)
№ 1134 28-11-2006 05:49 | |
>>>неявное приведение типов это исторически сложившаяся фича васика
>>>не нравится, пишите
>>>Option Strict On
Вот о том и речь! То, что должно быть "по умолчанию", т.е. максимальная защита от "небезопасного" программирования, требует специальной директивы. А то, что требует разрешения, идет "по умолчанию". Как говорится, Бейсик уже не исправишь - "исторические фичи", понимаете ли...
№ 1133 28-11-2006 04:17 | |
Ответ на »сообщение 1131« (Img)
___________________________
неявное приведение типов это исторически сложившаяся фича васика
не нравится, пишите
Option Strict On
№ 1132 28-11-2006 01:13 | |
>>>Вот о чем идет речь!
И последнее - чтобы прояснить смысл до конца.
String не является расширением типа Double - это совершенно разные типы данных. И получив в качестве параметра значение совершенно другого типа, чем заданный в определении, надежная функция не должна делать вид, что все хорошо. Ибо значение другого типа, не являющегося расширением определенного в сигнатуре функции, скорее всего говорит об ошибке программиста - именно это и происходит в данной ситуации. Насколько я понимаю, в Оберонах такая ситуация при обращении к процедуре Math.Sqrt абсолютно невозможна.
№ 1131 27-11-2006 23:25 | |
>>>Вы же должны понимать, что "строка"+"строка"="строкастрока"
Я то как раз все прекрасно понял :)
Это Вы не поняли, о чем я хотел сказать.
Если в определении функции написано, что параметр функции имеет тип Double, то никакого НЕЯВНОГО преобразования из передаваемого типа к тому типу, который требует функция в надежном языке быть НЕ МОЖЕТ!
Это, извините, не полиморфизм, а просто чушь. В полиморфной функции может передаваться экземпляр базового класса, тогда все его потомки тоже допустимы. Но здесь-то полная чушь! Функция требует в качестве параметра Double. Я передаю ей String. И вместо того, чтобы просигналить о несогласовании типов, она его неявно преобразовывает в тот тип, который ей нужен и выполняет свою функцию. Никаким безопасным программированием тут и не не пахнет! Даже в смысле полиморфизма ООП!
Вот о чем идет речь!
№ 1130 27-11-2006 14:16 | |
Ответ на »сообщение 1128« (Img)
___________________________
' А Бейсику все равно - ему на определение функции наплевать
' Он квадратный корень из любого мусора вычислит!
' И получим мы корень из ("2"+"2")=4,69041575982343
' Но ведь мы передали функции не Double, а черт знает что,
' т.е. String - Значит ей все равно, какой тип у параметра?
' Зачем тогда людей в смущение вводить всякими "d As Double"?
Ну как же? 4,6904... - это SQRT(22), т.е. так же, как и в примере с JavaScript, "2"+"2" = "22", неявное преобразование к типу параметра функции и понеслась душа в рай... :о))
Вы же должны понимать, что "строка"+"строка"="строкастрока"
№ 1129 27-11-2006 10:26 | |
Ответ на »сообщение 1119« (Антон Григорьев)
___________________________
AVC, info21: .. вы столкнулись с банальным флеймогоном, которого интересует только сам процесс придирок к вашим словам. Здесь это пока не очень заметно ..
Антон, большое спасибо. Уже и здесь заметно, особенно хорошо с подсказкой :))
№ 1128 27-11-2006 09:38 | |
Все-таки не поленился, подумал неужели за то время, которое я не общался с Бейсиком он поумнел?
Написал тест. Суть теста такая. Вводим две строки. А потом их как бы складываем и пробуем извлечь из полученного квадратный корень.
При этом смотрим определение функции System.Math.Sqrt
Public Shared Function Sqrt(d As Double) As Double
Отлично! Если передать функции нечто, что вовсе не является величиной типа Double и вообще числом не является, то функция при таком издевательстве должна возмутиться и отвергнуть такое насилие.
Ничего подобного! Все проглатывает и даже извлекает корень из
суммы двух строк.
(Проверено на MS Visual Basic 2005 Express Edition)
А вот сам тест:
Public Class Form1
Dim x As String, y As String, z As Double
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
x = TextBox1.Text
y = TextBox2.Text
' Здесь какие-то операции ...
' А здесь человек забыл, что x и y это строки и их надо
' преобразовать в числовые типы. Забыл и написал бред:
z = System.Math.Sqrt(x + y)
Label1.Text = z
' А Бейсику все равно - ему на определение функции наплевать
' Он квадратный корень из любого мусора вычислит!
' И получим мы корень из ("2"+"2")=4,69041575982343
' Но ведь мы передали функции не Double, а черт знает что,
' т.е. String - Значит ей все равно, какой тип у параметра?
' Зачем тогда людей в смущение вводить всякими "d As Double"?
End Sub
End Class
В общем "надежный" язык, надежнее некуда.
№ 1127 27-11-2006 09:07 | |
Ответ на »сообщение 1126« (Img)
___________________________
Многие люди не осознают смысл слов Джорджа Оруэлла:
"Свобода - это рабство!"
Предлагаю сделать эту фразу официальным девизом языка Оберон! :о)) В смысле:
"Свобода в написании программы оборачивается рабским трудом при её отладке!"
Добавить свое сообщение
Отслеживать это обсуждение
Дополнительная навигация: |
|