- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
Немного о пропертях
"Лично мне свойства не нравятся и я был бы рад, если бы в Microsoft решили убрать
их поддержку из .NET Framework и сопутствующих языков программирования."
"Я считаю, что разработчики используют свойства намного чаще, чем следовало
бы. Достаточно внимательно изучить список различий между свойствами и поля-
ми, чтобы понять: есть очень немного ситуаций, в которых определение свойства
действительно полезно, удобно и не запутывает разработчика. Единственная при-
влекательная черта свойств — упрощенный синтаксис, все остальное — недостатки,
в числе которых потеря в производительности и читабельности кода. Если бы я
участвовал в разработке .NET Framework и компиляторов, я бы вообще отказался от
свойств, вместо этого я предоставил бы разработчикам полную свободу реализации
методов GetXxx и SetXxx. Позже создатели компиляторов могли бы предоставить
особый упрощенный синтаксис вызова этих методов, но только при условии его
отличия от синтаксиса обращения к полям, чтобы программист четко понимал, что
выполняется вызов метода!"
Джефри Рихтер
А еще какие?
Читабельности: и как же это автопроперти мешает читабельности?
Производительности: за производительность пусть борется конпелятор, а код должен быть читабельным (но не стоит убивать производительность).
и бряку не поставить
Мелкий Билли тоже обещал что 640 кб памяти хватит всем
Но сами проперти мне не нравятся. явное лучше неявного
Многие до этой простой истины годами не могут дойти.
Моргни, если я прав
Добро пожаловать в клуб.
я не знаю про пропертисы в шарпах, но везде где видел было полезной фичей. это не то что бы кто-то заставляет пользоваться.
А что Рихтер предлагает сделать с WPF и прочими, где байндинг на проперти - чуть ли не основа технологии? Вон не прошло и десяти лет, а МС уже запилили nameof(), чтобы даже от строкотипизации в INotifyPropertyChanged уйти... Куда это всё теперь? Возврат к ручному бойлерплейту а-ля жаба? Ну не, спасибо...
intellij генерит аксесоры и мутаторы на ура
а kotlin так и вовсе не требует
@@
Попробовал set_PropertyName(), компилятор навалял пиздюлей и сказал мол низзя прямо так вызывать методы доступа.
@@
Но ведь можно написать свой ЯП с таким синтаксисом! Джефри Рихтер, сасай.
C# очень богатый ЯП, один из лучших современных ЯП.
В .NET есть JIT, и он отлично работает.
Нет.
>равно как и C# Джаву.
Спорно.
>C# очень богатый ЯП, один из лучших современных ЯП.
Нет
>В .NET есть JIT, и он отлично работает.
Да, но нет никакого динамического анализа кода, который осуществляется например в HotSpot. HotSpot умеет собирать в рантайме статистику, и на основе этой статистики он умеет делать некие оптимизации.Примерно как profile-guided optimization. В .NET рантайме ничего такого нет, насколько я знаю
>> Спорно.
>> Нет
отличная аргументация
Ну какие утверждения, такая и аргументация. Я например могу заявить:
Трава фиолетовая
Слоны летают в космосе
Тараканы умеют разговаривать на человеческом языке
и ожидать на подобный бред каких-то аргументированных опровержений было бы глупо, не находите?
https://pp.vk.me/c619516/v619516787/c9a0/p3rBS3WK7dc.jpg
2. C# конечно же на голову круче Джавы по выразительности: там есть куча всего: от async до вывода типов. От Linq до Dynamic. А в Джаву даже сраные лямбды с кложами только вчера завезли, а генериков в рантайме и вовсе нет.
3. Никакого анализа кода не нужно, в дотнете можно сразу же скомпилироваться из CLR в нативный код, причем под конкретный процессор (см ngen)
Аргумент про про "склонированное" вообще прекрасен! Что там склонировано? Идея виртуальной машины? Идея ГЦ?
Все современные ОС, в таком случае, склонированы с OS360.
Ты напоминаешь мне пубертатного кулхацкора, который в журнале "хакер" прочитал что "виндуос это не круто" и теперь обливает говном любой МС продукт просто потому, что это МС
Учитывается ли, что есть разные варианты машин с разными опкодами, например Dalvik и Java Card? И как вообще можно судить о крутизне VM только лишь по опкодам? Может надо сравнивать получившийся машинный код, оптимизации например? Или скажем кроссплатформенность? C# научились уже в сим карты засовывать? Какие конкретно среды выполнения Java и С# кода сравнивать? Mono с Dalvik? Или может .NET c HotSpot?
>2. C# конечно же на голову круче Джавы по выразительности
По-моему они оба говно. Сама идея городить какие-то там виртуалки с обязательным контролем границ массива в рантайме и сборкой мусора - говно. Мне вообще не интересен холивар Java VS C# т.к. на мой взгляд оба они говно. Вот насчет C vs C++, C vs Java, C vs C#, ASM vs C - это сколько угодно
>там есть куча всего: от async до вывода типов. От Linq до Dynamic.
Для подобной херни пусть Scala используют http://scalaquery.org/doc/ScalaDays2012-SLICK.pdf
>3. Никакого анализа кода не нужно, в дотнете можно сразу же скомпилироваться из CLR в нативный код, причем под конкретный процессор (см ngen)
Для жабы это тоже есть, JRockit и ART (Android RunTime). И хуй знает что из этого лучше (AoT или всякое профилирование и динамическая компиляция как в HotSpot). В том же GCC и MSVC для Си и плюсов есть PGO например, но есть еще некоторые вещи, которые ни то ни другое не поддерживает, например суперкомпиляция, впервые примененная в языке РЕФАЛ и которую хотят реализовать в JVM.
Кстати, для жабы намного больше есть этих виртуальных сред выполнения, чем для дотнетов (официальный .NET от M$ и Mono, создателя которого они не так давно перекупили к себе; был еще какой-то dotgnu но он похоже сдох), т.е. все актуальные реализации CLR находятся под контролем одной корпорации. Не могу сказать что это хорошо.
>По-моему они оба говно.
Сам ты говно. Это языки высокого уровня. Их задача - максимально сократить количество выстрелов в ногу и сконцентрировать программиста на задаче. И простой OutOfRangeException вместо UB, когда компилятор может сжечь твой дом и убить твою собаку - это просто счастье.
Разработка одного и того же на c# будет в разы быстрее, чем на крестах, если не так критично быстродействие. А быстродействие в 99% не критично, ибо не семидесятые годы и даже на самых старых компах минимум два ядра по гигагерцу и гиг оперативки.
Чтобы избежать UB от выходов за пределы массива можно использовать херню вроде смартпоинтеров которые тебе будут проверять границу. Еще этот Rust, в нем можно через RAII без GC и явных освобождений памяти обходиться.
>Разработка одного и того же на c# будет в разы быстрее, чем на крестах, если не так критично быстродействие. А быстродействие в 99% не критично
Откуда вы эти 99% вообще берете? С потолка? Методику подсчета - в студию
С потолка, конечно. Я что, ебанутый искать реальные цифры в интернете? Методику-хуёдику ему подавай. Всё исключительно интуитивно и на собственном опыте.
Подумай, сколько процентов кода в мире пишется для ынтырпрайза и прочей некритичной хуйни. Я думаю, около 90%. А потом, прикинь, сколько процентов от каждого проекта критично к быстродействию. Меньше 90% никак не получится, ибо узкие места, как правило, маленькие. А логики много.
А теперь вот о чём нужно подумать. Стоит ли оверхед усилий на неуправляемый язык той прибавки производительности, который он даёт? Основная оптимизация - алгоритмическая, она может дать 1000% производительности или больше, в то время, как прибавка от использования крестов, раста и сей ну в два, ну в три раза больше может дать (в особо запущенных случаях). Ассемблер ваще даже не рассматриваю, в современной архитектуре x86-64 нереально написать код лучше компилятора ибо очень сложно.
emacs и дырявый вонючий носок
дырявый вонючий носок и emacs
и...
пожалуй, всё же emacs
Это примерно как говорить про паттерны с ПХПшником
Это разве не признаки высокого уровня?
>типизация и в рантайме
Не в жаве.
>Не в жаве.
Есть там типизация в рантайме. С дженериками, да, плохо. Впрочем, они сказали, что это Type Erasure и вроде как фича, а не баг.
всем было бы лучше, если бы генерики были в рантайме
но увы
нет. В JavaScript может не быть рефлексии, а в Swift -- gc)
>>Не в жаве.
именно что в джаве. Попробуй скастить строку к объекту
разве
типизация и в рантайме != динамическая типизация? неправ: прав;
Што?
http://ideone.com/XmQJsn
>C# и жаба это не просто высокий уровень, это еще и ГЦ и рефлексия и типизация и в рантайме и статическая и много чего другого.
Ну всерхвысоким уровень не становится от этого.
а теперь скасти объект в строку и получи exception
потому что джаве в рантайме есть инфа о типах
это и называется дин. типизацией
например в сях или ObjC ее нет, ты можешь скастить случайное число в указатель на структуру и сидеть так до Faultа (а в реальном режиме до перезабирания ДОСа или перезагрузки компутера)
Да не будет exception, формулируйте мысли правильно.
Серия кастов Integer -> Object -> String приведёт к исключению ClassCastException.
Если в жабе работает явный каст B -> A, то и явный каст A -> B на том же объекте всегда будет работать.
>>приведёт к исключению ClassCastException.
так будет или нет?)
От каста String -> Object -> String не будет, ибо с чего бы.
От каста Integer -> Object -> String будет, ибо нефиг.
сколько строку в объект не касть, она все равно строка
динамический питух и в жабе кукарекает
потому что в рантайме есть знание о типе
>рефлексия
Вот в ассемблере с рефлексией вообще заебись, можно делать самомодифицирующийся код. А встроенный и неотключаемый GC на уровне рантайма это однозначное говно.
2. рефлексия не имеет никакого отношения как самоодифицируемому коду.
3. говно это когда ты пытаешься рассуждать о том, в чем ничего не понимешь
Можно. Вчера я такой код запускал как раз.
>2. рефлексия не имеет никакого отношения как самоодифицируемому коду.
System.Reflection.Emit и MethodBase.GetMethodBody это что по-вашему?
>3. говно это когда ты пытаешься рассуждать о том, в чем ничего не понимешь
Я отлично все понимаю.
2. Это только маленькая часть рефлексии. Обычно ее используют для получения информации о типе (например для работы с атрибутами) и для создания типов по имени.
3. Ты не понимаешь зачем рефлексия. Ты не понимаешь зачем GC. Видно что ты ничего не писал на .NET, и несешь тут всякую чушь.
Снимаешь трусы защиту и бежишь модифицировать... Все JIT'ы так и работают.
В жабаскрипте я могу взять строку, менять ее в рантайме и потом eval-ить. Вот вам и самомодифицирующийся код, притом с JIT-ом
Так вот кеш этот идет на смарку при самомод..коде
это проеб по перформансу
https://paste.debian.net/685804/ - отлично работает в линуксах, если объявить свою секцию с "axw"
>2. Это только маленькая часть рефлексии. Обычно ее используют для получения информации о типе (например для работы с атрибутами)
А на кой хер вообще получать информацию о типе в рантайме, если через Хиндли-Милнера все можно вывести еще на этапе типизации?
>и для создания типов по имени.
Ну это как в фортране типа, http://www.lib.ru/ANEKDOTY/non_pas.txt
Хуже всего с этими хитрыми типами данных то, что вы должны их описывать, а настоящие языки программирования, как мы все знаем, обладают возможностью неявного задания типа, основанного на первой букве 6-символьного имени переменной.
Или мы через рефлекшены говорим в компилтайме "а сделай-ка мне вот тип точно такой же, как вон тот" ?
В любом случае это говно. Чтобы в полную силу все это задействовать, надо работать на уровне AST и с макросами как в лиспе с гомоиконностью, а херня из сишарпа просто убогий огрызок от тех возможностей.
>> типизации?
Нельзя, если ты загружаешь внешний объект, например.
>>надо работать на уровне AST
Совершенно ни причем тут AST.
Рефлексия позволяет сделать AOP, позволяет расставить пермишены на уровне метода, и много чего другого
Почитай еще про то, что такое гомоиконность
*facepalm.jpg*
Ты понимаешь масштаб каши в голове, да?
"Существует вывод типов, потому рефлексия не нужна". Блядь! Это вореция со мною говорит
И это еще можно использовать как для контрактного программирования.
А если еще вспомнить концепцию суперкомпиляции, которую придумал автор Рефала, т.е. если из самого кода можно было б вывести, что в такую-то функцию не будут передаваться числа, большие чем x, то на основе этого можно было б хуйнуть специализацию функции. Но в ебучем сишарпе хуй знает вообще какое говно из какого блядского модуля подключится к программе, и хуй там такое применишь
Рефлексия это когда программа может залазить в свой собственный код(MSIL или машинный код или в еще какое-нибудь AST говнопредставление) и что-то осмысленное с ним делать. Можно на основе одного кода делать новый код, можно куски кода каким-то образом совмещать, опять таки можно получать информацию о типе, делать какбы-JIT. Это уже дело десятое
А GC это такая херня которая нужна чтобы ручками не дергать malloc-free или другой механизм аллокации(например чтобы не писать кастомных аллокаторов, например пуловых, стековых и проч.), других полезных фич у него нет. Там производится куча каких-то дебильных действий, вроде поиска циклических ссылок, разбрасывания аллокаций на разные поколения, например там есть такое правило, что самое молодое поколение с наибольшей вероятностью скоро надо будет убирать, это все чтоб снизить время цикла сборки мусора. Всю эту херню я в свое время читал, и это говно.
Ну вот, я же говорю: ты не понимаешь. Рефлексия используется УДАЧНО для получения атрибутов в рантайме, поиска по ним методов и вызова оных. Это то, что без рефлексии сделать нельзя, если не вшиваться литералом.
>> чтобы ручками не дергать malloc-free
Сразу видно что в достаточно крупном проекте ты не работал. Никто практически уже не делает в огромных бизнес-системах malloc-free руками. Используется или GC или Reference Counting. RC тоже не плох, но он не отлавливает islands of isolation, а GC отлавливает.
Это достаточно сильно экономит время и делает код безопаснее
И неявные ссылки с дипкопи только через анус. Как вы вообще программируете на этом? И в питоне, и в го плююсь с этого дрянья, один геморрой и никакого профита.
А в крестах ассерт. Ну, у нормальных людей. Долбоёбов с int* massiv = new int[N] не берём в расчёт.
В шарпожабе проверка включена по умолчанию. В крестах её нет. Нужна - напиши ручками... Вот здесь, здесь и вот здесь. Да и вот здесь. Нигде не забыл? Ну ладно, поехали... Блядь! Где-то всё равно забыл.
как ты используешь массив, что тебе нужны эти проверки при каждом обращении?
просто зачем вообще людям массив? где путем локальности и четко понятной последовательности элементов достигается максимальное машинное быстродействие
в этом случае они прекрасно понимают, как с ним работать, не собираются из сети принимать индекс элемента и лезть по нему без проверки
в с++ охулиард более других коллекций, где хоть обмажься проверками на наличие элемента, заодно они более пригодны к вставке в середину и другим мутациям
Допустим, Вася разрабатывает сервис, позволяющий запускать произвольный код, написанный другими разработчиками. Например, он пишет инфраструктуру плюсового HTTP-бэкенда, но не отвечает за код обработки запросов.
В управляемом языке можно просто перехватывать в инфраструктуре все исключения и генерить 500 ошибку. В C++ весь инфраструктурный процесс может слечь из-за кривого обращения к памяти / утечек.
Единственный способ избежать проблем - запускать обработчики в отдельных процессах и платить за копирование данных по IPC, т.е. fastcgi/nginx.
Честно говоря, монолитные управляемые приложения всё равно за nginx обычно сидят, но не для всех инфраструктурных вещей есть подобные стандарты де-факто.
у меня вопрос непосредственно про массив в крестах
сука как можно взять такой тупейший контейнер, который занимает минимум места и для которого взятие элемента по индексу O(1), который обычно требуется для того, чтобы засунуть в молотилку, конвейерно отработающую все элементы за 1 проход или даже массивно-параллельно, и сука повесить проверку границ на каждую попытку обращения к каждому его элементу?
ЗОТО БИЗОПАСНО!
Если программа кривая, то не важно, это будет аккуратное исключение как в Java или неясное падение, для пользователя программа и там, и там упала.
Отличие в том, уронит ли эта программа до кучи ещё и "программы" десятка соседних пользователей.
Впрочем, управляемые языки в этом плане тоже говно - в них нет нормальных механизмов управления ресурсами, отличными от памяти. Если кривой обработчик нещадно течёт файловыми дескрипторами, контейнер тоже недолжно проживёт.
тем более, что он всё равно тормозит, одной проверкой больше, одной меньше - никто разницы не увидит
ок, си для тупых, я понимаю
си тормозит!
Массив - это опупенно нужная и вездесущая структура данных, поверх которой можно запилить кучу ништяков вроде
бинарной кучи, дерева Фэнквика или дерева сегментов. Я уже забыл, сколько раз я отлаживал индексы в сегментном дереве. Больше, наверное, только во всевозможных двоичных поисках.
тебе дали прекрасный золотой дробовик, переопределяй [], используй at в векторе, не используй массив
зачем навязывать всем ухудшение производительности?
>Для подобной херни пусть Scala используют http://scalaquery.org/doc/ScalaDays2012-SLICK.pd
Ты охуел? Ты эту скалу вообще видел? Ради линка изучать дубовый ФЯ?
Есть еще xamarin, который как-то компилирует c# то ли в жава код, то ли в байткод.
А для жавы интерпретатор кто-то кроме оракла реально пилит?
Scala - язык мультипарадигменный, с циклами и нормальными изменяемыми(мутабельными) переменными/массивами(объектами), а не какой-то там хачкель с монадками. Да и почему только ради LINQ? Там много другой хуиты есть, макросы например
>Есть еще xamarin, который как-то компилирует c# то ли в жава код, то ли в байткод.
Там оно скорее всего сразу в машинный код компилирует.
>А для жавы интерпретатор кто-то кроме оракла реально пилит?
Гугл для андроидов точно что-то пилил, даже со своим байткодом, есть еще Jikes RVM и какая-то Java от IBM которую они пускают на своих System z (хер знает что там у них используется, может и есть куски кода от Sun/Oracle)
>Гугл для андроидов точно что-то пилил
Все равно, одна система - один интерпретатор.
>Там оно скорее всего сразу в машинный код компилирует.
В нативный что ли? Не в байткод?
Видел код на скале - нихера особо сложного не заметил там.
>В нативный что ли? Не в байткод?
On iOS, Xamarin’s Ahead-of-Time ( AOT) Compiler compiles Xamarin.iOS applications directly to native ARM assembly code. On Android, Xamarin’s compiler compiles down to Intermediate Language ( IL), which is then Just-in-Time ( JIT) compiled to native assembly when the application launches.
>Видел код на скале - нихера особо сложного не заметил там.
Поизучай его дольше 5 минут.
Ну раз там есть JavaScript в браузере, VM по-любому должна быть!
Кстати, запрет на автогенерацию objc кода из другого кода уже убрали?
Надо просто скомпилировать C# в JavaScript
>Кстати, запрет на автогенерацию objc кода из другого кода уже убрали?
А что, у них там был такой запрет? Какое им вообще дело до того, каким образом был получен код на obj-c?
>Когда я начинал, все ненативные средства разработки были запрещены Apple. Тоже был не в большом восторге от Objective-C.
11-й год. Ну значит, вычитал это в каком-то очень древнем журнале :)
AppCode тогда как работает?
через жопу и Xcode
Но даже при этом AppCode намного удобнее
Но вообще XCode страшно глючен конечно, и там много ебанаго стыда. Один хак с cocoa pods чего стоит. Почему XCode не умеет этого нативно?
А еще там отвратный парсер, который ломается на первой незакрытой скобке, убогий рефакторинг (примерно один, да и тот не работает), но зато там есть xcodebuild, а у Intellij такой штуки нет ни в одном продукте! (не считая андроид студио с graddle)
что это? если я правильно понял что это - нахуй jetbrains писать замену мавену или гульпу?
это консольная хрень для сборки проектов XCode. И это скорее похоже на cmake, нежелин а мавен.
внешний инструмент, которому не нужна ide, собирает (минифицирует, чистит, деплоит etc) твой проект, делает это заебись, при этом отлично интегрируется в ide если надо - какие такие охуительные вещи умеет эта похожая на cmake хрень, что мы все дружно согласимся, что Apple 1:0 гетеросексуализм?
а дублировать настройки в проекте и в IDE как-то глупо.
Хорошо интегрируется только graddle, потому что в Android Studio через него все настройки и делаются.
Вообще конечно еьаный стыд: у .NET есть msbuild, у xcode есть xcodebuild, и только у Intellij ничего нету.
Надеюсь, всем очевидно зачем нужно уметь с консоли собирать проект и запускать тесты? Про CI все в курсе?
у меня в отделе иначе, чем мавеном, и не собираются жавопроекты, все это делают тыкая мышкой на предопределенных 1 раз тасках в ide, ну или открывая console если кому удобно
а еще тебе нужно запускать тесты в IDE
ты как это делаешь? сначала описываешь в pom.xml, а потом настраиваешь IDE чтобы IDE знало что вот src, а потом создаешь в IDE ран конфигурацию для тестов?
те тесты, которые запускают тут, в отделе, запускаются мавеном
а до автотестирования фронта через какие-нибудь селениум нам как до китая раком, никто и не пробовал
я лишь сужу о том, о чем ноют разработчики
например, они могут поныть о том, что 16 рам мало для идеи, всем пробил 32, могут поныть что 2 монитора лучше 1, и 1200 по вертикали лучше 1080 - ну ок
о плохой интеграции мавена или гульпа в идею никто не ныл, да и смысл - особо упоротые при желании могут хоть в нетбинсе писать, всё взлетит, поэтом хранить какие-то существенные настройки проекта в идее странно
Вообще-то идея отлично понимает pom.xml, и, разумеется, подхватывает и обновляет source-каталоги и таргеты.
Более того, до недавнего времени интеграция с maven была на порядок стабильнее и полнее, чем с Gradle. Ну и до сих пор мавен-интеграция на порядки быстрее и отзывчивее gradle-интеграции, которая тормозит как говно даже на топовых машинах.
Во-вторых сама по себе интеграция тоже довольно глючная.
С градлом это не так?
> Во-вторых сама по себе интеграция тоже довольно глючная.
В чём именно?
ЕМНИП нет. Идея сама считывает настройки в рантайме. Добавил папку сырцов, и она сразу "посинела".
Но даже если она и синхронизирует это "в фоне", то (еще раз говорю) в msbuild и xcodebuild этих проблем лишены.
>>В чём именно?
попробуй описать тесты в мавене, а потом запустить конкретный тест
Для этого есть отдельный плагин версии 0.0.19
https://plugins.jetbrains.com/plugin/7446
Можете себе представить качество его работы;)
Другой пример: Idea позволяет сделать томкат или джетти конфигурацию и запускать ее.
И в мавене можно сделать. Но синхронизации тут никакой нет.
И там и там надо делать ручками.
> msbuild и xcodebuild этих проблем лишены.
дай угадаю, потому что они работают с файлом проекта конкретной ide?
ты предлагаешь жидбрейнсу всему ынтерпрайзному миру навязать свои форматы файлов проектов? что делать тем, кому мил нетбинс или кому нравится эклипс?
писать адаптер к sln и proj файлам, как это вынуждены делать жалкие конкуренты ide под винду и макось?
> И там и там надо делать ручками.
даже мне понятно, что томкат у каждого разраба свой, даже версии могут быть разными, а на тестовом и прод сервере свои конфигурации, зачем это вообще тащить через идею и мавен?
именно так
потому там не бывает так, что локально все работает, а на CI ёбнулось
а в Intellij сплошь и рядом такое
Что да происходит: проекты в МСВС обычно тривиальные, а задачи автоматизации перекладываются на что-то другое. Что вобщем-то и правильно, т.как МСБилд - очень ограниченый и не подходит для автоматизации. С одной стороны программистам легче компилировать свой код, а с другой - если им нужно работать с готовым продуктом, тестами или какими-то другими аспектами инфраструктуры, то тут они проиграют.
С мавеном аналогично.
> И в мавене можно сделать. Но синхронизации тут никакой нет.
В идее можно запускать произвольный мавеновский таргет. Не нужно ничего дублировать.
произвольный таргет для тестов не нарисует слева деревце
произвольный таргет для тмоката не будет иметь кнопку "перезапустить"
итд
да нет никаких профитов. Просто яббл анально огорожен и все остальное либо вызовет еще большую боль
строго говорят не совсем так
сначала он идет в llvm, затем в нативный код под ARM (в случае девайсов) или под x86 (в случае эмулятора)
Но пользователю этого не заметно
Дело в том, что M$ создали свою жабу(реализацию JVM (MSJVM) ), но Sun (светлая ему память) засудил их.
http://i72.narod.ru/humor/revolution.htm
Сейчас идея и там и там в некоей единой среде, в рамках которой поддерживается куча языков. Например в дотнетах это C# F# VB.Net C++/CLI и что там у них еще за херня, у JVM есть Java Scala Kotlin Groovy Ceylon... и там и там из одного языка можно использовать методы/функции другого. Другие "среды" не такие многоязычные. Вот например есть JavaScript и какой-нибудь Erlang, и тебе надо из ерланка дергать какую-то жабаскриптохуйню и наоборот, а работают они в разных виртуальных средах, и все это будет добавлять тормозов, если надо пересылать какие-то массивы байтов из одного рантайма в другой, какие-то SHM костыли городить, или пропихивать байтики через именованные каналы, Unix domain socket и так далее. А если у тебя жаба или дотнет хуйня есть, там все говноязычки варятся в одном котле, и они меж собой может легко коммуницировать без всяких ебаных костылей.
Кроме того, вспомните этот Windows Phone. M$ видимо посмотрела на эти андроиды с жабой и задумалась: так ведь у меня тоже своя жаба есть - дотнет. Сделаю-ка я телефоны с дотнетами, вот заебись будет. Только хуй там.
>Все современные ОС, в таком случае, склонированы с OS360.
Если современная ОС это значит "ОС, использующая концепции, заложенные в OS360" то вполне.
>Ты напоминаешь мне пубертатного кулхацкора, который в журнале "хакер" прочитал что "виндуос это не круто" и теперь обливает говном любой МС продукт просто потому, что это МС
Заshitников майкрософта я тоже много наслушался, уж поверь мне. Есть за что обливать.
К слову сказать, эта идея тоже говно по своей сути. Например, строить функциональщину поверх "среды" которая изначально заточена на всякие сишарпы и прочую хуиту с сайд эффектами - весьма сложно оказалось. Так что лучше уж затачивать среду исполнения под конкретный язык программирования, чем пытаться охватить все
http://fprog.ru/2010/issue6/interview-simon-peyton-jones/
— Говоря о практическом применении исследований, связанных с Haskell, как Вы можете прокомментировать неудачную, в конечном итоге, попытку внедрения Software Transactional Memory в C#?
Саймон: Я не участвовал в принятии решения о невнедрении. В моём понимании, рантайм .NET — большой и сложный зверь. Чтобы добавить транзакционную память, они пытались решить задачи гораздо сложнее тех, с которыми столкнулись мы в Haskell STM, где побочные эффекты являются не правилом, а исключением. Они работали с рантаймом, для которого побочные эффекты не являются исключением. И поскольку побочные эффекты должны отслеживаться системой транзакционной памяти и такое отслеживание является дорогой операцией, их исходная позиция была менее выгодна. Они собирались внедрить и многие другие сложные сущности, такие как открытые вложенные транзакции, а также модификацию адресов памяти как внутри транзакции, так и снаружи. В Haskell STM переменные делятся на два класса. Переменные класса TVar могут быть изменены внутри транзакции, но не снаружи. Переменные класса IORef могут изменяться снаружи, но не внутри.
олол, ты не поверишь но ISA любого CPU а так же любая VM (llvm, jvm, clr) строится именно на таких принципах
под x86 ты можешь писать на С а можешь на паскале
и вызывать функции, написанные на другом языке
правда же x86 говно?
Не любого
https://en.wikipedia.org/wiki/Dataflow_architecture
https://habrahabr.ru/post/122479/
Вот например есть процессор Мультиклет на который этот LLVM плохо ложиться.
https://habrahabr.ru/post/209732/#comment_8710245
>а так же любая VM
Не любая
>x86 говно
Да, говно
x86 говно и .NET говно потому, что позволяет писать под себя на разных ЯП.
Вопросов больше нет
Нет, понял ты неправильно. Одни среды заточены под одну парадигму, другие под другую. Например, вышеупомянутая dataflow architecture(есть аппаратные реализации) лучше ложится на функциональную парадигму, чем на всякую императивщину.
Еще раз процитирую, может быть до тебя дойдет:
В моём понимании, рантайм .NET — большой и сложный зверь. Чтобы добавить транзакционную память, они пытались решить задачи гораздо сложнее тех, с которыми столкнулись мы в Haskell STM, где побочные эффекты являются не правилом, а исключением. Они работали с рантаймом, для которого побочные эффекты не являются исключением. И поскольку побочные эффекты должны отслеживаться системой транзакционной памяти и такое отслеживание является дорогой операцией, их исходная позиция была менее выгодна.
У хачкеля есть свой рантайм, отличный от рантайма .NET, в нем есть свои особые механизмы и сборщик мусора, конкретно заточенные под эту функциональную парадигму, абстрагируясь таким образом от императивного ассемблера x86. А если б был некий процессор, который специально спроектирован для поддержки функциональщины, с какой-нибудь встроенной на аппаратном уровне сборкой мусора и этими dataflow, хачкель работал бы на нем эффективнее. Хачкель можно при желании и в брейнфак скомпилировать, но работать это будет через одно место и с тормозами
Хуй из-за венды на телефоне. C# живет на андроиде в виде ксамарина.
и дальше что ? причем тут .NET?
>>Сейчас идея и там
зачем вот эта вся шизофазия дальше?
>>"ОС, использующая концепции, заложенные в OS360" то вполне.
таком образом все ОС говно, ок
>>Заshitников майкрософта
MS есть за что критиковать, но ты не назвал ни одного аргумента кроме невнятного блекотания про "клоны".
Ну они попробовали к Java применить свой прием embrace, extend and extinguish, только их обломали, и они решили сделать свою Java, только лучше. Получился .NET
>зачем вот эта вся шизофазия дальше?
Это и есть общая идея
>таком образом все ОС говно, ок
Нет. Скорее уж говно это твои представления о том, что считать современной ОС
>MS есть за что критиковать, но ты не назвал ни одного аргумента кроме невнятного блекотания про "клоны".
А ты вот думаешь что я тут поставил себе цель максимально раскритиковать M$? Или ты отрицаешь, что .NET задумывался именно как конкурент Java, когда Sun обломал их с этим Visual J++?
И что дальше? Это типа минус дотнета такой?
А Linux клон UNIX, и потому тоже говно?
>>А ты вот думаешь что я тут поставил себе цель максимально раскритиковать M$?
нет, я думаю что ты ничерта не разбираешься ни в .NET ни в C#, и что ты не смог пока привести ни одного аргумента кроме того что "это майкрософт, их обламали с джавой и они сделали C#".
Нет, минус заключается не в этом. Где вообще ты нашел утверждение "если клон то говно"?
>А Linux клон UNIX, и потому тоже говно?
У UNIX хватает недостатков и Linux все эти недостатки наследует. Говно там есть несомненно
>ни одного аргумента кроме того что "это майкрософт, их обламали с джавой и они сделали C#".
Я тебе приводил аргументы, только ты и предпочел игнорировать. Отсутствие динамической компиляции и профилизование как в HotSpot. .NET нихрена не кроссплатформенный, в отличии от Java, которую (J2ME) до сих пор пихают в телефоны(не смартфоны), мидлеты всякие. Java Card может даже выполняться в SIM картах, ничерта такого про сишарп я не слышал. Вообще, основная проблема дотнета лично для меня в том, что это все заточено под винду.
Могу еще:
Отсутствие в Mono херни, связанной с WPF а также привязка этого WPF к DirectX которого нигде нет кроме как в винде(в вайне какая-то костыльная багнутая эмуляция, это не в счет) http://www.mono-project.com/docs/about-mono/compatibility/ - вот более подробно о неполной совместимости. Winforms в mono тоже багнутый.
Если говорить про винду, то: необходимость держать дохера версий .NET framework в винде, если часть софта хочет один дотнет, другая часть - другой (ну т.е. им насрать на обратную совместимость. Вот лучше поставьте побольше версий дотнетов, хули там, гигом меньше гигом больше, не в 70 же живем). Сам дотнет отжирает дохрена памяти, и дохрена места на жестком диске(хотя это же касается и жабы, но мне почему-то не надо кучу разных версий Java ставить, а для дотнета надо), программы под Java и .NET обычно работают медленней и требуют больше памяти, чем С/С++/Objective-C etc. Проблемы с реалтаймовостью у всех этих языков с GC, отчего даже придумали специальные GC для Java чтобы в реальном времени кое-как работало(интересно, есть ли такое для .NET). А, ну и еще потеря производительности из-за проверки границ массивов(хотя там есть всякие unsafe но ими обычно не пользуются)
Один недостаток, хотя есть уже указанные моно и ксамарин.
J2Me формально может и жава, а фактически - сильно порезанное подмножество, про Java Card вообще молчу, блядь, там от жавы одно название, гц нет. Что сложнее - изучить язык похожий на тот который знаешь, или изучить с нуля стек библиотек?
Неполная эмуляция дотнета в моно (на самом деле - почти все кроме гуя).
Дальше?
>необходимость держать дохера версий .NET framework в винде
Тебя что смущает? 100-200 метров места? Гигом? Хуй тебе, я оффлайновые инсталляторы качал. У тебя SSD на 32 гига, что ты шипишь-то? В семерве фреймверки прилетают вообще с апдейтами.
>программы под Java и .NET обычно работают медленней и требуют больше памяти, чем С/С++/Objective-C etc.
И отзывчивость меньше, и стартуют дольше. Но вся эта радость до первого сегфолта.
Реальные недостатки будут еще?
У него кишки на плюсах написаны, так-то
о чем я, блеать, и говорю!
Компиляторы Явы - написаны на Яве (Oracl, OpenJDK, IBM, Google) и на Си (jcc - которым никто не пользуется).
Компиляторы JVM языков: Groovy - смесь Java + Groovy, Scala - Scala, Clojure - Java.
Разные Лиспы: как правило на Лиспе (SBCL, CCL, Allegro, Racket) + минимальный бустрап на Си.
Прологи: SWI - Пролог + минимальный бустрап на Си. Mercury - Mercury.
Компилятор Haskell, OCaml, Rust, Go, Pascal, Ada написаны на Haskell (оба), OCaml (с десяток), Rust, Go (один из двух, оффициальный), Pascal (все, на сколько мне известно), Ada.
Недавно видел объявление по найму: искали программистя писать компилятор Сиквела на Хаскеле.
Есть еще курьезные ситуации. Например, компилятор ActionScript написан на Яве. Компилятор HaXe написан на OCaml. Есть PyPy (компилятор Питона на Питоне). TypeScript - JavaScript, CoffeeScript - CoffeeScript.
Большинство существующих компиляторов написаны не на Си / С++.
Кстати, сейчас есть возможность честно скомпилировать компилятор таких языков?
Скажем, рассматриваю язык X с компилятором на X, нахожу нормальную версию исходников компилятора на каком-то другом языке Y (причём Y не зависит от X), чей компилятор у меня запустится (т.е. актуален, а не написан в стародавние времена под железо авторов C; ну или хотя бы на какой-нибудь реально существующей машине запустится), компилирую нормальную версию компилятора X, потом ей компилирую "циклическую" версию компилятора X.
ЗЫ. Си / С++ вообще малопригодны для написания компиляторов. Код компиляторов "написаных на Си / С++" как правило не написан на Си / С++, а на чем-то типа YACC. Си, выбриается в качестве целевого языка YACC как правило в виду распространенности, а не потому что он как-то лучше приспособлен для таких задач.
Логично, что YACC, BISON и всякие COCO\r имеют место быть, ибо писать весь этот код самому нудно, долго и, что самое важное, черевато ошибками
Это примерно 5% того, из чего состоит компилятор
и дело тут не в си: ты думаешь что на джаве парсер с нуля руками написан?
Компилятор жавы в байткод - хуйня на постном масле. Вся мощь в jit, а он на c(++)
А про директорию assembly, куда срёт NGEN и в которой хранится по несколько нативных сборок для каждой DLL (причём все сборки, кроме самой свежей, не нужны), все забыли...
А что там хранится? Нативный код фреймверка или внешних программ?
Херня аргументы. Дохрена памяти дотнет отжирает, если памятью пользоваться слишком сильно. Вообще GC дотнета лучший из управляемых. Понятно, что если ты потратишь десять лет на оптимизацию крестовой программы, то она будет быстрее и меньше памяти жрать, чем дотнетовская. Только нахуй она нужна через 10 лет?
Программы на чем угодно часто работают медленее (иногда на 0.0001%) и требуют больше памяти (иногда на 10 мегабайт больше) чем программы на си
итого: ничего кроме си не нужно.
Пиздец. Школьники так рассуждают "джава тормозит -- джава ни нужна".
Гуй на джаве на старом компе может тупить. А где она еще подтормаживает?
могут подтормаживать конкретные реализации конкретных алгоритмов на конкретном железе
Если человек говорит "язык $LANG тормозит" то перед нами не программист, а ламер
>могут подтормаживать конкретные реализации конкретных алгоритмов на конкретном железе
Без этих реализаций язык не нужен, а лучшей альтернативы может не быть.
Вообще нет понятия "тормозит", нужно говорить о нехватке конкретного ресурса (памяти, IO, CPU) на конкретном железе
а то я сейчас напишу алогоритм с O(N!) на си и запущу ее на 286, и скажу что си тормозит
Можно почти на любом языке написать медленный код, можно для любого языка написать быстрый интерпретатор/компилятор, но в реальности есть какие-то средние выходные характеристики, определяемые порогом вхождения, существующими инструментами, популярностью, характерными задачами и т.п.
Языков программирования не существует. Языков в чистом виде нет. Есть только парсеры, трансляторы и наши представления. Всё, что связано с языками - это наши впечатления от работы компиляторов и программ. Смысла нет говорить о несуществующих математических абстракциях. Есть смысл говорить о существующих программных и аппаратных решениях.
Потому проще и логичнее сказать, что язык X тормозит, а Y - нет, потому что у X низкий порог вхождения, а у Y - высокий, а ещё и компилятор вылизанный.
Или давайте, обучите программистов, а также напишите оптимальные инструменты.
а какой язык быстрее: C, асемблер, C++ или pascal?
Кстати, вспомним, что язык (именно та математическая абстракция) накладывает свои ограничения на мышление, направляет мысль что ли. Возьмём jQuery как такой язык (думаю, вполне можно считать это отдельным языком). document.getElementById('pitux') - долгая операция поиска в DOM, лучше не вызывать часто; $('#pituh') - простая и удобная магия, вызови её ещё раз, и ещё, и ещё.
А что насчёт Parrot? В Parrot можно добавлять опкоды с помощью динамических библиотек:
http://docs.parrot.org/parrot/latest/html/ops.html
вот llvm хорош: это _регистровая_ виртуальная машина (такое редко бывает, поравда?) но регистры там можно добавлять на лету
во всяком случае у apple она отлично работает, и шланг умеет c/c++/objc из нее
А ну-ка расскажи поподробнее. Интересно послушать.
>Аргумент про про "склонированное" вообще прекрасен! Что там склонировано? Идея виртуальной машины? Идея ГЦ?
Детали реализации, подходы к разработке. java-специфичные уши торчат тут и там.
Типа Math.abs в c# возвращает signed (в жабе других нету).
>А ну-ка расскажи поподробнее. Интересно послушать.
тебя в гугле забанили? Почитай про ключевое слово var в C#.
Если ты не знаешь что такое "вывод типов" то википедия тебе в помощь
Сайт ебаных дремучих ламеров блядь
>А ну-ка расскажи поподробнее. Интересно послушать.
тебя в гугле забанили? Почитай про ключевое слово var в C#.
Если ты не знаешь что такое "вывод типов" то википедия тебе в помощь
Сайт ебаных дремучих ламеров блядь
Со стороны это похоже на смесь гербалайфа и комсомола.
Что происходит потом: студенты выпускаются. Часть, конечно пойдет работать в другие конторы, которые уже уверовали в целительную силу Майкрософта, а часть которая захочет сделать по-новому и правильно - выберет, естесственно, самые лучшие технологии Майкрософта для своего стартапа. Пройдет лет десять, и бывшие стартаперы поймут, что выбор может быть был не самым удачным, но менять все теперь уже очень дорого.
я хорошо помню как в году эдак 04-05 к нам в вуз тоже приходили мальчики с одинаковыми прическами и галстуками, рассказывать какое дотнет охуительное изобретение, всучали брошюрки и кепки, покупайте нашу поебень, и вот уже почти готов процессор, исполняющий IL напрямую
одному так засрали мозги, что он с тех пор только на с# и пишет
кто проверяет, что вот этому принципалу можно дёргать вот этот рест?
Или я не понял вопроса?
или я юзер, а лезу в админские ресты
Или всё-таки можно несколько фильтров с разными зонами ответственности?
АОП не панацея. Тем более в данном конкретном случае.
В жабе испокон веков (до модных анотаций и jersey/spring rest) юзали javax/servlet/Filter.
Думаю в ASP.net так же можно зафигачить.
а о том, где там аспекты
1. расскажи как вставить срез в любое место кода
2. оплати мне лицензию в 630 бакинских
поэтому должен платить и каяться платить и каяться
2. извини чувак, около микрософтовые техн0логии редко бывают бесплатными
ты сам C# выбрал
И вообще, какого х!!! ты отвечаешь, если я жду. что пидар выдаст что то интересное и тупое, как
3_14dar в http://govnokod.ru/19903#comment325322 написал:
>> жаве AOP реализуется сторонней библиотекой
аоп обычно работает по принципу "обвесить"
бла бла бла
<DoSomeJob>
бла бла бла
Ты берешь, и пишешь что при всяком вызове метода этого интерфейса надо вызывать твой код. Твой код будет проверять можно-ли вызвать метод, и если можно то будет логировать этот факт.
Это лучше чем в начале каждого метода писать одинаковый код
бла бла бла
<DoSomeJob>
бла бла бла
привязываем код на DoSomeJob и втыкаем куда хотим в любые методы. Можно гибко перенастроить в процессе выполнения, привязав другой код
даже простое логирование выльется в работу на несколько дней - создай им всем декораторов. А так еще и кеширование. и еще что нибудь добавится - вообще пиздец. Бизнес логики на 2 строки и 10 декораторов сверху
офигенно, не правда ли?
А теперь представь что так нужно к каждому классу написать
А вообще иди нахуй. Нехуй тебе что-то объяснять.
смысл АОПа в том что ты описываешь нечто не в вызываемом коде, а сам код про это ничего не знает
Есть AspectJ, есть Spring. Синтаксис одинаков.
Spring умеет интроспектить создаваемые им бины, AspectJ умеет патчиить байткод, а умеет и ставиться агентом к джаве и править на лету
Иди нахуй, нахуй тебе что-то объяснять чтобы потом ты еще помои лил.
--кококо, ворд нистандартизирован
--вот же тебе спека docx
--кокок, я говорил про doc
--сишарп говно
--почему говно?
--потому что микрософт говно, кококо
--гимп лучше фотошопа
--чем лучше?
--тем что бесплатный
и такого ЛОРобразного дерьма из него вываливается вагон и маленькая тележка
Сравнивая его опыт и образованность, с твоим вопиющим неосиляторством... Ну это как сравнить Германию с усраиной.
В большинстве случаев wvxvw говорит очень дельно.
а один wvwvwvw со своим прологом осилил
это приверно как сравнивать нормальную страну в ватностаном
Лоооол. И так банально спалился.
Проверочное слово: напитон.
Кстати, 3.14159265, иди нахуй, 3.14159265!
> Я как бы в сортах говна... Они оба бесперспективные направления в программировании.
Ыыыыы :) Нахуй.
Не знаю какие это направления, но настоящее у них вполне есть.
Кстати, где больше градус - в украино-российских срачах или арабо-израильских?
но крутому сис-админу из газеты конечно виднее что говно а что нет
Они настолько, блядь, бесперспективные, что уже не первый десяток лет захватывают рынок и всё больше кода на них пишется. Шарп ещё молодой, а жава поглотила энтерпрайз сегмент чуть менее, чем полностью. И мобилки. И андроид в том числе. И ещё хуй знает что, ибо в каждом сегменте найдётся своя жаба.
Есть много людей толкающих Яву, или .НЕТ. Не потому что языки хорошие, или потому что им от этого хорошо. Просто так исторически сложилось. Большинство людей занимающихся продвижением этих языков элементарно ничего не знают про другие языки / технологии. Обычно это дурачки-студенты, которые проработали в одной и той же среде с десяток лет, и решили, что их опыта теперь достаточно для того, чтобы составить мнение. Это люди без теоретической базы, без настоящего жизненного опыта, заменившие и то и другое коммерческими лозунгами.
Ну и почему энтерпрайз стал эталоном написания хорошего кода? Я проработал в HP Business Object (APS отделе). Это был мой единственный долгосрочный контакт с энтерпрайзом в качестве программиста. Кроме этого у меня есть долгая история знакомства с энтерпрайзным кодом Адоба (в качестве тестера). Я не заметил никаких преимуществ в качестве кода. Как раз наоборот: такой код, как правило, унылое однообразное говно. Примеры хорошего кода, который я встречал были, как правило написаны энтузиастами развивающими свой язык, иногда - преподавателями публикующими книги, иногда - реализации утилит, у которых есть множесто конкурентов (не типично для энтерпрайза), например, компиляторы регулярных выражений, реализация IP протокола и т.п.
вот если бы был у них Великий Гуру из газетенки, который даже си не осилил, он бы рассказал им что настоящие продукты нужно писать на адобовском Кэшен Скрипте!
достаточно посмотреть на сложность решений гугла и вконтакта чтобы понять что сравнивать их не нужно
Если бы Ролсройсы стоили как Жигули, и их можно было производить таким же малоквалифицированым персоналом и за те же деньги, я думаю Жигулей бы продавалось гораздо меньше. Но то, что Жигулей продается больше Ролсройсов не значит, что Жигули качественнее.
У энтерпрайза как правило нет цели написать очень качественную програму, т.как цена, время и требования к персоналу скорее всего окажутся коммерчески неадекватными. Вотличие от этого, программы, где качество играет большую роль будут писаться на других технологиях, и тут, например, не редкость увидеть что-то из ML/Miranda-подобных языков, или даже Лисп/Пролог.
Так эта штука не проверяет произвольные программы на CL, это просто очередной прувер. Как наличие прувера с CL-подобным синтаксисом помогает избегать ошибок (в том числе и в типах) в типичном CL-коде?
>>пролог
тьы болен
Ну и кроме того, читать не умеешь. Речь про задачи требующие высокого качества, а не про энтерпрайз, где качество максимум среднее.
быстрая разработка прототипов прикладных программ;
автоматический перевод с одного языка на другой;
создание естественно-языковых интерфейсов для существующих систем;
символьные вычисления для решения уравнений, дифференцирования и интегрирования;
проектирование динамических реляционных баз данных;
экспертные системы и оболочки экспертных систем;
автоматизированное управление производственными процессами;
автоматическое доказательство теорем;
полуавтоматическое составление расписаний;
системы автоматизированного проектирования;
базирующееся на знаниях программное обеспечение;
организация сервера данных или, точнее, сервера знаний, к которому может обращаться клиентское приложение, написанное на каком-либо языке программирования.
Хочешь, я тебе такого же про Фортран накидаю? или про Кобол?
Я тебе вопрос задал: в каких продакшен задачах сейчас он используется
А ты мне рассказал для чего он создавался.
Какие бля системы проектирования, какие сервера данных сейчас используют Пролог?
Меня, как простого программиста не особо посвящали в детали того кто именно заказчик. Все, что я знал, что установок было около десятка. На одном из собраний промелькнула новость о том, что Бритиш Эирвейз является нашим "новым стратегическим партнером", что значит, что мы им поставляли наши САП говнопрограммы. Вот, я так понимаю они там в Бритиш Эирвейз, например, и пользуются Прологом.
Пример интересных задач, где используется Пролог: как язык запросов в графовых базах данных. Например в AllegroGraph. Другой пример: Пролог используется для парсинга и поиска закономерностей в ДНК (DNA-ChartParser).
Заебись логика. Шарп и жава популярны, потому что их толкают те, кто нихуя не понимает, но так исторически сложилось.
То есть ты реально не понимаешь, почему эти языки стали популярными?
Это действительно так? Что на жаве бесплатно, на шарпе платно?
2. Сервер под веб. IIS требует Windows Server (ну для серьезных задач) а сервер стоит денег. tomcat (или jetty)@Linux бесплатен
Это так, сразу
IIS на десктоп вообще не ставится что ли?
с ограничением 10 одновременных клиентов
Небось все отключается одним ключиком в реестре?
искусственные ограничения ОС
иначе все будут на виндовс 7 работать вместо гораздо более дорогого винсервера
Они раньше парой ключиков и отключались.
Придумай алгоритм, ты же программист.
Даже если и ключиком -- это нарушение лицензии, а энтерпрайз на это не пойдет
>Даже если и ключиком -- это нарушение лицензии, а энтерпрайз на это не пойдет
Вот поэтому могли и ключиком сделать.
Кстати подменять баннер апача - нарушение лицензии.
В граниты!
Ненавижу это явление. Какой-нибудь прославившийся хрен под вечернее пивко в твиттерок пишет: "Нормальные пацаны пишут typedef посерёдке: int typedef ko_type; по-старому - пидарство и нечитаемо."
А через неделю на совещании солянка из таких "правил" распечаткой падает на стол, сопровождаемая словами: "теперь пишем так, иначе - минус премия, плюс десять ударов хлыстом на главной площади".
Любой код, если его не трогать, через полгода превращается в говно, как бы старательно в нём не избегали использования свойств, синтаксического сахара, венгерки, копипаста и т.д.
это называется "мода". или - "стадный инстинкт".
и человечество всегда было падко на шарлатанов с панацеями.
> А через неделю на совещании солянка из таких "правил" распечаткой падает на стол [...]
а это скорее лень и часто простая неграмотность начальства/лидов. вместо того что бы работу делать, и себя в курсе текущих подводных мин держать, предпочитают время расходовать на поиск панацей проблем программирования. но все заканчивается тем что все эти панацеи оказываются на самом деле плацебо... и все начинается по новой.
В аналоговых схемах удавалось реюзать транзисторы. Количество уровней сигнала, ограниченное только квантовыми эффектами, позволяет разделить сигналы после смешивания.
В цифровых хуже: там придётся разделять сигналы по времени с помощью стробирования. В итоге придём к чему-то, похожему на процессор.
P.S. Хотя в цифровых мы можем использовать ШИМ, фактически пропуская аналоговые сигналы через цифровые логические элементы.
TDMA не одинок. есть еще CDMA. это когда (примитивный пример) бродкастится число, и каждый девайс вычисляет модуль по сконфигурированому числу. остаток после модуля и есть передаваемая информация для этого девайса.
ЗЫ похоже все уже забыли про "аналоговые компьютеры". https://ru.wikipedia.org/wiki/Аналоговый_компьютер . там правда мало чего описано и примеров мало. но тут есть чего - https://ru.wikipedia.org/wiki/Интегратор .
ты где это Г нашел?
это как там еще какое то светило в некрософте, который проповедует что номера версий это излишне и плохо. под его влиянием народ на первых Н версиях DirectX трахался с определением версии DX (что бы воркараунды/совместимость в рантайме активировать).
Нарисуем куб с двумя источниками света. Если площадь тени меньше 42.314, то версия X, иначе Y.
На читаемость кода и возможность поддержки ему просто насрать.
Короче, эту книжку надо в обязательном порядке закусывать Мартином Фаулером.
А Рихтер один из старейших сотрудников MS
Он писал про WinApi via C и про разработку под винду еще в 80х (кроме него и Пецольда про винду вообще тогда не писали)
Его книга про .NET одна из лучших
Он учит не красоте кода, а архитектуре вирт машины, и называть его упоротым, по меньшей мере, глупо
> Он писал про WinApi via C и про разработку под винду еще в 80х (кроме него и Пецольда про винду вообще тогда не писали)
>> Причем тут авторитет?
Ну так аппелирование к авторитету же.
А термин "упоротый" в данном случае трактуйте как синоним "черезмерно увлечённый", чтобы не было баттхёрта. Сэр.
Ну так Рихтер и не учит писать красиво. Он рассказывает как устроен дотнет
красоте учит Фаулер, "программист прагматик", "совершенный код", "континиус деливери" итд
У него есть отличная книжка про энтерпрайз паттернс
и про энтерпрайз интегрейшен паттернс
итд
а про сами паттеры нужно ганг ов фор
Самые адекватные паттерны у Лармана.
>энтерпрайз паттернс
>энтерпрайз интегрейшен паттернс
>паттеры нужно ганг ов фор
Не возвращайся никогда.
интерпрайз ни нужен
ты бессмысленный, жалкий пиздун
http://i.imgur.com/RcBizFT.jpg
Вообще все книжки рекомендую с оговорками. Эту особенно с оговорками.
>C#
>ООП
>реfuckторинг
>паттерны
Да тут же полный набор!
wvxvw, срочно 10 томов нормальных книжек, внутричерепно!
C# пользуются только идиоты. Нужно писать на прологе.
ООП пользуются только маркетологи. Нужно писать на прологе.
Рефакторинг это маркетинговый шлак. Нужно сразу писать хорошо (и на прологе).
Паттерны это маркетинговый шлак, у нас в прологе их нету
Типизации не существует, это маркетинговый шлак
с уважнием,
Сетевой администратор "Едиот Ахронот", wvxvw
Microsoft не стандартизирован и им пользуются только посредственности. С Microsoft никогда не стать программистом.
В Microsoft даже пролог не используется.
Microsoft не мощный, и фотошоп не мощный потому что платный. Гимп бесплатный, потому им удобнее. Чем бесплатнее продукт, тем он удобнее. Непосредственности пользуются бесплатными продуктами, платными продуктами пользуются только посредственности, потому что это это гербалайф и секта. Если ты пользуешься майрософт, то ты посредственность, жертва маркетинга, гербалайф и секта. нужно использовать gimp и пролог.
На ассемблере
Но вообще Рихтер крут
За Win32 via C и CLR via C# надо ставить памятник
В последствие можно будет реализовать set и get по-другому, а пока что они просто представляют аксессор и мутатор для филда.
Сравним с жабой
Далеко не всегда это является проблемой. Мне приходилось превращать поле в свойство примерно... 0 раз.
Бедненькие! Не могу читать без слёз. Это несправедливость. Как же вы без них живёте?
Кушайте, крестушатки. Кушайте, маленькие.
https://ideone.com/Y4S7jx
Написание кода с пропертями можно и подсахарить:
И можно использовать без знания тонкостей проставления const и ссылок:
Мама-мама, а этот дяденька ругается нехорошими словами. Он сказал "#define" и "##name", а ещё он показывал мне свой SETTER.
Крестушоночек, не плачь. Тех, кто плачет, сбрасывают со скалы в обрыв с макросами. Это не Питония, это C++арта.
Впрочем, на ней он всё равно не так сильно искривляется, это да.
> Тут уж лучше методы.
+1
Одну технологию выбирый
@
Про другие технологии нихуя не знай
@
Но усиленно их обсирай
Мое мнение правильное
@
Все несогласные - мудаки