Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
На ассемблере получается на одну операцию деления меньше, чем делает компилятор.
typedef unsigned char byte;
void Fill1(byte *arr,int l){
byte c=1;
for(int i=0;i<l;i++){
c=(byte)(5*c+1);
*arr++=c;
}
}
_Fill4 PROC
; extern "C" void Fill4(byte *arr,int len);
push ebp
mov ebp, esp
push edi
mov edi,[ebp+8]
mov dl,1
mov ecx,[ebp+12]
dec ecx
shr ecx,1
inc ecx
jz $a1
$a2:
lea edx,[edx+4*edx+1]
mov al,dl
lea edx,[edx+4*edx+1]
mov ah,dl
stosw
loop $a2
$a1:
pop edi
pop ebp
ret
_Fill4 ENDP
?Fill1@@YAXPAEH@Z PROC ; Fill1, COMDAT
push ebp
mov ebp, esp
push esi
mov esi, DWORD PTR _l$[ebp]
mov al, 1
test esi, esi
jle SHORT $LN1@Fill1
mov ecx, DWORD PTR _arr$[ebp]
$LL3@Fill1:
mov dl, al
add dl, dl
add dl, dl
add al, dl
inc al
mov BYTE PTR [ecx], al
inc ecx
dec esi
jne SHORT $LL3@Fill1
$LN1@Fill1:
pop esi
pop ebp
ret 0
?Fill1@@YAXPAEH@Z ENDP
void Test(void (*f)(byte *,int)){
for(int i=0;i<40;i+=4) f(A+i,N);
}
Компилятор делает УНИВЕРСАЛЬНЫЙ код, а не специализированный.
Вы утверждаете, что оптимизировать ничего не надо, ибо наверняка облажаешься.
если нужно быстродействие, то писать нужно на С
Если скриптовый язык медленный и нет архитектурных проблем, то вполне логично медленные части писать на низкоуровневом языке.
Потому что это позволит добавить еще недостающую функциональность с меньшими затратами.
Кроме функциональности прототип позволяет промоделировать структуру и взаимосвязи в системе.
Копипаст — это болото, в которое опасно далеко заходить.
А где речь только о горизонтальном?
прототип может быть и не выброшен
прототип дойдёт до состояния «проще выкинуть и написать с нуля» ещё до завершения прототипирования
Просто вертикальный [прототип] тоже пишется один раз, проверяется работоспособность, потом уже пишется нормально — рефакторить тоже негде.
Что за инструменты вы используете в разработке?
В чем тогда смысл вертикального прототипа?
И почему у вас прототип не рефакторится, а продуктивный код рефакторится?
И причем здесь вертикальный прототип тогда? Зачем он?
A vertical prototype, also known as a structural prototype or proof of concept, implements a slice of application functionality from the user interface through the technical services layers. A vertical prototype works like the real system is supposed to work because it touches on all levels of the system implementation. Develop a vertical prototype when you’re uncertain whether a proposed architectural approach is feasible and sound, or when you want to optimize algorithms, evaluate a proposed database schema, or test critical timing requirements. To make the results meaningful, vertical prototypes are constructed using production tools in a production-like operating environment.
Относительно вертикального прототипа: он нужен для проверки архитектуры системы, а не «некоего решения».
Если вы не собираетесь его изменять (после выявления недостатков, проблем и т.п.), то отсутствует смысл его делать.
Develop включает рефакторинг, независимо от уровня, на котором проводится этот Developing.
Так ничто не является ключевым парметром. Зато отдельные параметры ускоряют разработку, а разработка прототипа — тоже разработка, хоть и с другими ограничениями.
А почему нет? Принцип взаимодействия и структура системы в общем случае не зависит от реализации этого взаимодействия и других технических вещей.
Сетевое взаимодействие не зависит от инструмента.
Использование XML — это архитектурные, а не инструментальные особенности.
Расшифруйте эту фразу
Develop a vertical prototype when you’re uncertain whether a proposed
architectural approach is feasible and sound
50 нс прироста на каждую лишнюю переменную означает что когда вас на VBScript в 2005 году заставят отфильтровать таблицу на 10000 строк, и в фильтре у вас будет на две переменных больше чем нужно, вы получите замечательную задержку в 1 секунду. Это все еще выглядит мало?
когда вас на VBScript в 2005 году заставят отфильтровать таблицу на 10000 строк, и в фильтре у вас будет на две переменных больше чем нужно, вы получите замечательную задержку в 1 секунду. Это все еще выглядит мало?
И между прочим в 2005 году далеко не у всех были PIII на 1GHz
И между прочим в 2005 году далеко не у всех были PIII на 1GHzУ меня в конце 2005 был ноут б/у (у пред.хозяина был с 2002) с Celeron 1,4 GHz.
И чтобы написать, что (a^k)^m=a^(k*m mod n), нам нужно, чтобы k*m mod n принадлежало множеству 0..n-1 (если мы изначально заали элементы группы как e,a,a^2,...,a^(n-1)).
Деление не «программистское» а целочисленное, округление должно быть получено отбросом дробной части. А тут получается, что [(-3)/8] = -1, что уже ни математически, ни вообще никак не правильно.
Потому с математической точки зрения такая операция, как < в, скажем, C, определенная для типа, скажем, int, не является отношением линейного порядка, как хотелось бы.
таки даст линейный порядок (как на множестве).
#include <assert.h>
int main()
{
int a = 5;
int b = 13;
int c = -3;
assert(a % 8u == b % 8u);
assert(a % 8u == c % 8u);
assert(b % 8u == c % 8u);
return 0;
}
На PDP-11 программировал 2 или 3 года, когда учился.Считаю, что это необходимая школа, да;-)
Не просто «в принципе неплохо», а «замечательно и весьма полезно» — лишних знаний вообще не бывает.
Но не «критически важно».
Насколько плохим код должен быть?