программы, которые пишут другие программы
Feb. 8th, 2009 07:10 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
родилась тут у меня мысль, что есть задачи с более-менее определенным ТЗ,
с которыми можно как-то так извернуться….
в общем, объявляется конкурс по написанию программ,
которые пишут другие программы.
Задание 0:
программа, которая ничего не принимает на вход,
и выводит “Hello, World”.
Задание 1:
программа, которая принимает на вход строку и выводит ее.
если введенная строка пуста – выводит “Hello, World”.
Задание 2:
программа, которая принимает на вход строку – имя математической операции,
а также 1 или 2 числа, в зависимости от того, сколько аргументов у операции.
Выводит результат операции.
Пример:
natural logarithm 5 1,6094379 | addition 5 6 11 | factorial 4 24 | negate 6 -6 |
Можно, но не обязательно, сделать в генераторе выбор
набора поддерживаемых операций.
Задание 3:
программа, которая принимает на вход имя файла и имя хэш-алгоритма,
открывает файл (для простоты предположим, что он находится в текущей директории),
считывает его, считает хэш содержимого файла
и выводит его в шестнадцатеричном виде на экран.
Если хэш не поддерживается, выводит “Unknown hash algorithm”
Нужно реализовать хотя бы один из: CRC32, MD5, SHA1, SHA256
В идеале, генератор должен принимать на вход указание, считалку каких
именно хэш-алгоритмов реализовывать.
Условия:
- Программа-генератор и программа-результат могут использовать Google, Wikipedia,
Koders.com и прочие онлайн-сервисы - Задание программе-генератору подается в текстовом виде, так, как оно приведено
выше. Программа-генератор может реализовывать одно или сразу несколько заданий.
Если в задании есть несколько вариантов (например, задание 2 и 3), то можно генерировать
”какой получится” или дописывать в понятном человеку варианте, какой именно вариант. - Программа не должна ни в каком виде включать в себя код специфических частей программ,
которые создаются с ее помощью, но может включать в себя библиотеку подпрограмм
общего назначения - Программа может использовать базы данных любого вида и библиотеки исходного кода,
созданные автором программы, при соблюдении 2 условий:- Эти файлы можно найти с использованием поисковых систем, или скачать со страниц,
которые можно найти с использованием поисковых систем.
Быстро индексируются Google Base, Google Pages, Blogger, ЖЖ и еще ряд сервисов,
эти – первые, которые вспомнил. - Данные хранятся в открытом, незашифрованном виде, понятном не только автору,
но и человеку
- Эти файлы можно найти с использованием поисковых систем, или скачать со страниц,
- Программа должна генерировать исходный код и бинарный файл (в случае, если
код генерируется на компилируемом языке). Если требуется специфический компилятор,
нужно укомплектовать программу инструкциями по скачиванию и установке. - Для первой версии конкурса программа-результат должна работать из командной строки,
работать с stdin/stdout и файлами. - Программа-генератор может работать как из командной строки, так и иметь GUI.
Построение веб-сервисов не рекомендуется из соображений сложностей копирования,
развертывания, установки и изучения таких вещей - Цель конкурса – создать мега-генератор ;)
Поэтому программы на конкурс выдвигаются с исходным кодом. Можно объединяться,
можно создавать работы на основе работ других участников.
Это условие необязательное. Если хочется сохранить ноу-хау, то можно не публиковать
исходный код (но предоставлять его нужно, иначе будет невозможно проверить,
удовлетворяет ли программа пункту 2) - Генераторы можно постить в комментах или присылать на e-mail wizzard0@gmail.com
с пометкой в теме письма “Конкурс генераторов” - Язык программирования – произвольный. Рекомендуется прикладывать также инструкции
по тестированию и компиляции для других участников.
Если вам понравился конкурс – напишите о нём в своем журнале и поделитесь с друзьями :)
Принимаются поправки к условиям, ну и другие задания, естественно :)
no subject
Date: 2009-02-08 07:29 am (UTC)no subject
Date: 2009-02-08 09:27 am (UTC)no subject
Date: 2009-02-08 09:33 am (UTC)А вот как это реализовать, соблюдая правила 2 и 3 - это вопрос :)
Наверное, мне стоит выложить реализацию 1-2 заданий, т.к. я думаю, что не все читатели "в теме".
no subject
Date: 2009-02-08 09:37 am (UTC)да. выложи
no subject
Date: 2009-02-08 09:45 am (UTC)Code reuse, однако :)
no subject
Date: 2009-02-08 09:53 am (UTC)тут идея в первом пункте:
http://darth-caedius.livejournal.com/18556.html
зайди дальше по ссылке на отрывок из книги.
и вот что пока из этого получилось:
http://darth-caedius.livejournal.com/28641.html
вот тут идея именно генератора, только пока еще не оформившаяся
no subject
Date: 2009-02-09 06:10 am (UTC)у них 2 проблемы
1. геном человека на эээ 5-6 порядков сложнее (13 мб, если мне память не изменяет, и 80 байт)
2. у них критерием выживаемости нечаянно получилось укорочение и упрощение, а это не очень способствует возникновению разума :)
амебы - прикольно. буду думать еще, сейчас нету времени совсем :(
no subject
Date: 2009-02-09 06:44 am (UTC)no subject
Date: 2009-02-08 09:54 am (UTC)no subject
Date: 2009-02-09 06:11 am (UTC)А вообще - да, плохо. Это не наука.
no subject
Date: 2009-02-09 06:12 am (UTC)А вообще - да, плохо. Это не наука.
no subject
Date: 2009-02-09 06:38 am (UTC)no subject
Date: 2009-02-08 09:44 am (UTC)Главная идея в том, что многие вещи уже были когда-то и где-то кем-то написаны, поэтому их можно искать и лепить программы из таких кубиков.
Например, Hello, World уж точно есть в вики, а хэш-алгоритмы и примеры их использования - на koders.com :)
Задания, в общем, не просто так написаны :)
Если программа сможет написать не одну, а семейство программ, или хотя бы просто выступать в качестве многофункционального генератора рутинного кода - это уже очень хорошо.
Да, немного распознавать текст надо. Исходник можно и не зашивать, в инете куча хелловорлдов. Как и кучи более сложных вещей, между прочим :)
no subject
Date: 2009-02-08 10:05 am (UTC)no subject
Date: 2009-02-08 04:35 pm (UTC)no subject
Date: 2009-02-09 05:15 am (UTC)no subject
Date: 2009-02-09 06:13 am (UTC)Иначе говоря, те данные, которые собрали из автоматических багрепов висты, сложили в кучу и получились статистически успешные problem solver'ы.
Нифига не понтово, но очень практично.
no subject
Date: 2009-02-09 03:53 pm (UTC)no subject
Date: 2009-02-09 06:15 am (UTC)Собрать программу из предположения, что ее кто-то уже собрал - это совершенно не научно.
Но таких задач много, и хочется их автоматизировать, чтобы появилось, наконец-то, время разрабатывать и реализовывать что-то новое, в то же время удовлетворяя заказчиков.
no subject
Date: 2009-02-09 09:31 am (UTC)no subject
Date: 2009-02-09 09:34 am (UTC)no subject
Date: 2009-02-09 05:20 pm (UTC)no subject
Date: 2009-02-09 05:22 pm (UTC)Тут, вообще, помогает фиксация терминологии, а мешает - то, что те, кто умеют формировать ТЗ, умеют формировать их для людей :)
no subject
Date: 2009-02-09 06:10 pm (UTC)no subject
Date: 2009-02-11 09:48 am (UTC)(3) -- глупость
Date: 2009-02-11 09:22 am (UTC)Сама же идея такой программы стара, как мир. Те, кто начинают заниматься подобной задачей, довольно быстро понимают, что писать такую программу для машин глупо, если сам не можешь писать другие программы, и начинают модифицировать себя. Иначе говоря, программирование машин -- занятие для начальной школы, ну и простейший способ поддерживать жизнь, не напрягаясь.
Добавлю немного мистики. Как-то я сам всему обучался, но был-таки один человек, который повлиял на меня, от него я впервые услышал про Си (тогда только-только персоналки появились, до этого я писал на пиэле). Он вообще был странный. Не терпел непонимания, сразу взводился. Разводился и женился не один раз, но на одной женщине. И сказал мне как-то, что он пишет такую программу. Да. Сразу после этого умер. Лет сорок ему было. Борзов его фамилия.
Re: (3) -- глупость
Date: 2009-02-11 09:42 am (UTC)Но, похоже, вы не совсем поняли изначальную задачу.
Создавать изобретатель решений - бессмысленно, в этом я с вами согласен. А вот поисковик решений - вполне реально.
Тема модифицирования себя и тема мистики слишком большая для одного коммента, попробую написать это в отдельном посте.
Re: (3) -- глупость
Date: 2009-02-11 09:47 am (UTC)Re: (3) -- глупость
Date: 2009-02-11 10:02 am (UTC)это да, но мы ведь, вроде, и собираемся использовать именно ихние результаты поиска?
>> Если есть под рукой, зачем искать за горой?
1. Just for fun.
2. Автоматизация рефакторинга и вообще CodeDOM/AST манипуляций - это будущее компиляторов. А такой проект - просто красивый способ его потестить.
Re: (3) -- глупость
Date: 2009-02-11 10:48 am (UTC)Про (2) не понял, просветите. Рефакторинг -- это когда из кода получают структуру, более совершенный реассемблятор, вроде? Чтоб не переписывать самому старое. А так же красть. То-то радость MS будет.
А так развитие идёт потихоньку, сейчас начинают приступать к реализации идей столетней давности. Вот в VS лямбда-оператор появился, полезная вещь. Правда, есть люди, которые всё то же самое делают на ассемблере, прилагая гораздо меньше усилий (у них уже все макросы давно написаны) и получая гораздо более совершенный код, но что тогда делать молодым? Для молодых нужен "компилятор": программа, которой наговоришь белиберду в микрофон, нажмёшь кнопочку -- код на выходе. Компилятор умный, он сам догадается, что тебе нужно, и использует давно известное решение. Да, а чтоб мозги молодых не кисли, интерфейс этого компилятора делаем динамически меняющимся. Кнопка то слева, то справа, то цвет изменит, самому т0же побаловаться можно, поиздеваться над товарищами.
Вот почему у видео много звуковых дорожек, а самому комбинировать их при прослушивании нельзя (типа, русскую в центральные колонки, оригинал в передние, музыку в задние)? Из-за этого дорожка с переводом содержит язык оригинала (это предположение). Ведь элементарная идея.
Да ладно, это всё так, брюзжание. Чем бы дитя не тешилось. Программирование -- такой же инструмент самопознания, как и игры. Так что написать программу просто так, для себя, очень полезно. Правда, потом трудно устроиться на работу, придётся уходить в бизнес, учась втюхивать написанное для себя всем. Программированием машин при этом уже не позанимаешься. Бизнес, как и политика -- программирование людей.
Re: (3) -- глупость
Date: 2009-02-11 02:30 pm (UTC)Я даже затрудняюсь назвать задачу, которую мог бы выполнить исключительно я... Следует ли из этого, что лично мне стоит забросить программирование, да и жизнь вообще?
>> Про (2) не понял, просветите. Рефакторинг -- это когда из кода получают структуру, более совершенный реассемблятор, вроде?
Рефакторинг - процесс последовательного улучшения кода методом применения к нему эквивалентных преобразований, с сохранением функционала при изменении внутренней организации. Грубо говоря, процесс превращения прототипа в продукт, который (исходники) не стыдно показать людям. Но вообще, такие вопросы меня немного удивляют.
>> Чтоб не переписывать самому старое. А так же красть. То-то радость MS будет.
А так развитие идёт потихоньку, сейчас начинают приступать к реализации идей столетней давности. Вот в VS лямбда-оператор появился, полезная вещь. Правда, есть люди, которые всё то же самое делают на ассемблере, прилагая гораздо меньше усилий (у них уже все макросы давно написаны) и получая гораздо более совершенный код, но что тогда делать молодым? Для молодых нужен "компилятор": программа, которой наговоришь белиберду в микрофон, нажмёшь кнопочку -- код на выходе. Компилятор умный, он сам догадается, что тебе нужно, и использует давно известное решение. Да, а чтоб мозги молодых не кисли, интерфейс этого компилятора делаем динамически меняющимся. Кнопка то слева, то справа, то цвет изменит, самому т0же побаловаться можно, поиздеваться над товарищами.
Э... Кем вы работаете, если не секрет?
Вот почему у видео много звуковых дорожек, а самому комбинировать их при прослушивании нельзя (типа, русскую в центральные колонки, оригинал в передние, музыку в задние)? Из-за этого дорожка с переводом содержит язык оригинала (это предположение). Ведь элементарная идея.
...И какое ПО используете? Media Player Classic, между прочим, уже лет 5 как такое умеет, да и фильмы с звуком и субтитрами на нескольких языках, и выбором, с какой видеокамеры смотреть сцену, не вчера появились... Даже всеми ругаемый WMP уже научился языки переключать :)
>> Да ладно, это всё так, брюзжание. Чем бы дитя не тешилось. Программирование -- такой же инструмент самопознания, как и игры. Так что написать программу просто так, для себя, очень полезно. Правда, потом трудно устроиться на работу, придётся уходить в бизнес, учась втюхивать написанное для себя всем. Программированием машин при этом уже не позанимаешься. Бизнес, как и политика -- программирование людей
Не встречал трудностей с трудоустройством, невзирая на то, что студент дневного отделения.
А PR правит миром, это да. Увы, мы живем в мире людей, а не машин. Но отрицать это глупо, гораздо лучше адаптироваться самому.
Re: (3) -- глупость
Date: 2009-02-11 03:13 pm (UTC)Классик, как и все остальные (чего только не стоит у меня), не умеет. Он позволяет только выбрать ОДНУ дорожку из списка. Если Вы нашли, где можно выбрать для воспроизведения ОДНОВРЕМЕННО несколько дорожек, и как управлять таким воспроизведением, подскажите. Запускать несколько программ одновременно я догадался, но это говорит только о том, что программы плохо написаны.
Как раз студенты не испытывают проблем с трудоустройством в виду вышеизложенных причин. Жизнь устроена так, что или выталкивает тебя "наверх", в начальники, или, если тебе это не по душе, оставляет за бортом. В армии наблюдал картину. Один парень опоздал на поезд домой, а следующий не скоро. И вот он никому не нужен, нет ни строевой, ни политзанятий, никакой работы, спи себе, гуляй. И ходил он грустный-грустный, а его никто не замечал.
Re: (3) -- глупость
Date: 2009-02-11 04:22 pm (UTC)Вот разработка "только на UML", и генерация кода только для билда бинарника - это похоже.
Код и синтаксис - это зло. При проверке ошибок в статически типизированных языках львиная доля ошибок отлавливается на этапе компиляции, и это тем надежнее, чем мощнее система типов. При этом не обязательно писать тонны type declarations, бо есть type inference.
Но остается еще этап ввода текста. Точнее, само представление программы _для компьютера_ в виде текста - оно неправильно. Хотя для некоторых языков возможно построение "интеллектуальных" текстовых редакторов (IDEA для Java, VS (только для C#, к сожалению)), и т.д., но все равно это не то.
Хороший редактор, например, в MPS ( http://www.jetbrains.com/mps/index.html ), но оно еще пока совсем сырое...
Если представление программы будет существовать только в виде синтаксического дерева (или UML, но я не хотел бы к нему привязываться) всегда, то компилятор упростится на порядок, исчезнет необходимость проверки синтаксиса и много других костылей, призванных выполнять противоестественное для машины преобразование неструктурированных данных в структурированные.
Останется только рефакторинг в чистом виде, как модификация обьектной модели программы. И всё.
RR - это большой и мощный саркофаг над очень опасным реактором. Оно для определенных задач работает, но перспектив у него я не вижу. Хотя красиво, да. Но на практике CASE-системы применяются не так часто, как могли бы, и я подозреваю что именно из-за плохой управляемости реактора. А вот с обьектной моделью можно творить что душе угодно.
Насчет нескольких дорожек сразу... Я могу ошибаться, но вообще это зависит от media splitter'a, а не от проигрывателя... Но все может быть. Проигрывает же WMP по дефолту все аудиодорожки сразу (правда зачем?)...
*** Хм... Вроде в спецификациях на Bluray была фишка с обязательной поддержкой проигрывания нескольких аудио и видео (картинка в картинке) сразу... надо поглядеть
>> не испытывают проблем с трудоустройством в виду вышеизложенных причин
Сорри, я плохо уловил, где их нужно искать... Можно скопировать кусок текста, где они описаны?
*** А писать по-своему мы, собственно говоря, и пытаемся....
только на UML
Date: 2009-02-11 05:06 pm (UTC)То же, что Вы пытаетесь высказать дальше, по-моему, похоже на взгляд художника супротив писателя. В этом нет ничего плохого (и рисовать простенькие программы я тоже люблю, вместо того, чтобы текст набирать), если бы не одно но. Если бы было возможно излагать теорию иначе, чем на разговорном языке, то математики бы уже давно перешли на этот способ. Однако, они до сих пор пишут обычные тексты, хотя и пестрящие специальными символами. Так что ни синтаксическое дерево, ни UML не являются панацеями, а имеют лишь узкий круг применения для написания ширпотреба. Если уж замахиваться, то надо говорить не о деревьях или там графах, это уже давно устарело, а о матрицах, об алгебре, к использованию которой сейчас просматривается тенденция в самых передовых кругах (ага, Теория Всего Гарриета Ливси).
Блю рей это хорошо, да только идея многопоточности изначально заложена во все эти форматы, начиная с avi, и кончая всякими мп4 и матроссками. Вот я и удивляюсь, что данные поставляют, а использовать не дают. У меня wmp11 даже языки как следует переключать не может (может вообще ничего не видеть), потому и держу несколько программ. А перед записью дисков для бытового плеера приходится вручную редактировать файлы. Удалять там или перемещать (менять порядок -- вот ведь глупость) дорожки и титры. Ну, с бытовыми понятно, они даже аш264 не читают, хотя микросхемы давно выпущены.
Студенты не испытывают проблем с трудоустройством, потому что никому не нужны те, кто пишет хорошо, но долго, главное -- дёшево и внушительно, чтоб очки дальше по инстанциям можно было втирать, передавая документацию с картинками, типа сделанных в RR. В самом деле, ты работаешь всю жизнь, выбился в начальники, а тут перед тобой сидит тот, которому все твои задачи смешны. Думаете, мне дали поработать на RR UML в Гаранте (генерились паскаль и с++ для винды и юниксов)? Для этого есть молодёжь. А для старых программистов догадайтесь что. Поддержка старого кода. Ведь молодые ни бум-бум в устаревших языках, типа Си, да в здоровенных программах, написанных ещё под win16, когда приходилось организовывать всё, что сейчас на себя берёт операционка, в худшем случае библиотеки, которые к этому старому коду не прицепишь.
Мне вот дали недавно задачу. Вроде как программисту, однако на меня выходят совсем в других случаях. Программа управления предприятием. Типа, прогноз и подсказки для руководителя, автопилот. Сказали, что есть литература, американская. Но там ни одной формулы! Непонятно, за что экономисты нобелевские получают. Или американцы держат формулы в секрете? Судя по кризису, не похоже. Единственное знакомое, что мне пришло в голову -- АСУ ТП, а значит ТАУ (теория автоматического управления). Ну, автоматически всякие программки, типа экологических, когда показывают предполагаемую динамику заражения местности. Но как-то странно, что никто не догадался, видимо, диффуры туда не пришьёшь. А в этих новомодных матрицах у меня идей пока нет. Опять же, за это не заплатят. За решение этой задачки, имею в виду.
вышеизложенные причины
Date: 2009-02-11 05:09 pm (UTC)сейчас
Date: 2009-02-11 03:14 pm (UTC)