Funk2: Causal Reflective Programming Funk2: отражающими причинно-программирование |
|
| Funk2: reflective programming language Funk2: светоотражающими язык программирования
Overview Обзор
Supported systems Поддерживаемые системы
| Funk2 currently compiles on 32-bit and 64-bit Linux operating systems. Funk2 в настоящее время составляет от 32-битных и 64-битных операционных систем Linux. 64-bit pointers are recommended because of the amount of memory needed for the reflective capabilities; a 32-bit machine is currently only able to index a few gigabytes of memory. 64-битные указатели рекомендуется из-за объема памяти, необходимой для отражает потенциал; 32-битные машины в настоящее время только может индексировать нескольких гигабайт памяти. |
The goal Цель
| The goal of the programming language Funk2 is to enable reflective algorithmic tracing for large heterogenous control systems. Цель Funk2 языка программирования заключается в том, чтобы отражать алгоритмических розыска для крупных неоднородные системы контроля. A few point emphasized in the Funk2 programming language are: Несколько точка подчеркивается в Funk2 языка программирования являются: | o о | Layered Critical Causal Reflection Эшелонированной критических причинных размышлений | | o о | Efficient and Robust Control Эффективные и надежные контроль | | o о | Learning by Credit Assignment Обучение с помощью кредитной уступки | | o о | Divergent Solution Paths Различные пути решения | | o о | Intricate Thread Control Нить достаточно сложный контроль | | o о | Goal-oriented Learning Цель ориентированной на уроке |
|
How does it work? Как она работает? | Examples of the most basic computational features include: (1) memory creation , (2) memory read , and (3) memory write . Примеры самые основные вычислительные возможности включают: (1) памяти, творчества, (2) следующего содержания памяти, и (3) память писать. Tracing all causal relationships between these basic features allows tracing the context of all other programmer-defined semantic abstractions . Отслеживание всех причинно-следственных связей между этими базовыми позволяет отслеживать контексте всех других программист определенные семантические абстракции. All of these computational features create an intricate trace network of dependencies, automatically traceable and shared by many parallel threads of execution. Все эти вычислительные функции создания сложных следов сеть зависимостей, автоматически отследить и разделяют многие параллельные нитки исполнения. Funk2 allows causal tracing to occur modularly to dynamically chosen parts of large commonsense-scale artificial intelligence projects. Funk2 позволяет отслеживать причинно произойти modularly динамически выбранной части большого масштаба commonsense искусственного интеллекта проектов. The resulting causal dependency trace networks can be processed by critical causal reflection threads. В результате зависимость проследить причинно-сети могут быть обработаны критического анализа причинно-нитей. |
Examples of causal reflective programming Примеры отражающими причинно-программирование
|
Here is how to retrieve the creation Cause for any piece of memory ( [] , the value of the symbol nil , is the only thing that does not reference a piece of memory): Вот как получить создание причина для любой кусок памяти ([], значение символа ноль, это единственное, что не ссылка кусок памяти): Note that in the Cause object there are multiple named slots holding information in the frame of the cause. Заметим, что причина объекта есть несколько слотов с именем для хранения информации, в основу дела. The frames of a Cause are thread , env , name , and args . Кадры из Причиной тому нить, окр, имя и args. By default only 7 levels of recursion are printed to the screen. По умолчанию только 7 уровней рекурсии будут напечатаны на экране. The symbol used for ending a recursion is the astrisk, * .In order to access the slots of an object, you can use funktions that are named to access and mutate objects. Условное обозначение, используемое для прекращения рекурсии является astrisk *. Для доступа слоты от объекта, вы можете использовать funktions, которые будут называться для доступа к объектам и мутировать. For example, the following example shows how to retrieve only the name and args slots of a cause object. Например, следующий пример показывает, каким образом извлекать только имя и args слотов из причин объекта.
| in--> [let [[cause [cause-of 12]]] [cons [cause-name cause] [cause-args cause]]] в -> [пусть [[причиной [причина-из 12]]] [недостатки [причинно-наименование причиной] [причинно-args причина]]] read> [ let [ [ cause [ cause-of 12 ] ] ] [ cons [ cause-name cause ] [ cause-args cause ] ] ] читать> [пусть [[причиной [причина-из 12]]] [недостатки [причинно-наименование причиной] [причинно-args причина]]] out-> [ primfunk:read #xb7f03420 ] из-> [primfunk: Прочтите # xb7f03420]
|
Here is an example of how to remember the state of an object at specific historical points in time: Вот пример того, как запомнить состояние объекта на конкретные исторические моменты времени:
| in--> [globalize a [array-new 10]] в -> [глобализировать [новый массив-10]] read> [ globalize a [ array-new 10 ] ] читать> [глобализировать [новый массив-10]] out-> [] из-> []
in--> a в -> read> a читать> out-> ( [] [] [] [] [] [] [] [] [] [] ) из-> ([] [] [] [] [] [] [] [] [] [])
in--> [tracing_on-set at] в -> [tracing_on-установлен на уровне] read> [ tracing_on-set a t ] читать> [tracing_on Набор т] out-> [] из-> []
in--> [system_date] в -> [system_date] read> [ system_date ] читать> [system_date] out-> ( date 1970 0 13983 6 29 7 526235 ) из-> (дата 1970 0 13983 6 29 7 526235)
in--> [dotimes [i 5] [array-elt-set ai [+ i 10]]] в -> [dotimes [я 5] [массива-АПП-набор И.о. [+ я 10]]] read> [ dotimes [ i 5 ] [ array-elt-set a i [ + i 10 ] ] ] читать> [dotimes [я 5] [массив-комплекс АПП-я [+ я 10]]] out-> [] из-> []
in--> a в -> read> a читать> out-> ( 10 11 12 13 14 [] [] [] [] [] ) из-> (10 11 12 13 14 [] [] [] [] [])
in--> [remember a (date 1970 0 13983 6 28 44 908595)] в -> [помните (дата 1970 0 13983 6 28 44 908595)] read> [ remember a ( date 1970 0 13983 6 28 44 908595 ) ] читать> [помните (дата 1970 0 13983 6 28 44 908595)] out-> ( [] [] [] [] [] [] [] [] [] [] ) из-> ([] [] [] [] [] [] [] [] [] [])
in--> a в -> read> a читать> out-> ( 10 11 12 13 14 [] [] [] [] [] ) из-> (10 11 12 13 14 [] [] [] [] [])
|
Here is another example of how to remember the state of an object at specific historical points in time: Вот еще один пример того, как запомнить состояние объекта на конкретные исторические моменты времени:
| in--> [globalize a [array-new 10]] в -> [глобализировать [новый массив-10]] read> [ globalize a [ array-new 10 ] ] читать> [глобализировать [новый массив-10]] out-> [] из-> []
in--> [tracing_on-set at] в -> [tracing_on-установлен на уровне] read> [ tracing_on-set a t ] читать> [tracing_on Набор т] out-> [] из-> []
in--> [globalize dates [array-new 10]] в -> [глобализировать датам [новый массив-10]] read> [ globalize dates [ array-new 10 ] ] читать> [глобализировать датам [новый массив-10]] out-> [] из-> []
in--> [dotimes [i 10] [array-elt-set dates i [system_date]] [array-elt-set aii]] в -> [dotimes [я 10] [массива-АПП-набор дат я [system_date]] [массива-АПП-набор aii]] read> [ dotimes [ i 10 ] [ array-elt-set dates i [ system_date ] ] [ array-elt-set a i i ] ] читать> [dotimes [я 10] [массива-АПП-набор дат я [system_date]] [массив-комплекс АПП-я я]] out-> [] из-> []
in--> a в -> read> a читать> out-> ( 0 1 2 3 4 5 6 7 8 9 ) из-> (0 1 2 3 4 5 6 7 8 9)
in--> dates в -> датам read> dates читать> датам out-> ( ( date 1970 0 13983 6 12 19 283811 ) из-> ((дату 1970 0 13983 6 12 19 283811) ( date 1970 0 13983 6 12 19 561113 ) (Дата 1970 0 13983 6 12 19 561113) ( date 1970 0 13983 6 12 19 828195 ) (Дата 1970 0 13983 6 12 19 828195) ( date 1970 0 13983 6 12 20 94674 ) (Дата 1970 0 13983 6 12 20 94674) ( date 1970 0 13983 6 12 20 361727 ) (Дата 1970 0 13983 6 12 20 361727) ( date 1970 0 13983 6 12 20 629388 ) (Дата 1970 0 13983 6 12 20 629388) ( date 1970 0 13983 6 12 20 896560 ) (Дата 1970 0 13983 6 12 20 896560) ( date 1970 0 13983 6 12 21 163860 ) (Дата 1970 0 13983 6 12 21 163860) ( date 1970 0 13983 6 12 21 431032 ) (Дата 1970 0 13983 6 12 21 431032) ( date 1970 0 13983 6 12 21 699425 ) ) (Дата 1970 0 13983 6 12 21 699425))
in--> [let [[history nil]] [dotimes [i 10] [set history [cons [remember a [array-elt dates i]] history]]] history] в -> [пусть [[истории нулевыми]] [dotimes [я 10] [комплекс истории [недостатки [вспомнить [массива АПП даты я]] история]]] история] read> [ let [ [ history [] ] ] [ dotimes [ i 10 ] [ set history [ cons [ remember a [ array-elt dates i ] ] history ] ] ] history ] читать> [пусть [[История []]] [dotimes [я 10] [комплекс истории [недостатки [вспомнить [массива АПП даты я]] история]]] история] out-> [ ( 0 1 2 3 4 5 6 7 8 [] ) из-> [(0 1 2 3 4 5 6 7 8 []) ( 0 1 2 3 4 5 6 7 [] [] ) (0 1 2 3 4 5 6 7 [] []) ( 0 1 2 3 4 5 6 [] [] [] ) (0 1 2 3 4 5 6 [] [] []) ( 0 1 2 3 4 5 [] [] [] [] ) (0 1 2 3 4 5 [] [] [] []) ( 0 1 2 3 4 [] [] [] [] [] ) (0 1 2 3 4 [] [] [] [] []) ( 0 1 2 3 [] [] [] [] [] [] ) (0 1 2 3 [] [] [] [] [] []) ( 0 1 2 [] [] [] [] [] [] [] ) (0 1 2 [] [] [] [] [] [] []) ( 0 1 [] [] [] [] [] [] [] [] ) (0 1 [] [] [] [] [] [] [] []) ( 0 [] [] [] [] [] [] [] [] [] ) (0 [] [] [] [] [] [] [] [] []) ( [] [] [] [] [] [] [] [] [] [] ) ] ([] [] [] [] [] [] [] [] [] [])]
|
|
Basic Programming Examples Основные примеры программирования
|
Here is one straightforward way to write a "Hello world!" Вот один простой способ записи "Привет мир!" program in the Funk2 language: Программа в Funk2 язык:
| in--> [print 'Hello world!'] в -> [распечатать "Привет мир!"] read> [ print 'Hello world!' ] читать> [распечатать "Привет мир!"] 'Hello world!' 'Здравствуй, мир! " out-> 'Hello world!' из-> 'Здравствуй, мир! "
|
Here is another more advanced way to holla your planet: Вот еще один более передовых способ holla вашей планеты:
| in--> [let [[planet 'Earth']] [format stdout 'Hello ' planet '!']] в -> [пусть [[планеты "Земля"]] [формат вывода "Hello" планеты'!']] read> [ let [ [ planet 'Earth' ] ] [ format stdout 'Hello ' planet '!' ] ] Hello Earth! читать> [пусть [[планеты "Земля"]] [формат вывода "Hello" планета "!"]] Здравствуйте Земли! out-> [] из-> []
|
Here is how to define and subsequently call a funktion: Вот как определить, а затем слово функция:
| in--> [defunk say-hi [x] [format stdout 'Why, hello there ' x '. в -> [defunk сказать-привет [х] [формат вывода "Почему, привет там иксов. It is really great to see you.']] Это действительно большое видеть вас ".]] read> [ defunk say-hi [ x ] [ format stdout 'Why, hello there ' x '. It is really great to see you.' ] ] читать> [defunk сказать-привет [х] [формат вывода "Почему, привет там иксов. Это действительно большое видеть вас".]] defunk say-hi [ x ] defunk сказать-привет [х] out-> [] из-> []
| | in--> [say-hi 'Marvin'] в -> [сказать-привет "Марвин '] read> [ say-hi 'Marvin' ] читать> [сказать-привет "Марвин '] Why, hello there Marvin. Почему, привет там Марвин. It is really great to see you. Это действительно замечательно видеть друг друга. out-> [] из-> []
|
Here is how to loop over a list of values: Вот как петли над список значений:
| in--> [mapc [funk [x] [print x]] [list 1 2 3 #xFF 'dog' `[2 3]]] в -> [mapc [фанк [х] [распечатать х]] [список 1 2 3 # xFF "собака" `[2 3]]] read> [ mapc [ funk [ x ] [ print x ] ] [ list 1 2 3 #xff 'dog' ` [ 2 3 ] ] ] читать> [mapc [фанк [х] [распечатать х]] [список 1 2 3 # xff "собака" `[2 3]]] 1 1 2 2 3 3 #xff # xff 'dog' "собака" [ 2 3 ] [2 3] out-> [] из-> []
|
Here is how to call our funktion above in a parallel thread: Вот как назвать нашу функция выше в параллельные нитки:
| in--> [prog [thread &say-hi [list 'Gerry']] nil] в -> [программа [по дискуссиям и сказать-привет [список 'Джерри']] нулевыми] read> [ prog [ thread &say &say-hi [ list 'Gerry' ] ] [] ] читать> [программа [по дискуссиям и сказать, и сказать-привет [список 'Джерри']] []] Why, hello there Почему, привет там out-> Gerry. из-> Джерри. It is really great to see you. [] Это действительно замечательно видеть друг друга. []
|
Here is how to serially filter every element in a list: Вот как серийно фильтр каждый элемент в списке:
| in--> [mapcar [funk [x] [+ x 10]] [list 1 2 3 4 5]] в -> [mapcar [фанк [х] [х + 10]] [список 1 2 3 4 5]] read> [ mapcar [ funk [ x ] [ + x 10 ] ] [ list 1 2 3 4 5 ] ] читать> [mapcar [фанк [х] [х + 10]] [список 1 2 3 4 5]] out-> [ 11 12 13 14 15 ] из-> [11 12 13 14 15]
|
Here is how to concurrently filter every element in a list: Вот как одновременно фильтр каждый элемент в списке:
| in--> [parcar [funk [x] [+ x 10]] [list 1 2 3 4 5]] в -> [parcar [фанк [х] [х + 10]] [список 1 2 3 4 5]] read> [ parcar [ funk [ x ] [ + x 10 ] ] [ list 1 2 3 4 5 ] ] читать> [parcar [фанк [х] [х + 10]] [список 1 2 3 4 5]] out-> [ 11 12 13 14 15 ] из-> [11 12 13 14 15]
|
The scheduler:global_scheduler variable in the global environment can be used as a reference to the global funk2 scheduler for the local machine. Планировщик: global_scheduler переменной в глобальной окружающей среды могут быть использованы в качестве ссылки на глобальном funk2 планировщик для локальной машины. Processor information available from "/dev/proc" during funk2 initial bootstrap compile is available for all machines currently logged into the grid. Процессор информации, имеющейся у "/ dev / proc" в ходе начальной загрузки funk2 составить доступна для всех машин в настоящее время вход в сеть. Grid support is in development, this only shows this information for the local machine. Сетка поддержка в развитии, это лишь показывает эту информацию для локальной машины. Once support for multiple machines is available, this variable will change into a funktion that takes a machine-id as an argument and returns that machine's scheduler object. Как только поддержкой многопроцессорных машин имеется, эта переменная будет меняться в том, что функция принимает машинно-идентификатора в качестве аргумента и возвращает что машины планировщик объекта.
| in--> scheduler:global_scheduler в -> Планировщик: global_scheduler read> scheduler:global_scheduler читать> Планировщик: global_scheduler out-> [ scheduler из-> [планировщика :processors ( [ processor : процессоры ([процессор :mutation_mutex [ mutex] : mutation_mutex [мьютекс] :scheduler [ scheduler :processors * ] : планировщик [планировщика: процессоры *] :pthread #x40a00960 : pthread # x40a00960 :threads [ [ thread : нитей [[нить :program_counter * : program_counter * :stack * : стек * :iter * : iter * :env * : окр * :args * : args * :return * : возвращения * :value * : величина * :trace * : след * :critics * : критики * :cause_reg * : cause_reg * :keep_undead * : keep_undead * :parent_thread * : parent_thread * :parent_env * : parent_env * :execute_mutex * : execute_mutex * :last_executed_time * ] : last_executed_time *] [ thread [По дискуссиям :program_counter * : program_counter * :stack * : стек * :iter * : iter * :env * : окр * :args * : args * :return * : возвращения * :value * : величина * :trace * : след * :critics * : критики * :cause_reg * : cause_reg * :keep_undead * : keep_undead * :parent_thread * : parent_thread * :parent_env * : parent_env * :execute_mutex * : execute_mutex * :last_executed_time * ] : last_executed_time *] [ thread [По дискуссиям :program_counter * : program_counter * :stack * : стек * :iter * : iter * :env * : окр * :args * : args * :return * : возвращения * :value * : величина * :trace * : след * :critics * : критики * :cause_reg * : cause_reg * :keep_undead * : keep_undead * :parent_thread * : parent_thread * :parent_env * : parent_env * :execute_mutex * : execute_mutex * :last_executed_time * ] : last_executed_time *] [ thread [По дискуссиям :program_counter * : program_counter * :stack * : стек * :iter * : iter * :env * : окр * :args * : args * :return * : возвращения * :value * : величина * :trace * : след * :critics * : критики * :cause_reg * : cause_reg * :keep_undead * : keep_undead * :parent_thread * : parent_thread * :parent_env * : parent_env * :execute_mutex * : execute_mutex * :last_executed_time * ] : last_executed_time *] [ thread [По дискуссиям :program_counter * : program_counter * :stack * : стек * :iter * : iter * :env * : окр * :args * : args * :return * : возвращения * :value * : величина * :trace * : след * :critics * : критики * :cause_reg * : cause_reg * :keep_undead * : keep_undead * :parent_thread * : parent_thread * :parent_env * : parent_env * :execute_mutex * : execute_mutex * :last_executed_time * ] : last_executed_time *] [ thread [По дискуссиям :program_counter * : program_counter * :stack * : стек * :iter * : iter * :env * : окр * :args * : args * :return * : возвращения * :value * : величина * :trace * : след * :critics * : критики * :cause_reg * : cause_reg * :keep_undead * : keep_undead * :parent_thread * : parent_thread * :parent_env * : parent_env * :execute_mutex * : execute_mutex * :last_executed_time * ] : last_executed_time *] [ thread [По дискуссиям :program_counter * : program_counter * :stack * : стек * :iter * : iter * :env * : окр * :args * : args * :return * : возвращения * :value * : величина * :trace * : след * :critics * : критики * :cause_reg * : cause_reg * :keep_undead * : keep_undead * :parent_thread * : parent_thread * :parent_env * : parent_env * :execute_mutex * : execute_mutex * :last_executed_time * ] : last_executed_time *] [ thread [По дискуссиям :program_counter * : program_counter * :stack * : стек * :iter * : iter * :env * : окр * :args * : args * :return * : возвращения * :value * : величина * :trace * : след * :critics * : критики * :cause_reg * : cause_reg * :keep_undead * : keep_undead * :parent_thread * : parent_thread * :parent_env * : parent_env * :execute_mutex * : execute_mutex * :last_executed_time * ] : last_executed_time *] [ thread [По дискуссиям :program_counter * : program_counter * :stack * : стек * :iter * : iter * :env * : окр * :args * : args * :return * : возвращения * :value * : величина * :trace * : след * :critics * : критики * :cause_reg * : cause_reg * :keep_undead * : keep_undead * :parent_thread * : parent_thread * :parent_env * : parent_env * :execute_mutex * : execute_mutex * :last_executed_time * ] : last_executed_time *] [ thread [По дискуссиям :program_counter * : program_counter * :stack * : стек * :iter * : iter * :env * : окр * :args * : args * :return * : возвращения * :value * : величина * :trace * : след * |
|
|
|
|