LINUX.ORG.RU

Джошуа Блох о замыканиях


0

0

Известный программист и архитектор программных систем Джошуа Блох дает интервью, в котором рассказывает, чем он занимается в Google, что он думает о предложении ввести в язык Java поддержку замыканий, о необходимости поддержки многопроцессорного исполнения кода функциональными языками, о введении LINQ в язык C# и еще много о чем...

>>> Подробности

anonymous

Проверено: svu ()

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

>> Замыкания на Питоне уже давно реализованы, на Java может через пару лет будут.

> В яве замыкания есть, см. примеры: http://ru.wikipedia.org/wiki/Замыкание_(программирование)Нужны анонимные функции

Кошмар какой-то как это на Яве делается... Не зря Гугль Питон использует. Кстати, прослушайте соответствующий пункт в приведённой видео-презентации Блоха: "10. What would be the deadline for Java Closures ?". Похоже что там речь об 1-2 годах идёт.

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

>Ну в C шаблонов вообще нет никаких. С - кривой язык?

Нет. С - до сих пор один из лучших, а если в голове есть мозги понимающие для _каких_ задач он подходит - то и лучший!

>Тем не менее 2 my mind языку C больше недостает опциональной уборки мусора чем шаблонов.

Либо ты кретин (ничего личного) - либо ты о С++ - о __другом__ языке! Но тогда ты кретин вдвойне ,)

> ... float вообще для бизнес-кода не годится, только для графики.
>Absurd (*) (04.01.2008 14:09:51)

Утверждение и диагноз - смотри как получилось ,)

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

>import java.util.List;

>public class A {
>void m(List<Integer> l) {}
>void m(List<Float> l) {}
>}

>A.java:4: name clash: m(java.util.List<java.lang.Integer>) and >m(java.util.List<java.lang.Float>) have the same erasure

Подтверждаю кривость генериков. Проблема в том. что не возможно узнать каким типом параметризоват дженерик. Остальное из этого и вытекает.

к примеру функции m(List<MyType1> l) {} И m(List<MyType2> l) {} имеют одинаковую сигнатуру. Далее проблема что не так просто в зависимости от типа дженерика делать разные действия.

Но это собираются пофиксать в 7-й Java.

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

>>Ну в C шаблонов вообще нет никаких. С - кривой язык?

>Нет. С - до сих пор один из лучших, а если в голове есть мозги понимающие для _каких_ задач он подходит - то и лучший!

Для всех. Кроме веб и писания скриптов к большим программам типа AutoCAD, но и там пригодятся модули на C для вызова из скриптового языка.

>>Тем не менее 2 my mind языку C больше недостает опциональной уборки мусора чем шаблонов.

>Либо ты кретин (ничего личного) - либо ты о С++ - о __другом__ языке! Но тогда ты кретин вдвойне ,)

С++ мы вообще не рассматриваем. В С++ реально используются только фреймворки типа Qt или оффтопичных MFC/ATL, которым возможностей языка С++ недостает, несмотря на их изобилие. Это решается с помощью расширений языка (msvc++) или с помошью препроцессоров (Qt moc). Пытаться использовать навороченный стандартный С++ в реальном проекте - это верный путь к тому чтобы загубить проект.

>> ... float вообще для бизнес-кода не годится, только для графики. >Утверждение и диагноз - смотри как получилось ,)

Твой оклад - 777.77777777(7) долларов

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

>> Вечно забываю, что Ява - это Кобол нашего времени :D

> А что плохого - это бабки.

Ну там кто-то заявлял выше по треду, что Ява - это типа универсальный язык программирования :)

> В С++ реально используются только фреймворки типа Qt или оффтопичных MFC/ATL, которым возможностей языка С++ недостает, несмотря на их изобилие. Это решается с помощью расширений языка (msvc++) или с помошью препроцессоров (Qt moc).

Ну вот не надо всё валить в одну кучу - moc появился потому, что не все компиляторы, которые Trolltech хотела поддерживать, реализовывали шаблоны. И _всё_.

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

>> В С++ реально используются только фреймворки типа Qt или оффтопичных MFC/ATL, которым возможностей языка С++ недостает, несмотря на их изобилие. Это решается с помощью расширений языка (msvc++) или с помошью препроцессоров (Qt moc).

>Ну вот не надо всё валить в одну кучу - moc появился потому, что не все компиляторы, которые Trolltech хотела поддерживать, реализовывали шаблоны. И _всё_.

Может Строуструпу надо было инициально озадачиться поддержкой сигнал/слот на уровне языка? Это важнее шаблонов и перегрузок операторов. Или может лучше бы С++ вообще бы не было, а был бы Objective C ?

>>> Вечно забываю, что Ява - это Кобол нашего времени :D

>> А что плохого - это бабки.

>Ну там кто-то заявлял выше по треду, что Ява - это типа универсальный язык программирования :)

А что, в движках типа quake или в кодеках реально где-то используется std::vector<float> ? Там по моему вполне обходятся массивами фиксированного размера чтобы память не фрагментировать попусту. Ну на крайняк realloc. В RTSJ тоже применяется immortal/scoped память и массивы фиксированного размера.

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

> Может Строуструпу надо было инициально озадачиться поддержкой сигнал/слот на уровне языка?

Зачем? Наскольо я понимаю (правда, с Qt не работал), слоты/сигналы вполне моделируются шаблонами.

