Это копия, сохраненная 24 февраля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Текущая версия: 1.4
Планы на 2016 год: http://blog.rust-lang.org/2015/08/14/Next-year.html
Книги:
= The Rust Programming Language https://doc.rust-lang.org/book/
= The Rustonomicon https://doc.rust-lang.org/nightly/nomicon/
Известные пректы:
= https://github.com/PistonDevelopers/piston
= https://github.com/servo/servo
= https://github.com/redox-os/redox
Срач на тему safe/unsafe прилагается
Прошлый тред тонет тут: https://2ch.hk/pr/res/523816.html (М)
Извращение какое-то.
Для этого есть принцип KISS, известный уже лет 50.
Не получается описать "сложные" вещи простым языком - значит проблема в переусложненной архитектуре приложения.
KISS отлично сочетается с остальными принципами.
emscripten?
>Главный из которых то, что кресты - комбайн, если сравнивать между собой языки, то Си - это английский(24буквы), а ЦПП - это китайский(2000+ иероглифов).
Кресты - это китайский. Си - это китайский, записанный на латинице. Выразительно - одно и то же, но на латинице тебе приходится вычислять омонимы из контекста (а в китайском сплошные омонимы, потому что все слова состоят из одного слога, а возможно слогов комбинаторно не так много), а иероглифами сразу видно, какое конкретное значение имел в виду автор.
Хотя смотришь - тут 24 буквы, а там 2000 иероглифов. Буквы проще. Так и получаются неосиляторы.
Если на С++ ты пишешь средствами языка, то на С пишешь то же самое, но паттернами. Нужен тебе специализированный вектор? `#define YOBA_VECTOR_T int/#include "yoba_vector.h/#undef YOBA_VECTOR_T/yoba_int yoba;` вместо `yoba_vector<int> yoba`.
Нужны классы - https://github.com/shkolnick-kun/bugurtos/blob/master/kernel/xlist.h . Исключения - if(!...) goto cleanup; в больших количествах, HRESULT и прочая ебота. И так далее.
Поэтому, простота Си обманчива, в код нужно смотреть расфокусированным взглядом, вычленяя из контекста суть. Видишь HRESULT и понимаешь, в каком стиле тебе использовать библиотеку. Видишь класс - ищешь конструктор и деструктор для начала (типа fopen/fclose). Видишь, как выделяется пустой буфер и передается в функцию - это значит, что параметр на самом деле - возвращаемое значение. Ну и так далее. Без знания шаблонов, ООП, исключений, идиомы владения, на С можно только говнокод писать. Что, в общем-то, и происходит - бесконечные buffer overflow эксплоиты из нулевых - это оттуда.
В С++ появилась куча своих паттернов и Rust сделал то же, что и С++ с векторами на дефайнах - оформил это в виде средств языка. На С++ уже давно есть разделение на "библиотечный" код, в котором new и delete разрешены, и код "пользовательский", в котором вместо них нужно использовать умные указатели или векторы. Вот тебе и концепция safe/unsafe, которая вполне рабочая, нужно было ее только оформить в виде части языка. А далее - счастье, ты запретил джуниорам и новичкам в проекте писать unsafe код, и избавлен от кучи проблем. С правилами использования умных указателей все то же самое - они уже давно были на уровне соглашений.
>Шаблоны - плохой выбор, потому, что экзешник будет расти , как на дрожжах без прироста производительности, то есть, это пустая трата ресурсов, которые ограничены.
Неправда. У тебя стандартный trade off между памятью и производительностью. Шаблоны производительны на любом процессоре с кэшем, потому что делают код локальным, без лишних ветвлений и call/ret с передачей параметров. Ты выигрываешь мегагерцы, проигрывая в мегабайтах. А это - стандартный use case везде, кроме эмбеда, на который Rust официально и не лезет вроде. Системный язык - это не обязательно системный язык для микроволновок. На сишке этот стандартный для 2015 года и процессоров с 3 уровнями кэша use case - головная боль, приходится кастить void* как на какой-нибудь джаве.
Далее, в С++ добавили возможность выбора, но она была довольно брутальной - или шаблоны, или свитчи, или словарь функций. Ошибся с выбором - горе тебе.
У тайпклассов то преимущество, что у компилятора есть выбор, делать специализацию кода, или передачу словаря отдельным параметром (как в хаскелле). Второе, на самом деле, не нужно, лишняя косвенность, но это вопрос между -O2 и -Os, твой код и код твоих библиотек остается тем же самым. Поэтому сделать специализированные компилер раста под эмбед, который бы максимально экономил память - не проблема, но вряд ли кто-то этим займется, потому что нет задач.
>Главный из которых то, что кресты - комбайн, если сравнивать между собой языки, то Си - это английский(24буквы), а ЦПП - это китайский(2000+ иероглифов).
Кресты - это китайский. Си - это китайский, записанный на латинице. Выразительно - одно и то же, но на латинице тебе приходится вычислять омонимы из контекста (а в китайском сплошные омонимы, потому что все слова состоят из одного слога, а возможно слогов комбинаторно не так много), а иероглифами сразу видно, какое конкретное значение имел в виду автор.
Хотя смотришь - тут 24 буквы, а там 2000 иероглифов. Буквы проще. Так и получаются неосиляторы.
Если на С++ ты пишешь средствами языка, то на С пишешь то же самое, но паттернами. Нужен тебе специализированный вектор? `#define YOBA_VECTOR_T int/#include "yoba_vector.h/#undef YOBA_VECTOR_T/yoba_int yoba;` вместо `yoba_vector<int> yoba`.
Нужны классы - https://github.com/shkolnick-kun/bugurtos/blob/master/kernel/xlist.h . Исключения - if(!...) goto cleanup; в больших количествах, HRESULT и прочая ебота. И так далее.
Поэтому, простота Си обманчива, в код нужно смотреть расфокусированным взглядом, вычленяя из контекста суть. Видишь HRESULT и понимаешь, в каком стиле тебе использовать библиотеку. Видишь класс - ищешь конструктор и деструктор для начала (типа fopen/fclose). Видишь, как выделяется пустой буфер и передается в функцию - это значит, что параметр на самом деле - возвращаемое значение. Ну и так далее. Без знания шаблонов, ООП, исключений, идиомы владения, на С можно только говнокод писать. Что, в общем-то, и происходит - бесконечные buffer overflow эксплоиты из нулевых - это оттуда.
В С++ появилась куча своих паттернов и Rust сделал то же, что и С++ с векторами на дефайнах - оформил это в виде средств языка. На С++ уже давно есть разделение на "библиотечный" код, в котором new и delete разрешены, и код "пользовательский", в котором вместо них нужно использовать умные указатели или векторы. Вот тебе и концепция safe/unsafe, которая вполне рабочая, нужно было ее только оформить в виде части языка. А далее - счастье, ты запретил джуниорам и новичкам в проекте писать unsafe код, и избавлен от кучи проблем. С правилами использования умных указателей все то же самое - они уже давно были на уровне соглашений.
>Шаблоны - плохой выбор, потому, что экзешник будет расти , как на дрожжах без прироста производительности, то есть, это пустая трата ресурсов, которые ограничены.
Неправда. У тебя стандартный trade off между памятью и производительностью. Шаблоны производительны на любом процессоре с кэшем, потому что делают код локальным, без лишних ветвлений и call/ret с передачей параметров. Ты выигрываешь мегагерцы, проигрывая в мегабайтах. А это - стандартный use case везде, кроме эмбеда, на который Rust официально и не лезет вроде. Системный язык - это не обязательно системный язык для микроволновок. На сишке этот стандартный для 2015 года и процессоров с 3 уровнями кэша use case - головная боль, приходится кастить void* как на какой-нибудь джаве.
Далее, в С++ добавили возможность выбора, но она была довольно брутальной - или шаблоны, или свитчи, или словарь функций. Ошибся с выбором - горе тебе.
У тайпклассов то преимущество, что у компилятора есть выбор, делать специализацию кода, или передачу словаря отдельным параметром (как в хаскелле). Второе, на самом деле, не нужно, лишняя косвенность, но это вопрос между -O2 и -Os, твой код и код твоих библиотек остается тем же самым. Поэтому сделать специализированные компилер раста под эмбед, который бы максимально экономил память - не проблема, но вряд ли кто-то этим займется, потому что нет задач.
> У тайпклассов то преимущество, что у компилятора есть выбор, делать специализацию кода,
На самом деле, выбор всё ещё делает программист: в расте вполне явные объекты типажа.
https://doc.rust-lang.org/book/trait-objects.html
Нет, ты не понял, я говорю именно о низкоуровневой имплементации statich dispatch.
static dispatch можно на низком уровне сделать через копипасту кода, а можно - через передачу словаря.
Допустим, у тебя есть код fn do_something<T: Foo>(x: T, y: T)
В первом случае он у тебя превращается в void do_something_foo(Foo x, Foo y), void do_something_bar(Bar x, Bar y).
Во втором он превращается в void do_something(T x, T y, T_dictionary* t). Словарь T_dictionary содержит список указателей на функцию твоего трейта. Что экономит код за счет лишней косвенности.
dynamic dyspatch - это когда указатель на объект и на словарь упакованы в одну коробку. Коробка эта называется trait object, а по-русски это называется экзистенциальный тип. Что позволяет тебе сделать, например, гетерогенный список и функции, с ним работающие.
>Шаблоны производительны на любом процессоре с кэшем, потому что делают код локальным, без лишних ветвлений и call/ret с передачей параметров. Ты выигрываешь мегагерцы, проигрывая в мегабайтах.
И это при том, что одной из основных причин критики шаблонов является, как раз, их раздувание кода и тормоза из-за невлезания в кэши процессоров. Вторая - сложность, непонятность и костыльность. В общем, хуйню написал.
> как раз, их раздувание кода и тормоза из-за невлезания в кэши процессоров
Ты, вась, с генериками ничо не попутал?
Вот ты сейчас классно написал. Вместо "по-моему мнению" сослался на авторитет какой-то толпы "одной из основных причин критики шаблонов". Т.е. своих мыслей у тебя нет.
>раздувание кода и тормоза из-за невлезания в кэши процессоров.
Интересно, как ты себе представляешь код, влезающий в кэши процессоров. Быстрый код - это структуры данных, которые передаются по значению, а не по ссылке и линейный код без свитчей.
По этой причине, c-style пердоленье свитчами и void* - это говно. А шаблоны с передачей данных по значению и отсутствию свитчей по тэгу - это добро.
1. Переписываете системд на расте,
2. Тестируете-стабилизируете,
3. Пропихиваете хотя бы в 1 дистрибьютор,
4. У потеринга разрыв анальной жопы,
5. ??????
6. ПЕАР для раста !!!
Sysvinit only/
Странно, в ссылках, которые гуглятся цппшные шаблоны вроде как компилятся в функции...
В прочем не важно, оптимизирующий компилятор все равно сделает call/ret...
>Странно, в ссылках, которые гуглятся цппшные шаблоны вроде как компилятся в функции...
Сравни std::sort и сишный qsort.
template< class RandomIt, class Compare >
void sort( RandomIt first, RandomIt last, Compare comp );
void qsort (void base, size_t num, size_t size,
int (compar)(const void,const void));
В первом случае переданный компаратор заинлайнится в 90% случаев, потому что это маленькая однострочная функция. Да, размер экзешника вырастет, но сам код if (a < a[j]) будет локальным. В случае qsort - незаинлайнится никогда, потому что там указатель на функцию. Там будет call/ret. А сколько раз в функции сортировки вызывается компаратор? N*log(N). И каждый раз - call/ret.
> 4. У потеринга разрыв анальной жопы,
Для него это нормальное состояние, никто и не заметит.
Чтобы далеко не ходить - http://ideone.com/wnPx2y http://www.martin-ueding.de/en/programming/qsort/index.html и т. п.
Если только JIT-компиляция.
Потому что это не моё мнение. Потому что я не крестоблядь и шаблонами вашими не пользовался серьёзно. Но я знаю, что они делают, зачем нужны, и что происходит с кэшем. Можешь, например, посмотреть презенташек на ютубе от всяких геймдевщиков и прочих реалтаймщиков/хайлоадщиков. Ну или статеек почитать. Саттеры, там, и вот эти все эти.
>Быстрый код - это структуры данных, которые передаются по значению, а не по ссылке
Зависит от. Если у тебя ссылки ведут в одну область памяти, то быстрее будет доступ по ссылке, а не постоянное копирование.
>>573006
Инлайн последние несколько лет уже не означает по-дефолту "хорошо", потому что разрастание кода и кэшмиссы. А call/ret вообще почти бесплатны, при условии, что ты без всяких анальных трюкачеств возвращаешься туда, откуда был вызван.
>Если у тебя ссылки ведут в одну область памяти, то быстрее будет доступ по ссылке, а не постоянное копирование.
Хотя тут стоит оговориться, что это в идеале. В реале у тебя массив с данными и ссылками могут оказаться на одной линейке кэша, и пиздец.
Мне не нужно ничего смотреть, я разбираюсь на уровне авторов этих презенташек. Критикуют, как правило, пердолинг типа буста или Александреску. Ну там, boost::mpl, boost::variant и прочие удобные, но довольно тяжелые вещи (в том числе и за счет лишней косвенности), в которых нужно очень хорошо разбираться, что происходит под капотом, чтобы писать код, который превращается в нормальные машинные коды.
>Зависит от. Если у тебя ссылки ведут в одну область памяти, то быстрее будет доступ по ссылке, а не постоянное копирование.
Ссылки, как правило, ведут в кучу. Значения живут на стеке и могут даже не копироваться в случае инлайнинга.
>Инлайн последние несколько лет уже не означает по-дефолту "хорошо", потому что разрастание кода и кэшмиссы. А call/ret вообще почти бесплатны, при условии, что ты без всяких анальных трюкачеств возвращаешься туда, откуда был вызван.
Talk is cheap. Я тебе кинул ссылку на бенчмарк между std::sort и qsort. Это - самый типовой случай, когда тебе нужно в алгоритм передать маленькую лямбду, и в С это превращается или в пиздец по производительности, или макросы препроцессора, которые хуже темплейтов во всем.
>я разбираюсь на уровне авторов этих презенташек
Страуструп, ты ли это? Ну, рассказывай, как жизнь, как делишки?
Зачем ты тогда ерунду такую пишешь? Хотя, если ты эмбедщик какой, то нормально.
>Ссылки, как правило, ведут в кучу.
Какая разница, если она уже в кэше?
>Я тебе кинул ссылку на бенчмарк между std::sort и qsort.
Потому что это особый случай, потому что инлайнится один раз и функция короткая.
В данном случае расчет делается на литальность: мало того, что писал не он, так еще и без утечек памяти!!!
Пичалька.
>>572830
В цпп нет средств для всех паттернов, - смотри 3gpp-стек для андроида, там средства языка не сильно помогли индусам, а за счет ооп с множественным наследованием получилось переусложненное ровно, которое бросили, так и не допилив...
Решил слиться? Ну, как хочешь. Найдёшь время - почитай саттеров и интеловский мануал по оптимизации, много нового узнаешь.
Ты - типичный руссоанон, создающий информационный шум своей тупой демагогией типа "Зачем ты тогда ерунду такую пишешь? Хотя, если ты эмбедщик какой, то нормально.". Если я пишу ерунду - опровергни без хамства. Не можешь опровергнуть - иди нахуй. Твоих мозгов для понимания Саттера все равно не хватает.
Потому что ты пишешь хуйню. Если ты эмбедщик, то это будет значить, что ты на самом деле не долбоёб, а что-то знаешь, просто неправильно экстраполировал свои знания. Вот ты пишешь, что благодаря кэшу процессору похуй на распухание кода. Это полная хуйня. Потому что именно благодаря кэшу ему НЕ похуй на распухание кода. Далее, я говорю, что call/ret почти бесплатные. Ты со мной не соглашаешься, хотя именно это написано интелом в официальном мануале от интела по оптимизациии кода для процессоров от интела. Хочешь с ними поспорить? Удачи. Про кэш, кстати, там тоже есть. И при этом ты заявляешь, что твои знания на уровне Страуструпа, Александреску и Мейерса. Да иди ты нахуй.
Погугли, хотя бы, того же Актона, для начала. Алсо, где-то на ютубе, по-моему, есть запись презентации Мейерса с какой-то крестоконфы как раз про кэш, и как он влияет на быстродействие.
> Потому что ты пишешь хуйню.
Это не я пишу хуйню, это ты читаешь жопой, при чем не только меня, но и все эти "рекомендации". Основная твоя проблема - ты вырываешь мои слова из контекста. Поэтому давай пруф своим словам: "Далее, я говорю, что call/ret почти бесплатные. Ты со мной не соглашаешься". Когда ты убедишься, что ты читаешь жопой, я объясню тебе, где ты прочитал жопой с "ты пишешь, что благодаря кэшу процессору похуй на распухание кода", ну и далее по списку.
>Шаблоны производительны на любом процессоре с кэшем
>Ты выигрываешь мегагерцы, проигрывая в мегабайтах.
Это, конечно, не означает, что процессору с кэшем похуй на распухание кода. Тем более, что это твоё утвержение неверно даже если я прочёл его жопой, бат ай эм нот.
>И каждый раз - call/ret
>Talk is cheap. Я тебе кинул ссылку на бенчмарк между std::sort и qsort.
>в ответ на бесплатность call/ret
Конечно же, ты не пытался опровергнуть. И вообще, это быстрее в целом не из-за инлайна, а из-за отсутствия локальных аргументов и чистки стэка. Но тут я могу признать, что, наверное, зря начал говорить про общий случай.
>Это, конечно, не означает, что процессору с кэшем похуй на распухание кода.
Это означает только, что преимущества производительности шаблонов по сравнению с другими методами решения тех же задач выше, чем их недостатки. Ты сам сказал, что ты диван. И вот ты прочитал где-то "в каких-то условиях шаблоны могут быть неэффективными из-за невлезания кода в кэш, следите за этим", и гордо с ним носишься. Называется это - баттхерт неосилятора, когда человек, не понимая технологии, ищет в интернете подтверждения тому, что она плохая, медленная и т. п. А этот факт нихуя стоит - http://stackoverflow.com/questions/2442358/do-c-templates-make-programs-slow
Under a few circumstances, this can lead to slow execution, by simply producing enough object code that it no longer fits in the cache well ... Templates have positive effects on speed far more often than negative.
Альтернативы шаблонам имеют гораздо больше проблем в части производительности. И это довольно очевидно, почему: switch(yoba->tag) - это лишние бранчи, переход по указателю на функцию не инлайнится - а это значит, что нужно перепидорасить регистры, чтобы туда запихнуть параметры, затем перепидорасить их назад, и это при условии, что регистров достаточно.
Т.е. твоя проблема в том, что ты открыл книжку, прочитал ее жопой, найдя раздел "минусы", и дальше объявил это "основной причиной критики шаблонов по версии моих корефанов - Страуструпа, Александреску и Мейерса". А на критику твоих слов ты такой - нахуя ты споришь с Мейерсом?
>Конечно же, ты не пытался опровергнуть.
Конечно нет. Я выше писал: "Шаблоны ... делают код локальным, без лишних ветвлений и call/ret с передачей параметров". Видишь, по-русски написано: "с передачей параметров"? Call/ret - похуй, не похуй, что приходится делать кучу ритуалов с регистрами, чтобы вызвать сраный компаратор. Ты можешь сказать, что для достаточно больших функций это уже роли играть не будет - ну так они и инлайниться не будут как раз по этой причине.
Мы обсуждаем величие rust как раз. Основной батхерт у него от сишников, потому что это - кресты, а сишники не любят кресты.
Если величие заключается в количестве языковых конструкций, то да.
Однако индекс TIOBE, как бы намекает нам...
> Однако индекс TIOBE, как бы намекает нам...
...что лучший ЯП — Java, хотя и васик с пыхпыхом тоже неплохие языки.
Сишечка наслаждается медленным падением.
ПФФФФФФФФФ
Это же целая серия комиксов: Lotus, AOL, поздние SGI, современные M$ и HP и так далее.
Мишку сишку должен знать каждый программер, а кресты - только осиляторы. Они же будут знать и раст. А рейтинг не удивителен. Чем меньше знают срр тем лучше, зарплаты выше, говнокода меньше.
Там где пишешь что кто-то должен знать помойку под названием кресты, которая состоит из: легаси я видел крутую штуку давайте з
Там где пишешь что кто-то должен знать помойку под названием кресты, которая состоит из:
- легаси;
- я видел крутую штуку давайте затащим ее к нам и похуй если она слабо согласуется с остальным языком;
- неопределенное поведение;
чуть более чем полностью.
>сишку должен знать каждый программер, а кресты - только осиляторы
По мне это подразумевает что из множества программистов он выделяет часть которая лучше остальных за счет того что осилила кресты. Следовательно, ты должен знать крестопарашу чтобы быть особенным.
Может быть я и упорот.
Осиляторы в каком смысле?
Если осиляторы в смысле запоминания бесчисленных языковых конструкций, то у меня для тебя плохие новости: выучивание конструкций - то же самое, что выучивание истории, или еще какой гумманитарной ебалы.
То есть времени будет потрачена масса, а погромист от этого лучше не станет.
>Чем меньше знают срр тем лучше, зарплаты выше, говнокода меньше.
Ойвей, кресты на втором месте по говнокоду: http://govnokod.ru/
первое по праву за пехопе...
Это в его понимании как раз-таки неосиляторы, пишущие на смеси C и C++
>По мне это подразумевает что из множества программистов он выделяет часть которая лучше остальных за счет того что осилила кресты
У тебя низкая самооценка, а мне похуй, кто там лучше или хуже. Есть индустрия, у нее есть требования. Если я буду писать трассировщик лучей, к примеру, я возьму С++, потому что больше брать нечего. Поэтому есть пласт программистов-осиляторов, которые в этой области индустрии работают.
А Си должен знать любой уважающий себя программист, даже пхпшник, жабокодер или любой другой.
Поэтому Си должен быть популярнее С++. Потому что С++ - это осиляторы и все, а С - это каждый второй.
There are only two kinds of languages: the ones people complain about and the ones nobody uses.
И тут Торвалдс, Столлман и Поттеринг зарыдали вголосину!
На фортране ничего нового не пишут уже. Все, что с ним делают - линкуют к другим языкам, благо, сделать это легко. А на С++ регулярно что-то новое делают, поэтому программистов нужно дохуя.
Не мертвый язвой. На нем даже что-то пишут, в том числе кровавый тырпрайс для атомной промышленности, ну и статье регулярно обновляют.
Ну так TIOBE это и отражает. Fortran - на почетном 22 месте, выше D, Lua, F# и прочих Groovy. Но не на первом и не втором, отсюда будут трудности с поиском работы.
> Если осиляторы в смысле запоминания бесчисленных языковых конструкций, то у меня для тебя плохие новости: выучивание конструкций - то же самое, что выучивание истории, или еще какой гумманитарной ебалы.
Ох, если бы дело было в языковых конструкциях... Но вы ведь не можете даже в простые концепции вроде параметрического полиморфизма.
Это когда в качкатке аргументов передаются не только указатели на данные , но и указатеяли на методы?
И че там сложного то?
> Это когда в качкатке аргументов передаются не только указатели на данные , но и указатеяли на методы?
Нет.
Странно, в педивикии и написано, что да...
https://ru.m.wikipedia.org/wiki/Полиморфизм_(информатика)
Вообще-то да. Но ты же у нас ко-ко-ко математик и тебя интересуют формулы из TaPL, где почему-то нет слов "указатель" и "метод".
>Если я буду писать трассировщик лучей, к примеру, я возьму С++, потому что больше брать нечего
В задаче трассировки лучей совсем недавно окамл провёл крестоблядям сишарпом по губам.
Откуда-то неуловимо повеяло запахом борща.
Вообще-то нет. То, что ты указал — одна из возможных низкоуровневых реализаций для функций (даже не для структур данных).
Про типизацию лучше вообще не вспоминать: в симирке до сих пор принято кастовать воиды
Сверхменнвренность_вопросы_остаются.пнг
>>574790
>В языках программирования и теории типов полиморфизмом называется способность функции обрабатывать данные разных типов.
И?
В любом случае ты носишь с собой указатели на методы. В случае полиморфных функций - в виде невидимых параметров, в случае полиморфных данных - в виде коробки, в которой лежат данные и методы. Вот и все. Иди теоремки доказывай, сублимирующий математик.
> В любом случае ты носишь с собой указатели на методы.
В Java разве что. Но вообще говоря нет.
Ну, в таком случае привели пример другой реализации параметрического полиморфизма на низком уровне, ты же сказал, что это только одна из возможных реализаций...
Хуй знает, о чем он. Иногда параметрический полиморфизм сводится к ad-hoc полиморфизму (мономорфизация), но это именно сведение одного к другому, такая себе оптимизация, типа инлайнинга функций. А так, другого способа сделать полиморфный код, который не требует перекомпиляции всей программы для каждого нового типа, лично я не вижу.
Основная проблема всей функциональной тусовки в том, что они выдумали свой птичий язык, и балакают на нем, а когда вещи называют своими именами, начинаются "нее, чувак, зачем ты так просто, мы же тут в математиков играемся".
Биопроблемы борщеедов.
> Иногда параметрический полиморфизм сводится к ad-hoc полиморфизму (мономорфизация)
Это. В случае структур данных, так делается практически всегда (а в расте просто всегда, если нужен боксинг, то делай его сам).
В случае функций, я полагаю, это тоже делается не так уж и иногда (но здесь я плохо знаю).
> Основная проблема всей функциональной тусовки в том, что они выдумали свой птичий язык, и балакают на нем, а когда вещи называют своими именами, начинаются "нее, чувак, зачем ты так просто, мы же тут в математиков играемся".
Но ведь проблема в том, что они не осиливают такие простые вещи даже в таком топорно-прикладном виде, как шаблоны С++ или генерики.
Ну и зачем это нужно?
Я понимаю, что в случае часто используемого кода, подобные трюки, как и инлайнинг функций, оправданна, с точки зрения подъема производительности.
Но если вызовы происходят редко, то получается просто рост размера экзешника, без подъема производительности...
Если подобное говно становится мейнстримом в прикладном программировании, то тогда понятно, почему все ПО тормозит и требует больше оперативы с каждой новой версией...
Потому что закон Мура в процессорах остановился, а оперативка, ssd и пропускная способность интернета как росли, так и растут.
> то тогда понятно, почему все ПО тормозит и требует больше оперативы с каждой новой версией...
Нет, ПО тормозит из-за таких, как ты, которые прочитал в /c/ в сосничестве о шаблонном петушении и теперь носятся с этим синдромом утенка.
/Б/ратиш, ты понимаешь, что нет смысла инлайнить код, вызывается раз-в секунду?
То есть, если я пишу иннерциальную навигацию с калмановской фильтрацией и источниками коррекции, и мне надо с частотой в сотни герц обновлять разложение Холецкого матрицы ковариации, то тогда есть смысл инлайнить вращение матриц в QR-разложении, а если я пишу браузер, то не стоит инлайнить все подряд, т.к. экзешник будет расти в геометрической прогрессии, а производительность будет расти в логарифмической (дада, это предположение, без доказательств)?
А теперь прикинь: размер Кеша процессора 2мб, размер экзешника, не считая библиотек, 3мб, какова вероятность кеш-промаха?
>/Б/ратиш, ты понимаешь, что нет смысла инлайнить код, вызывается раз-в секунду?
Да что ты к этому инлайнингу прицепился, это просто оптимизация, которую компилятор включает по своим эвристикам. Она очень крута для мелких вызовов (типа проверки границ массива для вектора, проверки на пустоту у списка и т. п.), но не обязательно же ее делать постоянно. Мономорфизация означает просто, что код превращается в код, специализированный по типу. Со всеми плюшками, связанными с этим - известны размеры элементов, поэтому можно хранить их на стэке, можно инлайнить и т. п.
>и мне надо с частотой в сотни герц обновлять разложение Холецкого матрицы ковариации, то тогда есть смысл инлайнить вращение матриц в QR-разложении
Не, нету смысла. Вращение штука долгая, а вызов функции - относительно дешевая, инлайнить нет никакого смысла. Компилятор и не будет это делать.
Полиморфные типы - это или маленькие типы уровня умных указателей и векторов, которые инлайнятся незаметно и с профитом (каждый метод - это пара строчек - залочил мьютекс, инкрементул, разлочил, проверил границу массива и т. п.). Код здесь вроде как и растет, но профит штук типа проверки границ массива по месту больше, чем если бы пришлось делать лишний джамп куда-то.
Или же здоровые типы типа матриц, но они инстанцируются значениями типа float/double и т. п., а не миллионами, как ты почему-то думаешь. QR-разложение никто инлайнить не будет, будут просто функции типа qr_float(..) qr_double(..) qr_complex_float(...) и т. п. Пользовательский код, скорее всего, будет работать в данный момент времени с чем-то одним, поэтому с локальностью тоже все в порядке. Да, иногда могут быть проблемы, но в редких случаях.
А вот dictionary passing - это жопа, потому что размер типа-то нам неизвестен (опа), поэтому боксить нужно все, вообще все, и эти указатели на твои значения передовать по указателю на функцию из словаря... Тут очень сложно избежать кэш-промаха. Мелкие типы на таком просто охуенно будут тормозить. Крупные -
Вот тебе пример. Уже здесь ad-hoc вариант слегка быстрее
http://ideone.com/6uBT1t
А вот с инлайном:
http://ideone.com/hDLrxp
Быстрее в пять раз. А ты какие-то гипотетические примеры выдумываешь когда вдруг каким-то макаром в функции используется куча инстансов одновременно. Ты реальный пример кода, где так происходит, привести можешь?
>/Б/ратиш, ты понимаешь, что нет смысла инлайнить код, вызывается раз-в секунду?
Да что ты к этому инлайнингу прицепился, это просто оптимизация, которую компилятор включает по своим эвристикам. Она очень крута для мелких вызовов (типа проверки границ массива для вектора, проверки на пустоту у списка и т. п.), но не обязательно же ее делать постоянно. Мономорфизация означает просто, что код превращается в код, специализированный по типу. Со всеми плюшками, связанными с этим - известны размеры элементов, поэтому можно хранить их на стэке, можно инлайнить и т. п.
>и мне надо с частотой в сотни герц обновлять разложение Холецкого матрицы ковариации, то тогда есть смысл инлайнить вращение матриц в QR-разложении
Не, нету смысла. Вращение штука долгая, а вызов функции - относительно дешевая, инлайнить нет никакого смысла. Компилятор и не будет это делать.
Полиморфные типы - это или маленькие типы уровня умных указателей и векторов, которые инлайнятся незаметно и с профитом (каждый метод - это пара строчек - залочил мьютекс, инкрементул, разлочил, проверил границу массива и т. п.). Код здесь вроде как и растет, но профит штук типа проверки границ массива по месту больше, чем если бы пришлось делать лишний джамп куда-то.
Или же здоровые типы типа матриц, но они инстанцируются значениями типа float/double и т. п., а не миллионами, как ты почему-то думаешь. QR-разложение никто инлайнить не будет, будут просто функции типа qr_float(..) qr_double(..) qr_complex_float(...) и т. п. Пользовательский код, скорее всего, будет работать в данный момент времени с чем-то одним, поэтому с локальностью тоже все в порядке. Да, иногда могут быть проблемы, но в редких случаях.
А вот dictionary passing - это жопа, потому что размер типа-то нам неизвестен (опа), поэтому боксить нужно все, вообще все, и эти указатели на твои значения передовать по указателю на функцию из словаря... Тут очень сложно избежать кэш-промаха. Мелкие типы на таком просто охуенно будут тормозить. Крупные -
Вот тебе пример. Уже здесь ad-hoc вариант слегка быстрее
http://ideone.com/6uBT1t
А вот с инлайном:
http://ideone.com/hDLrxp
Быстрее в пять раз. А ты какие-то гипотетические примеры выдумываешь когда вдруг каким-то макаром в функции используется куча инстансов одновременно. Ты реальный пример кода, где так происходит, привести можешь?
Падажжи, ебана!
Это понятно все.
Ту исходный тезис был в якобы непонимании сишниками параметрического полиморфизма...
Насколько я понял, в крестоблядском варианте будет подставлятся все тело функции-шаблона, вне зависимости от сложности тела функции, а выигрыш производительности по сравнению с сишкой будет происходить из-за отсутствия передачи указателей на функции и вызовов через них...
Но в таком случае я могу запилить и в сишке набор макросов для шаблонизации функций, ичсх, эффект будет тот же...
И параметрическия полиморфизм тут не при чем, ибо в данном случае у нас адд-ток...
>Это понятно все.
Я отвечал на твой пост "А теперь прикинь: размер Кеша процессора 2мб, размер экзешника, не считая библиотек, 3мб, какова вероятность кеш-промаха?". Вероятность кэш-промаха у шаблонов минимальная, у косвенности - выше. По поводу "исходного тезиса" - его не я писал, но если приходится объяснять, какая имплементация ПП самая эффективная, то вряд ли ты его понимаешь на том уровне, на котором его должен понимать. Это хаскеллисты пусть боксят все и словари пихают туда-сюда, а тем, кто GC выпилил ради скорости, это зачем?
А не то, что ты не способен осилить статью на рувики про ПП. Это похуй.
>Ту исходный тезис был в якобы непонимании сишниками параметрического полиморфизма...
Мой исходный тезис в том, что сишку должен знать каждый, а кресты - это узкая специализация. Поэтому сишка должна быть популярнее - ну это следует из теории множеств, любой хороший с++ программист знает си, любой хороший java программист знает си, но java программист не обязательно знает с++. Вот и все, что я подразумевал под осиляторством.
>Но в таком случае я могу запилить и в сишке набор макросов для шаблонизации функций, ичсх, эффект будет тот же...
А шаблоны, как думаешь, как появились? Страуструп увидел паттерн в сишном коде и запилил их. Паттерн - популярный, именно это и делается в GNU Scientific library, к примеру:
https://github.com/ampl/gsl/blob/master/cblas/dsymm.c
https://github.com/ampl/gsl/blob/master/cblas/source_symm_r.h
Это потом оказалось, что они мощнее на порядок.
Эффект тот же не будет, у препроцессора куча недостатков, потому что макрос - внешняя по отношению к языку сущность. Он и в рекурсию не может без костылей, и с отладчиком плохо дружит (хотя может код с include и дружит - не уверен), и код приходится или разносить на мелкие файлы, или терпеть \ в каждой строчке.
Самое главное, я забыл, нахуя. А, потому что кресты сложные. А это - http://stackoverflow.com/questions/319328/writing-a-while-loop-in-the-c-preprocessor просто. Да уж нихуя, сложность тут как минимум одинаковая, только удобства с компилятором больше. А можно зделоть - на сишке даже libcello.org можно сделать.
Только попробуй сделать что-то уровня boost::units. Штука, которая без оверхеда в рантайме добавляет тебе проверку, не складываешь ли ты метры с килограммами, и охуенно, просто невроткосмически ускоряет разработку кода с большим числом математических формул.
>И параметрическия полиморфизм тут не при чем, ибо в данном случае у нас адд-ток...
Из тру-ПП по Хиндли-Миллеру шаблоны не поддерживают такие "нужные" вещи, как вынос кода в dll, полиморфная рекурсия и прочее дерьмо, которое годится для холиваров, но в реальной жизни не используется. Реально интересно то подмножество, которое разрешимо статически, и иногда - экзистенциальные типы, гетерогенные списки хуярить. Вот оно в Rust из коробки.
>Это понятно все.
Я отвечал на твой пост "А теперь прикинь: размер Кеша процессора 2мб, размер экзешника, не считая библиотек, 3мб, какова вероятность кеш-промаха?". Вероятность кэш-промаха у шаблонов минимальная, у косвенности - выше. По поводу "исходного тезиса" - его не я писал, но если приходится объяснять, какая имплементация ПП самая эффективная, то вряд ли ты его понимаешь на том уровне, на котором его должен понимать. Это хаскеллисты пусть боксят все и словари пихают туда-сюда, а тем, кто GC выпилил ради скорости, это зачем?
А не то, что ты не способен осилить статью на рувики про ПП. Это похуй.
>Ту исходный тезис был в якобы непонимании сишниками параметрического полиморфизма...
Мой исходный тезис в том, что сишку должен знать каждый, а кресты - это узкая специализация. Поэтому сишка должна быть популярнее - ну это следует из теории множеств, любой хороший с++ программист знает си, любой хороший java программист знает си, но java программист не обязательно знает с++. Вот и все, что я подразумевал под осиляторством.
>Но в таком случае я могу запилить и в сишке набор макросов для шаблонизации функций, ичсх, эффект будет тот же...
А шаблоны, как думаешь, как появились? Страуструп увидел паттерн в сишном коде и запилил их. Паттерн - популярный, именно это и делается в GNU Scientific library, к примеру:
https://github.com/ampl/gsl/blob/master/cblas/dsymm.c
https://github.com/ampl/gsl/blob/master/cblas/source_symm_r.h
Это потом оказалось, что они мощнее на порядок.
Эффект тот же не будет, у препроцессора куча недостатков, потому что макрос - внешняя по отношению к языку сущность. Он и в рекурсию не может без костылей, и с отладчиком плохо дружит (хотя может код с include и дружит - не уверен), и код приходится или разносить на мелкие файлы, или терпеть \ в каждой строчке.
Самое главное, я забыл, нахуя. А, потому что кресты сложные. А это - http://stackoverflow.com/questions/319328/writing-a-while-loop-in-the-c-preprocessor просто. Да уж нихуя, сложность тут как минимум одинаковая, только удобства с компилятором больше. А можно зделоть - на сишке даже libcello.org можно сделать.
Только попробуй сделать что-то уровня boost::units. Штука, которая без оверхеда в рантайме добавляет тебе проверку, не складываешь ли ты метры с килограммами, и охуенно, просто невроткосмически ускоряет разработку кода с большим числом математических формул.
>И параметрическия полиморфизм тут не при чем, ибо в данном случае у нас адд-ток...
Из тру-ПП по Хиндли-Миллеру шаблоны не поддерживают такие "нужные" вещи, как вынос кода в dll, полиморфная рекурсия и прочее дерьмо, которое годится для холиваров, но в реальной жизни не используется. Реально интересно то подмножество, которое разрешимо статически, и иногда - экзистенциальные типы, гетерогенные списки хуярить. Вот оно в Rust из коробки.
> любой хороший с++ программист знает си, любой хороший java программист знает си,
Да что ты, и все обоссанные процедурки сишной библиотеки тоже знает?
При чём стандартная библиотека тут вообще? Ты знаешь много цпп/жава программистов, которые прям полностью знают стандартную библиотеку? Прям без доков и интернета сядут и что угодно напишут?
В джяве надо знать только название класса, и он всегда находится в области видимости, т.е. начинаешь набирать File и тебе тут же находит его, и по названию методов сразу понятно, что они делают.
А в сишке приходится гуглить сначала название хедера, потом магические процедурки с названиями либо "open" (что открыть, из какого это файла - догадывайся как хочешь), либо "htons"/"atoi"/"mbstowcs" и т.п. (абсолютно нечитаемый набор символов).
> Ну и зачем это нужно?
Поверь, нужно.
XXI век на дворе, скоро HKT завезут в каждый промышленный язык включая Java, а зависимые типы станут пригодны для борща. Если сишники не поспешат осилить хотя бы полиморфизм, то удивительный мир программирования просто станет слишком сложен для их понимания.
Нахуя все это нужно? Раньше и без этого писали заебись ПО.
Не часто вижу в /зк посты которые интересно почитать. Чем занимаешься? Зачем раст учишь? Думаешь использовать где-то?
>>575179
С каких пор File находится в области видимости по умолчанию? Ты уверен что например хочешь использовать именно File, а не Files например? То есть в любом случе нужно знать API или гуглить, и обычно если ты часто используешь какие-то функции, они сами запоминаются, что в джаве, что в С.
>>575217
>Раньше и без этого писали заебись ПО.
Разработка ПО никогда не была чем-то что можно назвать заебись. Всегда были тонны костылей, багов, уязвимостей, сорванных сроков etc. Новые фичи нужны для того чтобы этого говнища было поменьше.
Милый друх, в этом треде уже обсосали и настоящий и адд-хок полиморфизм, и то, что полиморфизм применим к любому языку.
В Си в обозримом будущем не будет перегрузки функций (это единственная гипотетическая возможность сделать его в Си искаропки), deal with it.
Адд-хок в смысле.
Например, отладчики, умещающиеся в 64 кб, и дизассемблеры. Ты такое в жизни не напишешь. Алсо, луркай демосцена.
Не для бедных. Это переносимый асм, язык который позволяет задействовать почти все возможности железа, язык, на котором описывают abi, пишут стартап-код и прочее.
Ну например, конпеляторы Си есть практически под все, в отличии от.
А еще в крестах пиздос с именованием символов на низком уровне.
Ну и исторические причины: крестобляди в основном занимались прикладным кодингом, а системный осилить не могли до недавнего времени, когда появились ядра L4, писанные на крестах...
Но было уже поздно.
Потому что ранее, в условиях ограниченного железа, из него вырезалось нахуй всё и оставался си с классами, порой и без виртуальных методов. А так, используй, чо.
Не благодаря, а вопреки же. Зиллионы въёбанных человекочасов на тестирование, отладку, не говоря уже о поддержке процедурных легасиполотен на говняшной. Просто вариантов не было.
Штук 20-40 самых частых знает. В любом случае, даже если 10% java-программстов являются хорошими (что, скорее всего, завышено), это делает С популярнее, чем С++.
А еще не стоит забывать историю: Си изначально создавался для писания ядерного кода, а кресты создавались, как расширенный Си для прикладного кодинга.
То есть хитрый план дохлого страуса заключался в том, чтобы зохавать аудиторию прикладных программистов, пишущих на Си, конец немного предсказуемым: быдлокодеры ушли писать прикладные программы на крестах, а системщики остались на Си.
Что скажете про пистон? Вот, вроде бы, что-то клепают несколькими тысячами строк в неделю, постоянно какие-то библиотеки создают, абстракция на абстракции. Библиотеки какие-то рандомные.
А выхлоп какой? Даже собственные «пистоновские» игры пишут не используя из создаваемых библиотек нихуя.
Чувак, создающий отдельно свой велосипед, хотя бы конкретно что-то разрабатывает, а не скачет с одного на другое.
А потом было упущено лет 20 времени, и менять что-либо стало поздно, ибо накладно, вон некрософт попытался запилить свою сингуларити на дотнете, и че?
Эту же ошибку сделали в мозилле, раст надо было выводить до появления ведроида, и следом сразу же мобильную платформу на нем (хотя бы с линупс-ядром, которое потом переписать), а счас рыночек уже порешал. Позняк метаться.
Ну да, софт типа САПР пишут быдлокодеры, не то, что швитое ведро с такими-то kernel lists - небыдлокодеры.
САПР, это капля в море говнокода, это очень дорогое удовольствие, которое могут позволить себе только монополии, у них есть деньги на хороших программистов, и есть годные HR, которые оставят 95% идиотов на морозе.
Когда создавалась большая часть современных CAD, на рыночке труда господствовали крестобляди, а ООП было мейнстримом.
Хаскель забыл. Здесь и о нём периодически вспоминают.
>САПР, это капля в море говнокода
Да нет, это типичные С++ проекты. Шаровары уходят в веб, энтерпрайз - в управлемые языки, а C++ остаются САПР, программы для обработки изображений, видео и звука, llvm, быстрые части machine learning (конвертеры, feature extractor'ы), LLVM, V8. Браузеры, наконец. И все это пишут быдлокодеры?
На самом деле нет. Быдлокодер - это байтоеб, который прикрывает тем, что "так тормозить будет на моем калькуляторе" свое неосиляторство. Для сишника структура данных сложнее списка - уже событие. Строки - это char buf[ХАПНЕМ_ПОБОЛЬШЕ]. Шаблоны по мнению сишника тормозят, да и вообще мы по старинке, на ассемблере... Ну и ведро оси - как предел мечтаний софта, недоступный этим прикладным быдлокодерам.
Что касается ведер - интересно, сколько % от проектов на гихабе составляют ведра? И сколько там ведер в сравнении, например, с json-пасерами?
А я байтоеб. И люблю видеть игры в несколько мегабайт или даже меньше. И люблю видеть Blender в достаточно маленьком размере. Я люблю видеть программы, которые работают на медленном интернете. И я ненавижу разработчиков, которые, что б показать квадрат Малевича пихают огромные библиотеки!
KDE, пишут быдлокодеры, поэтому плазма падает.
3g-стек андроида писали быдлокодеры-индусы, потому он и не взлетел.
osmocom/openbts пишут быдлокодеры, которые не читали рекомендации ITU, поэтому там сигнализация обрабатывается криво, поэтому там не все модели телефонов могут работать, а еще там умудрились устроить гонки на этапе инициализации приложения, в результате это говно может упасть , не начав работать... а как оно падает во время работы - отдельная тема.
Браузеры пишут быдлокодеры, иначе, откуда там столько уязвимостей, и почему каждая новая версия тормозит все сильней?
Бесчисленные игори пишут быдокодеры, кусок поделия от valve лежит на первой странице на говнокод.ру.
И это только там, где исходники открыты, а что с закрытым софтом - тайна, покрытая мракком!
САПР, внезапно, тоже пишут быдлокодеры, каждая новая версия тормозит все сильнее, а ядро было написано в 80е годы бородатыми дядьками, которых уже нет.
Но тут инфы мало, хотя, если судить по freecad, которую пишет один человек, стабильность там появляется только в результате экстенсивного тестирования, которое могут себе позволить с десяток компаний во всем мире.
Я не могу понять, чего тебе так печет от того, что кресты-быдлоязык?
Я смотрю 54 растерам за 1610 коммитов удалось вывести на экран красный треугольник, неплохо, неплохо...
> так, что тут
> ага, скриншот с треугольником
> ну все, пойду на двач, троллить этим растеров, ой как весело будет
>Известные пректы:
> 1. Вывод на экран красного прямоугольника (кроссплатформенно)
>Вам нипонять!!!11
Ну ладно, расскажи нам о преимуществах этого движка над остальными движками, выводящими красные прямоугольники.
Я бы помог, но меня отпугивает название.
Смотрите: они в качестве hello world запилили красный квадратик, ну тупые)))
Что там опровергать? Говнопост уровня /s/ про падающую плазму и уязвимости в браузерах, троллинг типа "тебе печет гыыы)".
Диалог перечитай. Я изначально согласился, написав "Ну да, софт типа САПР пишут быдлокодеры, не то, что швитое ведро с такими-то kernel lists - небыдлокодеры.". На этом можно было закончить, потому что если этот даун с его "А теперь прикинь: размер Кеша процессора 2мб, размер экзешника, не считая библиотек, 3мб, какова вероятность кеш-промаха?" считает себя небыдлокодером, то я в быдлокодерах посижу с зарплатой и интересными проектами. Остальное - лишнее уже. На уровне фактов уже утопил несчастного байтоеба.
Судя по этому треду, самые длинные простыни пишешь как раз ты.
При этом ты не забываешь обкладывать собоседников хуями.
Ты уверен, что бугурт не у тебя?
С этим в /psy/.
Дедушка, ты?
Основное преимущество раста - пеар... ЛОЛ.
Ну и по проблематике хорошо завернул про атлета на тонких ножках...
Но, мне кажется, упустил важные моменты:
1. Неправильное позиционирование, ну не системный это языг.
2. Презрение к наследию среди разрабов языка и "сообщества": из-за дебильного позиционирования рустеры считают це и цепепе "легаси-говном" и "нинужно", забывая, что это чуть менее чем 100% системного кода на сегодня.
"Мы наш, мы Новый мир построим!", - эльфы, блджад!
Про го тоже по делу - не стали лезть в системное программирование, сосредоточились на сетевых сервисах, все правильно сделали.
Про ди, - или хорошо, или ничего...
школьник-кун
Сам то он почему в D не добавил обратной совместимости с цпп?
Да кто ж его знает???
Может быть причина в том, что он является лишь соавтором языка, а основной автор - Уолтер Брайт?
>пеар
Ну это он так оправдывается почему D не взлетел, типа вот видите Go и Rust пиарят, если бы и у D такое же было то мы бы ого-го. А на самом деле вся проблема в проебе на ранних этапах развития языка.
Хотя нужно заметить что доля правды в этом есть, сообщество Rust поднимало неплохой хайп при выходе 1.0, например, да и сторонники Go тоже не отстают.
Двачую за D. Хотя сейчас и стандартная библиотека одна, и стабильность завезли, и нормальных компиляторов, но момент упущен. Тем не менее все равно около половины своих проектов на ди пишу.
>>577901
Покажи что за проекты.
Ящитаю, что с Ди момент упущен не был как раз, просто была выбрана неверная модель разработки.
Вместо того, чтобы пилить фронтэнд к gcc и библиотеку, афтар решил сделать мокрописечный конпелятор, на который было выделено мало ресурсов, а поддержки сообщества не было...конец немного предсказуем.
Пацаны, где скачать полноценный стандарт (язык вроде не стандартизирован, но хоть бумагу, на стандарт похожую), чтоб без соплей, ибо знаю окамл и сишку, не хочу читать про хелловорды?
Читай про хелловорды (https://doc.rust-lang.org/book/), концепция владения не самая тривиальная штука.
>Они там MIR начали пилить?
https://github.com/rust-lang/rust/pull/29757
First MIR optimization pass. For now, this pass does some easy transformations.
Как-то так.
>Вот я про хеллоуворды читал, и ты так делай!
В общем-то анон прав, ничего плохого в trpl нет, там все по делу и достаточно сжато.
Еще есть Rust by example (http://rustbyexample.com/ ), Learning Rust With Entirely Too Many Linked Lists (http://cglab.ca/~abeinges/blah/too-many-lists/book/README.html ) и The Rustonomicon(https://doc.rust-lang.org/stable/nomicon/ ), но его нужно читать уже после того как узнаешь язык.
2. Какое же презрение? Там есть удобное ffi, я даже написал немного биндингов.
Вынужденная временная мера, ибо ноулибс.
Если "безопасный" код линкуется с "небезопасными" либами...ну ты понел!
С момента релиза 1 версии языка прошло довольно мало времени, а уже успели наплодить несколько ОС разной степени говенности. Это говорит кое что о намерениях "сообщества".
Ну я это видел и не понял что конкретно они имели в виду: MIR готов и они его оптимизируют ("optimization of MIR") или они его только начали делать ("MIR ~ optimization").
> но его нужно читать уже после того как узнаешь язык.
И его тоже:
> Learning Rust With Entirely Too Many Linked Lists
Да ты прав, давно читал и почему то казалось что там все с самого начала разжевывается.
Вроде всё встало на свои места. Т.е. они MIR и как бы сделали, и он как бы сейчас тупо дублирует исходный код, а исправление - как раз то, для чего он и создавался. Я просто думал, что они этот код будут вообще в ином виде изначально представлять.
Иди нахуй со своим говном, js'ом и браузерами. Заебали.
Посоветовали мне связку Rust и MSYS2, так как там есть бинарные пакеты и ты просто устанавливаешь нужные тебе библиотеки одной строчкой и все работает. Установил, оказалось что все так и есть, только одна проблема, раньше при использовании freetype, например, рядом с моим бинарником лежало две библиотеки, а теперь простейший пример с выводом одного символа в консоль превратился в пикрелейтед сборище библиотек без которых он не работает.
Может есть здесь кто-нибудь кто использует Rust с MSYS2. Хотелось бы узнать это вообще норма, или я сделал что-то не так?
http://servo.org/
Кажись, допилили до некоторой степени, раз его запостили.
https://github.com/lrs-lang/lib
Неофициальная linux-only реализация стандартной библиотеки.
Шел 2015 год, мы избавлялись от кроссплатформенности чтобы сделать маленький исполняемый файл.
Посоны, посоны, а давайте запилим вторую стандартную библиотеку, прямо как в D, ничего же плохого не случится.
Александреску, ты ли это? Что, ди не взлетает, так ты решил палки в колёса конкурентам ставить?
Ну подумаешь хеллоуворлд всего лишь 32 гб памяти жрёт
>2015
>не иметь дома кластера с 500 тб памяти
Если бы сейчас активным был интернет всего и децентрализированые вычисления(также, известные, как туманные), то мне бы было насрать. Но ведь, не у всех 100500 памяти м хранилище. Я сожалею за временами, когда трава была зеленее, а программы маленькие. Честное слово, напихают кучу библиотек, а потом ябуцца в жепы. Но, я желаю удачи Servo и надеюсь, что он станет хорошим движком, а это лишь временно такой размер.
> Но ведь, не у всех 100500 памяти м хранилище.
Даже каких-то 4 ГБ на всё хватает (кроме разве что джавы), а сейчас уже 16 ГБ чуть ли не в каждой кофемолке.
Вот именно, поэтому руст не нужен, будем писать робаст скалебл тырпрайз круды на джяве™, жрущие по 20 гигов памяти
Ладно бы они просто гигабайты жрали. Но ведь у них ещё и сборочка мусора мир останавливает.
Статичная сборка. Если не подключать стандартную библиотеку, размер будет намного меньше. Но и работать не с чем будет.
+ отладка, как писал >>579716. Только тут надо ещё сказать, что даже в релизных версиях раньше содержалась информация для отладки (сейчас – не знаю).
В любом случае, скорее всего в будущем размер оптимизируют, просто сейчас это явно не самая приоритетная задача, им сейчас главное сделать всё, чтобы Servo хорошенько выстрелил и решить задачи, которые поставили перед ними клиенты, иначе пизда финансированию разработки.
По крайней мере Мозилла активно нанимает всё новых и новых разработчиков каждую итерацию для языка и объявила о наеме дополнительных разработчиков для Servo. Т.е. явно не пустые затраты.
Я правильно понимаю, trait - это аналог классов типов, а impl - аналог instance в хаскеле?
> This document collects the emerging principles, conventions, abstractions, and best practices for writing Rust code.
Вроде бы не видел нигде упоминания этого. Выглядит черновиком. Но как раз искал нечто подобное.
>Вроде бы не видел нигде упоминания этого
А я видел. https://github.com/rust-lang/rust/tree/master/src/doc/style
Кстати, может кому пригодится http://science.raphael.poss.name/rust-for-functional-programmers.html
Подмойся, Маня
Я сферический долбоеб.
Я удалил git пакетным менеджером, но настройки не подключились и cargo плюет мой удаленный аккаунт на github в Cargo.toml. --vcs none не работает.
http://doc.crates.io/config.html
Выстави name и email, соответственно.
> Я удалил git пакетным менеджером
Но зачем?
Ибо долбоеб, поначалу неразобрался.. А можно как-то при создании проекта сделать, что б не ставило в конфиг?
Или ты хочешь, чтобы вообще не было указано автора? Это поле обязательное вроде как.
Ну и создай `~/.cargo/config` в котором будет
[CODE]
[cargo-new]
name = "Anonymous"
email = "anon@localhost"
[/CODE]
Еще одни поехавший у которого "нормальное" это кодогенерация из комментариев или заменой текста прямиком из 80-ых годов?
В расте есть замечательные hygienic macros.
Почему тогда hygienic macros нихуя не могут, кроме простейших случаев, и пацаны хуячат препроцессинг на другом языке? https://github.com/servo/servo/tree/master/components/script/dom/bindings/codegen
Или ты не понимаешь, почему это плохо?
https://github.com/servo/servo/tree/master/components/script/dom/bindings/codegen это уже не препроцессинг, это уже целый мини-компилятор нахуй. Можно конечно это было оформить это как плагин к rustc, но видимо на питоне удобнее было.
Дело не только в удобстве, плагины к компилятору до сих пор не стабильны.
Стоит с этого начинать?
В 3д движках не нужна асинхронность и йоба-работа с памятью, поэтому С++ достаточно.
Потому что раст вышел только пол года назад, а для крупных проектов инерционность порядка 5-10 лет.
Кроме того, зачем тратить кучу ресурсов на переписывание, когда их можно потратить на развитие существующего кода. Другое дело, что если кто-нибудь возьмет и вложится в новый 3д движок, как Мозилла в Серво вложилась.
Без понятия. Раз ты врос - попробуй, отпишись, может и я вкачусь
Пока хуево. Но спонсирует всё это дел Samsung, как я понимаю, которой как раз ведроид и нужен, так что должны запилить нормально.
Коммиты в rustc и стандартную библиотеку не принимаются, если они не проходят тесты на андроид билдботе http://buildbot.rust-lang.org/builders/auto-linux-64-x-android-t
Так что должно быть стабильно.
Но может быть неудобно, как с любой кросскомпиляцией.
> Долго собирается, большой декс,
И?
> зачем мне менять jvm на jvm?
Затем, что не джяваговно, а без джвм будут только анальные костыли.
Когда смотрю код опытных разработчиков, создается впечатление, что чего-то упускаю.
А может просто шизик.
Хаскель98 погляди. Во всякие йоба-расширения и котоморфизмы лезть необязательно.
Сказал горячий поклонник другой сырой параши, у которой "стандарт" изменяется со скоростью мутации вирусов гриппа.
Извини, братиш, принял тебя за рустера.
Лол. Ты отстал. Где-то на код.
Я вообще программирую на LOLCODE.
> Так даже лучше, только выиграли
> А в C++ ещё хуже
> А давайте напишем макросы на эту тему, нужно больше макросов!
> Да тут просто много повторений, можно было бы сделать абстракцию и было бы лучше
> Зато читабельно, любой посторонний поймёт!
Какой пиздец
Всё-таки насрал блять
Неуловимо напоминает Haskell Dimensional.
Ты еще не видел кучи говна конструкциями типа
#[cfg(target_is = Linux)]
И платформеннощависимый код вперемешку с кросс-платформенным в одном файле.
Мммаксимум говноедство!
Работы на расте нет и не будет.
Нет тонн легаси синтаксиса и выстрелить в ногу сложнее.
Работа уже есть. Правда пока только в Мозилле)
>Работа уже есть. Правда пока только в Мозилле)
Работа есть а вакансий уже нету? :)
>Нет тонн легаси синтаксиса
Зато есть ежемесячно ломающаяся обратная совместимость. Вообще, синтаксис раста на хаскело-перловых гурманов, только у тех он намного красивее, вот честно.
>выстрелить в ногу сложнее
Написать обычный никуда не стреляющий код тоже сложнее, т.е. прикладной софт отпадает, 2 стула же. С всевозможными проверками границ массивов и стандартной библиотеки завязанной на всевозможных умных указателях он ещё и для риалтайма слабо пригоден, в хуйлоадах вроде поисковиков не сильно лучше языков с гц. Драйвера на нём писать с правилами владений - свихнёшься хотя там все поехавшие уже, лол.
Итог - язык для среднеуроенных вещей, вроде браузерного движка. Слишком узкая специализация, чтобы на нём реально была работа а не на уровне текущих вакансий по коболу/фортрану.
>Работа есть а вакансий уже нету? :)
В гугле забанили? https://careers.mozilla.org/en-US/position/ozy21fwU
>Зато есть ежемесячно ломающаяся обратная совместимость.
Не гони, после 1.0 не видел, чтобы кто-то жаловался, что у него что-то поломалось.
>С всевозможными проверками границ массивов и стандартной библиотеки завязанной на всевозможных умных указателях он ещё и для риалтайма слабо пригоден
Пфф, у Раста нулевая стоимость абстракций.
Ага блокировки типа mutex/rwlock с проверками в рантайме, которые тут уже обсуждали, имеют НУЛЕВУЮ, блядь стоимость абстракций!
>Не гони, после 1.0 не видел, чтобы кто-то жаловался, что у него что-то поломалось.
https://github.com/rust-lang/rust/issues
Тут какбы намекают, что таки регулярно ломается
> Пфф, у Раста нулевая стоимость абстракций.
Тогда почему сконпелированный хеллоуворлд весит 3 мб?
Вот хорошая статейка, мне помогла разобраться.
http://manishearth.github.io/blog/2015/05/27/wrapper-types-in-rust-choosing-your-guarantees/
Это есть в trpl https://doc.rust-lang.org/stable/book/choosing-your-guarantees.html
>>598183
Почитай что такое абстракции с нулевой стоимостью, наркоман, по твоим рассуждениям и кресты не пригодны, ведь там, ой-вей, есть указатели с накладными расходами в рантайме.
Сам ты накоман.
Исходный тезис был:
>Пфф, у Раста нулевая стоимость абстракций.
Ну то есть ВСЕГДА, ВООБЩЕ ВСЕГДА!!1
Ну и про #nogc и #memorysafety как бы тоже
пиздеж, обсуждалось ту и у утоновшем треде!
Достаточно того, что политота на картинке, так ещё и здесь разводишь по поводу языков. Собственно, программы на Rust тяжелые, ибо в современных ОС пока нет стандартной библиотеки Rust, как libc, например. Можно указать параметры(в языке, в компиляторе) и без библиотеки. Да и библиотека это громко сказано, так, некие безопастные обертки малого размера. Но, для мелких устройств есть целый раздел по программированию без библиотеки.
Стоимость абстракций стремится к нулю. Конечно, если взять некий отдельный случай, специально найти, то можно и показать, что этая Вселенная говно, ибо не бывает идеальных вещей.
Не забывай, что стабильный Rust достаточно молодой, но при этом есть нормальные сервисы, нормальная стандартная библиотека, в целом, стабильность, а также, дружественная английская поддержка в виде различных разработчиков. Конечно, Rust все-же не идеален, но мы прощаем ему это и дорабатываем.
В C++ же не смотря на годы, нет пакетного менеджера и прочих свистелок и перделок. Да и нужных вещей нет. Впрочем, C++ общество, похоже на мусульман. Оскорблять пророков и других запрещено. А некие C++ последователи могут и зарезать.
В общем, Rust выбирает меня! Ну ты понел
Мимо
А зачем тебе библиотека в ОС, Маня? Неужели нельзя конпелировать только используемые части библиотеки?
Ну, во-первых, - линковать.
Во-вторых, чтобы не было лишнего.
В-третьих, белые господа в качестве системного выбирают не раст и даже не кресты:https://www.researchgate.net/publication/262172784_From_L3_to_seL4_What_have_we_learnt_in_20_years_of_L4_microkernels
Угадай, почему?
>Ну и про #nogc и #memorysafety как бы тоже пиздеж, обсуждалось ту и у утоновшем треде
И что вы там обсуждали? Небось с задором и юношеским максимализмом провозглашали что memory safety нет раз есть возможность что-то испортить в одном случае?
С memory safety такая же ситуация как и с zero-cost abstractions, они не включает в себя все-все на свете и всегда абсолютно бесплатно. Memory safety провозглашается лишь для определенных типов наиболее часто встречающихся классов ошибок, а не "у вас никогда-никогда не будет проблем с памятью", и то, на данном этапе если очень захотеть то все эти механизмы можно обойти. Но это совершенно не говорит о том что memory safety нет.
ЛОЛ! А вот и сверхманевренность истинного рустера!
Сначала пишем #nogc #memorysafety, а потом оказывается, что и сборка мусора, фактически, есть, и memorysafety провозглашается не для всего и не всегда!
Для опревержения утверждения достаточно предоставить хотя бы 1 пример не выполнения данного утверждения. Это формальная логика, Карл, логика!
Обсуждали то, что можно легко устроить утечку памяти, а конпелятор даже не пикнет о небезопасности.
Обсуждали, что в расте используются те же примитивы синхронизации, что и в других языках/либах, и работать с ними надо так же. Enjoy your deadlocks, LOL!
И да, рустеры не осилили реализацию паттерна "монитор", который позволяет работать с блокировками автоматически.
Ага, мамкин максималист значит, если не серебрянная пуля, то не нужно.
Языки в которых есть хотя бы умные указатели считаются языками со сборкой мусора, а кросплатформенных не существует вообще ведь можно представить хотя бы один пример с платформозависимым кодом, формальная логика. Ну, ясно, че.
Но это рустеры начали позиционировать свою ~Наташу~ парашу, как серебряную пулю! А когда их начали ловить на несостоятельности их основных тезисов, начались маневры в духе пораши. Пикрил как бы намекает.
https://twitter.com/rustlang/status/674243649987850240
Мозилла будет добавлять в Gecko код Servo в 2016 году.
Круто конечно, только это просто обещания, они обещали и альфа версию браузера на серво выкатить в 2015 году с поддержкой вин и линуха, только где это все?
Как же бы без абстрактнойпроксифабрики живете
Они говорили, что начнут делать некий гибрид Gecko и Servo, для демонстрации возможностей. Тащемта, постить сейчас с Servo, вроде как, можно.
Also, ложная «тревога» по поводу добавления компонентов. Да, добавлять компоненты будут, но просто мелочь всякую. Вроде как если Servo будут выпускать в каком-то браузере, это уже будет не Firefox. Так что соснули.
>В-третьих, белые господа в качестве
Ты хоть бы ссылку нормальную дал без регистрации и смс:
http://flint.cs.yale.edu/cs428/doc/L3toseL4.pdf
> "You are absolutely certain you really, truly, want a doubly linked list.".
> С итерацией по элементам, порядком и без ненужного копирования контейнера при удалении/добавлении элементов.
Тебе правда нужен.
Без ансейфа*
Тебе сортированное дерево или список нужен нужно.
Да ты поехавший. Каким боком течь памяти вообще к безопасности относится? Иди учи матчасть, школьник.
О, закукарекал!
cargo new --bin test && cd test
cargo build --release
du -h target/release/test #=> 472K
Сам хотел запостить в день релиза. А что поменялось в языке? Я вижу лишь изменения в карго, хоть и существенные.
Ах да, для чистоты эксперимента можешь собрать оба варианта с динамической компановкой. У меня оба бинарика весят 8КиБ.
Как насчет --ffunction-sections, -fdata-sections, -Os, -s для компилятора и -gc-sections для линковщика?
Sometimes достаточно. Да и выходы за границы массива в том случае тоже возможны...
Про какой случай речь идёт-то?
Да играться можно как угодно, но суть не поменяется — без статической линковки оба бинаря одного размера.
https://users.rust-lang.org/t/manually-implementing-a-heap-to-overcome-safety-rules-considered-harmful/398
Вот тут вроде че-то есть, ищи.
хде это такое задали?
match next {
&mut Some(ref mut n) => n.add(value),
_ => *next = Some(Box::new(Node::new(value)))
};
В чём ошибка была, думаю сам поймёшь.
Но вообще ты делаешь это довольно убого, но улучшать смысла нет по простой причине: всё равно нужно будет переписывать на цикл.
А ещё вместо `ref` можно использовать .take() у Option. Но лучше таки перепиши на цикл.
Еще один дефектный с пиздой под носом решил поделиться своим охуенно нужным и важным мнением. Такое озлобленное говно нужно в гуманных целях пристрелить, как блохастого пса, что бы не вертелся под ногами.
Ну-ну, гораздо лучше, чтобы оно нахуй упало из-за stack overflow без балансировки, ага.
Уже понял.
Как же я проигрываю с тебя, омега-обосранец. Ты почаще себе перед зеркалом повторяй, что ты не всратый омежный унтерменш, гляди тебе шлюхи спидозные начнут давать. Убейся, немужчина.
Лол зачем же ты так вдавил ногой этого червя обратно в землю? Он же сейчас с ебалом непонимающего дауна начнет в панике бегать и вертеться а потом смачно просрется под себя и сдохнет.
Лол, у обиженной на меня проткнутной омежки опять начались месячные и она принялась тужиться и выворачивать реальность наизнанку. Впрочем, она уже давно так серится и аутофеллирует.
Вот это бомбануло у господина полицейского.
А чё тут бампить-то? Про Ъ писать особо и нечего.
Поясните за rust?
Для чего его юзают какие-то крупные предприятия и корпорации?
Т.е., если я его выучу и пойду на работу, что я на нём буду писать? И насколько он сложный в освоении?
> если я его выучу и пойду на работу
Не пойдёшь, ибо пять минимум в ходу не будет ещё.
> что я на нём буду писать?
то же, что и на крестах/сях: сложные высоконагруженные приложения, либо embedded.
> И насколько он сложный в освоении?
Соб-но это его главный минус - сложность в освоении. Но это именно сложность, а не трудность, как в крестах.
> то же, что и на крестах/сях: сложные высоконагруженные приложения, либо embedded.
Это какие-то необоснованные влажные мечты.
> Это какие-то необоснованные влажные мечты.
Ну, ржавчина метит именно туда, а получится или нет это другой вопрос. Но скорее всего нет, ибо средняя масса программистов - тупое быдло, которое просто не осилит даже основные концепции
Расскажи это гуглу
Русскоязычный сайт для разработчиков на Rust и заодно подборочка рускоязычных ресурсов по расту.
Попробуйте использовать язык в ваших сообщениях.
Бедный си-пидор. Помянем.
Алсо, выше тредом пуревасик ебёт все языки, где ваш бох теперь, растаны? КУХКУДАХ КОКОКОК
На месте, а почему вы спрашиваете?
Мод без мозгов - горе борде.
Анус свой помяни, пес.
Я пеарил раст, как мог, извинити /b/ратиши, так сложились обстоятельства.
школьник-кун
Все мы русские, Мыкола.
Вообще, по хорошему, было бы достаточно удалить те пару постов, зэкач и так полупустой.
> Два итератора (mut и immutable) по одному контейнеру одновременно.
Полагаю, что никак, так как это ломает memory safety.
Как-то, непонятно в какой-то момент память выделяется на стеке, а в какой на куче. Как создать изменяемый массив в куче? Не вектор, а именно массив. Почему Box::new(X) вначале создает X в стеке, а потом перемещает егов кучу. Соответственно нельзя сделать X очень большим. Как сразу создавать что-то в куче?
Есть ощущение что на все эти вопросы есть простые ответы, но пока многообразие "указателей" не дает разобраться.
Ну и самым главным тёмным пятном являются параметры времени жизни переменной. Вроде бы понятно о чем речь, что это такое, но не совсем понятны сиутации когда это именно ручками надо прописывать. Те примеры которые я видел, выглядят так как будто компилятор мог бы и сам догадаться о времени жизни переменной.
> Как сразу создавать что-то в куче?
В unstable можно было бы сделать нечто вроде https://gist.github.com/anonymous/de7921e2e62d9c223492.
> Те примеры которые я видел, выглядят так как будто компилятор мог бы и сам догадаться о времени жизни переменной.
Компиляторы обычно не столь умны, как нам хотелось бы (тем более, что выбор не всегда однозначен).
Просто ставь, когда в этом есть необходимость.
По началу не факт, что это реально необходимо. Может просто-напросто значить, что что-то делается не так и можно сделать как-то проще.
http://codrspace.com/buntine/aha-understanding-lifetimes-in-rust/
Параграф: One last point
let people: Vec<Person> = …;
Не.
Если ты про наследование данных, то через Deref.
Но вообще, если тебе нужно наследование и речь идёт не об обёртках над ООП-библиотеками, то ты делаешь что-то неправильно.
Открыл посмотреть код на этом ващем хипстерском расте и после увиденного было решено - уж лучше 1с, чем это.
Кто в здравом смысле будет писать на этом языке? Синтаксис как у брэйнфака.
С сентября не видно прогресса. Они там что-то постоянно новое добавляют, но в основных библиотеках только версии библиотек, от которых фреймворк зависит, обновляются.
>>620198
Ты ещё скажи, что в функциональных языках синтаксис как у брейнфака.
Есть struct, например, сократить до str, то это уже будет строка.
Раст из функциональщины стащил паттерн матчинг и имутабельность, при этом он менее читаем эрланга и любого монадного высера на хачкеле. Дизайн синтаксиса - это реально пиздец, такого обилия шифтовых знаков даже в фп нигде не найдёшь.
>f.read_to_string(&mut buf).map(|_| serde_json::from_str(&*buf).and_then(serde_json::value::from_value))
ШТО ЕТО БЛЯДЬ ЗА ДЖЯВА!?!?!?! Ну пиздец! Ебал вашу мозиллу, переходите на питон.
В раннем расте было больше сокращений.
>>620495
> f.read_to_string(&mut buf).map(|_| serde_json::from_str(&*buf).and_then(serde_json::value::from_value))
> ШТО ЕТО БЛЯДЬ
Пример того, как писать не нужно, очевидно же.
> спойлер
В любом достаточно выразительном языке можно понаписать говнокода.
Раст здесь ничем особо не выделяется.
> хачкель
> C
> C++
Пиздос, зашёл в тред про раст. Решил начать изучение этого языка, но прибегает какая-то тупорылая скотина и начинает тут на весь тред бомбить, что раст говно и только C++, бля как же заебали.
Я твою мамашу-шлюху вчера хорошо поучил, если ты понимаешь о чём я.
Хорошо зделали, надеюсь когда нибудь оно появится в промышленных проектах. А пока остаются только кресты (лет еще как минимум на 30)
Я говорил с мужиком с работы, который еще ферритовые кольца для ЭВМ помнит, он на асме и плюсах пишет уже лет 20, стоит ли говорить ,что гуру плюсов дохуя? Он мне сказал, что раст ему очень понравился и почему-то у него есть ощущение, что через год-два он бы перешёл на раст.
Ни одной вакансии на хх.
Как что-то плохое сказал, моя мамка не спидозная шлюха с климаксом же, в отличие от твоей, манька-фантазёр.
нет, просто нет.
Компилятор нормальный когда завезут хотя бы. Пробежался по текущим - в gdc (самый крутой по оптимизации) не коммитили уже пол года, на ldc как и на gdc не билдится ничего из более менее полноценного инструментария D (типо vibe.d), dmd по умолчанию - уровень goвна.
Сборщик мусора сука БЛОКИРУЮЩИЙ, В 2016 ГОДУ.
Ни одна из IDE не поддерживает dub (местный cargo).
Как на этом нём писать вообще?
>Компилятор нормальный когда завезут хотя бы.
уже все готовы для продакшена, это не раст уж извините
>Сборщик мусора сука БЛОКИРУЮЩИЙ, В 2016 ГОДУ.
что значит блокирующий? стоп зе ворлд? так он везде такой (ну кроме азул систем, но за него надо денежки выкладывать), да-да маня это надо, можешь на досуге подумать почему.
>Ни одна из IDE не поддерживает dub (местный cargo).
dtd
>Как на этом нём писать вообще?
к реальным проблемам дэ твои вскукареки это не относится.
>стоп зе ворлд? так он везде такой
Он уже давно везде неблокирующий со времён java 6, даже в goвне, маня.
>что значит блокирующий?
Ну ты погугли, расширь кругозор.
>уже все готовы для продакшена, это не раст уж извините
Ну оно и заметно - vibe.d собирается только на dmd, который по бенчмаркам на уровне говна и проигрывает яве.
>dtd
Нашёл только ddt, и он работает, ок.
>к реальным проблемам дэ твои вскукареки это не относится.
Ну да, у него же нету щедрой мозиллы, которая проспонсирует разработку и пиар приманив ещё полсотни "опенсурс волонтёров" мечтающих полизать хуй и пойти работать в мозилу, и доведёт его до продакшен-реди состояния (по гитхабу там вообще всю активность создают Александерску с Брайтом, лол).
>Он уже давно везде неблокирующий со времён java 6, даже в goвне, маня.
сказочки пошли)
>Ну оно и заметно - vibe.d собирается только на dmd, который по бенчмаркам на уровне говна и проигрывает яве.
>бенчмарки
яснопонятно
>Ну да, у него же нету щедрой мозиллы,
в голосяку
Тут блядь про purebasic тред, со спорами на 400 постов vs гейдев дауна не понимающего предметной области вообще, в зк вообще ни о чём тявкать не стоит, лол.
>судить об программировании
сам-то джун поди?
дэ на сегоднящний момент лучший компилируемый язык, что бы там кто не кукарекал, а если говорить сухими цифрами, то го до дэ где-то около 60 лет человеколет, расту лет 5-6, си лет 900, с++ - около 10 лет
Мы всё поняли, уноси отсюда свой сишарп с унифицированным синтаксисом вызова функций и скопами.
Лучший компилируемый язык с неконкурентным гц, без единого нормального компилятора, без анализатора кода вообще и наконец нахуй не кому не нужный, на котором нету ни 1 крупного проекта.
ахаха маня снова ты)
ты же говорил про блокирующий гц, а тут уже конкурентный)) лел
>без единого нормального компилятора
dmd
> без анализатора кода
lol 4to?
>на котором нету ни 1 крупного проекта.
дефайн крупный проект, а то окажется что крупные проекты есть только в джае
>ты же говорил про блокирующий гц, а тут уже конкурентный
Да, вась, я повёлся на маркетинговую хуету и обосрался.
А в D конкурентного таки нету гугл на какую-то хуиту шиндовс онли кидает.
>dmd
Он на +-30% проигрывает остальным даже в хэловордах.
>lol 4to?
Ни 1 статического анализатора кода (гугл дал ссылку на какую-то хуитку 2008 года, сайт которой недоступен).
>дефайн крупный проект, а то окажется что крупные проекты есть только в джае
Крупные проекты даже на расте уже есть - см. шапку.
>А в D конкурентного таки нету
ты понимаешь как работает гц? ты понимаешь зачем он конкурентный, если нет то больше не кукарекай, а то мне смеятца надоаела)
>Он на +-30% проигрывает остальным даже в хэловордах.
> даже в хэловордах
только в хэловордах))
>Ни 1 статического анализатора кода (гугл дал ссылку на какую-то хуитку 2008 года, сайт которой недоступен).
это типо файндбагс? ты понимаешь что ты кек, ведь без етого я просто не могу програму писать)))
>Крупные проекты даже на расте уже есть - см. шапку.
мне кажется что крупный значит где-то используется,
мне кажется крупный это не тысяча звёзд на жыдхабе
мне кажется крупный это не на расте))))
Мне кажется, что ты - даун.
Мне кажется, что у тебя проблемы с мозгом.
Мне кажется, что твой уровень развития ниже киррилов из /гд.
Если для тебя следующий движок для замены gecko - небольшой проект, то "ты кек", мне кажется.
Твоя тупость засчитана. С тобой спорить - как хуярить дуб руками, всё без толку.
Лучше пойду выебу твою мамашу и насру ей в рот, поразмяв это всё говнцо хуйцом у неё во рту. Потом можно будет зарезать нихуй и вымазать всё её дерьмом, которое вылезет из неё когда она сдохнет.
А я тем временем притащу вот это: https://robigalia.org/
>Right now, only the absolute minimum for using Rust on seL4 is supported: building static binaries that can run as the initial thread at boot. See hello-world for an example of this.
съеби плёс)
пацаны киньте этот раст и скачивайте дмд, славьте Александреску!
на расте пишут но она не собирается)
а дэ это промышленный стандарт научных центров, и институтов.
обида плис)
> Rust; first appeared 2010; github active repositories 4383
> D; first appeared 2001; github active repositories 1749
маня плиз
>>622537
>судить по звёздочкам на жыдхабе
топкек просто))
ну давайте растоблядушки раскажыте за свой прозжоное говнонецо, как там боксинк хуёксинк, гринтредушки, покпок меморисайфети, покпок ноугц, покпок мозила серво)))
> ВРЁТИ
Няша, твоё александрескоподелие никому не нужно. На нём никто ничего не пишет.
Выучи наконец С++14 и покинь этот тред.
>На нём никто ничего не пишет.
> D; first appeared 2001; github active repositories 1749
кажетца ты пиздишь))))
ахаха растодети такие лол
Типичный фреймворк на JS имеет в 10 раз больше форков, чем всего есть проектов на D.
спасиба за инфу, я тута в прошлых третах видел какие там на джс репы, наверное и в ресте такие же)))
раст ето такой джаваскрипт2.0, только в названии джавы нету наверное поэтому и не взлетит в отличии от D, который уже летает и имеет минимум 3 компилятора, и промышленные решения во всех областях ну и ещё на нём мозилка пишет, а помните кто запилил джс??? таже мозила ахаха и теперь у всех непрерывный бугурт и сотка языков которые компилятца в ето говно))) ну вы понили что растилка токое же говно))))
а мне норм)
маня плиз)
go
https://www.reddit.com/r/rust/comments/32jmf8/stdthreadscoped_found_to_be_unsound/
школьник-кун
32 мб + какой-то libracer.rlib на 12 мб к нему идёт
Это, как бы, нормально?
----- ----- ------ -------- ---- ----------
Rustc 6246 562282 70078 139967 352200 3210 (0.91%)
Servo 548 185485 19017 27249 139217 1892 (1.36%)
cargo install cargo-count
cargo count --unsafe-statistics -l rs
Если считать файлы других форматов, то желательно добавлять --utf8-rule ignore
Только с C++ файлами пока неправильно считает из-за того, что разного формата (.ccp, .cc, .ccx, .c, .c++ и т.д.) считает отдельно.
Поясните по gnu и msvc версиям. В каких случаях имеет смысл ставить первую, в каких - вторую?
>Which version of Rust you need depends largely on what C/C++ libraries you want to interoperate with: for interop with software produced by Visual Studio use the MSVC build of Rust; for interop with GNU software built using the MinGW/MSYS2 toolchain use the GNU build.
ded language, ded thread
Вась, ну гугел.
https://doc.rust-lang.org/rustc-serialize/rustc_serialize/json/index.html#examples-of-use
Хотя структурку-то тебе все равно самому надо написать, в отличие от скриптоязыков.
Спасибо за информацию, отряд ванг уже выехал к вам.
Кебывай в гугл с такими насыщенными инфой вопросами.
Потому что ты, дебик, не хочешь ни использовать гугл, ни говорить что именно нужно, а остальные должны догадаться, чо наше солнышко хочет.
Ебать ты желчный, я написал что мне нужно, если упростить, то пройтись по полям структуры и присвоить им значения из моего конфига. Если бы мне была нужна сеарилизация из/в json я бы, возможно, так и написал. Если тебе было что-то непонятно то можно было просто уточнить, а не бугуртить тут.
Вот еще вариант, кстати http://stackoverflow.com/questions/29986057/get-fields-of-a-struct-type-in-a-macro
Напоминание: вы находитесь в зоне действия шариата Rust Code of Conduct. Проявляйте сдерженность и уважение к друг другу во всех случаях, кроме тех, если вы не разговариваете с неверным bigot white cis-gender shitlord https://www.rust-lang.org/conduct.html
> Private harassment is also unacceptable. No matter who you are, if you feel you have been or are being harassed or made uncomfortable by a community member, please contact one of the channel ops or any of the Rust moderation team immediately.
Пиздец, вот это швабода, ещё и предлагают писать доносы.
Вот и в раст каргокультисты набежали. Генераторы нужны раз в два года, можно и в ручную написать.
Генераторы вообще должны на уровне библиотеки разрабатываться, а не быть в ядре языка.
Они вообще не слишком-то нужны в системных языках, в отличие от функциональных попиздулек для мастурбации на жвм.
Ну если их нельзя реализовать на самом языке, то грошь цена такому языку.
Они недавно обновили КоК в соответствии с Contributor Covenant, который сейчас считается как бе "best practice" для опенсорс проектов.
Этот Contributor Covenant агрессивно продвигается трансгендерным фашыстом CoralineAda и командой социал джастис варриоров, которые всячески запугивают, добиваются увольнения и публично уничтожают тех, кто становится у них на пути.
Но руст же сложнее скалы разве что с хвостовой рекурсией не так просто проебаться, с таким же пиздецовым синтаксисом. Как его по твоей логике лгбт петушки осилили-то?
> Но руст же сложнее скалы
Разве что сложность уровня
>>636558>>638080
> Они вообще не слишком-то нужны в системных языках, в отличие от функциональных попиздулек для мастурбации на жвм.
Где связь между отсутствием генераторов как средства языка и его сложностью? всё равно оба вырвиглазистее чем C++
Так по факту какого оно пола? Я в этих терминах не особо разбираюсь.
Тот же Idris намного мощнее, но код на нём читать ещё легче, чем код на хаскеле.
Female gender, но male sex, очевидно же, биологический мужчина, который самоидентифицируется как женщина.
По факту это старый мужик с девочкой внутри, феменист(ка).
http://lurkmore.to/Fg#.D0.A1.D0.B2.D0.B5.D1.82.D0.B0_.D0.9C.D0.BE.D1.80.D0.BE.D0.B7.D0.BE.D0.B2.D0.B0
- наш отечественный аналог.
Они и не осиливают ничего. Пройдись по гитхабу таких петушков, там html/css/js параша одна.
Даже аргументировать не стану, уже за меня сделали и не раз. В прошлом вроде треде челик вбрасывал исходники двусвязного списка (или листа, хз) на си и расте.
Можно конечно сказать вот мол, он просто нитакой как все и он хароший, но это нихуя не адекватный ответ - с тем же успехом можно и собаку выебать и про брейнфак так же сказать.
Для осторожности, когда упоминаешь данных snowflakes, предпочтительно использовать термин genderqueer. Тогда у упоминаемых будет ниже возможность подать на тебя в суд, выбить из тебя твой дом, лишить работы и семьи.
http://www.youtube.com/watch?v=iKcWu0tsiZM (Eng)
http://www.youtube.com/watch?v=wNNwGeMTyQE (Rus)
Вроде бы Alex Crichton воинствующий коммуняка. Вытеснил всех инакомыслящих. Но там, скорее всего, вся Mozilla уже оккупирована пацанами из Сан-Франциско, раз Брендана Айка вытеснили. Но есть один плюс во всей этой движухе - маловероятно, что только одно имя компании язык прорекламировало язык. Среди молодежи США и Европы сейчас очень популярны социалистические и коммунистические идеи и бизнес на этом паразитирует. И, соответственно, компании, поддерживающие эти популярные идеи, получают нехилый пиар.
>>638786
Они деньги получают с лохов. На этом и живут. Скорее всего, даже неплохо. Не зря же всякие women's studies существуют.
https://en.wikipedia.org/wiki/Women's_studies
>>638790
Ну ок, братишка, раз для тебя упомянутый код был аргументом. Язык используется в 3.5 компаниях, поэтому никто тебя не заставит писать тысячную реализацию двусвязных списков. Вместо этого тебе предложат ===, if(a=0), sizeof(size_t), ++i + ++i, if error == null, free() и 1000 других заложенных в разные языки граблей.
http://www.jonathanturner.org/2016/01/rust-and-blub-paradox.html
>>638798
Это оскорбление по квазирелигиозным признакам, успокойся.
Из приведенного тобой говна неочевидна толька шутеечка с инкриминитетом. Если спросили бы что у меня там получится где нибудь на собеседовании - в ебло дал бы стулом.
В приведённом тобой высере челик рассказывает о том, что он подгорел как я от шутки про ++i + ++i, в расте эту проблему убрали выкинув её нахуй Александерску хуесос и у него хуёвое чувство юмора, в расте всё ок с безопасностью. Да, я с ним согласен, но код на расте всё равно нечитабельное говно. Даже код на C образца 89 года, где авторы не против были делать вот такие вещи http://ideone.com/X8gS4m код был читабельнее.
>Это оскорбление по квазирелигиозным признакам, успокойся.
Как что-то плохое сказал.
>предпочтительно использовать термин genderqueer
Русскоязычное население - одна из топовых по гомофобности публика, поэтому конкретно здеся можно писать что он джилопидор и не парится. Когда идёшь в CoCk-сообщество - лучше вообще игнорировать таких людей, если не хочешь чтобы тебя как илюшу забанили по жалобе трапа за название твоего проекта "climax".
Не дописал. Я про выделение памяти по принципу int ☆ a = (int ☆)malloc(100 ☆ sizeof(int));
>Вроде бы Alex Crichton воинствующий коммуняка.
s/Alex Crichton/Steve Klabnik/
Алекс милейший человек и от политики держится как можно дальше
Точно, я перепутал. Посмотрел список и не нашел там Клабника, поэтому первого написал. Алекс няша, да.
Никакой. Есть убогонькие, но очень читаемые (го, си, петон), есть конкретно перегруженные "публичные туалеты" (цпп, раст, скала), есть балансирующие между ними (д, ц#, явка).
Мне кажется, мы стали забывать, кто такой Стив Клабник
https://www.reddit.com/r/KotakuInAction/comments/39crhl/steve_klabnik_the_sjw_developer_who_got_curtis/
https://popehat.com/2015/06/10/two-kinds-of-freedom-of-speech-or-strangeloop-vs-curtis-yarvin/
https://gist.github.com/steveklabnik/7cd3267a631c4847c34d
http://www.breitbart.com/big-journalism/2015/06/15/a-tech-conference-that-bans-speakers-for-their-politics-must-be-consistent/
https://news.ycombinator.com/item?id=9694874
И почему разработка такого замечательного языка досталась такому говну?
>очень читаемые (го, петон)
Ага, и простейшее дейсвие размазано на два экрана. Это псевдо-читаемость, для неосиляторов
>конкретно перегруженные
Так теперь говорят вместо "мне лень учить, хочу попроще"?
Но ведь в питоне ограничение на 80 символов в строке, на два экрана не размажешь. Хотя __когда_вот_такие_названия_у_функций - да, много не напишешь.
> Так теперь говорят вместо "мне лень учить, хочу попроще"?
Да там дело не в учить. Изначально как-то было пофиг на это, запоминал и всё. Но ведь они одну и ту же хуйню позволяют писать десятью способами, кому как вздумается. Гибкость - хорошо, но в том-то и проблема, что большинству легче запомнить что-нибудь простое типа python, c и go, чем вникать в детали какого-нибудь раздуваемого c++ или rust'а. С одной стороны, меньше конкуренция, с другой - какой работодатель будет ебаться с языком, на который нужно потратить месяц чтобы хотя бы более-менее синтаксис освоить, не говоря о логике работы?
Вот был просто try!(huy()), теперь будет huy()?, try { huy() } catch { }, do { huy() }.
Мамаше своей дохлой помочись.
>>639195
Покпок, функциональщена, покпок лигкочитать.
Если у C++ проблемы с UB на UB а у раста с излишеством шифтовых операторов, и эти проблемы в них вроде как окупаются другими вещами, то скала - это худшая помойка, которая может окупится в скорости разработки, но дальше останется только Perl нашего времени.
> Это псевдо-читаемость, для неосиляторов
Ох блядь. Открой доку стандартной библиотеки скалы для любой коллекции, и почитай.
Дело не в том, что это тебе сейчас будет все понятно, а в том что открыв этот код через пол года/посадив на твое место другого челика этот код будет легче выкинуть нахуй чем исправить.
>Так теперь говорят вместо "мне лень учить, хочу попроще"?
Учить что-то сложнее имеет смысл если оно себя окупит.
Мы вообще, внезапно, с читабельности перешли на сложность, но один хуй высказав аргумент про неосиляторство ты слился.
>в питоне ограничение на 80 символов в строке
>на два экрана не размажешь
я имел ввиду на два экрана в высоту
>ты слился
Это вообще моё первое сообщение в треде.
Я вижу, у тебя большая нелюбовь к скале, но я скорее о расте говорил, который [пока] совершенно не считаю переусложнённым.
> теперь будет huy()?, try { huy() } catch { }, do { huy() }
А должен-то быть: do { ... }
http://m4rw3r.github.io/rust-questionmark-operator/
>>639222
> то скала - это худшая помойка
Здесь соглашусь. Но дело не только в синтаксисе, но и семантике.
Лол, давай-ка ты мне покажешь реализацию коллекций скалы (map, flatMap, filter, collect, fold, groupBy, sum и т.д.) на си и го, а потом будешь кукарекать.
В целом, да. И тот пока ещё даже до альфа версии не дошел.
Это копия, сохраненная 24 февраля 2016 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.