Распределенные поисковики, вроде YaСy потенциально можно сделать и приватными и персонализироваными. Вообще, владельцы «облачных сервисов» (Google, например) уже настолько прочно вбили в головы людей, что ради приватности придется отказаться от удобства, что компромиссы уже мало кому приходят в голову.
1. Где-то была статья на эту тему о Ruby. Сейчас найти не могу, но суть в том, что индексация с нуля — это не оптимизация и не костыль. Если бы индексация была с единицы, то разрезание (arr[1:5]) массивов выглядело бы в коде с вечными "-1" да "+1". Если кто вспомнит статью — киньте. Вроде бы сам Matz писал, но не уверен.
2 и 3, ну вот Вы привели в пример Smalltalk. Так же о численных типах практически не надо думать в Common Lisp (есть fractional и bignum, в т.ч. fractional bignum и float bignum, явно преобразовывать численные типы не надо) и Tcl (все числа — безразмерные int/float, fractional нет). Есть замечательные действительно высокоуровневые языки — пишите на них.: ) На самом деле, если у вас нет начальника, который говорит «все используют Java/Python/COBOL и мы будем», то эти три языка (даже последние два) отлично покроют 99% классов задач.
> если вы изучите Scala и посмотрите на функциональность Java с той колокольни, то открывшийся вид вполне может вызвать у вас улыбку. Просто попробуйте!
О, излюбленный аргумент лисперов. http://www.paulgraham.com/avg.html «The Blub Paradox».
Ну, раз уж вы этим аргументом воспользовались, то и я предложу по той же причине посмотреть Common Lisp.: ) Без сарказма. Мне потраченное на него время не жалко.
Субъективно синтаксисом все языки для BEAM (виртуальная машина Erlang) уделывает LFE. Только его на 90% один человек пишет в свободное время, поэтому с экосистемой большие проблемы.
> Польза миру это либо польза людям, либо природе, либо культуре/гуманизму, либо экономике, либо науке. Первые три категории не имеют ничего общего со свободным кодом, потому что людям, природе и культуре прекрасно помогает несвободный код.
> Если ваш проект несет пользу, то его улучшение означает еще больше пользы. Пользователи свободного проекта исправляют баги, впиливают новые функции, улучшая жизнь не только себе, но и всем другим пользователям проекта.
Из этого следует, что свободный код лучше несвободного помогает и людям, и природе, и культуре.
Да, вы на это уже ответили выше:
>> То-есть домохозяйки не могут быть программистами и программисты не могут увлекаться кулинарией?
> Могут. А еще на ваш страничку вашего опен-сорсного проекта может зайти Билл Гейтс, прослезиться от восторга и задонатить вам миллиард долларов.
Возможно дело в том, что порядок изложения на самом деле совпадает, и резюмирует то, о чём написано в предыдущих ДЕВЯТИ абзацах. Какую кашу нужно иметь в голове, чтобы найти в статье ошибку, которой нет, потому что она согласуется с вашим представлением о мире, хоть и не согласуется с самой статьёй.
Я тоже. Хотел обычный, случайно заказал растворимый. Офигенная штука в любом случае.
На любителя, да. В офисе кроме меня ещё один человек от него не плевался.
За исключением около 10% статья как про Common Lisp.
На самом деле я, познав оба языка, даже пытался сделать Class Browser (это те самые 10%) для CL. Если есть желающие, могу поделиться наработками и списком нерешённых (но не неразрешимых) трудностей.
Это ж лисповые символьные выражения, только с переносом строк и знаком «равно» вместо скобок.
> Если в Lisp всё описывается как списки, то в языке на основе Tree — всё есть деревья.
Вообще-то в лиспе даже список — это суть бинарное дерево. И угадайте, что такое список списков? Правильно — дерево.
Вы почти правы. В каждой стране своя культура нужно позволить людям жить так, как они хотят, но только при условии абсолютного доступа к информации. Если арабские женщины знают, что в западной культуре у женщин больше прав — значит они хотят так жить, если не знают — то, возможно, не хотят, но усилиями пропаганды их заставляют.
Арабам не нужно рассказывать, что у женщин должны быть такие же права, как у мужчин. Нужно рассказывать, что есть культуры, у которых у женщин почти такие же права, как у мужчин. Северокорейцам не нужно рассказывать, что их лидер — не бог. Нужно рассказывать, что есть страны, управляющиеся обычными людьми, и у них в среднем дела куда лучше. Если им дороже бог, чем еда — так и быть, это их культура.
И, как следствие, самое серьёзное преступление, которое моет совершить государство — это внутренняя пропаганда, частью которой обычно становится ограничение выезда за пределы страны. Потому что, если государство практикует пропаганду, то оно само начинает управлять культурой народа, т.е. учит народ жить, как и эти парни с воздушными шарами. Не понимаю, почему вы внутреннюю пропаганду считаете хуже воздушных шариков. Одно и то же, ИМХО.
Вы можете быть против воздушных шариков на территории США, или Арабских стран, т.к. там _относительно_ мало влияние внутренней пропаганды, но приводить в пример СССР, КНДР, или Россию — нелогично по вышеприведённым причинам.
С тех пор как я с товарищами писали статьи правда ничего не изменилось? Вроде это всё уже было лет пять назад. habrahabr.ru/post/75451/
> Могу ошибаться, но прямого аналога нет, во всяком случае в популярных, компилируемых языках.
В копилку Common Lisp. Не популярный, да. Компилирется в некоторых реализациях, например самой популярной — SBCL. Вообще map уже есть, но у вас он шаблонный, а не функциональный (с лямбдой), так что вот тоже шаблонный:
(defmacro tmap (op array)
`(loop for x in ,array collect ,op)
(defun main ()
(format t "#1 ~A~%" (tmap (* x 3) '(0 1 2 3 4 5)))
(format t "#2 ~A~%" (tmap (expt x 3) '(0 1 2 3 4 5)))
(format t "#3 ~A~%" (tmap (* x 3) '(0.0 0.5 1.0 1.5 2.0 2.5)))
(format t "#4 ~A~%" (tmap (expt x 3) '(0.0 0.5 1.0 1.5 2.0 2.5))))
В SBCL есть кое какой решатель типов. Если он сообразит какого типа списки (на буквальные не реагирует, должно быть объявление типа хоть где-нибудь), то в скомпилированном коде окажутся вызовы машинных команд для * и expt (где есть), если не сообразит — то вызовы функций для произвольных типов.
Конечно, D старается следовать принципу zero overhead, но пока это у C++ получается всё же лучше. Компромисс.: ) Помню, в своё время он мне и нравился как золотая середина между перформансом и удобством, потом обнаружил себя либо за задачами где перформанс не важен, тогда годится Common Lisp (с перформансом всё равно на уровне компилируемых), либо за энтерпрайзнутыми серверными кластерами, где лучше Erlang.
2 и 3, ну вот Вы привели в пример Smalltalk. Так же о численных типах практически не надо думать в Common Lisp (есть fractional и bignum, в т.ч. fractional bignum и float bignum, явно преобразовывать численные типы не надо) и Tcl (все числа — безразмерные int/float, fractional нет). Есть замечательные действительно высокоуровневые языки — пишите на них.: ) На самом деле, если у вас нет начальника, который говорит «все используют Java/Python/COBOL и мы будем», то эти три языка (даже последние два) отлично покроют 99% классов задач.
О, излюбленный аргумент лисперов. http://www.paulgraham.com/avg.html «The Blub Paradox».
Ну, раз уж вы этим аргументом воспользовались, то и я предложу по той же причине посмотреть Common Lisp.: ) Без сарказма. Мне потраченное на него время не жалко.
> Если ваш проект несет пользу, то его улучшение означает еще больше пользы. Пользователи свободного проекта исправляют баги, впиливают новые функции, улучшая жизнь не только себе, но и всем другим пользователям проекта.
Из этого следует, что свободный код лучше несвободного помогает и людям, и природе, и культуре.
Да, вы на это уже ответили выше:
>> То-есть домохозяйки не могут быть программистами и программисты не могут увлекаться кулинарией?
> Могут. А еще на ваш страничку вашего опен-сорсного проекта может зайти Билл Гейтс, прослезиться от восторга и задонатить вам миллиард долларов.
Но это демагогия.
UPD: Карма, поэтому спрошу сразу. Если используется, возьмёте Scheme developer'ом?: )
Коварно. Одобряю!
На любителя, да. В офисе кроме меня ещё один человек от него не плевался.
На самом деле я, познав оба языка, даже пытался сделать Class Browser (это те самые 10%) для CL. Если есть желающие, могу поделиться наработками и списком нерешённых (но не неразрешимых) трудностей.
Минималистичный интерфейс — это командная строка.
Финиш. Прямые параллельны в ПРОСТРАНСТВЕ, а пересекаются их ПРОЕКЦИИ на фото.
> Если в Lisp всё описывается как списки, то в языке на основе Tree — всё есть деревья.
Вообще-то в лиспе даже список — это суть бинарное дерево. И угадайте, что такое список списков? Правильно — дерево.
Арабам не нужно рассказывать, что у женщин должны быть такие же права, как у мужчин. Нужно рассказывать, что есть культуры, у которых у женщин почти такие же права, как у мужчин. Северокорейцам не нужно рассказывать, что их лидер — не бог. Нужно рассказывать, что есть страны, управляющиеся обычными людьми, и у них в среднем дела куда лучше. Если им дороже бог, чем еда — так и быть, это их культура.
И, как следствие, самое серьёзное преступление, которое моет совершить государство — это внутренняя пропаганда, частью которой обычно становится ограничение выезда за пределы страны. Потому что, если государство практикует пропаганду, то оно само начинает управлять культурой народа, т.е. учит народ жить, как и эти парни с воздушными шарами. Не понимаю, почему вы внутреннюю пропаганду считаете хуже воздушных шариков. Одно и то же, ИМХО.
Вы можете быть против воздушных шариков на территории США, или Арабских стран, т.к. там _относительно_ мало влияние внутренней пропаганды, но приводить в пример СССР, КНДР, или Россию — нелогично по вышеприведённым причинам.
> Могу ошибаться, но прямого аналога нет, во всяком случае в популярных, компилируемых языках.
В копилку Common Lisp. Не популярный, да. Компилирется в некоторых реализациях, например самой популярной — SBCL. Вообще map уже есть, но у вас он шаблонный, а не функциональный (с лямбдой), так что вот тоже шаблонный:
(defmacro tmap (op array)
`(loop for x in ,array collect ,op)
(defun main ()
(format t "#1 ~A~%" (tmap (* x 3) '(0 1 2 3 4 5)))
(format t "#2 ~A~%" (tmap (expt x 3) '(0 1 2 3 4 5)))
(format t "#3 ~A~%" (tmap (* x 3) '(0.0 0.5 1.0 1.5 2.0 2.5)))
(format t "#4 ~A~%" (tmap (expt x 3) '(0.0 0.5 1.0 1.5 2.0 2.5))))
В SBCL есть кое какой решатель типов. Если он сообразит какого типа списки (на буквальные не реагирует, должно быть объявление типа хоть где-нибудь), то в скомпилированном коде окажутся вызовы машинных команд для * и expt (где есть), если не сообразит — то вызовы функций для произвольных типов.
Конечно, D старается следовать принципу zero overhead, но пока это у C++ получается всё же лучше. Компромисс.: ) Помню, в своё время он мне и нравился как золотая середина между перформансом и удобством, потом обнаружил себя либо за задачами где перформанс не важен, тогда годится Common Lisp (с перформансом всё равно на уровне компилируемых), либо за энтерпрайзнутыми серверными кластерами, где лучше Erlang.