LINUX.ORG.RU
ФорумTalks

IT хомячки


0

1

Что если взять какой-то более менее адекватный и современный язык программирования за основу. Переименовать синтаксические конструкции чтобы ничего по настоящему не изменилось, но отследить оригинал было бы уже не тривиально. Конечно в меру, чтобы не изуродовать язык.

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

Выпустить пару статей чтобы появились фанатики. Теперь запостить что-либо чтобы спровоцировать холивары.

Как вы думаете какое будет распределение фанатов?

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

Ясное дело на это надо много времени и ресурсов, но если допустить как мысленный эксперимент.

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

Думаю пришло время запилить соснули.рф для сишарпа. Особенно в свете кассандры, гуглоразработок, апачеразработок, spring source и опенсорса в целом. А с java 8 уже жалко сишарп станет

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

Думаю пришло время запилить соснули.рф для сишарпа. Особенно в свете кассандры, гуглоразработок, апачеразработок, spring source и опенсорса в целом. А с java 8 уже жалко сишарп станет

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

сишарп постоянно апдейтят новыми фичами. Ява апдейтится раз в 10 лет фичами, которые у всех давным-давно есть.

плюс, что там с java community process? Одно время были стоны, что оракл его совсем убил

у сишарпа нормальный нативный интерфейс в венде, а у явы этот свт

плюс там нормальная platform sdk. Которую можно изучать прямо по ходу кодинга, не открывая гуголь. Все сделано для простых хомяков. А яву только с гуглем

и интеграция с восьмерочкой у сишарпа есть в стандартной библиотеке

а еще, сишарп можно звать из С++-кода

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

Это всё синтаксический мусор. Вокруг интерпрета^W языковой VM. И #, и старый бейсик, и питон-пхп-перл, и жабка.

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

А с java 8 уже жалко сишарп станет

И что же java 8 такого принесёт, чтобы убить все фичи C#? Лямбды, которые в C# уже несколько лет как? event, LINQ, async никто не отменял ещё в C#.

P.S. мы сейчас говорим именно про язык, а не про .Net vs Java VM.

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

мы сейчас говорим именно про язык, а не про .Net vs Java VM.

В этом и суть любых шарподжаво срачей. Ну так всем ясно что джава - более примитивный язык. А вот экосистема Java и шарпа, разные уровни вообще. Java 8 как раз тот шаг, который сотрет существенную разницу в языке. И даже если мы опустимся до уровня школьного сравнения платформ «давайте сравним только синтаксис», то тут тоже уже не будет серьезной разницы.

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

Java 8 как раз тот шаг, который сотрет существенную разницу в языке.

в тебя вселился менеджер, попей свяченой водички

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

Java 8 как раз тот шаг, который сотрет существенную разницу в языке.

Какой шаг? Давай конкретику.

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

Лямбды устроены так, что это не отдельный тип, а генерация реализации интерфейса. Потому все библиотеки джава мира сразу получает поддержку лямбд даже без перекомпиляции, там где есть передача реализации интерфейса с одним методом. Это касается Guava, concurrent алгоритмов, разнообразных колбеков всех фреймворков и библиотек. И при этому async и LINQ выглядят зашитыми в язык костылями. async вообще непонятно зачем если можно просто выполнить Callable поверх пула и получить Future. Со всеми плюшками кастомизации пула. LINQ - смешение работы над коллекциями, БД и XML, которые вообщем разные. JPA есть, операции над коллекциями есть и в стандартной библиотеке и в Guava, а с Java 8 автоматически с поддержкой лямбд

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

Потому все библиотеки джава мира сразу получает поддержку лямбд даже без перекомпиляции, там где есть передача реализации интерфейса с одним методом.

Ты не поверишь, но в C# точно так же. Ибо LINQ отлично дружит с IEnumerable<T>.

LINQ - смешение работы над коллекциями, БД и XML, которые вообщем разные.

Ты не понял что такое LINQ. LINQ - это сахар над интерфесом, построенном на лямбдах и стандартных методах типа where, filter и т.п.. Т.е.

