Прочитал Вашу ранее поднимаемую проблему и предыдущую полемику.
Сама по себе идея о создании языка программирования, основанного на естесственном языке не очень нова. Но основной проблемой здесь является совсем не ассемблирование/дизассемблирование, а интерпретация вводимых понятий. Насколько мне известно, все предыдущие попытки (а они предпринимались в различных задачах, как чисто научного характера, так и практического, в том числе в экспертных системах и прочих досаточно сложных приложениях, взаимодействующих с пользователем). Тем не менее, все такие попытки в итоге сводятся к тому или иному ограничению языка. Чисто методологический вопрос - как Вы видите свою задачу? Вы собираетесь тарнслировать весь английский/русский/японский/(какой-либо еще язык) или же его часть, строго определенную некоторой системой правил? Обращаю Ваше внимание, что подобная система правил может быть достаточно широка и давать пользователю ощущение того, что он использует исключительно родной язык (хотя при этом язык будет обладать достаточно четко описанной формальной грамматикой).
Касательно дизассемблирования. Процессор оперирует солгласно сложным логическим схемам. Но схемы эти не содержат никаких механизмов порождения новых операций или чего-то подобного. Так что можно считать, что множество всевозможных инструкций процессора - K, и оно конечно. Теперь представьте себе множество всех возможных переходов, осуществимых в программе на языке программирования (хотя бы тот же C#), каждая из которых отображается на некоторое Ni число инструкций процессора. В скомпилированном (но еще не оптимизированном) коде подобные блоки машинных инструкций идут подряд. Теперь предпринимается какая-нибудь простейшая оптимизация, в следствии которой часть инструкций соседних блоков просто меняются местами. Без применения каких-либо обоснованных выработанных эвристик, Вам потребуется по-крайней мере ni^nj операций для нахождения оригинальных блоков (ni - размер первого блока, nj - второго). При этом, на самом деле оптимизацию работаю не так, а перемещают огромное количество интсрукций из разных блоков, добавляют/удаляют некоторые инструкции и так далее (например, развертка циклов + удаление неиспользуемых переменных). Так что восстановление исходного кода, реализующего тот же _высокоуровневый_ алгоритм (не тот, который в конечном счете определяет программу в машинных инструкциях), задача по-крайней мере экспоненциально сложная и по-крайней мере попадающая в класс NP задач. Так что решать ее компьютер будет долго.
В Вашем случае языка, основанного на естественном, ситуация еще более драмматична, по-скольку одна и та же конструкция языка может в различных контекстах интерпретироваться по-разному, и в то же время для выражения одного и того же вы можете использовать раизличные словесные конструкции. Например, слово "привет" действительно может быть интерпретировано как "здравствуйте" и как "с ума сошел". Тогда, если у вас есть нечто подобное "Привет А!" (до или после в контексте ясно, что речь идет о приветствии) и "Привет В!" (в контексте ясно, что у B не все в порядке с головой), то не удивляйтесь, если после дизассемблирования Вы получите "Здравствуйте А" и "С ума сошел B". В некоторых случаях это может привести в контексте к различию между изначальной смысловой нагружкой программы и конечной. В случае же, если из контекста не ясно, о каком "Привет" идет речь, то у Вас есть все шансы получить две принципиально по-разному работающие программы.
Насчет хакеров и Microsoft - есть очень различные моральные причины, почему люди занимаются взломом или разработкой коммерческого софта. Некоторые взламывают чужую собственность ради идеи или удовлетворения своей жажды поиска (и это хакеры), но большинство это делают либо для самоутверждения и разрушения чего-нибудь или все тех же денег (и таких кракеров, к сожалению, большинство). То, что касается коммерческого софта - вообще-то, программистам тоже надо платить. И профессия, поверьте, далеко не самая простая. А то, что компания пытается получить деньги за использование программ - Вас не возмущает, что за мебель, которую Вы покупаете в магазине, или за бытовую технику нужно платить? А чем програмы хуже?
В любом случае, каждому свое. Да и не такие уж монополисты Microsoft. Хотите комерческую ось - пожалуйста, используйте Apple Mac OS X или Microsoft Windows, хотите бесплатную - используйте Linux или Free/Open-BSD.
И еще. Если Вы действительно хотите что-то сделать в области ИИ - подумайте сначала о своем интеллекте. Уверяю Вас, что оскорбления и хмаство, а также отсутствие какой-либо попытки принять точку зрения оппонента явно не свидетельствуют о желании задуматься, прежде чем что-то сказать. Что, кстати, несколько напоминает китайскую комнату. И совершенно точно прежде чем начинать какие-то работы в данной сфере, имеет смысл получить какое-то представление о ней самому, причем не только романтическое, которое читается у Вас. Точнее, стоит ознакомиться с математикой и логикой, которая уже стоит за данным предметом, работами по анализу естественных языков. Ссылки здесь приводить не буду так как их не сложно нйти самому при желании, но изучить работы и учебники по теорям (начиная с классичесокй логики, интуиционного исчисления, исчисления высказываний, исчисления предикатов, теории множеств, общей алгебры, дискретной математике, математической кибернетике, теории формальных грамматик, генетическим алгоритмам и нейронным сетям) абсолютно точно стоит. И, кстати, вряд ли xakep.ru является достаточно надежным источником для получения информации, особенно если речь идет об обучении.
Ответить