LINUX.ORG.RU
ФорумTalks

IT хомячки


0

1

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

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

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

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

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

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

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

не надо компилировать и вообще запускается слёту

ну не называть же все интерпретируемые ЯП лиспами

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

let-ом

я JS не знаю (C# впрочем тоже), чем тут «dynamic x=y;» хуже «let x=y;»?

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

java это не эксперимент а legacy пипец, за это мы ее и любим, это вам не питон

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

весьма спорное утверждение, ну да ладно

:) ну встаки они ближе к лиспу чем к сишарпам

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

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

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

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

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

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

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

Аргументы будут или как обычно на ЛОРе?

Бредовым мыслям контраргументы не требуются.

JS — это кривой лисп без макросов.

[trollmode]С точки зрения суровой реальности, это лисп теперь - кривая, форсящая стиль и никому не нужная версия JS с макросами и скобками.[/trollmode]

border-radius
()
Ответ на: комментарий от 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

Во втором эксперименте я почти уверен у худший ЯП будет более популярен

Вы и на самом деле считаете себя умнее и лучше других.
Прикольно.

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

Началось с

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

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

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

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

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

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

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

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

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

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

Не понял, что вы имеете в виду, но в C# есть оператор let

grim ★★☆☆
()
Последнее исправление: grim (всего исправлений: 1)

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

тут все будет решать исторический фон.

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

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

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

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

Нужно осознанно ухудшить во всех точках.

Ни к чему не приведет, так как неаутентично. Чтобы создать язык для идиотов нужно самому быть идиотом, и при этом думать что делаешь что-то полезное.

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

Так, Паскаль — это кривой Си, Питон — это кривая Java, Ruby — это кривой Лисп.

Вам не говорили что у вас дурной вкус?

DNA_Seq ★★☆☆☆
()
Ответ на: комментарий от 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)
Ответ на: комментарий от Dark_SavanT

очень классна фича, надо использовать везде

stevejobs ★★★★☆
()
Ответ на: комментарий от 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 ★★☆☆
()
18 ноября 2013 г.

главное «модно, стильно, молодежно». разместить статью на быдлохабре, хомячьё набежит и сожрет, не давясь

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