LINUX.ORG.RU

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

Можно разработать кодовую страницу в которой символы «(» и «)» будут невидимыми.

У кого аллергия на скобки, есть sweet.

defun flatten-operation (op lyst)
  "Return a list, but flatten by one level any list element beginning with op."
  cond
    not(consp(lyst))
      lyst
    {not(consp(car(lyst))) or not(eq(caar(lyst) op))}
      cons car(lyst) flatten-operation(op cdr(lyst))
    null(cdr(car(lyst))) ; Defensive programming, should not be needed.
      flatten-operation(op cdr(lyst))
    t
      append cdr(car(lyst)) flatten-operation(op cdr(lyst))
monk ★★★★★
()
Ответ на: комментарий от necromant

Это было бы неспортивно: всегда пробую чистое решение практической задачи на изучаемом языке программирования. Чтобы оценить его профпригодность.

Решение на C++ тоже было без STL и stdio?

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

Решение на C++ тоже было без STL и stdio?

Ну STL это имхо часть языка. Сделал с помощью mmap и на базе указателей. Указатели использовал в качестве итераторов плюс написал свой маленький функтор для подсчета значений. Вывод значение в std::cout.

В CFFI - ключевое слово «foreign» :)

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

В CFFI - ключевое слово «foreign» :)

Так чтение бинарных данных по определению foreign. В Лиспе такие же указатели.

И есть такой же cl-mmap.

А частью языка для современного лиспа фактически является quicklisp.

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

Шутка

А лупше разработать кодовую страницу в которой все символы невидимы.
Для форумов было бы «самое то».
Тогда никакие правила форума будут не страшны.
А ежели немного подумать, то можно создать универсальную шифрованную кодовую страницу (и тут Остапа понесло).
А то одни эмодзи придумали - «ни ума, ни фантазии».

Forum0888
()
Последнее исправление: Forum0888 (всего исправлений: 4)
Ответ на: комментарий от monk

В 2005м меня напрягла невозможность использования простого

float* pFloat = start; 
do {
  calculate(pFloat++);
} while (pFloat != end);

Где float - «single precision floating-point type. Matches IEEE-754 binary32 format». Остальное уже вторично.

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

Ты зачем разговариваешь с этим дурачком вообще?

Он же не соображает вообще о чем он говорит. То есть вообще от слова совсем. На каждый его высер можно только отвечать, «че за бред ты несешь, иди прими таблетки». Он просто настолько шизоидный бред несет, что тут лень даже какие-то отдельные аргументы разбирать.

Он флоаты приплел потому, что увидел что в моей библиотеке с ними на линуксе, типа, проблема, и начал «рассуждать»(нести абсолютную хероту на самом деле). Хотя даже примерно не представляет себе что там на самом деле происходит, и где проблема на самом деле(в дотнете, лол).

Теперь он пустился в еще большую дичь, и рассказывает что в CL не поддерживается IEEE-флоты, лол, хотя они ВООБЩЕ ВЕЗДЕ поддерживаются, где есть аппаратная их поддержка, и где для работы с флоатами соответственно используются аппаратные возможности, то есть примерно, нахер, везде.

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

Я не понял, ты что там пытался сделать, но не осилил? Бинарно чтоли, флоаты читать? Ну так в ANSI CL, в самом стандарте, по-моему, вообще нет нихера на эту тему, т.е. грубо говоря, функции encode-float тупо нет. Средствами конкретных реализаций, или каким-нибудь CFFI, это естественно, все делается вообще спокойно.

Касательно тормозило - так ты еще поди писал на каком-нибудь CLISP, и поди оперировал списками направо и налево вместо массивов, и прочей херней страдал. Зато тормозило у него.

На крестах тормозилово написать ничуть не сложнее.

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

проблема на самом деле(в дотнете, лол)

Т.е. остальные языки нормально используют .Net CLR под Linux, а Лисп - нет. Но проблема не в Лиспе, а в дотнете. И ошибки которые фиксят в компиляторе SBCL тоже не ошибки. Это тоже проблема в дотнете.

Мы вас услышали, не нервничайте, проходите - присаживайтесь на кушетку.

Obezyan
()
Ответ на: комментарий от lovesan

Ну так в ANSI CL, в самом стандарте, по-моему, вообще нет нихера на эту тему, т.е. грубо говоря, функции encode-float тупо нет

ну вот я сделаль в 2005м как раз этот encode-float, то что криво косо тут спорить не буду - бремя молодости :)

Касательно тормозило - так ты еще поди писал на каком-нибудь CLISP, и поди оперировал списками направо и налево вместо массивов, и прочей херней страдал. Зато тормозило у него.

