как показали события вокруг китайского диссидента, укрывшегося в американском посольстве. То есть они, конечно, поддерживают борцов за демократию, но ровно так, как в старом анекдоте - "если поговорить - то да, а так вообще - нет"... Накануне официальной встречи американские дипломаты вынудили диссидента покинуть посольство, сообщили прессе, что он сам принял такое решение и горячо их (дипломатов) благодарил, а он сам сообщил журналистам, что дипломаты на на него давили, что он опасается за свою и своей семьи безопасность и хотел бы покинуть коммунистический Китай. Так что кроме приверженности демократии нынешний госдепартамент демонстрирует образец "правдивости" и "способности предвидеть" последствия своих действий...
Познакомился со статистикой, касающейся популярности языков программирования, которая приведена в http://langpop.com/.
Разные источники, использованные в обзоре, позволяют оценить разные стороны популярности - популярность в смысле частоты использования (в open source проектах, при поиске сотрудников и т.п.) и популярность в качестве темы для беседы/дискуссии на форумах и т.п. Для большинства языков программирования это практически одно и то же - если язык популярен как инструмент, то о нём и говорят много, если он мало используется, то о нём и дискуссий меньше. Haskell выпадает из этой общей закономерности: в использовании он попадает в число маргинальных, а в дискуссиях пребывает в числе лидеров.
Разные источники, использованные в обзоре, позволяют оценить разные стороны популярности - популярность в смысле частоты использования (в open source проектах, при поиске сотрудников и т.п.) и популярность в качестве темы для беседы/дискуссии на форумах и т.п. Для большинства языков программирования это практически одно и то же - если язык популярен как инструмент, то о нём и говорят много, если он мало используется, то о нём и дискуссий меньше. Haskell выпадает из этой общей закономерности: в использовании он попадает в число маргинальных, а в дискуссиях пребывает в числе лидеров.
Как-то раз в стране, где власти мошенничали на выборах, избиратели вышли на площадь
и стали требовать честных выборов. А когда добились, это назвали революцией
- потому люди на площади добились того, чего требовали. Потом то же самое
произошло в другой стране, в третьей...
И в четвёртой, когда власти мошенничали на выборах, избиратели тоже пошли на площадь,
но говорили, что революции не будет. И слово сдержали: выборы какими были,
такими и остались.
и стали требовать честных выборов. А когда добились, это назвали революцией
- потому люди на площади добились того, чего требовали. Потом то же самое
произошло в другой стране, в третьей...
И в четвёртой, когда власти мошенничали на выборах, избиратели тоже пошли на площадь,
но говорили, что революции не будет. И слово сдержали: выборы какими были,
такими и остались.
Палата Представителей голосовала относительно наскольких представленных вариантов бюджета на 2013 год. Отгадайте, сколько конгрессменов-демократов проголосовали в поддержку варианта бюджета, подготовленного администрацией Обамы? - Правильно, НОЛЬ...
"...After spending a good while trying to understand monads in Haskell, and why the Haskell world is so fascinated by them, I finally understand why they aren’t as exciting to other languages, or why they are completely missing from languages like C++: because they’re mostly already there."
Полный текст: A word on Haskell Monads and C++
Полный текст: A word on Haskell Monads and C++
наша кошка Маша извлечена из тех недр конструкций нашего ремонтируемого дома, где не только не ступала нога человека, но и голова человека пролезть не может - пришлось использовать night vision security camera + USB frame grabber + notebook, чтобы понять, где она находится, когда стали слышны сигналы "SOS".
Пару недель назад, после прочтения очередной порции похвал в адрес функциональных языков программирования в целом и Haskell в частности, предложил профессионалу в этой области провести сравнение реализаций несложной (чтобы не тратить много времени) программы на C и Haskell, что и было реализовано. Вот результаты (для одних и тех же входных данных, естественно, и просчитано на одном и том же компьютере):
Это, видимо - по крайней мере отчасти - объясняет разницу в популярности...
Параметр C Haskell -------------------------------------------------------- Затраченное процессорное время сек 0.800 44.820 Размер object file Kbyte 2.5 24.7 Размер executable file Kbyte 6.1 1256.0
Это, видимо - по крайней мере отчасти - объясняет разницу в популярности...
-- C code -----------------------------------
int main(){
double Amin, Amax, Bmin, Bmax, Ai, Bi, diff;
double Rsq = 0.0;
double Anorm = 0.0;
double Bnorm = 0.0;
unsigned i = 0;
FILE * input;
input = fopen( "inp.txt", "r" );
while( fscanf( input, "%lf %lf", &Ai, &Bi ) != EOF ){
if( i > 0 ){
if( Ai > Amax ) Amax = Ai; if( Ai < Amin ) Amin = Ai;
if( Bi > Bmax ) Bmax = Bi; if( Bi < Bmin ) Bmin = Bi;
} else {
Amin = Amax = Ai, Bmin = Bmax = Bi;
}
i += 1,
diff = Ai - Bi,
Rsq += diff * diff,
Anorm += Ai * Ai,
Bnorm += Bi * Bi;
}
fclose( input );
printf( "\n A range: %lf %lf; norm: %lf", Amin, Amax, sqrt( Anorm ) );
printf( "\n B range: %lf %lf; norm: %lf", Bmin, Bmax, sqrt( Bnorm ) );
printf( "\n Rsq: %lf", sqrt( Rsq / i ) );
return 0;
}
-- Haskell code -----------------------------------
import Data.List
process( !count, !amin, !amax, !bmin, !bmax, !asq, !bsq, !rsq )( a, b ) =
( count + 1, amin', amax', bmin', bmax', asq', bsq', rsq' )
where
amin' = min amin a
bmin' = min bmin b
amax' = max amax a
bmax' = max bmax b
addSq sum x = sum + x * x
asq' = addSq asq a
bsq' = addSq bsq b
rsq' = addSq rsq ( a - b )
main = do
text <- readFile "inp.txt"
let
ws = words text
ds :: [Double]
ds = map read ws
toPairs( a:b:abs ) = ( a, b ) : toPairs abs
toPairs _ = []
pairs = toPairs ds
start = case pairs of
( ( a, b ) : _ ) -> ( 0, a, a, b, b, 0, 0, 0 )
_ -> error "empty input."
( count, amin, amax, bmin, bmax, asq, bsq, rsq ) = foldl' process start pairs
norm x = sqrt x
putStrLn $ "A range: " ++ show( amin, amax ) ++ "; norm " ++ show( norm asq )
putStrLn $ "B range: " ++ show( bmin, bmax ) ++ "; norm " ++ show( norm bsq )
putStrLn $ "R : " ++ show( norm rsq )
