LINUX.ORG.RU

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

пока что кроме синтаксического сахара никаких отличий от простой полиморфной лямбды не показано.

Пока что я не видел этой «простой полиморфной лямбды».

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

Но это же очевидная ошибка. Зачем рассматривать ошибочный код?

Мне даже как-то странно. В каком модуле ошибка?

С разными компараторами будут разные типы.

С чего бы? Если там даже «уникальных тагов» не будет?

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

В каком модуле ошибка?

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

С чего бы? Если там даже «уникальных тагов» не будет?

почему не будет?

Вообще, я немного неправильно понял твой пример. Давай так - оставляем в сгнатуре SetFunctor для простоты только type t и empty, делаем реализацию с type t = int, r,pty = 0 (ну для примера), тогда в последней строке все равно будет ошибка, так? Другими словами работает это все следующим образом: при аппликации Functor(Type) генерируется уникальный тип-метка, все монотипы типы неявно врапаются в этот тип-метку, т.о. любой тип внутри модуля может быть равен только типу из того же модуля. Все так? Пока что просто сахар.

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

то есть получается что в s1 = Set(T1) s1.empty имеет тип не int, а что-то вроде Set1_int, s2.empty в s1 = Set(T2) будет тип Set2_int, а если s3.empty в s3 = Set(T2), то либо Set2_int, либо Set3_int - в зависимости от того, кешируются ли результаты вычисления модулей для нашего примера несущественно). как-то так же?

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

Ну открой тапл, глава про System F.

Думаю, тебя не затруднит скопировать оттуда аналог этого кода.

Очевидно, в том, в который импортированы одноименные инстансы.

А ему не обязательно их импортировать. Он может вообще не импортировать класс Ord, от этого не изменится ничего. Конечно, Ord находится в Prelude, и не импортировать его — это надо специально стараться; но можно замутить такую же хрень с кастомным классом.

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

почему не будет?

Потому что:

тип в Ordered боксим уникальным тагом на каждый компаратор.

не надо боксить тип в Ordered.

Ты предложил сначала ввести тэги, потом предложил убрать их. Тогда их и не будет.

Давай так -

напишем код. Давай.

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

По части двух последних постов ответь, а то я видимо немного не так понял семантику модулей.

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

И еще над этим, например. Это к слову о гибкости.

Справедливости ради, надо отметить, что первая часть вашего кода семантически не соответствует второй. Эквивалентом следует считать вот этот код, и здесь «объект» анонимуса работает как ожидается. Разумеется, это не значит, что мы имеем полноценную объектную систему, но анон ведь об этом и не говорил.

anonymous
()
Ответ на: Let's do this traditional way от KennyMinigun

Ваш пример совершенно не вписывается в контекст обсуждения. Речь шла об имитации объекта, а вы представили пример с нативным обектом. Это здесь ни пришей к п... рукав.

anonymous
()

Сейчас тыкаю rust, эдакий хаскелль для управления памятью. Фичи

  • Сборщик мусора на уровне системы типов. Тоесть чаще всего он будет не в рантайме, а просто после кучи матана в компиляторе он просто проставит free сам в нужные места в генерируемом машинном коде.
  • Управление памятью и сборка мусора без локов, так как вообще работает отдельно для каждого потока
  • Если не использовать слово unsafe, то ошибок память быть не может в принципе, никаких null pointer, double free. Это статически проверит компилятор
  • Специальный тип указателей (который используется почти всегда) нельзя расшарить в многих потоках. Это статически проверит компилятор
  • Если вы хотите разделять данные в потоках, то нужно выбрать - копирование, pipes, блокировки. Просто так без синхронизации нельзя. Это статически проверит компилятор
  • Есть ffi к С, который можно встроить в эту задротскую систему типов, так чтобы еще и ресурсы освобождал компилятор/рантайм rust

Минусы - сырость, глубокая альфа, ни либ для веба, ни для ui. Даже для регексов. Пока не выйдет 1.0, сам язык меняют от релиза до релиза

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

Биндятся. Вчера целый день биндил, 3 сопливых функции из libc. Я пока нуб

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

А че это ты такое пидорское погоняло себе навесил, ты чо из этих чтоле?

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

Сборщик мусора на уровне системы типов. Тоесть чаще всего он будет не в рантайме, а просто после кучи матана в компиляторе он просто проставит free сам в нужные места в генерируемом машинном коде.

Там же явные регионы. Так что не сам. Или вывод регионов там таки добавили?

forCe
()

/usr/bin/perl

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.