такой код (взято тут http://habrahabr.ru/post/133666/ )

SomeCoolList<Student> students = ...
          double highestScore = 
            students.parallel()
                    .filter(Student s -> s.getGradYear() == 2011)
                    .map(Student s -> s.getScore())
                    .max();

будет выглядеть примерно вот так:

var request = from s in students.AsParallel()
                   where s.getGradYear() == 2011
                   select s.getScore;
var highestScore = request.max();

Но можно и в Java Style написать. Так тоже можно, но менее красиво и читаемо, т.к. скобок многовато.

Вообще говоря тут просто утащили эту идею из C#. Но! Есть один фейл, без var (или аналога) это всё будет ужасно. Почему? Потому что класс для request генерится автоматом в C#, а вот в Java придётся руками прописывать его, что сильно подорвёт красоту такого кода.

Как вот такое пример кода сделать на лямбдах? (взял первый попавшийся пример с вики)

// тип Northwind — это наследник DataContext, созданный SQLMetal
// тип Northwind.Orders — Table<Order>
// тип Northwind.Customers — Table<Customer>
 
Northwind db = new Northwind(connectionString);
 
// используется ключевое слово 'var', так как не существует имени у типа,
// к которому принадлежит результат запроса
 
var q = from o in db.Orders from c in db.Customers
    where o.Quality == "200" && (o.CustomerID == c.CustomerID)
    select new { o.DueDate, c.CompanyName, c.ItemID, c.ItemName };
 
// q ссылается на объект типа IEnumerable<T>, где T — анонимный тип,
// генерируемый компилятором
 
foreach (var t in q)
{
    // t является строго типизированным, хоть у его типа и отсутствует имя,
    // известное при написании кода
 
    Console.WriteLine("DueDate Type = {0}", t.DueDate.GetType());
    Console.WriteLine("CompanyName (lowercased) = {0}", t.CompanyName.ToLower());
    Console.WriteLine("ItemID * 2 = {0}", t.ItemID * 2);
}

Особо интересует аналог этого:

new { o.DueDate, c.CompanyName, c.ItemID, c.ItemName }

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

Началось с

Если есть попытка, то не Java/C#.

Но фанатика долго не удержать в узде и вот:

Думаю пришло время запилить соснули.рф для сишарпа. Особенно в свете кассандры, гуглоразработок, апачеразработок, spring source и опенсорса в целом. А с java 8 уже жалко сишарп станет

И вы снова будете говорить что вы не Java фанатик?

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

Вы не поверите, но совсем недано метные Java фанатики доказывали что все это не нужно.

После того как объявили о том, что в в Java 8 будут лямбды, они сразу попали у тех-же самых людей в список полезных нововведений.

Если Оракл в следующей жабе запилит подобие LINQ они сразу начнут орать что это нужное полезное нововведение

А пока, кроме как «НЕНУЖНО» вы от них ничего не услышите :)

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

Если Оракл в следующей жабе запилит подобие LINQ они сразу начнут орать что это нужное полезное нововведение

Пофиг на сахар LINQ, пусть лучше аналог var запилят, будет в 10500 раз полезней :)

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

Пофиг на сахар LINQ,

LINQ это не только сахар но и expression trees, linq2xml, linq2sql, linq2object

Мне лично особенно не хватает linq2xml :(

пусть лучше аналог var запилят, будет в 10500 раз полезней :)

Imho extensions полезнее.
С типами IDE может разобраться и сгенерировать нужный тип, но безусловно, Oracle постепенно передерёт полезные фичи из C#

Интересно, что тогда IT хомячки вроде vertexua будут делать?

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

LINQ это не только сахар но и expression trees, linq2xml, linq2sql, linq2object

Сам по себе LINQ - это синтаксический сахар к интерфейсу IQueryable. А всё, что можно записать через 'from in where select' можно переписать и через обычные вызовы функций, которые итераторы возвращают. То, что нет аналогичных либ - плохо конечно, хотя может лямбды подстегнут народ на написание :)

С типами IDE может разобраться и сгенерировать нужный тип, но безусловно, Oracle постепенно передерёт полезные фичи из C#

