Oberon space
General Category => Общий раздел => Тема начата: valexey от Март 25, 2011, 05:39:32 pm
-
Статья рассказывает о процессе работы над программным обеспечением шаттла и важности тестирования ПО в целом.
"Это ПО никогда не падает. Оно совершенно, настолько совершенно, насколько человек смог этого достичь. Посмотрите на статистику: последние три версии этой программы – каждая по 420.000 строк кода – имели всего по одной ошибке в каждой. Последние 11 версии этого ПО имели в сумме 17 ошибок. Коммерческие программы, подобного уровня сложности имели бы 5.000 ошибок."
-
Статья в целом интересная, но пустая какая-то. Ни слова не говорится об используемых инструментальных средствах и языках программирования.
Полагаю, что там пишут на Ада. Во всяком случае, точно не на С++.
-
Там самое интересное не инструментарий, а процесс
1. Продукт хорош настолько, насколько хорош план для него.
В бортовой группе шаттла, около трети процесса по написанию ПО происходит до того, как кто-либо напишет хоть одну строку кода. НАСА и группа из Локхид Мартин достигают соглашения в самых подробных описаниях, касательно всего, что новый код должен будет делать – и затем они фиксируют достигнутые договоренности на бумаге с такой скрупулезностью и точностью, которую обычно можно наблюдать при ксерокопировании. Ничто в спецификациях не может быть изменено без согласия и полного понимания с обеих сторон. И никто не изменит ни одной сроки кода без спецификации, подробно описывающей это изменение.
Понятно, что эти ребята не заботятся о прибыли, а значит, решения принимают не на основе коньюнктурных соображений, а по реальным задачам, которые требуется решить.
В обычном бизнесе ни один бизнесмен не может себе подобного позволить - конкуренты просто раньше сделают, пусть и с ошибками. Но захватят рынок, и - финиш.
Еще нужно отметить, что многолетняя специализация позволяет достичь практически безошибочного кода. Даже когда просто сидишь на д одной задачей - код рефакторится и очищается со временем. Становится все лучше и лучше.
Бизнесмены - они принципиально по-другому работают. Быстрей следующую версию, намотать финтифлюшек, сделать рекламу и продать.
-
Понятно, что эти ребята не заботятся о прибыли, а значит, решения принимают не на основе коньюнктурных соображений, а по реальным задачам, которые требуется решить.
В обычном бизнесе ни один бизнесмен не может себе подобного позволить - конкуренты просто раньше сделают, пусть и с ошибками. Но захватят рынок, и - финиш.
Еще нужно отметить, что многолетняя специализация позволяет достичь практически безошибочного кода. Даже когда просто сидишь на д одной задачей - код рефакторится и очищается со временем. Становится все лучше и лучше.
Бизнесмены - они принципиально по-другому работают. Быстрей следующую версию, намотать финтифлюшек, сделать рекламу и продать.
Очень сильно ошибаешься. Они занимаются бизнесом, просто бизнесом специфическим весьма. Если будет авария на шаттле, то велик шанс, что бизнес прикроется совсем. Поэтому и вылизывают код.
Что такое "обычный бизнес" сложно сказать. У каждого вида производства/бизнеса есть свои критерии и допуски на качество, разные критерии этого самого качества (качество весьма слабо, кстати, иногда коррелирует с безглючностью софта). Если выходишь за допустимые допуски в данной области (не важно в какую сторону -- слишком низкое качество, но короткие сроки, либо же сишком высокое качество и длинные сроки), то вылетаешь в трубу при наличии хоть какой-то конкуренции.
На качество можно в достаточной степени наплевать в оборонке современной российской, потому как конкуренции примерно нуль, и основной критерий -- чтобы производитель был отечественный. Впрочем, это дело постепенно меняется, вон уже начали закупать западное вооружение (потому, что отечественное практически не развивается). Думаю это пойдет на пользу нашим оборонным предприятиям и обороноспособности страны вообще.
-
ПО для Шаттла, по крайней мере. в 80-х, разрабатывалось на HAL-S.
Достаточно низкоуровневый такой язык, системный.
У меня лежат в PDF документации по нему официальные, авиационных каких-то ведомств США.
Качал с какого-то сайта, который посвящён был именно ПО для Шаттла.
А, вот, нашёл: http://klabs.org/DEI/Processor/shuttle/
-
ПО для Шаттла, по крайней мере. в 80-х, разрабатывалось на HAL-S.
Достаточно низкоуровневый такой язык, системный.
У меня лежат в PDF документации по нему официальные, авиационных каких-то ведомств США.
Качал с какого-то сайта, который посвящён был именно ПО для Шаттла.
А, вот, нашёл: http://klabs.org/DEI/Processor/shuttle/
О! Спасибо, очень интересно.
-
Илья, спасибо за ссылку. Интересный материальчик.
Вот парочка интересных выдержек в моём вольном переводе. :)
Язык разработан Чарльзом Старком.
Имеет PL/1- и Алголо-подобный синтаксис.
Ключевые слова записываются в верхнем регистре (!).
Думаю, что этот язык используется до сих пор. Скаченные документы датируются 2005 годом (кроме учебника, 1979).
-
Имеет PL/1- и Алголо-подобный синтаксис.
Кстати, покурил я тот Алгол, и по результатам имею сказать, что С и С++ имеют столько же общего с Алголом в плане синтаксиса, как и Паскаль и его производные.
-
Синтаксис - дело внешнее.
Идейно Алгол был в противовес Фортрану большим шагом к систематизации, к порядку, к научности, наверное, даже можно сказать.
Об чём и уйма копий ломалось в тот период времени между поборниками не ограниченного правилами программизма и поборниками того, что всё-таки надо кристаллизовывать и принимать шаг за шагом ограничения на многообразие форм.
В этом плане Паскаль однозначно наследует Алголу, Си - однозначно продолжает другое течение.
-
Синтаксис - дело внешнее.
Идейно Алгол был в противовес Фортрану большим шагом к систематизации, к порядку, к научности, наверное, даже можно сказать.
Об чём и уйма копий ломалось в тот период времени между поборниками не ограниченного правилами программизма и поборниками того, что всё-таки надо кристаллизовывать и принимать шаг за шагом ограничения на многообразие форм.
В этом плане Паскаль однозначно наследует Алголу, Си - однозначно продолжает другое течение.
Если уж на то пошло, то Алгол упорядочил синтаксис в первую очередь (формально его описал), так же синтаксис был формально описан в B и в Паскале. (спеку на B я тут приводил). По большому счету B-семейство и Pascal-семейство отличаются лишь сложностью построения компиляторов, точнее даже не компиляторов, а лексеров и парсеров. Впрочем, сейчас разницы уже нет. Ада и Делфи не проще чем Java/C#/D и так далее.
А семантика ни там ни там формально не описана. Какие-то попытки формалоного описания семантики языков делаются и сейчас, но это ни к паскаль-семейству ни к Си семейству никакого отношения не имеет.
-
Имеет PL/1- и Алголо-подобный синтаксис.
Кстати, покурил я тот Алгол, и по результатам имею сказать, что С и С++ имеют столько же общего с Алголом в плане синтаксиса, как и Паскаль и его производные.
Большинство популярных языков можно отнести либо к группе алголоподных языков, либо к группе си-подобных языков. И дело здесь не только в синтаксисе. Илья Ермаков здесь хорошо сформулировал в чём заключается отличие между языками этих двух групп.
Мне в первую очередь было любопытно узнать, к какой группе относится язык HAL/S. Причина этого интереса понятна, в статье приводятся впечатляющие результаты использования этого (предположительно этого) языка. После беглого просмотра спецификации у меня сложилось впечатление, что язык относится к алголоподобной группе языков.
Прошу понять меня правильно. Речь идёт не о каких-то конкретных фенечках в языке, а об общей культуре проектирования языка.
-
А я про суть и говорил. Я смотрю на сам язык, точнее на его описание. Формального описания семантики языка ни для паскаля ни для Си нет. Собственно в том же Обероне даже синтаксис до конца формально не описан. Про то, насколько недоописана семантика Оберона, уже говорилось много. Я не говорю что это что-то плохое (в данный момент), это просто так.
И Си и Паскаль -- языки алгольной группы. Различия минимальны. И их производные языки аналогично.
Чтобы понять различия между группами/семействами языков, посмотрите на языки других семейств, например на языке семейства ML. Или языки семейства Lisp. Или языки Prolog-семейства.
Фортран вообще где-то отдельно живет своей жизнью.
И да, я не про синтаксис говорю, я про языки в совокупности и их семейства.
PS. А то, что там все пишется капсом, так это так было у практически всех старых языков. Посмотрите на COBOL, старый фортран, SNOBOL тот же например.
-
А я про суть и говорил. Я смотрю на сам язык, точнее на его описание. Формального описания семантики языка ни для паскаля ни для Си нет. Собственно в том же Обероне даже синтаксис до конца формально не описан. Про то, насколько недоописана семантика Оберона, уже говорилось много. Я не говорю что это что-то плохое (в данный момент), это просто так.
И Си и Паскаль -- языки алгольной группы. Различия минимальны. И их производные языки аналогично.
Чтобы понять различия между группами/семействами языков, посмотрите на языки других семейств, например на языке семейства ML. Или языки семейства Lisp. Или языки Prolog-семейства.
Фортран вообще где-то отдельно живет своей жизнью.
И да, я не про синтаксис говорю, я про языки в совокупности и их семейства.
PS. А то, что там все пишется капсом, так это так было у практически всех старых языков. Посмотрите на COBOL, старый фортран, SNOBOL тот же например.
Не понял, о чем это? обычно, под формальной семантикой подразумевают описание яп (его конструкций) в подходящих терминах какой-либо математической модели..про какую модель вы говорите и что из Оберона там не доописано? Вроде конструкций и вариаций их использования там кот наплакал.
-
Не понял, о чем это? обычно, под формальной семантикой подразумевают описание яп (его конструкций) в подходящих терминах какой-либо математической модели..про какую модель вы говорите и что из Оберона там не доописано? Вроде конструкций и вариаций их использования там кот наплакал.
Я говорю про хоть какую-нибудь модель для начала. Там не описано поведение при выходе за границы тех же, уже избитых, массивов например. Там не описана валидность конструкции ARRAY 0 OF SomeType, про синтаксис уже говорилось. Про то, что будет при делении на нуль тоже не сказано (для целых чисел). И так далее. Причем я говорю сейчас даже не о формальном описании семантики, а о простом, человеческом. А формальным там и не пахнет в общем то.
PS. И да, я не утверждаю, что для хорошего, годного ЯП просто таки обязано существоать формальное описание сементики, я говорю про то, что особых новшеств в плане описания языка, после Алгола ни в Паскаль-подсемействе, ни в Си-подсемействе не появилось.
-
Я говорю про хоть какую-нибудь модель для начала. Там не описано поведение при выходе за границы тех же, уже избитых, массивов например. Там не описана валидность конструкции ARRAY 0 OF SomeType, про синтаксис уже говорилось. Про то, что будет при делении на нуль тоже не сказано (для целых чисел). И так далее. Причем я говорю сейчас даже не о формальном описании семантики, а о простом, человеческом. А формальным там и не пахнет в общем то.
PS. И да, я не утверждаю, что для хорошего, годного ЯП просто таки обязано существоать формальное описание сементики, я говорю про то, что особых новшеств в плане описания языка, после Алгола ни в Паскаль-подсемействе, ни в Си-подсемействе не появилось.
Почему, не помню как в OBERONE (стандарте) но в КП есть "Элементы массива выбираются с помощью индексов, являющихся целыми числами из диапазоне от 0 до длина минус 1."
откуда следует что валидная длина ДОЛЖНА начинаться с 1. Конечно , для нормального человека полезнее давать это в стиле "список запрещенного" что бы потом действовать по принципу "что не запрещено то разрешено". Но суть не в этом, обычно при описании ЯВУ стараются избегать деталей зависящих от низкоуровневых моделей исполнителя (они определяются конкретной реализацией), другое дело СИ и СИ++ - но вроде как разумные люди их ЯВУ не считают.
-
Почему, не помню как в OBERONE (стандарте) но в КП есть "Элементы массива выбираются с помощью индексов, являющихся целыми числами из диапазоне от 0 до длина минус 1."
откуда следует что валидная длина ДОЛЖНА начинаться с 1.
Если так, то аргумент конечно. Однако нужно еще найти это в тексте (желательно Оберона) и посмотреть где связывается реальная длина с декларацией длины в типе.
Конечно , для нормального человека полезнее давать это в стиле "список запрещенного" что бы потом действовать по принципу "что не запрещено то разрешено". Но суть не в этом, обычно при описании ЯВУ стараются избегать деталей зависящих от низкоуровневых моделей исполнителя (они определяются конкретной реализацией), другое дело СИ и СИ++ - но вроде как разумные люди их ЯВУ не считают.
Гм. А где в Си и С++ в стандарте что-то завязаное на конкретную реализацию исполнителя? Там наоборот, все отвязано.
-
Если так, то аргумент конечно. Однако нужно еще найти это в тексте (желательно Оберона) и посмотреть где связывается реальная длина с декларацией длины в типе.
Где где, там где и должно быть -в разделе описания массивов (в обероне думаю тоже там =поскольку братва которая клепала КП особой изобретательностью не отличалась и за основу описания КП взяла оригинальное описание Оберона).
Гм. А где в Си и С++ в стандарте что-то завязаное на конкретную реализацию исполнителя? Там наоборот, все отвязано.
Практически везде, начиная с модели линейной адресации памяти, концепции массивов -содержащихся в "куске" памяти, концепции индекса тех же массивов (начинающихся с нуля), префиксной и инфиксной формы операторов инкремента, алгебры указателей, модели вычисления значений логических выражений....
-
http://ru.wikipedia.org/wiki/HAL/S (если кто не нашел)