4px

Рабочие будни

Oct 26, 2012 22:13

Между делом на работе, когда позволяет время, пишем свой движок нереляционной базы данных, в которой связи построены непредопределенным образом, наподобие свободных человеческих ассоциаций. Т.е. ее поведение непредсказуемо и зависит в основном от накопленного опыта. Нам за это не платят, делаем только «ради науки», не ожидая никаких конкретных ( Read more... )

безобразничаем, работа, компьютеры

Leave a comment

mynine October 26 2012, 19:45:38 UTC
:) Успехов, у меня, к сожалению, на работе такой команды нет:(
А на каком языке экспериментируете? Обычно для таких вещей функциональщину предпочитают...

Reply

4px October 26 2012, 20:45:15 UTC
это, в общем-то, анекдот )) родившийся в беседе по аське в пятницу вечером. хотел бы я заниматься наукой! но на работе мы работаем исключительно на маркетинг, это занимает около 146% времени, и пишем на самых линейных языках высокого уровня. если я назову их оба в рамках одного комментария, откроются врата ада и нас сожрет динозаурус.

Reply

mynine October 27 2012, 10:48:40 UTC
Ах, обмануть меня не трудно,
Я сам обманываться рад.(с)
:)

Жёстко у вас там с динозаурусами, однако! :(

Reply

4px October 27 2012, 11:30:51 UTC
))
вообще, я уже как-то размышлял о такой "БД". но пока ничего конкретно полезного на ум не приходит. а чем там может функциональщина помочь?

Reply

mynine October 27 2012, 12:48:41 UTC
Фиг знает, чем именно помочь, но факт остается. Если помнишь в 80х годах все носились с искусственным интеллектом (так называют всякую компьютерную хрень, которую пока не придумали как использовать на практике :) так вот для него пользовали исключительно ФЯПы типа Prolog и Lisp. Считается что они позволяют мастеру точнее выражать свои идеи и строить гораздо более навороченные алгоритмы меньшими усилиями. Правда, современный Lisp (Common Lisp) уже не чисто функциональный, но все равно имеет много плюшек, которые, вероятно, невозможны в наших привычных языках.

Reply

4px October 27 2012, 15:18:00 UTC
я компьютер впервые увидел в 91-м году )) пролог и лисп знаю только по урокам истории ))

Reply

mynine October 27 2012, 17:15:53 UTC
Про Пролог я давным давно прочитал книжечку, но использовать не решился - на тогдашних персоналках это был очень медленный язык. А Common Lisp вполне жив и здоров, в нем есть куча современных вещей от ООП (CLOS) до исключений, которые называются условиями и работают гораздо гибче. Но это не язык алголовской ветви и понимать и писать на нем мне тяжеловато: я экспериментирую потихоньку, но мозги надо выкручивать в другую сторону :(

Reply

4px October 27 2012, 11:33:22 UTC

... )

Reply

mynine October 27 2012, 12:50:36 UTC
Это уж больно старая картинка :) Я ужу и не припомню когда в последний раз использовал goto, но иногда его использование, действительно, упрощает логику программы.

Reply

4px October 27 2012, 12:54:10 UTC
картинка старая. зато про тех динозаврусов, которых я имел ввиду.
я последний раз использовал goto году этак в 94-м. если не раньше. там еще тогда появилась в бейсике интересная разновидность GOSUB ))
а сейчас пока не нужен.

Reply

mynine October 27 2012, 13:18:19 UTC
Ну я имел в виду все-таки более структурные языки, чем бейсик :) Если пишешь на чистом Си, то часто приходится выполнять секцию выхода из функции (освобождать ресурсы, например), тут goto самое внятное решение. На плюсах и пр этой проблемы нет, потому что почти все можно реализовать через RAII и освобождение происходит автоматом в деструкторах.

Reply

4px October 27 2012, 15:22:58 UTC
мне нужны примеры. пока я не могу придумать случая, где нужен GOTO.

Reply

mynine October 27 2012, 17:07:08 UTC
Вот наскоро пример вынужденного перехода. Уписывать каждый раз освобождение памяти и закрытие файла (и еще тьму вещей можно придумать) гораздо худшее решение.

int some_foo(int some_arg)
{
int ret_val = 0;
char* text = (char*)malloc(SOME_SIZE);
FILE* fi = fopen("path/to/file", "r");
...
if (!condition1) {
/* return -1; */
ret_val = -1;
goto ret_label;
}
...
if (!condition2) {
/* return -2; */
ret_val = -2;
goto ret_label;
}
...
ret_label:
free(text);
fclose(fi);
return ret_val;
}

В принципе, иногда я в таких случаях эмулирую goto через обертывание тела функции (до ret_label) в фальшивый цикл do ... while(false) и вместо goto ставлю break :) Но это может запутать еще больше читателя исходников.

Reply

4px October 27 2012, 17:12:14 UTC
почему не

if(!condition1){
ret_val = -1;
}
else{
if(!condition2){
...
}
}
free(text);
fclose(fi);
return ret_val;

про break читал, что, мол запутывает. на мой взгляд в редких случаях выхода и невложенного цикла он вполне хорошо читаем. конечно, если конструкцию усложнять, то нужно сокращать безусловные переходы.

Reply

mynine October 27 2012, 17:18:17 UTC
Этот вариант часто не проходит, условий могут быть много и не такие линейные. Отступов получается много вдобавок.

Reply

4px October 27 2012, 17:23:23 UTC
у меня такие наборы условий и чудовищное количество вложений на каждом шагу )) вроде нормально читается. блоки все равно глазом видны. на днях вышла новая бета IDE, она еще и подсвечивает блоки активные. а вот goto тут будет наоборот мешать. ну разве что все они отправляют в конец метода. а если больше точек - то уже нехорошо.

Reply


Leave a comment

Up