LINUX.ORG.RU

История изменений

Исправление den73, (текущая версия) :

В aref всегда возвращается тип t, даже если массив известного типа.

Думаю, ты не совсем прав. В SBCL, если ты делаешь

(let ((a (aref (the (simple-array fixnum (*)) foo) 3))) 
  а)
то а имеет тип fixnum и при удачном стечении обстоятельств никаких проверок в рантайме не будет (я это не проверял именно для типизированных массивов, но уверен на 90%). Т.е. с точки зрения спецификации, тип, возможно, и t, но на самом деле тип fixnum известен компилятору, со всеми вытекающими. Это и есть по определению статическая типизация, хотя на этом форуме не все разделяют моё мнение (ну и пусть).

Исправление den73, :

В aref всегда возвращается тип t, даже если массив известного типа.

Думаю, ты не совсем прав. В SBCL, если ты делаешь

(let ((a (aref (the (simple-array fixnum (*)) foo) 3))) 
  а)
то а имеет тип fixnum и при удачном стечении обстоятельств никаких проверок в рантайме не будет (я это не проверял, но уверен на 90%). Т.е. с точки зрения спецификации, тип, возможно, и t, но на самом деле тип fixnum известен компилятору, со всеми вытекающими. Это и есть по определению статическая типизация, хотя на этом форуме не все разделяют моё мнение (ну и пусть).

Исходная версия den73, :

В aref всегда возвращается тип t, даже если массив известного типа.

Думаю, ты не совсем прав. В SBCL, если ты делаешь

(let ((a (aref (the (simple-array fixnum (*)) foo) 3))) 
  а)
то а имеет тип fixnum и при удачном стечении обстоятельств никаких проверок в рантайме не будет (я это не проверял, но уверен на 90%). Т.е. с точки зрения спецификации, тип, возможно, и t, но на самом деле тип известен компилятору, со всеми вытекающими. Это и есть по определению статическая типизация, хотя на этом форуме не все разделяют моё мнение (ну и пусть).