Но Шерлок, как? (с) Ватсон (https://www.youtube.com/watch?v=lgjLZGj-ZOA)

Да CLISP именно все так и было.

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

Теперь он пустился в еще большую дичь, и рассказывает что в CL не поддерживается IEEE-флоты, лол, хотя они ВООБЩЕ ВЕЗДЕ поддерживаются, где есть аппаратная их поддержка

Понятие «поддерживаются IEEE-флоты» очень растяжимо. Примерно как «поддержка юникода». Везде поддерживаются в том же смысле, в котором UTF-8 везде поддерживается. А дальше начинаются нюансы.

Например, смену режима округления для IEEE-флотов поддерживают немногие.

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

И как заставить операцию деления выполнять нужную из этих функций?

В SBCL можно:

* (sb-int:set-floating-point-modes :rounding-mode :nearest)
* (/ 1.0 3)
0.33333334
* (sb-int:set-floating-point-modes :rounding-mode :zero)
* (/ 1.0 3)
0.3333333

В CLISP, насколько я знаю, нет.

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

лол, сишную функцию из ОС, которая это ставит, ты можешь вызвать на любом языке, это не значит что она является частью языка и в языке это предусмотрено вообще (ну в жабке разве что есть, да)

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

Есть библиотека для работы с дотнетом из Питона, Джавы, Перла? Или «остальные языки» = Си++?

Навскидку, Java: JNBridgePro, в Xamarin точно было. Python: так и называется Python.NET, Perl: не знаю текущего статуса, помню только что они с COM объектами баловались да SOAP обмазывались.

В С++, R, Julia тоже есть. Даже в JS есть jint. Для большинства остальных думаю тоже найдется, помню что был бум iron*-имя-языка библиотек. Другой вопрос - насколько этим языкам это сейчас актуально.

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

Обидно, что анонимусов вернули в тех.разделы только сейчас, и Вам пришлось зарегистрироваться, чтобы вступить в полемику с Лавсаном. Если бы Вы действовали из-под анонимуса, ваш срач бы выиграл в остроте ☺️.

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

Мне кажется - без разницы. Просто выдалось больше времени, дай думаю зарегистрируюсь - пообщаюсь с умными людьми. И в первый же день встречаю поток безапелляционного снобизма Лавсана, а еще через пару дней - луддита vaddd-a. И их люди слушают раскрыв рты. После этого заставлять относиться к этому форуму серьезно у меня не получается.

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

И их люди слушают раскрыв рты.

ИМХО, в этом и состоит преимущество общения с регистрантами: за каждым регистрантом сохраняется история, по которой можно вычислить коэффициент доверия к его словам (либо вообще, либо касательно отдельных областей). Вплоть до того, что каких-то регистрантов можно отправить в черный список (что многие совершенно правильно делают по отношению ко мне).

Было бы хуже, когда одно и то же заново повторяли анонимы: хз, клоун ли это очередной, или вменяемый форумчанин.

После этого заставлять относиться к этому форуму серьезно у меня не получается.

Как раз длительное отсутствие анонимов в development лично мне позволило относиться к этому форуму гораздо серьезнее.

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

И их люди слушают раскрыв рты

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

slew
()
Ответ на: комментарий от Obezyan

Ты путаешь библиотеки для работы с дотнетом и реализацию на дотнете.

Python.NET, jint и прочие Iron — это языки на CLR. Xamarin - это С# на андроидовской Java. От COM до dotNet’а достаточно далеко.

В C++, разумеется, есть.

JNBridgePro — какая-то насквозь коммерческая приблуда. И, судя по рекламе, она создаёт что-то вроде REST-сервера для доступа снаружи (наличие TCP в списке вариантов доступа на это намекает).

Это совсем не bike.

Julia тоже есть

И там аналогичные проблемы: https://github.com/azurefx/DotNET.jl/issues/17

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

Было бы хуже, когда одно и то же заново повторяли анонимы: хз, клоун ли это очередной, или вменяемый форумчанин.

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

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

Это обратная библиотека. Вызов JNI из C#.

Первая же строчка в описании:

Java.Interop is a binding of the Java Native Interface for use from managed languages such as C#, and an associated set of code generators to allow Java code to invoke managed code.

Я уже начал терять нить беседы, что вы мне пытаетесь доказать? Что .Net CLR нигде не работает?

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

Вернись выше по ветке: «Есть библиотека для работы с дотнетом из Питона, Джавы, Перла?».

А ты пишешь «Java Native Interface for use from managed languages such as C#».

«and an associated set of code generators to allow Java code to invoke managed code» - похоже, что это только для переданного через JNI кода. По крайней мере в тестах не нашёл ни одного вызова CLR со стороны Java.

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

Я уже начал терять нить беседы, что вы мне пытаетесь доказать? Что .Net CLR нигде не работает?

Что его очень сложно использовать из любого языка с виртуальной машиной. В 1С, например, сделали обёртку NetObjectToIDispatch45, которая даёт стандартные COM-объекты. Но, понятно, в Linux этот вариант не проходит.

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

По крайней мере в тестах не нашёл ни одного вызова CLR со стороны Java.

Я не смотрел код на предмет вызова CLR, поверю вам на слово.

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

С этим утверждением я полностью согласен. Я писал об том что в других языках это легче сделать по сравнению с Lisp из-за «IEEE совместимости».

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

Я писал об том что в других языках это легче сделать по сравнению с Lisp из-за «IEEE совместимости».

Нет. Из-за «IEEE совместимости» проблематично сделать «IronLisp» на CLR.

А взаимодействие проблематично именно в SBCL по той же причине, по которой сложно сделать интерфейс к Java: due to SBCL’s inability to handle Unix signals properly in the presence of foreign threads.

Можно взять тот же MKCL, работать будет стабильнее, несмотря на то, что поддержка IEEE там меньше.

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от monk

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

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

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

Причём с IEEE там больше проблем со стороны CLR:

выводит True:

float @float = 0.0f;
for(int @int = 0; @int < 10; @int += 1)
{
    @float += 0.1f;
}
Console.WriteLine(@float == 1.0f);

Выводит false:

float @float = 0.0f;
for(int @int = 0; @int < 10; @int += 1)
{
    @float += 0.1f;
}
Console.WriteLine(@float == 1.0f);
Console.WriteLine(@float.ToString("G9"));

https://stackoverflow.com/questions/2342396/why-does-this-floating-point-calculation-give-different-results-on-different-mac

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

Да, там проблема не в CLR как таковом. А как раз в уровне поддержки IEEE-754.

И это то о чем я писал выше, выделил жирным:

Из меня плохой объяснятор, но я попытаюсь донести свою мысль: вот есть ANSI стандарт для Lisp и IEEE 754 стандарт для всех остальных. Оба стандарта несовместимы друг с другом выше определенного порога, более того оба стандарта не совместимы с реальной арифметикой нашего мира выше определенного порога и в некоторых местах этот порог довольно невысокий.

Если вы немного поразмыслите, то поймете что уже начинаете подтверждать мои же тезисы :)

