Сообщение Re[3]: семантика switch/case от 30.12.2015 10:01
Изменено 30.12.2015 10:11 maxluzin
Здравствуйте, AlexRK, Вы писали:
ARK>Здравствуйте, maxluzin, Вы писали:
M>>В известной книжке отцов-основателей языка "С" Кернигана и Ритчи в главе 3.4 приводится такой пример:
ARK>Вот не понимаю, почему нельзя было сделать так, без этих break-костылей (разумеется, это не валидная программа на C):
ARK>
Если честно, то не знаю — я не автор языка и какими принципами авторы "С" руководствовались, мне не ведомо... Как уже сказал, на задворках памяти всплывает одно интервью об истории создания "С" толи Томсона, толи Кернигана, толи самого Денниса Ритчи, которое было лет 25 назад в каком-то бумажном компьютерном журнале. Там был и вопрос про switch..case и про другие "странности" реализации, например, про необходимость header-файлов... Ответ уже точно не вспомню, но точно помню, как уже сказал, что ссылались на скудность ресурсов PDP-11 и на реализацию однопроходного компилятора. А по-моему, просто им было некогда думать о будущих дискуссиях и так проще было реализовать примитивную рекурсивную функцию по константным значениям в таблице поиска по единственному ключу. Надо смотреть в исходники самого компилятора "С", чтобы точно ответить на этот вопрос, но я этим точно заниматься не буду... Думаю, всё проще! Компилятор был однопроходный, создавал таблицу символов без глубокого анализа и поиска зависимостей, надо было сделать что-то получше, чем просто батарею длинных GOTO-блоков Фортрана. Ввели switch...case, как более удобную замену фортрановским GOTO-блокам, без всяких задней мыслей...
ARK>Проще, короче, нагляднее, безопаснее.
ARK>Если обработчики веток совпадают лишь частично, внутри таких веток можно уже разрулить if-ами.
ARK>Паттерн-матчинг, конечно, круче, но про него в контексте Ц говорить, наверное, не очень уместно.
Думаю, что с "колокольни" 2015-ого гораздо проще "тыкать ухоженными пальчиками с розовыми ноготками" в бородатых авторов языка от 1972-ого года рождения для машины с 64К оперативной памяти...
Хрен знает! Так получилось! Что ж теперь делать...
ARK>Здравствуйте, maxluzin, Вы писали:
M>>В известной книжке отцов-основателей языка "С" Кернигана и Ритчи в главе 3.4 приводится такой пример:
ARK>Вот не понимаю, почему нельзя было сделать так, без этих break-костылей (разумеется, это не валидная программа на C):
ARK>
ARK> // ...
ARK>
Если честно, то не знаю — я не автор языка и какими принципами авторы "С" руководствовались, мне не ведомо... Как уже сказал, на задворках памяти всплывает одно интервью об истории создания "С" толи Томсона, толи Кернигана, толи самого Денниса Ритчи, которое было лет 25 назад в каком-то бумажном компьютерном журнале. Там был и вопрос про switch..case и про другие "странности" реализации, например, про необходимость header-файлов... Ответ уже точно не вспомню, но точно помню, как уже сказал, что ссылались на скудность ресурсов PDP-11 и на реализацию однопроходного компилятора. А по-моему, просто им было некогда думать о будущих дискуссиях и так проще было реализовать примитивную рекурсивную функцию по константным значениям в таблице поиска по единственному ключу. Надо смотреть в исходники самого компилятора "С", чтобы точно ответить на этот вопрос, но я этим точно заниматься не буду... Думаю, всё проще! Компилятор был однопроходный, создавал таблицу символов без глубокого анализа и поиска зависимостей, надо было сделать что-то получше, чем просто батарею длинных GOTO-блоков Фортрана. Ввели switch...case, как более удобную замену фортрановским GOTO-блокам, без всяких задней мыслей...
ARK>Проще, короче, нагляднее, безопаснее.
ARK>Если обработчики веток совпадают лишь частично, внутри таких веток можно уже разрулить if-ами.
ARK>Паттерн-матчинг, конечно, круче, но про него в контексте Ц говорить, наверное, не очень уместно.

Думаю, что с "колокольни" 2015-ого гораздо проще "тыкать ухоженными пальчиками с розовыми ноготками" в бородатых авторов языка от 1972-ого года рождения для машины с 64К оперативной памяти...

Хрен знает! Так получилось! Что ж теперь делать...

