Обновить
63
1.3

Programmer

Отправить сообщение
В РФ наверное не будет официального проката — КНДР дружественная страна и все такое:) Как думаете?
Да ладно. Есть как минимум две платные книги по D и одна бесплатная.
Платные:
Andrei Alexandrescu — The D Programming Language (в том числе перевод на русский)
Adam D. Ruppe — D Cookbook
Бесплатная:
Ali Çehreli — Programming in D
Я кстати имел в виду кстати не лямбды, а именно блоки кода, включаемые на этапе компиляции. Отличие в том, что лямбды вызываются (то есть генерируется код вызова функции), а при прямой подстановке никаких вызовов не происходит. Я занимался embedded программированием, там в условиях очень ограниченных ресурсов приходилось писать такие вещи с помощью обычных макросов.

Например, в шаблоны С++ можно передавать целые числа; они передаются не через стек в рантайме, а напрямую встраиваются в код во время компиляции. Я считаю, что совершенно аналогично можно сделать передачу произвольных сущностей времени компиляции, в частности блоков кода
template<block B>
void foo()
{
   // do something
   B; // это не вызов, а именно подстановка кода напрямую
   // do something
}
// ...
foo<{ bar1(); }>();

Да, там будут проблемы с «гигиеничностью» (смешиванием имен из блока B и имен из самой функции foo), но все вполне решаемо.
Идея миксинов очень правильная, но реализация (строки в кавычках) мне концептуально не нравится — так как теряется возможность подсветки синтаксиса в IDE (нет возможности отличить обычную строку от фрагмента кода). Лучше как в Nemerle — в специальных скобках для квазицитирования.
Хотя в данном случае и квазицитирования не надо, достаточно разрешить передачу в шаблоны блоков кода в фигурных скобках. Такое кстати можно и в С++ ввести с минимальными изменениями в синтаксисе.
(ответ olegmax )
Все что называется «language feature emulation», многое из «metaprogramming» и «generic programming».
Из вашего списка пожалуй type traits, может быть polymorphic wrappers for function objects.
Tuples однозначно, их нужно на уровне синтаксиса слить со списками инициализации. Тогда можно писать выражения вида {i, j, k}=10; или {i, j, k} = {10,20,30}, множественные возвраты из функий — и все красивым и естественным путем.
Еще:
Any, Optional, Variant — должна быть прямая языковая поддержка; для опционального типа взять "?" из C#.
Все что касается эмуляции концептов.
Вообще шаблоны нужно расширить так, чтобы они плавно переходили в синтаксические макросы, я пожалуй в новогодние каникулы статейку напишу по этому поводу.
Полноценные функциональные типы должны быть встроены в язык и иметь синтаксис вида (char,float)=>int
Сигналы и слоты скорее всего должны быть встроены в язык на уровне синтаксиса с реализацией по умолчанию, но с возможностью переопределять реализацию
Сопрограммы безусловно на уровне синтаксиса в язык
Ну и т.д, я всего буста не знаю к сожалению, но там несомненно найдется еще много кандидатов.

Разумеется, в виде библиотек должны остаться такие вещи как математика, файловая система, регулярные выражения, случайные числа… То есть общая идея — в язык вносится все то, для чего нужна работа с AST, типизатором, кодогенератором. Все, что не касается языка как такового — остается в виде библиотек.
Сколько всего понапридумывали люди, нет чтобы просто добавить именованные параметры в язык и не мучаться! Я в каком-то давнем обсуждении даже синтаксис предлагал — unary dot notation.
void foo(int x=1, int y=2, int z=3) {}
foo(.y=100, .z=200, .x = 300);
foo(.z=500);


Вообще это печальная сторона С++. С одной стороны, программисты реально хотят появления новых языковых возможностей — отсюда появляются и активно используются библиотеки типа Boost. С другой стороны, новые возможности в сам язык вводить не спешат… костыли из Буста становятся все более распространенными, а затем их начинают затаскивать в стандарт, они попадают в стандарт, и получается, что вроде как и возможность реализована — но каким-то немыслимо кривым и вывернутым способом. Вместо добавления небольшого количества простого и понятного кода в компилятор добавляют огромное количество непонятного кода на шаблонах в библиотеку.
Так часовые пояса хранятся же где-то? Или в реестре или в какой-то DLL. Что мешало просто заменить старую информацию на новую? А системное время все равно останется неизменным — все эти часовые пояса, локальное время и переход на летнее время должны использоваться по идее только для отображения.
Самое забавное что я видел этот ролик:) И ничего не понял. Веселые прямоугольнички под веселую музычку. А смысл-то в чем?
Простите, а мы разве переходили на летнее/зимнее время в 2014 году? ИМХО мы просто часовые пояса сменили. И именно такой патч логично было выпустить Майкрософту.
Я так и не понял что за Material Design и в чем его фишка. Объясните?
Стратегически, Гуглу ИМХО стоило бы выпустить автомобили еще и в более привычном хищно-агрессивном стиле. Все-же слишком игрушечно он выглядит…
Модульный планшет (а еще лучше UMPC) — вот это была бы вещь. Надеюсь они придут к этой очевидной мысли и выпустят соответствующие большие экраны, корпуса и прочие компоненты.
Я наверное отстал от жизни и пропустил чего-то важное, но откуда это вообще взялось? На мой обывательский взгляд никогда в России не переводили стрелки в начале января… почему такие странные даты у Майкрософта?
Оказывается я русского языка почти и не знаю, столько совершенно незнакомых слов:)
А почему «пострадает»? В чем «страдание» от того что уменьшится количество светлых часов?
Страдание — это когда спать хочется, а нужно куда-то идти. А если спать не хочется, то никакого страдания от того, что вокруг чуть светлее или темнее, нет.
А чего Russia Today лезет в США и Европу, у вас вопросов не вызывает?
Пользуясь случаем, хочу попросить вас об одной возможности: хочу кнопку, которая бы случайным образом перемешивала слова в личном словаре. А то я навводил подряд по алфавиту, и теперь учить приходится по алфавиту.
На самом деле в первой главе еще не рассмотрено как категории взаимодействуют между собой. Пока только приведен пример, что категория — это множество объектов и стрелок между ними, и еще пример — что объекты это типы данных, а стрелки — функции. Так что упоминать всякие функторы, обернутые значения и Maybe еще рано.
С нетерпением жду следующих глав.
Если бы это был не перевод, мог бы еще предложить автору писать примеры одновременно на Haskell и С++. Они бы прекрасно дополняли друг друга и сильно облегчали бы понимание: привычный синтаксис С++, но примеры громоздкие; компактный и заточенный под ФП код Haskell — но выносящий неподготовленный мозг синтаксис.
Главное чтобы на каждое действие не было омерзительных всплывающих сообщений о безопасности как в IE каком-то там (6 вроде).

Информация

В рейтинге
1 673-й
Зарегистрирован
Активность