> Это важнее шаблонов и перегрузок операторов.

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

> Или может лучше бы С++ вообще бы не было, а был бы Objective C ?

Мне лично Objective C всегда казался уродцем. Лучше всего - если бы Страуструп был поразборчивее при добавлении фич в язык.

> А что, в движках типа quake или в кодеках реально где-то используется std::vector<float> ?

ХЗ, не писал. Слышал только, что в играх STL используется довольно широко.

> Там по моему вполне обходятся массивами фиксированного размера чтобы память не фрагментировать попусту

Теоретически, можно и так. Но я сомневаюсь, что так делает кто-нибудь, кроме Даркмана :)

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

>> Может Строуструпу надо было инициально озадачиться поддержкой сигнал/слот на уровне языка?

>Зачем? Наскольо я понимаю (правда, с Qt не работал), слоты/сигналы вполне моделируются шаблонами.

Шаблоны + макросы. Например, в WTL это происходит так:

class CMyWindow : public CWindowImpl<CMyWindow, CWindow, CFrameWinTraits>
{
public:
    DECLARE_WND_CLASS(_T("My Window Class"))
 
    BEGIN_MSG_MAP(CMyWindow)
        MESSAGE_HANDLER(WM_CLOSE, OnClose)
        MESSAGE_HANDLER(WM_DESTROY, OnDestroy)
    END_MSG_MAP()
 
    LRESULT OnClose(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
        DestroyWindow();
        return 0;
    }
 
    LRESULT OnDestroy(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled)
    {
        PostQuitMessage(0);
        return 0;
    }
};

Лично мне Qt подход кажется менее уродливым.

>> А что, в движках типа quake или в кодеках реально где-то используется std::vector<float> ?

>ХЗ, не писал. Слышал только, что в играх STL используется довольно широко. 

Играм больше недостает отсутствие номальных указателей на метод
объекта. Хренота типа boost::function работает отвратительно - там 
сначала вызывается operator(), потом вызывается виртуальный метод
объекта-переходника, потом вызывается целевой метод через указатель
на метод. Насколько я понял, в Doom III опять-таки используется
препроцессор чтобы обойти ограничения С++ на вызов методов объектов
через указатель.

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

Вообще нет ничего кроме нулей и единиц. Понапридумывали... Шаблоны, указатели, методы. Да пребудут с вами три великих стека, друзья мои. Во имя Ассемблера, брата его Ассемблера и сестры его Ассемблера. Братья и сёстры во Ассемблере спасут мир.

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

> Пусть тогда добавят стандартную поддержку какого-нить языка, на котором можно писать курсовые и прочее for fun

> А для fun требуется именно "стандартная поддержка"?

Да. Все дело в том, чтобы классы этого языка можно было дергать из Явы, и на этом языке писать EJB/Backing beans/etc.

> o_O А так - Jython давно уже есть.

1. Не смешно. Лучше уж всомнить JRuby/Groovy.

2. Я могу испоьзовтаь что-то кроме Java для JEE?

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

>>> А что, в движках типа quake или в кодеках реально где-то используется std::vector<float> ?

>>ХЗ, не писал. Слышал только, что в играх STL используется довольно широко.

>Играм больше недостает отсутствие номальных указателей на метод объекта.

вот любопытный обзор "The Next Mainstream Programming Language: A Game Developer’s Perspective"

http://morpheus.cs.ucdavis.edu/papers/sweeny.pdf

Вкратце, описываются потроха Gears of War на движке Unreal3.

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

Там, где рулит С++, девелоперам не понравился динамический характер эксепшнов, и они воткнули систему типов Хаскелля в свой язык, что-то на основе C++. Получили статически, заранее проверяемую семантику вызовов функций, улучшили отладку.

Ну и про симуляцию и вычисления -- неожиданно хорошо подошла STM (software transactional memory) и функциональщина из Хаскелля. C++ лучше для вычислений, Хаскель - для симуляции.

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

> Зачем? Насколько я понимаю (правда, с Qt не работал), слоты/сигналы вполне моделируются шаблонами.

угу, как и аспекты. Но как же криво они при этом моделируются, проще язык расширить =)

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

>> o_O А так - Jython давно уже есть.

> 1. Не смешно.

Что не так с Jython?

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

> Я что-нить из них для JEE могу использовать?

kawa "свободно" работает с Java-классами и объектами. Надо что-то ещё? (сорри, я просто не в курсе - скорее всего "поддержку" придётся "допиливать", хотя и просто писать классы списками с макрами "прикольно" :)

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

Absurd - извиняюсь за излишне резкий тон - не так понял поначалу.

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

>>> ... float вообще для бизнес-кода не годится, только для графики. >>Утверждение и диагноз - смотри как получилось ,)
>Твой оклад - 777.77777777(7) долларов

Спокойно! денежные суммы мы в копейках тоже храним (явно ушли float->int), но ваше утверждение все еще ложно! :)
Для примеру изобрази ко мне interest rate %4.5625 per year??? Причем прайм - %2.15

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

>Для примеру изобрази ко мне interest rate %4.5625 per year??? Причем прайм - %2.15

Ни то ни другое не является степенями двойки, следовательно во float-ах не выражается. Хотя ... Массивно BigDecimal мне использовать не приходилось, так что судить не берусь.

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