Опубликован релиз языка системного программирования Rust 1.39, основанного проектом Mozilla. Язык сфокусирован на безопасной работе с памятью, обеспечивает автоматическое управление памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime...Подробнее: https://www.opennet.me/opennews/art.shtml?num=51835
Хороший язык программирования. На бумаге. Правда на нем невозможно реализовать некоторые алгоритмы (например дерево)
Какое дерево? 🌲
Ну и можно пруфы что ли?
Проходи мимо, куда шел, зачем тебе пруфы
В расте даже есть конструкции со счётчиком ссылок аля сборщик мусора.. там есть все на все случаи жизни и даже больше. И если кто-то говорит что на расте что-то сделать нельзя - то это просто нелепость какая-то..
Да-да есть, но написано оно на unsafe (считай на си), а не на самом языке
Так ведь не цели избавиться от unsafe везде и вся.
Это ведь просто кукок кода где программист должен чувствовать больше ответственности.
Можно сказать в unsafe мире благодаря Rust появляется директива safe, но всё и полностью safe не будет никогда.
Тогда я просто возьму C++ и превращу весь свой код в мешанину из unique_ptr и скажу - вот это крутая парадигма
unique_ptr имеет runtime cost.
rust же все* безопасные фишки обещает давать без оверхеда** в рантайме.* ну не все, иногда надо писать не совсем очевиндым способом, чтоб именно так было
** я не проверял и не интересовался детальноХорошо бы, кто-то проверил да опубликовал детальное сравнение.
Ну ты мягко говоря некомпетентен. unique_ptr не имеет runtime cost
> unique_ptr не имеет runtime costВот здесь говорят, что имеет
https://youtu.be/rHIkrotSwcc?t=1061Может от компилятора и уровня оптимизации зависит, конечно. Я с С++ действительно почти не знаком.
Пусть говорят. Это несравнимо с тем, сколько ресурсов потребляют браузеры.
Есть https://www.youtube.com/watch?v=rHIkrotSwcc
> не цели избавиться от unsafe везде и всяи какой же тогда во всём этом смысл?
Чтобы логические ошибки в большей части кода не приводили к UB со всеми вытекающими: buffer overflow, memory corruption, use after free, ошибки из-за data races и т.п.
Смысл в том, чтобы было 99.9% кода без unsafe. У меня в проекте на 6300 строк всего 5 блоков unsafe, из них 2 - это вызовы isatty(), остальные - в аллокаторе, который считает максимальное потребление памяти (лень запускать бинарь через /usr/bin/time -v). На C++ 100% кода - unsafe.
Смотри, сейчас объясню unsafe))У тебя есть вектор. Вектор как правило разного размера будет во время исполнения.
И ты тут берешь и обращаешься к vec[5] - программа сразу проверит что 5й элемент есть и его вернет а если 5го элемента нет - будет panic. Все просто..
Раст сделан так что тебе не нужно обычно обращатся к элементам вектора именно так.. vec[5] это немного странно.. обычно либо ты итерируешь без индекса либо используешь массив вместо вектора либо еще что..
Так вот, если ты на 100 процентов уверен что у тебя 5й элемент есть и хочешь к нему обратиться без проверки на его существование ты можешь это завернуть в unsafe. а внутри unsafe написать vec.get_unchecked(5)
Практическое применения - у тебя набор символов, и ты рандомно один из них выбираешь.. Генеришь число от нуля до len символов а потом с помошью unsafe выбираешь символ из своего набора. потому что ты знаешь что 100% там символ есть.Почему заворачивать в unsafe - потому что vec.get_unchecked(5) если нет 5го элемента может вызвать UB вместо panic
Стоит добавить что нет надобности вообще писать unsafe. И если вы обратитесь к вектору так vec[5] то от этого никто не умрет и код медленнее не станет. Атвичаю
В C++ так же, есть vec[5] и vec.at(5)
> В C++ так же, есть vec[5] и vec.at(5)Да и итерирование без индекса уже скоро десять лет, как есть.
for (auto x: myVector)
Примерно понял, но лично для меня как-то привычнее всё считать unsafe и проверять каждый пук вручную. А с таким подходом есть риск потерять бдительность и в каком-то месте не поставить проверку, положившись на компилятор или рантайм-среду, или просто забыв о ней. То есть, психологически проще постоянно писать аккуратно и осмотрительно, чем переключаться "тут safe, тут unsafe, а тут рыбу заворачивали".
> То есть, психологически проще постоянно писать аккуратно и осмотрительно, чем переключаться "тут safe, тут unsafe, а тут рыбу заворачивали".Нет. Психологически невозможно выдерживать бдительность на постоянно высоком уровне. Концентрация внимания всегда плавает, это замерялось неоднократно в экспериментах. Это ведь очень важная штука в некоторых профессиях, в которых секундное ослабление внимания может привести к катастрофе. В тех профессиях, людей тренируют специально, и внимание им тренируют, и вырабатывают такие навыки привычки, чтобы максимум деятельности был бы автоматизирован и происходил бы вне зависимости от внимания.
Программистов никто не тренирует этому, поэтому они гораздо хуже всяких там пилотов, диспетчеров в авиации, и прочих. Те, прям скажем, не идеальны, программисты же среднестатистически плохи.
Чтобы минимизировать количество ошибок, тебе надо писать код так, чтобы разделять зоны ответственности между разными кусками кода. Скажем, есть динамический массив, есть его реализация, есть API к этой реализации. Инварианты динамического массива -- size>=len, например, -- это ответственность реализации динамического массива, и клиентский код должен быть лишён возможности эти инварианты нарушить. Если ты, реализуя динамический массив, осознал какие инварианты ты должен соблюдать, и сделал всё грамотно, то дальше, когда ты используешь динамический массив, тебе не надо бояться испортить динамический массив. Если ты сделал неграмотно реализацию, то будешь ли ты бояться или не будешь, это никак не спасёт от сегфолта вызванного неграмотной реализацией.
Когда ты разделяешь ответственность за корректность таким образом, тебе меньше надо удерживать во внимании, более того, есть триггер: unsafe. Если ты не можешь что-то сделать без unsafe, то вот тут надо думать. Можно остановиться, пойти покурить и подумать минут десять или даже полчаса, о том, что можно сломать используя unsafe так, как тебе хочется.
Это позволит тебе более эффективно расходовать свои ресурсы внимания и времени. Это позволит более эффективно работать даже с C, но в C нет такого триггера как unsafe, там проще не заметить момент, когда пора остановиться и подумать.
А ты каждый день пишешь дерево? "Ежедневная" логика обычно спокойно обходится без адских циклических референсов
по твоей логике выходит, что С то еще говнецо, ни ядра операционки на нем не написать, ни быстрой математики, ни криптографии. Везде нужны ассемблерные вставки, а это уже не С.
Что за бред я только что прочитал
c такой слабой понималкой никакое бинарное дерево ты не напишеш, даже на питоне.
Если долго писать на Ассемблере твой код превратится в C из ассемблерных макросов. Плавали знаем.
Потому что сами эти алгоритмы небезопасная черная магия. Нет никакой проблемы впрочем написать в unsafe, хорошо протестировать и скрыть за безопасным интерфейсом. В этом суть Rust, чтобы не весь код был unsafe, как в C++
https://doc.rust-lang.org/std/collections/struct.BTreeSet.html
Бревна - это древнее г-но, которое давно пора похоронить и перейти на теговую семантику.
Вместо перехода по указателю каждый раз искать ID в хещтаблице или что ты имеешь в виду?
вроде можно с помощью raw pointers реализовать дерево в rust?
Можно и без unsafe, были б руки прямые.
вот пример реализации дерева на rust:struct Node {
data: i32,
left: *mut Node,
right: *mut Node
}
const _NULL: *const Node = std::ptr::null();fn create_node(data: i32)->Node{
Node {data: data, left: _NULL as *mut Node, right: _NULL as *mut Node}
}fn main() {
let mut tree = create_node(0);
tree.left = &mut create_node(123) as *mut Node;
tree.right = &mut create_node(312) as *mut Node;
unsafe {(*tree.left).data = 345};
let root_value = tree.data;
let left_value = unsafe {(*tree.left).data};
let right_value = unsafe {(*tree.right).data};
println!("root_value={}, left_value={},right_value={}", root_value, left_value, right_value);
}
Т.е. unsafe с сырыми указателями во все дыры засунуть? Как не рекомендуется делать в расте? Тогда может лучше на Си?
это же вроде один из примеров реализации дерева в Rust?
разве то, что в C явно не указывается, что safe, а что unsafe - это лучше, чем в Rust?
Лучше бы было если бы была представлена реализация без unsafe-приемчиков.
> Лучше бы было если бы была представлена реализация без unsafe-приемчиков.https://docs.rs/ternary-tree/0.1.0/ternary_tree/
> A Rust implementation of Ternary Search Trees, with no unsafe blocksНу а вообще, непонятны претензии анонимных критиков - ведь если есть возможность сократить "зону риска", то не воспользоваться этим из-за "если только сократить, а не убрать полностью - то значит ни! ну! жна!" как-то глупо.
Поздравляю всех вовлечённых)
Все комменты к данному ответу удалили. Странно все это. Такая флеймообразующая тема. А комментов совсем нет.
Спасибо языку Rust, я стал большим поклонником C++, теперь его считаю удобным и красивым языком
уж щас тебе растоманы напихают в панамку от обиды :))))
Растаманы сами на плюсах пишут или писали. Так что видимо его сообщение про плюсы никого не цепануло
Пихалка не выросла. А попробуют - так плюсовики её быстро ему обратно засунут до состояния дырки.
Ну C++ действительно стал лучше в последние годы.
И ещё надёжным и безопасным.
Что там сказал Линус про Раст, давайте вспомнем.
Вспоменать надо npm leftpad. Все остальное не заслуживает вспоменания.
Ну что, вспомнели?
> That's not a new phenomenon at all. We've had the system people who used Modula-2 or Ada, and I have to say Rust looks a lot better than either of those two disasters.Ты об этом? Так это, наверное, самая большая похвала, которую можно получить от Линуса, если ты не C.
> Rust избавляет разработчика от манипулирования указателямиспасибо, но нет.
Я тоже люблю указатели =)
Ну что там, хрусты, ваш язык ещё не целиком состоит из двух-трёхбуквенных кейвордов?
Rust переводиться так - ржавчина.
rust
[rʌst]1. сущ.
1) коррозия; ржавчина
2) бот. ржавчина (жёлто-оранжевые пятна на листах и стеблях растений в местах, где развиваются споры паразитных грибов)
3) разг. деньги
4) моральное разложение; коррупция, продажность
5) вредное влияние безделья, бездеятельности (на характер, способности)2. гл.
1)
а) ржаветь, покрываться ржавчиной; подвергаться коррозии
б) подвергать коррозии; окислять2)
а) ухудшаться, портиться, притупляться, вырождаться (от бездействия)
б) притуплять, ослаблять (память, ум)
в) томиться от безделья3) портить, развращать, разлагать
4)
а) становиться рыжим; приобретать рыжеватый цвет
б) придавать рыжий, рыжеватый цвет5) бот. быть поражённым ржавчиной (о растениях)
Две буквы "fn" таки получше нуля букв.
Нуль букв лучше чем "fn".
А зачем додумывать лучше явно сказать, а то мало ли еще чего во вселенной придумают данные или фунции не все ... Есть еще время и гравитация =)
Книга которая у них на сайте отражает последние изменения в языке? Если нет то как учить этот Rust?
Нет. Текущая книга явно сильно отстает по фичам от текущего раста (по крайней мере, пример с сервером написан без асинков). Но для тех же плюсов тоже нет единой книги, которая написана человеческим языком и охватывает все самые последние возможности языка и обновляется с выходом каждой новой версии.Однако, это не мешает всем спокойно изучать плюсы по любой более или менее современной книге, а потом, после появления понимания о языке, добивать остатки по более разрозненной информации.
При этом, стандартная документация раста, книга, пишущаяся самими авторами и вообще вся стандартная инфраструктура на голову выше, чем во всех других современных языках.
> для тех
> же плюсов тоже нет единой книги, которая написана человеческим языком и
> охватывает все самые последние возможности языка и обновляется с выходом каждой
> новой версии.Книга называется черновик стандарта.
> написан без асинковАсинк стабилизировали буквально только что, а появление асинк конструкций не означает ни исчезание блокирующих ари, ни наличие асинхронных в стд. Всю канитель с асинком сейчас описывают в отдельной async book
Просто чтобы ты был в курсе get started и документации больше чем достаточно для любого языка. Сейчас так то 2019 год.Ты либо очень старый либо очень молодой.
> Книга которая у них на сайте отражает последние изменения в языке? Если нет то как учить этот Rust?Выучи для начала пунктуацию.
Сам ты плохой
Ну что, поздравляю всех, асинки в стандарте!Что там со стабилизацией токио с поддержкой асинков?
> Кроме библиотеки Stylo для css. Библиотеки Карл!А пацаны-то как, в курсе?
https://www.rust-lang.org/production/users
Какие-то стремнинные поделки у которых нет применения за пределами компаний которые их создали. Причем если копнуть глубже то сразу понятно что там ссылка на какую-то мало вменяемую статью как у Dropbox. Раст они уже давно не применяют. Или ссылка на гитхаб с двумя звездами от создателей. У некоторых проект на ноджс где они там раст применяют не понятно на зато в ссылку их добавили.Но зато фанатики молятся на эту ссылку как на иконостас не зависимо что на самом деле делают с растом эти компании и делают ли.
> Какие-то стремнинные поделки у которых нет применения за пределами компаний которые их создали.Какое-то стремное сруливание с изначального (удаленного) "нету в продакшене!"
Кстати, под эту прогрессивную анонимную классификацию ЯП попадает тот же Erlang. Всегда подозревал что-то эдакое!> Причем если копнуть глубже то сразу понятно что там ссылка на какую-то мало вменяемую статью как у Dropbox. Раст они уже давно не применяют. Или ссылка
Ну если анониму понятно, тогда да, так оно на самом деле и есть! А всякие <…> по ссылкам:
https://github.com/dropbox?utf8=%E2%9C%93&q=&...
> An implementation of https://github.com/google/brotli in rust avoiding the stdlib
> Updated Feb 12, 2019
> Dropbox SDK for Rust
> Updated Sep 11, 2019Media-IO
> Specialized in Broadcast and Cinema technologie, we are using Rust for our microservice workers and for our native web player.https://github.com/media-io?utf8=%E2%9C%93&q=...
Beget
> As part of backup, resource management systems and DDOS mitigationCloudflare
https://github.com/cloudflare?utf8=%E2%9C%93&...
> Cloudflare's implementation of the NTS protocol written in Rust
> Savoury implementation of the QUIC transport protocol and HTTP/3наверняка фейки злопыхателей-завистников.
> Но зато фанатики молятся на эту ссылку как на иконостас не зависимо что на самом деле делают с растом эти компании и делают ли.Ага, а потом они пишут что-то про костюм химзащиты и уворачивание от каловых масс, потом их удаляют, но они опять пишут … впрочем, что с фанатиков взять.
Ты хотя бы адекватный не бросаешься всякими синтетическими тестами.Надеюсь не надо объяснять что твои ссылки это поделки которые написаны на расте просто чтобы хоть что-то написать на расте. Тот же Media-io суммарно все 16 проектов на расте получили 48 звезд. Остальное и комментировать смешно. Ты просто подтвердил мои слова своими ссылкам.
Твой припек вполне объясним тем что фанатизм не приводит ни к чему хорошему.
> это поделки которые
> Тот же Media-io суммарно все 16 проектов на расте получили 48 звезд.
> Остальное и комментировать смешно.Какая аргументативная аргументация o_O
> Надеюсь не надо объяснять что
> Ты просто подтвердил мои слова своими ссылкам.Для полноты не хватает "И вообще, это знают все!1" (с)
> Твой припек вполне объясним тем что фанатизм не приводит ни к чему хорошему.
В общем, как и ожидалось -- анонимная, скучная, детсадовская демагогия, минусики и полудетсадовские попытки съехать на ad hominem/хамство (которое те, кто опоздали родиться, частенько путают с "крутым троллингом"). Нормальных аргументов от анонимов ведь фиг дождешся -- для этого же хоть немного матчасть знать надо.
Нормальные аргументы от анонимов на этом ресурсе - это ты хорошо пошутил. Тут каждый второй писал на C++ лабы в своей шараге и считает своим долгом блеснуть своим "опытом разработки" и облить помоями Rust, потому что последние две извилины разгладились на понятиях ownership и borrowing, а синтаксис вызывает панические атаки. Элита computer science, короче.
Чувак ты даже никуда не поступил и ни одной строчки на Расте не написал, но зато со своим мнением сюда пришел. Больше того ты работаешь в 1С-Битрикс говнокодишь на пихе, ты создаешь УГ. Как вообще у тебя рот открывается что-то тут писать я просто поражаюсь.
1. Я поступал в 2 разных ВУЗа, из первого вылетел, из второго ушёл сам по личным обстоятельствам. Правда, какое это отношение имеет к программированию?2. На расте я написал больше одной строчки.
https://gitlab.com/bytefu/rambo
Это мой хобби-проект компилятора, генерит промежуточный код в форме SSA с базовыми оптимизациями, а из него - код для RISC-V.3. В 1С-Битрикс я не работаю уже несколько лет, и там я писал не на PHP, а на Java, и не саму CMS (или как оно называется), а приложение Битрикс24 для Android.
То есть, ты обо мне не знаешь вообще ничего, но мнение имеешь. "Как вообще у тебя рот открывается что-то тут писать я просто поражаюсь" (С) цитаты великих людей
Можно пример твоих супер поднлок на расте и сплюсах?
Ну конечно аргументация Растобоев с их ссылкой на какой-то очень сомнительный список это верх аргументированности. И ведь даже не могут признать что язык их не нужен. Все пытаются выжать хоть что-то.
Ну кстати, много же раз уже обсуждались эти async функции в других языках. Эта фишка распространяется по коду как вирус, стоит только добавить одну такую функцию и все.. приходится все функции которые ее вызывают тоже делать async. Сам пробовал в питоне это. Исправте если ошибаюсь, как раз поэтому async и не внедрили в C++. Или в раст этот минус как-то обошли?
async функция в расте возвращает структуру, которая реализует трейт Future, то есть реализует асинхронное вычисление. Из обычной функции можно вызвать асинхронную, получить эту структуру и что-то с нею сделать. Например, запустить на выполнение не ожидая результата (только если используется многопоточный экзекьютор), или запустить на выполнение и заблокироваться до получения результата.
На питоне не пробовал, но особой проблемы не вижу. На Java много писал асинхронного кода, вполне успешно смешивается тот и другой подход.
Если вызываемый код не будет вставать на ожидании ресурса или не делает долгих вычислений, то конечно его можно вызвать синхронно.
Кому надо async в c++ - или берёт буст или стороннюю библиотеку. В итоге всё равно получается коллбачная лапша, но в стандарте такого нет.
Все нравится кроме того, что компилер оставляет неиспользуемые функции и статические строки, на которые нет ссылок в коде.
Ответ хоть от кого-нибудь почему компилер так делает мне получить не удалось. Вот пример https://godbolt.org/z/8AE_S_
Получить бинарник в 60мб не такая уж недостижимая цель для раста. При этом до функциональности приложения, написанного с использванием какого-нибудь Electron'а, довольно далеко.
Кстати жаба компилируется.https://github.com/oracle/graal/blob/master/substratevm/LIMI...
оракл видимо собрался го закопать
Потому что функция в публичном интерфейсе как член трейта. Выкидывать функции, которые могут быть вызваны, но не вызываются, - задача линкера. Собирайте с LTO.
Статические строки разве экспортируются?
Странно, со своим компилятором, но уже новой версии, не могу воспроизвести то поведение. (С лто или без)
>Потому что функция в публичном интерфейсеМожно подробнее? trait же не pub.
Trait всегда pub
Тут написано обратное https://doc.rust-lang.org/reference/visibility-and-privacy.html
https://play.rust-lang.org/?version=stable&mode=release&edit...
А вот тут почему-то всё вырезается, даже не доходя до LLVM IR.
Да, я отписал выше уже. На тот момент (где-то пару месяцев назад) мне никакими средствами неудавалось добиться удаления непубличного, неиспользуемого кода/данных в найтли.
Эта версия видимо просит выдать листинг сам компилятор. Через cargo rustc --release -- --emit asm
Я слышу хруст!
Интересно, если даже разрабы на плюсах говорят, что до конца в них не разбираются, то сколько же человек понимают сабж?
это из-за неуместных сокращений, заглавных букв в библиотечных функциях и mut
Откуда вы беретесь, не пойму? Один из самых красивых и приятных языков, что сейчас существует.
просто у вас нет вкуса. кому-то и кобыла невеста.
> просто у вас нет вкуса. кому-то и кобыла невеста.Как раз наоборот, я перепробовал бесчисленное количество языков и точно знаю, что этот наиболее приятный, к тому же сиподобный, что интуитивно для менее образованных.
>точно знаю, что этот наиболее приятный,А Питон?
Вопрос знатокам, как в эмбеде идут дела и Раста?
Как-то так: )
http://forum.easyelectronics.ru/viewtopic.php?f=56&t=38543#
http://forum.easyelectronics.ru/viewtopic.php?f=56&t=37958
Есть группа embedded rust, которая занимается как раз этим.
Пользуюсь их наработками по портам для cortex m4 и рядом библиотек со статическими коллекциями и генератором кода из svd.
Пока проблемы не ловил. Отладка работает, через openocd в основном.
Чего только не придумаешь, чтобы не учить Free Pascal.
> Чего только не придумаешь, чтобы не учить Free Pascal.Весьма забавно, что по уровню религиозного рвения и сектантской нетерпимости хрусты на одном уровне с перепончатыми. :)
А один так и вовсе бегает и нервно подчищает нехрустоугодные комментарии.
«Отличный» язычок, раз у него такие невменяемые фанаты. :)
> «Отличный» язычок, раз у него такие невменяемые фанаты. :)Самые невменяемые фанаты у С. Всё что не С - по умолчанию говно
А, ещё вы жутко брехливы, вот и тут... - почему же "по умолчанию"... Вовсе нетак. Всё внимательно анализируется.Да и не всегда говно когда оно говно, например помню как поразился когда то увидев бодренькие 3D-гонки на ~2-ом пеньке у знакомого
- написанные на Delphi... (правда тогда их ещё не окончательно залагали гигабайтами системных библиотек и VCL, с интеграцией с .NET)
(Они должно быть выкинули весь VCL и писали на WinAPI
и т.о.даже сравнительно с Сями немного-поганенькой оптимизациями Delphi - хватало для настолько динамичной игры,
но в целом - на Delphi игры всегда лагали, хоть со времнем это перестало быть заметно из-за мощности ЦПУ, как воможно произошло и с той игрой на пеньке-2,
и тот кто делал в т.ч.вопреки моему совету делать игры на Си - потом сильно жалели,
в ч.н.когда у них например даже курсор тормозил в анимированном 2D квесте на топовом ПК 2003-5 года,
что уж точно никак не способствовало продажам игры,
а аргументация же до того была проста: Сяшников дороже нанимать, - ну да, ну да... Съэкономили!
Но, того было мало - следующий проект делали на C#, с такими же заявлениями как у Rust'овцев о скорости,
в итоге как позже читал в блоге: всё гипер залагав - тратили кучу внепланово времени/денег и в итоге Ж.всей фирме, если в кратце)Теоретически и на Quick/VisualBasic(aka упрощённый C# технологически) и Rust - наверняка можно делать достаточно быстро
(правда что то ни разу такого не видел, а у меня раньше была привычка смотреть что на чём написанно,
и тормоза у таких - всегда были... либо для устранения тех - значительно пониженное качество),
но для этого прийдётся выкинуть все Rust "ноухау" фичи из головы...
Так вроде игры и делают на С# и сложное на С++. Почему так исход у историй?
1) Компания очень маленькая, отечественная, т.е.полностью отечественная - все фанаты игр;2) у нас повсеместная очень жосткая пирастия, ну это то не новость и заложенный риск, но в итоге - предыдущие игры еле-еле отбивались;
3) как следствие недостаток финансирования, частая утечка кадров и неуспеваемость набрать опыта персоналом;
5) плюс человечестий фактор в т.ч.и продажность - местные и нет (иностранные)конкуренты перетягивающие даже чисто на вред компании - без особой нужды в таких "профессионалах"(мало кто участвовал больше чем в разработке 1 игры) - что в итоге и сгубило крупный проект на который возложили слишком много надежд и похоже последние ресурсы, как то похоже не учитывая что опыта мало(что выразилось и в выборе языков програмирования) - а, может и учитывая надо же жить дальше, а игрострой это такая сфера где только крупные и лучше даже амбиционые прокты хоть как то прибыльны, а на кону напомню фирма...
6) неадекватное доверие к мнению друзей (некомпетентных значит, как по факту вышло); и неповезло с их выбором языка программирования - уже чисто невезуха;
7) игнорирование моего намёка директору о использовании Си :)
(ну т.е.можно сказать осознанный выбор его в пользу удешевления найма),
тем более руководству знакомый/более доверенный программист, возгравивший проект, как и тут на opennet растоманы, - в грудь бил себя о тождественности Си производительности у С#...
(а, когда стало ясно что у проекта завал гипер-лагами - свалил к конкурентам, подговорив и остальных большинство...
да и такая цепочка событий тупо из-за лагов бывает)
>А один так и вовсе бегает и нервно подчищает нехрустоугодные комментарии.Миша фанат Раста? Даланавам, лукавити.
>>А один так и вовсе бегает и нервно подчищает нехрустоугодные комментарии.
> Миша фанат Раста? Даланавам, лукавити.Нет, я говорю про микроба под ником Forth. Фанатично трёт нехрустоугодные высказывания.
О спасибо за напоминание - пошел почитаю. Интересно было сделать на нем список =)