Просмотр полной версии : Организация исследования 05.13.11
Всем доброго времени суток.
Читаю форум уже примерно полгода; к людям, что здесь общаются, почти привык :) вот решил первый раз написать и попросить совета.
Если такая тема уже обсуждалась - сорри, не нашел.
Я обучаюсь по 05.13.11 (математическое и программное обеспечение), тема диссертации связана с внутренней организацией вычислений в функциональном языке программирования. Мы хотим реализовать исполняемую среду языка таким образом, чтобы выполнять автоматическую подстройку программы под вычислительную архитектуру (без изменения исходного кода программы).
Направление без "быстрой" практической ценности (не думаю, что скоро из этого вырастет то, что можно использовать на практике при программировании), поэтому приходится многое выдумывать самому (самому придумывать модели, применимость на практике). Т.е. исследование пока ведется вокруг идей, а не конкретного ПО/алгоритмов.
В связи с этим есть пара вопросов:
1. Как лучше хранить свои идеи, ссылки на прочитанную литературу, которая чем-то помогает либо дает пищу для размышлений?
Писать статьи и оформлять рез-т в них не всегда удается, т.к. не всегда в текущей разработке статья на ту же тему, что и идея.
Я для себя пару месяцев назад решил этот вопрос так: завел документ Word, где названиями разделов являются даты. И вот когда вечером мне вдруг захочется внести что-нибудь новое в науку:D я сажусь, и пишу в соответствующий день свои мысли + ссылки на литературу (список лит-ры в конце). Думается, что такой документ очень поможет при написании диссера. А у вас какие практики?
2. Как я уже сказал выше, пока не понятно, когда мы можем пожать плоды исследования на практике. Поэтому сейчас написание программного кода под вопросом, потому как не все модели проработаны, и что писать, пока еще не очень понятно (т.е. если бы я сейчас попробовал написать техзадание на реализацию, у меня бы не получилось это сделать). Но мне уже надоело "жонглировать словами", я хочу начать писать программный код.
Был ли у кого-нибудь опыт преодоления такой ситуации? Может, стоить "положить" на то, что еще не все понятно, а начать писать программный код - просто чтоб посмотреть, что будет получаться на практике, а также для поддержания мотивации - посмотреть на результат труда?
Или это нормально, если к окончанию срока обучения у меня будет проработанные модели (в графическом виде, в UML, записанные с помощью формальной логики), и идеи, но не будет программного кода? Как считают господа аспиранты?
Работаю в программировании уже пять лет, может, поэтому такое желание закрепить результаты в коде :)
Буду рад мнениям. Если кто-то заинтересован темой или работает по смежной тематике - пишите в личку, буду рад пообщаться с коллегами.
P.S. Научник мне всем помогает, мнение по этим вопросам есть. Но хотелось бы еще мнений.
Всем доброго времени суток.
Читаю форум уже примерно полгода; к людям, что здесь общаются, почти привык :) вот решил первый раз написать и попросить совета.
Если такая тема уже обсуждалась - сорри, не нашел.
[Смотрит с уважением]
тема диссертации связана с внутренней организацией вычислений в функциональном языке программирования. Мы хотим реализовать исполняемую среду языка таким образом, чтобы выполнять автоматическую подстройку программы под вычислительную архитектуру (без изменения исходного кода программы).
:eek: :confused: ЛОЛШТО? Я ни*** ничего не понял. Мну гуманитарий :)
В связи с этим есть пара вопросов:
1.
Вам идем чисто для себя хранить, или нужно хранить идеи, чтоб не потырили? Про депонирование не думали?
2.
Здесь есть коллеги по вашей специальности, подождите их мнения. Но я так понимаю вы хотите предложить код, как результат диссертации?
именно по 05.13.11 - реализованный код обязателен. Т.е. не он является основным результатом, но без него не нужно на эту специальность выходить. Специальность же программисткая.
Вы знаете еще 10 лет назад американскйи ун-т писал первую реализацию CORBA 3.0 TAO , она базируется на библиотеке ACE . Мое мнение - это великая вещь (ученые, которые этим занимались - это центральные ученые группы OMG). Библиотека работает во всех возможных ОС. написана на С++. И код нужно просто оттранслировать для нужной ОС. Конечно, это может быть не совсем не, что вы имеете в виду - но я вам рекомендую изучить этот опыт. У них много статей, есть сайты .. вообщем - это вещь в программировании великая, не побоюсь этого слова и я бы ее вообще рекомендовала всем ее изучить, кто идет дальше бакалавра по программированию.
ничего не понял. Мну гуманитарий
Не обязательно комментировать все сообщения, которые, попадаются на глаза. Не владеете темой -- пройдите мимо. Полезной информации ноль, флуд + пункт правил об олбанском языке и кащенизме.
Добавлено через 2 минуты 53 секунды
1. Как лучше хранить свои идеи, ссылки на прочитанную литературу, которая чем-то помогает либо дает пищу для размышлений?
Вопрос по картотеке и каталогизации, по сути. Тут в свое время что-то подобное обсуждалось, но довольно вяло. Подозреваю, что стройной системы хранения информации ни у кого или почти ни у кого нет, т.ч. все в рамках кустарных методоы (файлы, папки, записи на листочках).
Вопрос по картотеке и каталогизации, по сути. Тут в свое время что-то подобное обсуждалось, но довольно вяло. Подозреваю, что стройной системы хранения информации ни у кого или почти ни у кого нет, т.ч. все в рамках кустарных методоы (файлы, папки, записи на листочках).
Да, именно про стройную систему хранения информации и идет речь.
Информации, ссылок на литературу, своих идей и т.д.
Идеальной бы была какая-нибудь программа-каталогизатор типа электронной библиотеки. Но опять же, некоторое время назад я искал и не нашел.
Неужели ни у кого нет никакой системы? Я про свой ворд-файлик сказал; еще один вариант, который использовал мой преподаватель - он создавал файловую структуру, которая содержала статьи, его заметки и т.д. в электронном виде + некоторый индексный документ (Word или HTML). Но этот вариант мне как-то тоже не оч нравится.
2 Carro:
Я согласен, что код очень обязателен для 05.13.11, но дело-то, по сути, в том, что работа пока получается только теоретическая. Возможно, больше бы тут подошли физмат науки.
Может, у кого-то была подобная ситуация (теоретическая работа, в то время как ожидается какой-нибудь код, и как это на защите)?
Спасибо, по CORBA почитаю. Как-то так получилось, что эту технологию я совсем не знаю, т.к. использовал другое для распределения данных.
2 Ink:
Нет, до депонирования и защиты интеллектуальных прав пока еще далеко (как я сказал, практическая ценность работы непонятно когда еще будет видна). Хотя, может будет уже слишком поздно?:)
Что-то негативное настроение с утра. :) Извините если что не так. :)
2 Carro: Корба это конечно хорошо (но это скорее идея кросплатформенной интеграционной платформы, а не кросплатформеного языка). У меня тоже честно говоря есть сомнения по новизне. Правда мне на ум в первую очередь приходит идеология Java.
2 george: Вы случайно не из МЦСТ? Если нет, то рекомендую почитать еще про идеологию современных компиляторов (помимо вникания в идеологию джавы). Там же любой язык (точнее код на любом языке верхнего уровня) приводится к мета-языку (коду на мета-языке) на котором осуществляются все оптимизации и эвристические проверки, а потом уже (после графовой оптимизации и проверок) код на мета-языке транслируется в машинный код в зависимости от текущей архитектуры. Это случайно не повторение вашей задачи (работа с мета-языком)?
По поводу "как не забыть умные мысли". Я когда писал диссер просто записывал отдельные куски текста (не сильно вычитывал) в отдельные файлы. Плюс было две директории -- отработанное и не отработанное. Соответственно изначально файл ложился в директорию "не отработанное". И дописывал я его там же если потом мысли возвращались к этой же теме. Когда эта мысль включалась в статью или текст диссера файл перемещался в "отработанное".
2 Riper:
Спасибо за ответ. Нет, я не из МЦСТ.
По поводу CORBA.. это не касается моей темы, Carro же, как я понял, рекомендовала изучить только их опыт, публикации, историю развития от идей до конкретного продукта. А не конкретно саму технологию.
По мета-языку... задача создания именно промежуточного языка не ставится. Тут задача - использовать некоторый язык для того, чтобы помочь преобразованию информационного графа (по сути, связей по данным в лямбда-исчислении) в управляющий императивный граф для конкретной архитектуры. Хотя такую трансляцию можно осуществить и через промежуточный язык; возможно, мы к этому и придем :)
По мета-языку... задача создания именно промежуточного языка не ставится. Тут задача - использовать некоторый язык для того, чтобы помочь преобразованию информационного графа (по сути, связей по данным в лямбда-исчислении) в управляющий императивный граф для конкретной архитектуры. Хотя такую трансляцию можно осуществить и через промежуточный язык; возможно, мы к этому и придем :)
Может вы к этому придете, но идея в том что это уже давно есть (в конце 90-х когда я этой темой интересовался уже книжки были, правда тогда только на английском. "Ахо-Ульман" (она же "книга с драконом") точно уже был, вроде сейчас уже давно есть он на русском).
Поэтому фирмы выпускающие пакеты для программирования часто выпускают компиляторы для нескольких языков программирования. Потому что задача оптимизации кода и автоматического нахождения логических ошибок в коде решается один раз для мета-языка. А потом просто дописываются трансляторы из языка высокого уровня в мета-язык и трансляторы из мета-языка в архитектурно-зависимый машинный код.
Вообще крайне рекомендую ознакомиться с "книгой с драконом" чтобы не изобретать велосипед и заниматься действительно новым. :)
Сейчас ссылку вам поищу
Добавлено через 45 секунд
Нашел: http://www.ozon.ru/context/detail/id/146264/
Riper, Спасибо за продолжение дискуссии!
Про промежуточный язык я знаю, 5 лет работаю с .NET.
"Книга дракона" у меня на полке стоит в бумажном виде :)
У меня в работе немного по-другому. Опишу подробнее, идеи и критика очень приветствуется :)
Мы ориентируемся на запуск функциональных программ на различных параллельных системах (упростим задачу, пусть даже системах одной архитектуры, но с разными аппаратными ресурсами – например, числом ядер – ситуация сейчас вполне обычная).
--- небольшая мотивационная часть
Сейчас параллелизм в промышленном программировании в основном реализуется так: в качестве технологии программирования используется MPI, либо различные TBB, и прочие параллельные библиотеки с потоковой моделью. В функциональных языках F#, Haskell – по сути, те же самые потоки, только завуалированные (неготовые значения, преобразования в плоский параллелизм для одновременной обработки данных, например, в массиве несколькими потоками).
-- конец мотивационной части
При таком подходе исходный код программы имеет прямую связь с ресурсами вычислительной системы (создание потоков, например). Такие программы ресурсно-зависимые, и при переносе их на другую платформу могут работать неэффективно. Чтобы адаптировать программу, часто требуется модифицировать ее исходный код.
Это и есть основная проблема, к решению которой хочется подобраться.
Предполагается следующее: язык, который максимально абстрагирован от архитектуры - функциональный язык (минимальное число императивных конструкций, описывает только зависимости по данным без учета, как это будет оттранслировано в машинный код). На этом языке реализован прикладной алгоритм, некоторые вычисления.
Требуется оттранслировать этот язык в машинный код. Причем для разных архитектур. Или проинтерпретировать его на разных архитектурах.
По сути, это управление ресурсами целевой платформы для выполнения прикладной программы. Для цели управления ресурсами предполагается использовать некоторый язык. Он будет описывать, как ресурсы целевой платформы будут захватываться, использоваться и освобождаться. Ведь стратегий управления ресурсами достаточно много, мы можем по-разному их обслуживать.
Если это память, то освобождать/захватывать в разные моменты времени. Отсюда такие стратегии, как сборка мусора, использование регионов, ручное управление.
Если это процессорное время, то это то, как мы распределяем работу по процессорам и потокам.
Список можно продолжать.
Я сейчас работаю над описанием возможных операций над ресурсами, группировки операций в процесс, связи процесса с ресурсами. Над формированием концепции.
Но запрограммировать я пока ничего не могу. Я пока не представляю, как будет выглядеть этот язык управления ресурсами. Будет ли это некоторое декларативное описание того, как работать с ресурсами, или какие-нибудь атрибуты конструкций функционального языка (чего не хотелось бы), либо подпрограммы, императивно описывающие работу с ресурсами. Может, промежуточное представление будет генерироваться с использованием правил на этом языке.
Свой функциональный язык для опытов есть.
Ну вот так, вкратце :)
Собственно, это и есть проблема, советов по которой я попросил. Какие-то наработки есть, но как их воплотить в код? Если написать туфту, то надо ли оно? Если ждать, пока все прояснится и появится некоторое ТЗ на реализацию – можно окончания срока аспирантуры не дождаться.
P.S. Я не претендую на какую-то мега-новизну, просто несколько иной взгляд на задачу.
ну собственно два альтернативных решения уже привели. Рипер предложил Java.. что вполне логично, так как создание потоков, работа с файловой службой, да со всем, что позволено - не зависит от архитектуры. Второй - я -библиотека ACE - она на С++. в отличии от Java - совместимость там на уровне исходного кода, т.е. надо перекомпилировать. Зато чего там только нет .. все мыслимые и немыслимые сетевые и системные вызовы - мы использовали их,например, для разработки комопненты, которая определяет загрузку компьютера незаивисимо от операционки. Работали на Solaris, Linux, Windows.
НО,конечно, и тот и иной подход имеет недостатки, поэтому вполне возможно вы предлагаете, что -то что имеет некоторые преимущества. Но надо обязательно объяснить что именно лучше, чем в ACE и Java.
george, честно говоря не уверен что правильно понял что Вы хотите сказать/сделать. :)
Давайте пока оставим в покое программизм (я, кстати, не поддерживаю идеи что сам полученный работающий код (ваша программа) должен быть центральным выводом из вашей работы) и попытаемся как-то математически определить что вы хотите сделать.
Итак что я понял:
1. Вы описываете некоторый язык, допускающий параллельное вычисление данных. Этот язык моделирует последовательное изменение значений массивов данных. Подозреваю что это получится контекстно-зависимый язык (в смысле что язык описывается контекстно-зависимой грамматикой). Результатом должно быть некое доказательство адекватности построенной модели (выведенного языка) реальным задачам и вычислениям.
2. Вы описываете допустимые правила вычислений для различных архитектур в виде других языков (как КЗ так и КС). Результатом опять же является доказательство правильности построенной модели.
3. Вы разрабатываете алгоритмы (и доказываете их) приведения языка из п.1 к любому языку из п.2 (или не любому, что означает то что ваш язык не исполним на данной архитектуре).
Я все правильно понял? (могу переписать те же пункты не в терминах формальных языков а в терминах детерминированных/не детерминированных автоматов если так вам удобнее)
Если да, то надо сосредоточиться на моделировании и доказательстве переходов (хотя опять же сомнения по новизне меня не отпускают), а не на программировании.
Я пока использую программу LeaderTask. Не скажу что это очень удобная программа, но лучшее из того что было перепробовано (не мало программ).
Есть идея написать собственное творение для этих и других огранизационных нужд.
Так если есть какие-то предложения\вопросы - ждем-с.
PS. Интересно а gcc разве не решает вашу задачу? Список поддерживаемых архитектур/платформ огромен. Я сам работаю с небольшими надбавками на x86, x64, x81, ARM7, ARM9.. Также как и Python
Я пока использую программу LeaderTask. Не скажу что это очень удобная программа, но лучшее из того что было перепробовано (не мало программ).
Есть идея написать собственное творение для этих и других огранизационных нужд.
Так если есть какие-то предложения\вопросы - ждем-с.
PS. Интересно а gcc разве не решает вашу задачу? Список поддерживаемых архитектур/платформ огромен. Я сам работаю с небольшими надбавками на x86, x64, x81, ARM7, ARM9.. Также как и Python
гм, боюсь, вы не поняли.. ну вот как пример, вы в курсе, что на Интел и Спрак разный способ хранения данных типа float . Т.е. при передачи их из разных ОС систем, надо либо конвертировать расположение байтов , либо нет ... все это можно зашить, например, в некое middleware типа CORBA, а можно ручками самим .. и надо остлеживать на какой ОС и с какой ОС идут данные.
1. Вы описываете некоторый язык, допускающий параллельное вычисление данных. Этот язык моделирует последовательное изменение значений массивов данных. Подозреваю что это получится контекстно-зависимый язык (в смысле что язык описывается контекстно-зависимой грамматикой). Результатом должно быть некое доказательство адекватности построенной модели (выведенного языка) реальным задачам и вычислениям.
Да, некоторый функциональный язык, являющийся вариацией лямбда-исчисления. Функции, работа со списками, зависимость по данным и отсутствие императивных конструкций.
Только не понял, почему он будет описываться КЗ-грамматикой?... Она же в языках программирования не применяется, насколько я знаю - из-за сложности ее разбора, а также из-за невысокой практической ценности.
2. Вы описываете допустимые правила вычислений для различных архитектур в виде других языков (как КЗ так и КС). Результатом опять же является доказательство правильности построенной модели.
Да, так. И не только под разные архитектуры. Для начала можно взять, например, многоядерные процессоры с разным числом ядер.
3. Вы разрабатываете алгоритмы (и доказываете их) приведения языка из п.1 к любому языку из п.2 (или не любому, что означает то что ваш язык не исполним на данной архитектуре).
Не совсем понял про "приведение". Мы разрабатываем алгоритмы исполнения языка из п.1. на разных архитектурах, используя описание правил вычислений на языке из п.2. Может быть, это можно назвать приведением.
Я пока использую программу LeaderTask. Не скажу что это очень удобная программа, но лучшее из того что было перепробовано (не мало программ).
Спасибо, посмотрю.
Есть идея написать собственное творение для этих и других огранизационных нужд.
Так если есть какие-то предложения\вопросы - ждем-с.
Тоже думал над этим. Но сначала надо изучить, что уже есть :)
PS. Интересно а gcc разве не решает вашу задачу? Список поддерживаемых архитектур/платформ огромен. Я сам работаю с небольшими надбавками на x86, x64, x81, ARM7, ARM9.. Также как и Python
Не решает. Конечно, для последовательного алгоритма решает.
Но возьмите, например, многоядерную машину.
Чтобы запрограммировать для нее параллельный алгоритм, вы напишете на gcc код, создающий взаимодействующие между собой потоки. Но это будет ручное, императивное управление доступными аппаратными ресурсами на самом деле. Вы все равно говорите ОС, когда и как надо создавать потоки и выделять для них порции вычислений.
Задача переложить часть (в идеале всю) этой ручной работы на некоторое инструментальное средство. Отсюда и функциональный язык, чтобы обеспечить максимальную гибкость его трансляции.
Добавлено через 1 минуту 47 секунд
гм, боюсь, вы не поняли.. ну вот как пример, вы в курсе, что на Интел и Спрак разный способ хранения данных типа float . Т.е. при передачи их из разных ОС систем, надо либо конвертировать расположение байтов , либо нет ... все это можно зашить, например, в некое middleware типа CORBA, а можно ручками самим .. и надо остлеживать на какой ОС и с какой ОС идут данные.
Да, подобные проблемы тоже можно решить, но у нас упор на параллелизм.
А так да, хороший пример архитектурной зависимости/зависимости от аппаратных ресурсов.
Не совсем понял про "приведение". Мы разрабатываем алгоритмы исполнения языка из п.1. на разных архитектурах, используя описание правил вычислений на языке из п.2. Может быть, это можно назвать приведением.
А правила вычислений это разве не язык? Я так понимаю что язык.
В результате программа (предложение на язык1) исполняется на архитектуре (правила на язык2). Т.е. фактически вы строите отображение слов на язык1 в слова на язык2.
В духе: "слова вида АБВ на язык1 приводятся к словам вида ГДДДЕЕГ на язык2 и т.д."?
А правила вычислений это разве не язык? Я так понимаю что язык.
В результате программа (предложение на язык1) исполняется на архитектуре (правила на язык2). Т.е. фактически вы строите отображение слов на язык1 в слова на язык2.
В духе: "слова вида АБВ на язык1 приводятся к словам вида ГДДДЕЕГ на язык2 и т.д."?
Согласен с вами.
Просто прочитал приведение по диагонали, поэтому задал этот вопрос :)
Согласен с вами.
Просто прочитал приведение по диагонали, поэтому задал этот вопрос :)
Короче. :) Мне кажется (я хоть и к.т.н. по 05.13.11, но диссер мой совсем из другой области, формальными языками занимался давно, не знаю нынешних "модных" тенденций) что тебе сейчас не надо заморачиваться с програмизмом.
Сделай строго все математические выводы (1, 2, 1->2) в рамках теории формальных языков, сформулируй и докажи по ходу этих выводов несколько теорем (может даже более общих чем твой случай). И будет супер. Совет и оппоненты будет в восторге скорее всего. Если какие-нибудь красивые результаты математические получатся, то вообще может потом защитишься по 05.13.11 не как к.т.н., а как к.ф.-м.н. (что почетнее). Вот это и будет центральным моментом в твоем диссере.
А код потом дописать (при желании если научник будет его очень хотеть) не проблема.
Riper, спасибо за участие и советы! Буду думать :)
Я пока использую программу LeaderTask. Не скажу что это очень удобная программа, но лучшее из того что было перепробовано (не мало программ).
Есть идея написать собственное творение для этих и других огранизационных нужд.
Так если есть какие-то предложения\вопросы - ждем-с.
Попробовал программку. Действительно, не айс. Outlook + OneNote даже поудобнее будет (м.б. потому что привык на работе?).
И задачу картотеки и каталогизации именно научной информации (про что изначально был вопрос, а не про контроль рабочего времени/выполненных задач), как я понял, она тоже не решает.
+ программа глючная, за 5 минут одну ошибку поймал. Не буду детализировать, т.к. тема не об этом.
Хм.. Собственно у меня она служит как раз только как картотека и каталогизации собственных мыслей, статей и выдержки из книг. Для другого она конечно не пригодна :) (основные ее возможности по управлению временем etc, я использую для фиксации времени от идеи до реализации, или от мысли к развернутой статье)
Текстовый скрин выглядит примерно так:
/Книги/Статьи/Диссертация/Работа/Спорт/etc/
И в каждой категории в виде "дерева" уложено по положкам:
+ Лит. обзор
- "Name1"
- "Name2"
И собственно в каждом пункте ссылка на материал, основные положения + цитаты.
Вполне достаточно для начала.
А вам что нужно? А то я собственную программу пишу, так попытаюсь даже MindMap реализовать :)
vBulletin® v3.8.8, Copyright ©2000-2025, vBulletin Solutions, Inc. Перевод: zCarot