а не надо ссылочек. вот поглядите, скажем, на стоящее перед Вами в данный момэнт устройство типа "персональный компьютер". на нём бежит большая, долгоживущая и интроспективная по самое не могу программа, называемая "операционная система". предположим, эта система называется "юникс" (система типа "виндоуз" отличается от системы типа "юникс", но не существенно. "юникс" в принципе сильно проще, а посему представляет из себя лучший пример). аналогом "процедур" в языке "юникс" являются бинарные программы, интерпретируемые процессором. аналогом аргументов являются строчки из коммандной строки. аналогом пойнтеров — имена файлов. аналогом структур данных — файлы. единственным типом данных, который понимает "юникс", является голая строка из байтов, у которой даже длина не указана. имеется также run-time environment, называемый "ядро операционной системы", отвечающий за разделение процедур друг от дружки, подчищание экскрементов, убиение слищком жадных до памяти процедур, и прочая. теперь представьте, что в качестве базового языка и run-time environment'а мы имеем что-то менее идиотское чем "юникс", например Smalltalk, или Lisp, или на худой конец Java. представьте себе теперь, что на основе подобного базиса написана настоящая операционная система (примеры имели место, и вполне успешные, кстати). можно ли написать подобную вещь привычным class-oriented стилем? нельзя, поскольку все объекты, с которыми подобной программе придётся иметь дело — "manifestly typed", то есть самоописывающиеся. их тип закодирован в них самих, мы не можем рассказать его компилятору и забыть о нём. теперь более практически: программирование на Smalltalk, Lisp, или на худой конец Java разумнее рассматривать не как "написал код, скомпилировал в маааленький исполняемый файл, отправил заказчику", а как "взял исходную систему, расширил её своей функциональностью". таким образом, философия системы естественным образом перетекает в философию приложений, реализованных на базе этой системы. что же касается "data-oriented programming", то ничего особенно содержательного в этом понятии нет. это просто следствие из видения мира, в котором полноценные типированные объекты (а не C++-like куски памяти, тип которых когда-то знал компилятор) живут в программе, а не только в компиляторе. если всё-таки хочется ссылок, то лучше сгрузить с сети хороший Smalltalk или Common Lisp и поиграться с ним. :)
no subject
Date: 2004-05-29 02:06 pm (UTC)вот поглядите, скажем, на стоящее перед Вами в данный момэнт устройство типа "персональный компьютер". на нём бежит большая, долгоживущая и интроспективная по самое не могу программа, называемая "операционная система".
предположим, эта система называется "юникс" (система типа "виндоуз" отличается от системы типа "юникс", но не существенно. "юникс" в принципе сильно проще, а посему представляет из себя лучший пример). аналогом "процедур" в языке "юникс" являются бинарные программы, интерпретируемые процессором. аналогом аргументов являются строчки из коммандной строки. аналогом пойнтеров — имена файлов. аналогом структур данных — файлы. единственным типом данных, который понимает "юникс", является голая строка из байтов, у которой даже длина не указана. имеется также run-time environment, называемый "ядро операционной системы", отвечающий за разделение процедур друг от дружки, подчищание экскрементов, убиение слищком жадных до памяти процедур, и прочая.
теперь представьте, что в качестве базового языка и run-time environment'а мы имеем что-то менее идиотское чем "юникс", например Smalltalk, или Lisp, или на худой конец Java. представьте себе теперь, что на основе подобного базиса написана настоящая операционная система (примеры имели место, и вполне успешные, кстати). можно ли написать подобную вещь привычным class-oriented стилем? нельзя, поскольку все объекты, с которыми подобной программе придётся иметь дело — "manifestly typed", то есть самоописывающиеся. их тип закодирован в них самих, мы не можем рассказать его компилятору и забыть о нём.
теперь более практически: программирование на Smalltalk, Lisp, или на худой конец Java разумнее рассматривать не как "написал код, скомпилировал в маааленький исполняемый файл, отправил заказчику", а как "взял исходную систему, расширил её своей функциональностью". таким образом, философия системы естественным образом перетекает в философию приложений, реализованных на базе этой системы.
что же касается "data-oriented programming", то ничего особенно содержательного в этом понятии нет. это просто следствие из видения мира, в котором полноценные типированные объекты (а не C++-like куски памяти, тип которых когда-то знал компилятор) живут в программе, а не только в компиляторе.
если всё-таки хочется ссылок, то лучше сгрузить с сети хороший Smalltalk или Common Lisp и поиграться с ним. :)