LINUX.ORG.RU

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

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

В общем, совместными усилиями удалось сделать следующее: При установленном (safety 2) и установленной во время компиляции переменной sb-c::|*Запретить-неявное-сужение-типа*| , любое сужение типа внутри функции вызывает warning.

Также был сделан макрос Некое, который является аналогом the. Он отличается от the тем, что позволяет сужать тип без warning-а.

При этом, если сигнатура функции (ftype) не задана, то warning-а не будет - для этого сделан специальный костыль. Т.е. каждая функция будет проверять типы на входе в себя, но при этом снаружи она будет выглядеть полиморфной. Это сужение от t к какому-то выведенному компилятором типу будет принято как должное, хотя оно и неявное. В этом месте у нас проходит граница между статической и динамической типизацией.

Никакого тестирования пока толком не было, но несколько примеров работают. Будущее покажет, что ещё нужно будет доделать.

Вряд ли вы сможете воспользоваться этим кодом без загрузки всего Яра (который давно не обновлялся и лучше живёт под офтопиком), но исходники патчей к компилятору находятся здесь:

https://bitbucket.org/budden/budden-tools/src/cc86ada29ae5e31376931742747e7d1...

А примеры - здесь: https://bitbucket.org/budden/sbcl-strict-type-check/src/d066688b71dcd1905c570...

https://bitbucket.org/budden/sbcl-strict-type-check/src/d066688b71dcd1905c570...

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

В общем, совместными усилиями удалось сделать следующее: При установленном (safety 2) и установленной во время компиляции переменной sb-c::|*Запретить-неявное-сужение-типа*| , любое сужение типа внутри функции вызывает warning.

Также был сделан макрос Некое, который является аналогом the. Он отличается от the тем, что позволяет сужать тип без warning-а.

При этом, если сигнатура функции (ftype) не задана, то warning-а не будет - для этого сделан специальный костыль. Т.е. каждая функция будет проверять типы на входе в себя, но при этом снаружи она будет выглядеть полиморфной.

Никакого тестирования пока толком не было, но несколько примеров работают. Будущее покажет, что ещё нужно будет доделать.

Вряд ли вы сможете воспользоваться этим кодом без загрузки всего Яра (который давно не обновлялся и лучше живёт под офтопиком), но исходники патчей к компилятору находятся здесь:

https://bitbucket.org/budden/budden-tools/src/cc86ada29ae5e31376931742747e7d1...

А примеры - здесь: https://bitbucket.org/budden/sbcl-strict-type-check/src/d066688b71dcd1905c570...

https://bitbucket.org/budden/sbcl-strict-type-check/src/d066688b71dcd1905c570...

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

В общем, совместными усилиями удалось сделать следующее: При установленном (safety 2) и установленной во время компиляции переменной sb-c::|*Запретить-неявное-сужение-типа*| , любое сужение типа внутри функции вызывает warning.

Также был сделан макрос Некое, который является аналогом the. Он отличается от the тем, что позволяет сужать тип без warning-а.

При этом, если типы параметров функции не заданы, то warning-а не будет - для этого сделан специальный костыль. Т.е. каждая функция будет проверять типы на входе в себя, но при этом снаружи она будет выглядеть полиморфной.

Никакого тестирования пока толком не было, но несколько примеров работают. Будущее покажет, что ещё нужно будет доделать.

Вряд ли вы сможете воспользоваться этим кодом без загрузки всего Яра (который давно не обновлялся и лучше живёт под офтопиком), но исходники патчей к компилятору находятся здесь:

https://bitbucket.org/budden/budden-tools/src/cc86ada29ae5e31376931742747e7d1...

А примеры - здесь: https://bitbucket.org/budden/sbcl-strict-type-check/src/d066688b71dcd1905c570...

https://bitbucket.org/budden/sbcl-strict-type-check/src/d066688b71dcd1905c570...