LINUX.ORG.RU

Предлагайте - С vs C++ vs List vs ?


0

1

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

П.С. ушел гулять, буду поздно

★★★★

Ответ на: комментарий от mv

>> банальный вызов через указатель, и обновление этого указателя при замене кода.

> Добровольное анальное рабство.

Ну извини, если это недостаточно круто для тебя, зато KISS и никакой магии. Если учесть, что собственно замена кода - наименьшая из проблем при горячем обновлении, то я не понимаю, что тебя не устраивает. Хотя нет, понимаю... ты на всё смотришь через призму SystemTap, у которого задача совсем другая.

tailgunner ★★★★★
()
Ответ на: комментарий от mv

> Нет. Я просто не вижу проблем, если заранее предусмотреть горячую замену - банальный вызов через указатель, и обновление этого указателя при замене кода.
> Добровольное анальное рабство.


и зря вы так - я подумывал о подобном решении с подгрузкой .so с "патчами", вполне вменяемое как по мне

lester ★★★★
() автор топика
Ответ на: комментарий от tailgunner

>Я просто не вижу проблем, если заранее предусмотреть горячую замену

Что-то предусматривать заранее это бесполезная трата времени, т.к. проблемы надо решать по мере поступления и двигаться от простого к сложному. Что-то начинать от строительства инфраструктуры это замечательный способ провалить проект, не более.

Absurd ★★★
()
Ответ на: комментарий от Absurd

> Что-то предусматривать заранее это бесполезная трата времени, т.к. проблемы надо решать по мере поступления и двигаться от простого к сложному. Что-то начинать от строительства инфраструктуры это замечательный способ провалить проект, не более.

возьмите в качестве примера микроядро - тут тоже в краю угла устойчивость, и тут тоже нужно "строительство инфраструктуры", пример конечно не лучший, но

lester ★★★★
() автор топика
Ответ на: комментарий от lester

> мне кажется вы болтаете не меньше о своем пресловутом решении, я хотя бы не делаю подобных заявлений без доказательств

Я всё жду лично твоего решения. Но, видно, не дождусь...

Вот моё:

$ cat p.c
#include <stdio.h>
#include <unistd.h>

int foo(int* a, int* b)
{
	return *a + *b;
}

int main()
{
	int a = 1, b = 2;
	for(;;) {
		printf("%d\n", foo(&a, &b));
		sleep(1);
	}
}

gcc -o p -O0 -g3 p.c

-O0 - инлайн не надо, вычисление значения функции к компайл-тайме не надо
-g3 - dwarf надо

Запускаем, программа начинает в цикле выдавать 3. Это неправильно, функция foo должна из *a вычитать *b, а не складывать.

$ cat foo.stp
function new_foo:long(a:long, b:long)
%{
	int a, b;
	int ret;

	ret = copy_from_user(&a, (void*)THIS->a, sizeof(int));
	ret = copy_from_user(&b, (void*)THIS->b, sizeof(int));
	THIS->__retvalue = (long)(a - b);
%}

probe process("p").function("foo").return
{
	$return = new_foo($a, $b);
}

$ sudo stap -vvg foo.stp

SystemTap translator/driver (version 0.9.8/0.141 non-git sources)
Copyright (C) 2005-2009 Red Hat, Inc. and others
This is free software; see the source for copying conditions.
Session arch: x86_64 release: 2.6.29.5-191.fc11.x86_64
Created temporary directory "/tmp/stapNyqKkF"
Searched '/usr/share/systemtap/tapset/x86_64/*.stp', found 3
Searched '/usr/share/systemtap/tapset/*.stp', found 51
Pass 1: parsed user script and 54 library script(s) in 260usr/10sys/278real ms.
probe foo@/home/vitaly/tmp/p.c:4 process=/home/vitaly/tmp/p reloc=.absolute section=.text pc=0x40050c
probe foo@/home/vitaly/tmp/p.c:4 process=/home/vitaly/tmp/p reloc=.absolute section=.text pc=0x40050c
Pass 2: analyzed script: 2 probe(s), 5 function(s), 1 embed(s), 4 global(s) in 10usr/0sys/6real ms.
Pass 3: using cached /home/vitaly/.systemtap/cache/c0/stapconf_c0ae482565beaf89e160f7fc32842779_478.h
Pass 3: using cached /home/vitaly/.systemtap/cache/e6/stap_e632dc73bf308023768fd8a692fc518e_3672.c
Pass 4: using cached /home/vitaly/.systemtap/cache/e6/stap_e632dc73bf308023768fd8a692fc518e_3672.ko
Pass 5: starting run.
Running /usr/bin/staprun -v -u /tmp/stapNyqKkF/stap_e632dc73bf308023768fd8a692fc518e_3672.ko

Программа начинает выдавать правильный результат: -1

mv ★★★★★
()
Ответ на: комментарий от tailgunner

> Хотя нет, понимаю... ты на всё смотришь через призму SystemTap, у которого задача совсем другая.