С var вохможны анонимные типы( http://msdn.microsoft.com/ru-ru/library/bb397696.aspx ), без var - даже IDE не поможет, т.к. тип придётся хардкодить.

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

без var - даже IDE не поможет, т.к. тип придётся хардкодить.

IDE может вычислить тип и подставить в выражение.
Так делают Inelij Idea и их-же Resharper

Конечно, придется повторять это действие каждый раз, когда тип выражения изменился, но уверен, Оракл перетацит все из C# к Java 10

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

Конечно, придется повторять это действие каждый раз, когда тип выражения изменился, но уверен, Оракл перетацит все из C# к Java 10

Ну да, так что ждём :) Кстати, а ты Kotlin не пробовал?

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

Их позиция - занимать средину между убогостью синтаксиса Java и мощностью Scala. Чисто субъективное мнение, но именно в этом ошибка. Те разработчики, которые просто работают, хотят стабильности и не парятся о технологическом аспекте будут использовать Java. Для них Kotlin останется игрушкой, там нет киллерфич, просто удобства, минорные фиксы по сравнению с Java, и новые недостатки. А если команда выберет стратегию использования новейших разработок - то они запросто будут использовать Scala. Если человек вырвался из рамок Java, то он захочет большего - Scala или например C#, то тогда необходимо сменить привычную проверенную платформу.

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

Как вот такое пример кода сделать на лямбдах?

var q = from o in db.Orders from c in db.Customers
    where o.Quality == "200" && (o.CustomerID == c.CustomerID)
    select new { o.DueDate, c.CompanyName, c.ItemID, c.ItemName };

Зачем делать на лямбдах запросы к базе? А так смотрится хорошо.

var request = from s in students.AsParallel()
                   where s.getGradYear() == 2011
                   select s.getScore;
var highestScore = request.max();

Это без проблем:

(apply max (map :score (filter #(= 2011 (:grad-year %))
                               students)))

Особо интересует аналог этого:

new { o.DueDate, c.CompanyName, c.ItemID, c.ItemName }

Так коллекшн компрехеншн уже давно во всех нормальных языках есть. Чем гордиться-то? И опять же причем тут лямбды?

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

Разговор идёт о C# vs Java, с чего ты решил преплести сюда лисп? Да, в лиспе нету проблемы Java с отсутствием лямбд.

Зачем делать на лямбдах запросы к базе?

Ты вообще ни черта не разобрался в вопросе. LINQ - это сахар к набору функций высшего порядка. Но вот беда, ФВП не работают без лямбд (вернее работают, но там такой ужас получается, что его лучше не вспоминать).

Так коллекшн компрехеншн уже давно во всех нормальных языках есть. Чем гордиться-то? И опять же причем тут лямбды?

Напоминаю, что разговор идёт о C# vs Java. Lisp сюда никаким боком не относится. Но ещё раз поясню, коллекшн компрешен невозможен без автоматического вывода типов компилятором. C# это умеет, Java - нет и в Java 8 не предвидится. А без коллекшн компрешн эффективность лямб падает, что я и показывал выше.

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

Напоминаю, что разговор идёт о C# vs Java

Рекордный разговор о в своей унылости. Аргументы фанатиков уже давно известны. И на сами платформы это мало повлияет, будут жить и здравствовать.

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

А без коллекшн компрешн эффективность лямб падает

Будем есть кактус Будем писать тип результата руками пока не запилят нормальный var. Но цепочка ФВП из Guava нормально позволяет вычислять тип в большинстве ситуаций, как ни банально, но проблема в основном в verbosity анонимных классов, вот ее и решат.

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

Существует отлично отлаженная архитектура работы, оптимизации создания классов, реализации интерфейсов и вызовов методов по интерфейсу. Плюс есть много библиотек принимающих реализации интерфейсов из одного метода в свои методы. В любом случае замыкание параметров в любом рантайме скорее всего приведет к созданию объекта в той или иной форме. Логично при этом не городить велосипедов, просто использовать отлично работающую инфраструктуру. Что кстати не отрицает возможности создания интерфейса Function для более очевидной сигнатуры метода.

Каррировать придется все новыми классами, да. Но достаточно адекватное решение, которое не ломает совместимость

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

Вы не поверите, но совсем недано метные Java фанатики доказывали что все это не нужно.

Вспомнился лурк ))

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

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

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

Так вы уже считаете лямбды в Java полезными?

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