October 19th, 2019

Gen.Turgidson

Из серии очевидных не для всех очевидностей

Тут мне в комментах напоминают что в ранних фортранах нельзя было просто писать обращение к элементу массива более сложное, чем A(2*I+3)

Решение на сам деле для автокода (к каковому классу ранние фортраны и принадлежали) вполне разумное и встречается не только там:

Потому как A(I) реализуется как Addr(A) + I*sizeof(элемента А)
Понятно что A(2*I+3) переходит соответственно в (Addr(A) + 3*sizeof(элемента А)) + I*(2 * sizeof(элемента А))

(напомню что в классическом фортране нет рекурсии и все массивы статически размещены в памяти и имеют константный адрес - так что и Addr(A) и Addr(A) + 3*sizeof(элемента А) - просто константы)

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

Что-то более сложное уже требует реального вычисления индексного выражения

Тож самое кстати и с iSUB-ами - они в варианте линейных функций над ними еще реализуются просто соответствующей модификацией дескриптора массива (все равно необходимого для реализаций конструкций типа М(I,*)). Чтото более сложное уже хуже.

Специально для rdia: на деле iSUB-ы не заменяются в С/C++ макросами или инлайн-функциями. Точнее все хорошо ровно до тех пор, пока на массив не создается ссылка или он не передается параметром. Там макросы и inline-функции обламываются. В отличие от.
*) Исключением является передача массива параметром - но и там усложнение умеренное - в случае когда к индексу прибавляется ненулевая константа - два сложения вместо одного.
Dnyarry

Еще пример пользы коррупции:

https://congregatio.livejournal.com/3431400.html
В Саратове отлов собак заменили отстрелом, а деньги разворовали. По версии следствия, убивая животных, сотрудники муниципального бюджетного учреждения хотели сэкономить, а выделенные на вакцинирование и содержание собак деньги присвоить.

«По имеющейся информации, представители данного предприятия должны были отлавливать на улицах города безнадзорных животных и помещать их в приют. Однако вместо этого ежедневно, в ночное время суток, они занимались отстрелом собак. При личном досмотре у троих фигурантов изъяты пневматическое оружие в снаряженном состоянии, дротики и шприцы с препаратом, предназначенным для умерщвления животных», - сообщает ГУ МВД по Саратовской области.

Так происходит не только в Саратове. Так происходит по всей стране.


Меж прочим - очень частая ситуация - когда лучшее что можно сделать с бюджетными деньгами - это их украсть, а на целевое использование - забить. Вот скажем если бы в СПб украли деньги выделенные на борьбу с террором или стрижку газонов - тоже польза бы была.

Или допустим украли бы деньги выделенные на полицию.
Gen.Turgidson

Гражданско-общественное

Меж прочим понял главную причину почему меня совершенно не греет идея "протестной активности" и "гражданского опчества" по либералам: мне на сам деле от государства нужно только одно - чтобы оно от меня отъебалось и по возможности не отсвечивало.

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

Кстати тоже самое у меня и в отношении волонтерства - тут вообще гнать ссаными тряпками: чиновники хоть за деньги "о народе заботятся", а эти - "за идею"

Потому единственный вид протеста, который меня устраивает - это тот, после которого государство сильно уменьшается в объеме физически и/или утрачивает эффективность. Потому скажем террор образца 1905-го у меня вызывает исключительно теплые чувства - террористы там проводили "сокращение госаппарата" довольно эффективным образом, а государство вместо того чтобы "заботиться об обывателе и благоустройстве" было занято тем, чтобы как-то с террористами справиться.

Все при делах.

PS: Замечу, что единственным позитивным результатом майдана на Украине является именно разведенный по ходу феерический бардак, в котором до простого обывателя государству дела особенно нет (кроме разве как до его кошелька), да собственно и технической возможности и желания доебываться до него по мелочам тоже нет. Люди большое бабло делят.
prog

Кложуребесие-1

Раз уж меня потянуло на лытдыбр про языки программирования и их реализацию.

Лет 10 назад в массы наконец пошла идея замыканий и лямбд (которая надо сказать придумана и реализована в районе 1960 года - в лиспе). После чего замыкания начали тащить туда куда надо и туда куда не надо. Вообще идей в этой области которые не были бы придуманы до 1970 года мало, а до 1985 (когда вчерне сформировалась современная наука про типы данных) - исчезающе мало.