Вообще, вся боль и несовершенство IEEE-754 описаны вот тут, советую почитать, если не видели. Подозреваю что не видели, иначе бы мне такие примеры не давали.

Я мог бы «включить Лавсана» и начать разглагольствовать об «ублюдочной реализации float-ов», но мне если честно уже лень.

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

Поумничаю

http://en.wikipedia.org/wiki/IA-32

wiki IA-32

http://ru.wikipedia.org/wiki/Расширения архитектуры x86
http://ru.wikipedia.org/wiki/Предсказатель переходов
http://ru.wikipedia.org/wiki/Вычислительный конвейер
http://ru.wikipedia.org/wiki/Сортировка вставками
http://software.intel.com/en-us/

http://ark.intel.com/                                      База знаний по продуктам Intel 

https://en.wikipedia.org/wiki/Time_Stamp_Counter           The Time Stamp Counter (TSC) is a 64-bit register present on all x86 processors since the Pentium. It counts the number of cycles since reset. 
                                                           The instruction RDTSC returns the TSC in EDX:EAX. In x86-64 mode, RDTSC also clears the higher 32 bits of RAX and RDX. 
                                                           Its opcode is 0F 31.[1] Pentium competitors such as the Cyrix 6x86 did not always have a TSC and may consider RDTSC an illegal instruction. 
                                                           Cyrix included a Time Stamp Counter in their MII.

                                                           The Time Stamp Counter was once an excellent high-resolution, low-overhead way for a program to get CPU timing information. 
                                                           With the advent of multi-core/hyper-threaded CPUs, systems with multiple CPUs, and hibernating operating systems, the TSC cannot be relied upon to provide accurate 
                                                           results — unless great care is taken to correct the possible flaws: rate of tick and whether all cores (processors) have identical values in their time-keeping registers. 
                                                           There is no promise that the timestamp counters of multiple CPUs on a single motherboard will be synchronized. 
                                                           Therefore, a program can get reliable results only by limiting itself to run on one specific CPU. 
                                                           Even then, the CPU speed may change because of power-saving measures taken by the OS or BIOS, or the system may be hibernated and later resumed, resetting the TSC. 
                                                           In those latter cases, to stay relevant, the program must re-calibrate the counter periodically.