Re[3]: семантика switch/case
Здравствуйте, AlexRK, Вы писали:
ARK>Здравствуйте, maxluzin, Вы писали:
M>>В известной книжке отцов-основателей языка "С" Кернигана и Ритчи в главе 3.4 приводится такой пример:
ARK>Вот не понимаю, почему нельзя было сделать так, без этих break-костылей (разумеется, это не валидная программа на C):
ARK>
Если честно, то не знаю — я не автор языка и какими принципами авторы "С" руководствовались, мне не ведомо... Как уже сказал, на задворках памяти всплывает одно интервью об истории создания "С" толи Томсона, толи Кернигана, толи самого Денниса Ритчи, которое было лет 25 назад в каком-то бумажном компьютерном журнале. Там был и вопрос про switch..case и про другие "странности" реализации, например, про необходимость header-файлов... Ответ уже точно не вспомню, но точно помню, как уже сказал, что ссылались на скудность ресурсов PDP-11 и на реализацию однопроходного компилятора. А по-моему, просто им было некогда думать о будущих дискуссиях и так проще было реализовать примитивную рекурсивную функцию по константным значениям в таблице поиска по единственному ключу. Надо смотреть в исходники самого компилятора "С", чтобы точно ответить на этот вопрос, но я этим точно заниматься не буду... Думаю, всё проще! Компилятор был однопроходный, создавал таблицу символов без глубокого анализа и поиска зависимостей, надо было сделать что-то получше, чем просто батарею длинных GOTO-блоков Фортрана. Ввели switch...case, как более удобную замену фортрановским GOTO-блокам, без всяких задней мыслей...
ARK>Проще, короче, нагляднее, безопаснее.
ARK>Если обработчики веток совпадают лишь частично, внутри таких веток можно уже разрулить if-ами.
ARK>Паттерн-матчинг, конечно, круче, но про него в контексте Ц говорить, наверное, не очень уместно.
Думаю, что с "колокольни" 2015-ого гораздо проще "тыкать ухоженными пальчиками с розовыми ноготками" в бородатых авторов языка от 1972-ого года рождения для машины с 64К оперативной памяти...
Хрен знает! Так получилось! Что ж теперь делать...
З.Ы. Я вот, например, по-привычке "обволакиваю" case-блоки в {}-скобки, хотя это и необязательно. Но так мне "синтаксически юниформно"...
ARK>Здравствуйте, maxluzin, Вы писали:
M>>В известной книжке отцов-основателей языка "С" Кернигана и Ритчи в главе 3.4 приводится такой пример:
ARK>Вот не понимаю, почему нельзя было сделать так, без этих break-костылей (разумеется, это не валидная программа на C):
ARK>
ARK> // ...
ARK>
Если честно, то не знаю — я не автор языка и какими принципами авторы "С" руководствовались, мне не ведомо... Как уже сказал, на задворках памяти всплывает одно интервью об истории создания "С" толи Томсона, толи Кернигана, толи самого Денниса Ритчи, которое было лет 25 назад в каком-то бумажном компьютерном журнале. Там был и вопрос про switch..case и про другие "странности" реализации, например, про необходимость header-файлов... Ответ уже точно не вспомню, но точно помню, как уже сказал, что ссылались на скудность ресурсов PDP-11 и на реализацию однопроходного компилятора. А по-моему, просто им было некогда думать о будущих дискуссиях и так проще было реализовать примитивную рекурсивную функцию по константным значениям в таблице поиска по единственному ключу. Надо смотреть в исходники самого компилятора "С", чтобы точно ответить на этот вопрос, но я этим точно заниматься не буду... Думаю, всё проще! Компилятор был однопроходный, создавал таблицу символов без глубокого анализа и поиска зависимостей, надо было сделать что-то получше, чем просто батарею длинных GOTO-блоков Фортрана. Ввели switch...case, как более удобную замену фортрановским GOTO-блокам, без всяких задней мыслей...
ARK>Проще, короче, нагляднее, безопаснее.
ARK>Если обработчики веток совпадают лишь частично, внутри таких веток можно уже разрулить if-ами.
ARK>Паттерн-матчинг, конечно, круче, но про него в контексте Ц говорить, наверное, не очень уместно.

Думаю, что с "колокольни" 2015-ого гораздо проще "тыкать ухоженными пальчиками с розовыми ноготками" в бородатых авторов языка от 1972-ого года рождения для машины с 64К оперативной памяти...

Хрен знает! Так получилось! Что ж теперь делать...

З.Ы. Я вот, например, по-привычке "обволакиваю" case-блоки в {}-скобки, хотя это и необязательно. Но так мне "синтаксически юниформно"...