Насчет "замыканий где не надо" - типовой пример - callback'и для итераторов.
Collapse )
Gen.Turgidson

Лирическое отступление про Лисп

Щас наверное не понимают почему в 60-е и позже Лисп пользовался такой бешеной популярностью в академических кругах.

Причина очень проста: в 1960-м году язык где:

1) есть возможность устраивать структуры данных произвольной сложности
2) вопросы "работы со строками" и прочее связанное с аллокацией памяти вообще не являются проблемой
3) есть сборка мусора
4) есть замыкания и функции высшего порядка
5) он интерактивен - не требует мучительного цикла compile-link-run, который тогда занимал десятки минут
6) язык предельно прост и логичен - его можно выучить за месяц максимум

И

7) не самое маловажное - реализация лиспа делается на коленке умным студентом за полгода: у меня однокурсник на втором курсе написал для СМ-4 - просто развлечения для - у него это потом до диплома тянулось

Upd: 8) Еще рефлексия полноценная и возможность исполнения динамически сгенерированного кода.

Был обречен на оглушительный успех

На сам деле что-то с похожими свойствами начало появляться только в 70-е в виде смаллттолка и (хихи) - бейсика
prog

Кложуребесие-2

На сам деле проблемы с висячими ссылками в стек (частным случаем которых являются процедурные значения, экспортированные за пределых их времени жизни) решаются довольно элементарно и в "классическом" Паскале от Вирта они и решены:
Collapse )
prog

Кложуребесие-3

Чтобы завершить тему: как это реализуется. На сам деле - до тупого просто. Состоит из двух частей (дальнейшее изложение идет на примере x86 - у остальных птичек тоже самое):
Первая - как вообще реализуются вложенные функции/процедуры: как большинство помнит при входе в функцию обычно оформляется так называемый stack frame - парой команд:
      push %ebp
      mov  %esp, %ebp
В результате мы получаем в %ebp ссылу на начало стекового фрейма текущей функции, причем по адресу [%ebp] лежит ссылка на аналогичный фрейм вызывающей функции. Получается список фреймов, провязанный в цепочку. Это так называемая "динамическая цепочка вызовов".
Collapse )
prog

Кложуребесие-3+: Нет таких крепостей, которых большевики не могли бы взять

Ну и так сказать бонус-трек:
# include <stdio.h>

void loop (int l, int u, void (*body) (int)) {
  for (int i = l; i != u; ++ i)
    body (i);
}

int main () {
  int sum = 0;
  void add_sqr (int i) { sum += i * i; }
  loop (1, 10, add_sqr);
  printf ("sum=%d\n", sum);
  return 0;
}

При трансляции GNU C это и транслируется и работает - более того работает правильно и так и должно быть.

Вопрос - "как?". Проблемка понятно что в том, что в С хошь-ни-хошь, а указатель на функцию двухсловным не сделаешь. Указатель - он и есть указатель.

Ну на сам деле очень просто: в функции (в данном случае main) для вложенной функции add_sqr прямо в стеке генерируется так называемый "трамплин" - исполняемый переходник который в нужный регистр при вызове подсовывает уже в момент вызова функции main известную базу для add_sqr. И указателем на функцию является не адрес собственно кода add_sqr, а адрес трамплина :)

PS: Могучую тему goto ведущих из вложенной функции вовне я оставляю без рассмотрения - ибо тема хоть и разработанная во всех упомянутых языках - но кажется совершенно бесплодная: то есть оно работает - но "кому это надо и кто это выдержит" вопрос открыт...
Dnyarry

Меж прочим да - история про привидений же:

https://17ur.livejournal.com/618357.html?thread=26051957#t26051957
"Терминус" - это даже не классика, это "человек сказал всё", закрывая тему привидений, поэтому после него и называть-то некого. Сама тема страшненькая для исследования: "отпечаток общества" даже не на человеке, а на каком-то носителе. Пока жизнь не заставит (как сейчас), касаться не хочется.

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

И кстати imho вопрос только времени, когда привидения начнут заводиться в интернете и устройствах - щас же с нейронными сетками только начинают играться - и то уже в общем... А потом в умной аудиоколонке с помощником Яндекс-Алиса проснется дух свежеусопшей тети, которая любила с этой колонкой поговорить.

Так же как он щас в человеческих мозгах просыпается. Для этого ж и делать ничего специально не надо - само получится - как у Лема.
Major Kong

Планета обезьян

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