Таварішьчь Льоша, я ні асуждаю вас за іспользаваніє уже пачівшева Z80 в ісслєдоватільскіх целях, но здесь я питаюсь найті людєй, каториє скривают от обшьчєства сваї таланти.
+1 тобі, але на C# таке витворяти можна, шо то просто ппц. =))) До речі, єдине, чим може Java похизуватися перед C# -- дуже корисний throws… Бльо, його в "шарпі" нема…
Ггг, синтаксис, кажеш? ))) Почитай спеки по C# 2.0 та C# 3.0 і побачиш, шо Java програє капітально. Доступні бібліотеки? Тримай: .NET FX 3.0, працював ше з Silverlight (Windows Presentation Foundation) -- Java зі своїм JRE/JDK справді ховається.
А як тобі така супер-фішка C# 3.0 як фактично SQL-запити для будь-яких (!) колекцій, XML-доків і "просто" реляційних БД на рівні самої мови?
Та до чого тут "C# тільки під віндою працює"? Головне мати нормальний компайлер (або транслятор), який вже згенерить код залежно від платформи. Я ж казав про концептуальні фішки мови, а не .NET-платформи.
Ги… Не чекав тут побачити подбне… Хоча знаю що більшість девелоперів слухають рок…
Ну ладно, про все попордяку
C# 3.0 то точно той самий 2.0, ніяких змін в компіляторі не було, добавили тільки білотеки .NET FX
C# 3.5(здається він все ще в беті) -- добавили ще декілька бібліотек серед яких Silverlight + "супер-фішку" ламбада експрешини "SQL-запити для будь-яких (!) колекцій, XML-доків і "просто" реляційних БД на рівні самої мови".
Про ламбада експрешини треба сказати окремо -- мікромягкі довго думали чи включати ту фігню до C#, бо багато народу(серед яких і я) вважають шо штука зовсім не корисна, не прозора, реалізована незграбно і буде тільки шкодити молодим і недосвіченим…
Все ж таки вони включили ту "перевагу над Жабою" в 3.5, і тепер пів року переписують фрейморк шоб ту фічу всюди просапортити.
Нарахунок Джави, ти друже не правий. Хоч я не є її прибічником, але варто визнати шо версія 1.6 є практично еквівалентом до C# (дженеріки, там наприклад, навіть крутіші) До того там є якийсь еквівалент Сільверлайта.
З.І "Головне мати нормальний компайлер (або транслятор), який вже згенерить код залежно від платформи." -- компайлера тут замало, треба ше рантайм. І це дуже виликий мінус шо асп нет сайти, наприклад, неможна заводити на фрішних лінуксових серверах. Є опен сорсні проекти типу "моно", але серйозні проекти поки що не ризикують то юзати…
Я би не сказав, що лямбда-вирази не корисна, не прозора чи ше якась штука. І, до речі, щиро не розумію, що значить "реалізована незграбно". Як на мене, дуже корисно було би ввести лямбда-вирази ще в версію 1.0, і тоді можна було би навіть не вводити справді незграбних анонімних методів. Якшо людина не готова, хай просто читає доки по тому і просто вчиться (зараз так і роблю). Колись люди і від C відхрещувалися, бо писали все на асмі.
Я в свому попередньому пості переплутав LINQ з ламбада-виразами , давно з тим немав справи…
LINQ то не є чимось інноваційним, а просто ще одна запутана конструкція. Це всьо можна реалізувати на рівні препроцесора і на проміжний код воно немає ніякого впливу.
Нарахунок не ефективності -- краще форічом пройтися по колекції і зробити всьо що треба, ніж робити селект, резултатом якого буде тимчасова колекція заповнена якимись згенерованими проміжними класами. Купа копіювань і виділень памяті -- для маленьких колекцій і сучасних компів то майже пофіг, але загалом не ефективно.
Нарахунок написання універсального коду шо працює і з базами і колекціями -- так робити не варто. Завжди потрібно знати з чим ти працюєш шоб коректно обробляти виняткові ситуації. До тогож в базах я б радив сторед проки юзати.
З.І. я на мене то наприклад yield return, який появися в 2.0 штука в сто раз крутіша бо дозволяє реалізовувати сoroutines (незнаю як перекладається) так як заповідав Кнут. Такого не дозволяє більше ні одна з відомих мені мов крім ассемблера.
Не така вона й запутана. Наочна і крапка. Конструкції на LINQ фактично перетворюються препроцесором (я перше не в"їхав чому мені студійний компілятор видавав страшні і жахливі помилки).
Про foreach ніхто не спорить, але якшо запит дійсно складний, для нього ліпше зробити якесь узагальнення, щоби не марнувати час на написання коду для правильної вибірки даних. Тимчасова колекція не є добре теж. Тут просто синтаксис "винен".
Чому ж ні? Мати один інтерфейс до всього хіба зле (може скоро XPath ше впаяють?)? Щодо сторед процедур погоджуюся на всі 100.
моя позиція така -- LINQ можна юзати тільки для витягування даних з колекцій коли є складні критерії і якщо відомо що колекції не надто великі або швидкість не надто критична
для доступу до БД його юзати не варто взагалі, тому що ми отримуємо жорстке звязування, що фігово за означенням.
Крім того, LINQ негативно впливає на структуру проекту, бо тепер відпадає необхідність в data abstraction layer і всі робота з базою переноситься на рівень бізнес логіки.
Крім того, LINQ негативно впливає на структуру проекту, бо тепер відпадає необхідність в data abstraction layer і всі робота з базою переноситься на рівень бізнес логіки. відповісти
Ну добре, раз вже почали мірятися піпісками, то давайте. По перше, ті бібліотеки що йдуть разом з ждк хоч і важливі, але не вони в основному впливають на вибір яви як платформи. І так, чи є під НЕТ аналоги таких фреймворків як Spring і Hibernate? Це основа будь який ВЕЛИКИХ проектів. Ти бачив написаний на НЕТ платформі справді великий проект, такий де самі сорси займають декілька гігабайт? Саме ці два фреймвори і дозволяють розробляти такі проекти. Повноцінних аналогів під НЕТ я не знаю.
байт код - це є гут. По перше він однозначно декомпілюєтся, по друге кросс платформенність. Платимо за це оперативкою, я вже казав, що 2 гіга вистачить на дуже великий проект. на сьогодні це нормальні сиситемні вимоги.
віртуальні машини теж гут, так як вони забезпечують кроссплатфоременність.
гарбедж колектор - тут навіть не може бути варіантів, це однозначно потрібна штука. Основний баг в УСІХ с++них проектах - це загублена пам"ять, великі с++ні проекти в кінці кінців приходять до самопальних гарбедж колекторів.
"Основний баг" C++-проектів те, що програмери, які пишуть на C++, мають "баги" в голові. Garbage-collectors, якшо чесно, дуже хороша штука, але Строуструп опирався на свій досвід, який вимагав більшого перформенсу. Він сам казав, що він створив "++" для того, щоби код було приємніше писати. Як основу він взяв вседозволеність C, наділив його набагато більшою функціональністю, і просто подарував світу атомну бомбу. Не розумію людей, які на C++ пишуть new чи new[] і одразу ж кажуть, що КОЛИСЬ закриють їх delete || delete[], приміром в деструкторах.
Байт-код не є гут. Декомпілити можна БУДЬ-ЯКИЙ код. C/C++ теж мають крос-платформеність, але не на рівні віртуальних машин, які, в принципі, їм ні до чого, а на рівні компілятора. Єдине, що потрібно зробити, -- перекомпілити код. Нейтів-код є щастя.
угу, будь який можна декомпілювати, але скомпілювати його заново майже не можливо. спробуй це проробити хоча б з мінімальною программою
Швидкість розробки грає першочергову роль.
В реальній розробці ПЗ, звичайно, дуже сумнівна користь, ще й при наявності відкритих сорсів :). Але ж в декомпіляції теж немає реальної потреби, крім вивчення і розваги. Ну а тут ще додаєтся можливість внести зміну і скомпілити заново.
Мля, а нашо взагалі компілити назад? Невже раніше патчів не існувало? Патчі для "жадних праграм" юзав? Отожбо. Ніхто тобі не дає перекомпілений код. Декомпільований (чи як трівіал -- дизасемблерний) код аналізують і просто роблять патч. Перекомпілювати немає потреби.
Мені, якщо чесно, і далі не зрозуміло, чому хизуються неповороткими фреймворками, які є надстройками ще над цілою купою інших фреймворків. Як на мене, дуже глупо реалізовувати ВЕЛИКИЙ проект на Java, встрачаючи перформенс (принаймі, я так поки це розумію). Пригадується, бачив результати бенч-марку, коли якийсь клоун на ньому показував, як на складних математичних обчисленнях Java, яка крутиться на віртуальній машині, змогла перегнати відкомпілений в нейтів-код сорс на C++. Особисто я сумніваюсь в тому, що потрібно жертвувати перформенсом. Хоча, як на мене, я просто погано розбираюся в правилах ринку.
Spring & Hibernate робилися не за один день, тому цілком можливо, що під .NET з"являться аналоги даних фреймворків.
Мля, я питався, чи хтось юзав C# 3.0, а не розводити holy war'и по тому, ЧОМУ Java ліпша (угу, але все-одно байт-код нах!).
Особисто ДУЖЕ мені сподобалося наступне:
1. лямбда-вирази нарешті замінили (читати: доповнили) анонімні методи, які мають дуже страшний синтаксис (як на мене; крім того, ця болячка є і в Java); правда, лямбда-вирази не дуже наочні, але те, що це набагато коротше тепер, радує набагато більше;
2. LINQ, DLINQ, XLINQ; просто був вражений тим, шо кожну IEnumerable-колекцію можна фільтрувати, не турбуючись про написання свого фільтру через ітерації по кожному елементу; і до того ж, використовуючи "from in where select" код робиться дуже наочним.
Я в свому попередньому пості переплутав LINQ з ламбада-виразами , давно з тим немав справи…
Але суті то не міняє -- то штука не ефективна з точки зору перфоменса(попробуй замутити селект по якійсь великій колекції) і ідеологічно не правильно (то зло - писати одноковий код і для доступу до баз даних і до колекцій). Навіщо робити щось без чого можна легко обходитися ?
Будь-яка мова високого рівня неефективна з точки зору перформенсу. Чим виший рівень, тим більше за нього потрібно платити. В принципі, цікаво було би реалізувати колекції на asm'і.
Працюю зара під WPF/CS3.0, по функціоналу суперкруто, інтерфейс проги за пару хвилин пишеться такий, шо торба як красів і вийобисто, але зіткнувся з проблемою: як то кажуть шагвлєво-шагвправо-растрєлнамєстє, рився Рефлектором в тому фреймворку, усьо інтернал і прайвет, хочеш свій контрол на базі вже існуючого написати - геморой на тиждень, МСи прописали якусь пропертю важну, а ти до неї хуй дойдеш шоб змінити… То поки єдиний великий мінус шо найшов за півроку…
бєбєбє, то нах асм, мо просто в машинних кодах писати, так вашшє крута?.. я б подивився як ти писав би прогу на асмі з функціоналом і дизайном наприклад ворда:?
десь бачив туторіал як операційку мінімальненьку накатати, то код до перших уроків займав 2-3кб
2 rvxNecroTrue: таваріщ, нінада, класічєскє німєцкє порно руліт!
Ага, туда ж, недавно в замовників в коді найшли:
private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
{ switch (comboBox1.SelectedIndex.ToString() as string)
{
case "0":
chartControl1.Series[0].ConfigItems.ColumnItem.ColumnType = ChartColumnType.Box;
break;
case "1":
chartControl1.Series[0].ConfigItems.ColumnItem.ColumnType = ChartColumnType.Cylinder;
break;
}
}
Ну, я би не сказав, що раритети. Просто в одній книжці бачив сампли коду з С++, трансльованого на С. Крім того, уяви як це ше більше захотілося після того, як взнав, шо BC 5.02 (цей точно) дозволяє з C/C++ коду генерити асмовий код. Я навіть написав загрузчик без stdlib після того. Шось в стилі:
start:
call _main
xor eax,eax
call ds:ExitProcess
end start
Кажись так. Ну, псевдо-код в принципі, бо давно нічо не писав на асмі.
Як кажуть (сам того не бачив) С код, згенерований СФронтом нон хуман ріддібле.
А взагалі кожен нормальний компілер повинен вміти повертати результати після кожної проміжної фази (код оброблений препроцесором, асм код, обєктний модуль або вже зліковану екзешку)