https://habrahabr.ru/company/stss/blog/323016/             Сравнение производительности процессоров Intel разных поколений

https://valid.x86.fr/bench/1                               CPU-Z Benchmark (x64 - 2017.1)

https://habrahabr.ru/company/otus/blog/343566/             Стоимость операций в тактах ЦП
                                                           http://ithare.com/infographics-operation-costs-in-cpu-clock-cycles/

https://habrahabr.ru/company/infopulse/blog/347394/        Выравнивание инструкций кода
                                                           https://dendibakh.github.io/blog/2018/01/18/Code_alignment_issues

https://www.ixbt.com/cpu/cpu_errata.html                   Исправление ошибок в CPU

https://www.ixbt.com/cpu/utils/pupdt501.exe                Утилита, исправляющую микрокод

http://www.opennet.ru/opennews/                            Неверная трактовка документации Intel привела к уязвимости в большинстве ОС

https://habr.com/company/badoo/blog/420407/                С — не низкоуровневый язык https://queue.acm.org/detail.cfm?id=3212479

https://habr.com/post/425905/                              Как написать на ассемблере программу с перекрываемыми инструкциями (ещё одна техника обфускации байт-кода)

https://habr.com/post/426497/                              Ядра процессора или что такое SMP и с чем его едят

https://habr.com/post/427757/                              Бэкдоры в микрокоде ассемблерных инструкций процессоров x86

https://habr.com/ru/company/1cloud/blog/451356/            Как работает сжатие в объектно-ориентированной архитектуре памяти

https://habr.com/ru/company/badoo/blog/420407/             С — не низкоуровневый язык

https://habr.com/ru/company/intel/blog/466521/             C for Metal — драгоценный металл для вычислений на графических картах Intel

https://habr.com/ru/post/462385/                           Новый подход может помочь нам избавиться от вычислений с плавающей запятой

https://habr.com/ru/post/465723/                           Posit-арифметика: победа над floating point на его собственном поле. Часть 1

https://habr.com/ru/post/466813/                           Posit-арифметика: победа над floating point на его собственном поле. Часть 2

https://habr.com/ru/post/467735/                           Испытания Posit по-взрослому

https://habr.com/ru/post/467933/                           И все-таки, почему Posit являются достойной альтернативой IEEE 754

https://habr.com/ru/post/468077/                           Испытания Posit по-взрослому. Спектральный анализ

https://habr.com/ru/post/475370/                           Алгоритм Кэхэна: как получить точную разность произведений
                                                           https://stackoverflow.com/questions/48979861/numerically-stable-method-for-solving-quadratic-equations/50065711#50065711  Numerically stable method for solving quadratic equations

https://habr.com/ru/post/507598/                           Анализ кристалла сдвигового регистра у математического сопроцессора 8087

https://habr.com/ru/post/523654/                           Сложение двух чисел с плавающей запятой без потери точности

https://habr.com/ru/company/vdsina/blog/525048/            Браузер и числа с плавающей запятой

https://habr.com/ru/post/525090/                           Можно ли сложить N чисел типа double наиболее точно

https://habr.com/ru/post/526000/#habracut                  Точные и быстрые вычисления для чисел с плавающей точкой на примере функции синуса. Введение и часть 1

https://habr.com/ru/post/527226/                           Точные и быстрые вычисления для чисел с плавающей точкой на примере функции синуса Часть 3_ fixed-point

https://habr.com/ru/post/531358/                           Учебный видео-курс по арифметике с плавающей запятой в формате IEEE-754 Часть I

https://habr.com/ru/post/537636/                           Перевод числа в строку с помощью FPU

https://habr.com/ru/post/542270/                           Перевод числа в строку с помощью SIMD + FPU

https://github.com/rust-lang/rust/pull/86761               Update Rust Float-Parsing Algorithms to use the Eisel-Lemire algorithm. #86761
                                                           Более быстрый, более корректный разбор чисел с плавающей точкой
                                                           Реализация разбора чисел с плавающей точкой в стандартной библиотеке была обновлена с использованием алгоритма Эйзеля-Лемира (Eisel-Lemire), который обеспечивает как 
                                                           более высокую скорость, так и лучшую корректность.
                                                           Раньше некоторые граничные случаи разобрать было нельзя, теперь это исправлено.
                                                           Более подробную информацию о новой реализации можно прочитать в описании пул-запроса.

https://habr.com/ru/company/oleg-bunin/blog/595085/        Как напечатать float
Forum0888
()