Я, ваще-то, это... Голосовал за CL, в котором такой финт легко и без системтапов с юпробами и ютрейсами делается.

mv ★★★★★
()
Ответ на: комментарий от mv

> Я всё жду лично твоего решения. Но, видно, не дождусь...

а что там ждать - принцип я написал, думаю вы его понимаете, да - не так "круто", но зато кроссплатформенно

lester ★★★★
() автор топика
Ответ на: комментарий от lester

> а что там ждать - принцип я написал, думаю вы его понимаете, да - не так "круто", но зато кроссплатформенно

shared objects - некросплатформенны.

mv ★★★★★
()
Ответ на: комментарий от lester

> а что там ждать - принцип я написал, думаю вы его понимаете, да - не так "круто", но зато кроссплатформенно

К тому же, для твоего варианта программу нужно специально проектировать, а к моим (Lisp и C + stap) - нет.

mv ★★★★★
()
Ответ на: комментарий от mv

> shared objects - некросплатформенны.

вы уже придираетесь - ес-но "патч" будет собираться под целевую платформу( как и сама программа )

lester ★★★★
() автор топика
Ответ на: комментарий от mv

> К тому же, для твоего варианта программу нужно специально проектировать, а к моим (Lisp и C + stap) - нет.

не спорю - Lisp тут лучше и не зря вы предложили именно эту задачу, насчет вашего решения на С - таки некроссплатформенное

lester ★★★★
() автор топика
Ответ на: комментарий от Absurd

> Что-то предусматривать заранее это бесполезная трата времени

Точно, а любую программу надо начинать писать с printf("Hello. world!\n");

> Что-то начинать от строительства инфраструктуры это замечательный способ провалить проект, не более.

Ну почему же, некоторые люди знают, что пишут, и что им для этого надо.

tailgunner ★★★★★
()
Ответ на: комментарий от lester

> насчет вашего решения на С - таки некроссплатформенное

Но, таки, я его сделал, и сделал быстро.

Можешь не "выкать". Я по старой фидошной привычке ожидаю скорого мордобоя, когда люди в дискуссии на "вы" переходят ;) К тому же, я не такой старый, как кажусь с бородой.

mv ★★★★★
()
Ответ на: комментарий от mv

> Но, таки, я его сделал, и сделал быстро.

но не без недостатков

> Можешь не "выкать". Я по старой фидошной привычке ожидаю скорого мордобоя, когда люди в дискуссии на "вы" переходят ;) К тому же, я не такой старый, как кажусь с бородой.


хорошо

lester ★★★★
() автор топика
Ответ на: комментарий от mv

> Я, ваще-то, это...

Прокурору расскажешь :D

>Голосовал CL, в котором такой финт легко и без системтапов с юпробами и ютрейсами делается.

Вы, лисперы - читеры по природе своей. Надо же, "легко и без системтапов с юпробами" - а как насчет компилятора в исполняющей системе? Еще непонятно, что сложнее - stap или лисповый рантайм.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> Вы, лисперы - читеры по природе своей.

Что поделать? Эволюция, естественный отбор... Хочешь жить - умей вертеться.

mv ★★★★★
()
Ответ на: комментарий от elipse

> не , это костыль и даже не костыль - это просто обман. такой себе фокус-покус ...

Можно и без stap, но используя тот же механизм, сделать. Других вариантов вообще не видно пока...

mv ★★★★★
()
Ответ на: комментарий от tailgunner

>> Что-то предусматривать заранее это бесполезная трата времени

>Точно, а любую программу надо начинать писать с printf("Hello. world!\n");

Надо начинать с реализации одной из подсистем а не с той жопы на которую планируется натянуть весь проект.

>> Что-то начинать от строительства инфраструктуры это замечательный способ провалить проект, не более.

>Ну почему же, некоторые люди знают, что пишут, и что им для этого надо.

Да, им наверное нужна целая ОС в которой сбоку будет приклеена маленькая сопелька ради которой собственно все и затевалось.

Absurd ★★★
()
Ответ на: комментарий от Absurd

> начинать с реализации одной из подсистем а не с той жопы на которую планируется натянуть весь проект.

Блестящее техническое определение. Иди преподавать методологию разработки ПО.

> им наверное нужна целая ОС в которой сбоку будет приклеена маленькая сопелька ради которой собственно все и затевалось.

В общем, да. У тебя с этим проблемы? Предпочитаешь работать на голом железе?

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

> В общем, да. У тебя с этим проблемы? Предпочитаешь работать на голом железе?

Absurd, наверное, про то, что нужно начинать писать код непосредственно задачи, а не изобретать велосипедный парк в виде своей оси, компилятора, етц.

mv ★★★★★
()
Ответ на: комментарий от Cy6erBr4in

>Делается "на раз" на Erlang :))

а на Erlang/OTP уже сделано - в gen-server; на Tcl тоже ручного заката солнца не требует

jtootf ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.