powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Язык D как альтернатива C++0x
25 сообщений из 166, страница 3 из 7
Язык D как альтернатива C++0x
    #36776799
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglПока я завязал с подробностями в D, пока не получу и не почитаю манифест Александреску (TDPL), как они это задумывали.Ура, приехала книжка. Будет чем заняться в отпуске =)
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36792595
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В общем итоги.
Сначала о книге Александреску:
- хорошо написана с грамотными примерами, которые отвечают на еще незаданные вопросы
- чувствуется рука практика - поясняется почему и для каких случаев применения задуман тот или иной синтаксис языка, и какие накладные расходы это тянет
- введение в метапрограммирование очень мягкое, но кроме базовых понятий и примеров, детально вглубь не уходит (мне жаль)
- похоже, что автор изучил _все_ языки и концепции и сравнений с ними много и библиография очень широкая

Что касается языка. Нет никаких сомнений, что D как язык уже сейчас мощнее C++0x

Ключевые отличия:
-продуманный аспект безопасного использования. То что скомпилировалось, с более высокой вероятностью будет вылетать редко. К этой стороне относятся:
-- встроенные массивы (в т.ч.ассоциативные) с проверками границ (отключаемыми в релизе), концепции работы с объектами (только безопасные ссылки в динамической памяти) - это делает работу с указателями в большинстве случаев ненужной;
-- design by contract, инварианты для объектов, встроенные юниттесты и тесты покрытия;
-- более жесткая модульность программ (почти дельфийские юниты), неизменяемые типы данных immutable (с наследованием связанных членов), неделимость данных между потоками по умолчанию
-- исключения могут порождать цепочки для анализа первопричины
-- концепция scope(exit/success/failure), упрощающая RAII в реализации - без многоуровневых try/catch
-- встроенные безопасные Variadic Parameters для функций

-продвинутость/гибкость самого языка
-- параметризованные типы, классы и функции с более широким выбором (возможно условных!) специализаций, Variadic Template Parameters
-- CTFE с typeof и условными шаблонами дают сумасшедшую гибкость
-- tuples, делегаты, лямбды, замыкания (closures), в т.ч.для вложенных классов, а не только функций
-- alias, которые подобны макросам, но могут применяться везде вместо любого литерала
-- встроенные через перегрузку операторов таблицы диспетчеризации

-подход к производительности
-- pure, математически "чистые", т.е.без побочных эффектов функции. Проверяется на этапе компиляции, может дать в будущем продвинутые оптимизациии
-- потоки встроены в язык и приняты меры для устранения race conditions и выбивания кэша. Данные по умолчанию не делятся между потоками, либо являются заведомо immutable. Базовая концепция - обмен между потоками через очереди сообщений (построенные на механизме exception'ов), хотя есть и обычные synchronized классы (но со своей фичей - умением делит мютекс с подэлементами и мульти-мьютексами)
-- встроенная поддержка атомарных операций, cas (Compare-and-swap) и ассемблера дает возможность писать lock-free многопоточные программы (хотя нетривиально)

Ну и целая гора синтаксического сахара - не перечислишь...
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36792715
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще семинар по D с Александреску, который недавно в Гугле был.
http://www.youtube.com/watch?v=RlVpPstLPEc
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36795049
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyВот еще семинар по D с Александреску, который недавно в Гугле был.
http://www.youtube.com/watch?v=RlVpPstLPEc
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36795090
Фотография quaid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так что, за D будущее, или очередная околопрогрессивная поделка для узкого круга специалистов?
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36795099
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну что-же. Я рад за Александреску. Прогрессирует. А-то уже хотел записать его в сектанаты...
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36795135
алчность
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl,

как на Д реализовать функцию с переставляемыми параметрами типа
template<class T1,class T2>
void func(T1 &, T2& );

чтобы при определении для func(T1 &, T2& ) работало и для func(T2& ,T1 & ) и для
случая T1=T2
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36795179
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
алчность,

Вопрос неточный. Тела функции должны отличаться при специализациях или как?
Нужно видеть полный аналог на С++.

ЗЫ. Подозреваю, что в любом случае обойдется заменой угловых скобок на круглые )
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36795497
алчность
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl
Нужно видеть полный аналог на С++.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
#define FUNC_SWAP_DECLARATION(ret_type,func_name,type1,type2)\
ret_type func_name(type1& ,type2&);\
inline ret_type func_name(type2& t2,type1& t1)\
{\
     return func_name(t1,t2);\
}

//something.h
FUNC_SWAP_DECLARATION(int,binary,int,double);//разные
int binary(int,int);//одинаковые

//something.cpp
int binary(int i,double d)
{
......
}

int binary(int i,int j)
{
......
}

...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36795508
алчность
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
на шаблонах мне такое реализовать не удалось
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36795583
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Общий шаблон. Подойдет и для (int,int) и для разных, но специализации имеют преимущество
Код: plaintext
1.
2.
3.
int binary(T, V)(T i, V d)
{
......
}

Специализации на вкус и цвет (кстати пример - возврат функции вычисляется = deduce)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
auto binary(T, V : int)(T i, V d)
{
......
  return i;
}

auto binary(T: double, V : int)(T i, V d)
{
......
  return d;
}
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36795644
алчность
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglОбщий шаблон. Подойдет и для (int,int) и для разных, но специализации имеют преимущество
Код: plaintext
1.
2.
3.
int binary(T, V)(T i, V d)
{
......
}

Специализации на вкус и цвет (кстати пример - возврат функции вычисляется = deduce)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
auto binary(T, V : int)(T i, V d)
{
......
  return i;
}

auto binary(T: double, V : int)(T i, V d)
{
......
  return d;
}

- ощущение, что здесь чего-то не хватает.
в какой строчке указывается что функция может вызываться в 2х вариантах :
как binary(double,int) и binary(int,double)
?
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36795715
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если быть _абсолютно_ точным, то так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
import std.stdio;

auto binary(T:double, V : int)(T i, V d)
{
  return i;
}

auto binary(T: int, V : double)(T i, V d)
{
  return i;
}

void main()
{
	auto x = binary( 1 . 5 ,  2 );
	auto y = binary( 1 ,  2 . 5 );
	writefln("x = %s, y = %s", x, y);
}
D:\dmd2\z>reverse.exe
x = 1.5, y = 1
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36795796
алчность
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
- это copy-paste.

фишка в том,
что если определено тело функции
int func(double d,int i),
то тело функции int func(int i,double d) должно определяться _автоматически_

если бы в с++ можно было объявление шаблона распространить сразу на 2 функции,
это выглядело бы вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
//someheader.h 
template<class T1,class T2>
int func(T1 &,T2 &);
int func(T2 & t2,T1 &t1)
{
   return func<T1,T2>(t1,t2);
}

...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36796336
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никак не пойму, чего надобно....Такой вариант
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
import std.stdio;

void func(T1, T2)(T1 x, T2 y) 
{
    int i;
    double d;
    static if ( is(typeof(x) == int)  && is(typeof(y)==double) )
    {
		i = x;
		d = y;       
    }
    else static if ( is(typeof(y)==int) && is(typeof(x)==double) )
    {
      	i = y;
      	d = x;
    } else
      static assert( 0 , "invalid parameters");
    
    // we have always i as int param, but d as double
    writefln("int value = %s, double value = %s", i, d);
}

void main()
{
	func( 1 . 1 ,  5 );
	func( 4 ,  2 . 4 );
	// func(1, 1); // error instantiating!
}
int value = 5, double value = 1.1
int value = 4, double value = 2.4
А еще можно сделать variadic func(...){ foreach(param) ...}
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36796794
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglAnatoly MoskovskyВот еще семинар по D с Александреску, который недавно в Гугле был.
http://www.youtube.com/watch?v=RlVpPstLPEc
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36796904
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglНикак не пойму, чего надобно

надобно одним шаблоном создавать несколько функцию у которой порядок передачи аргументов не важен, т.е. каждый аргумент определяется только своим типом, т.е., объявляя функцию так:
Код: plaintext
1.
int foo (int x, float y, char z)

на самом деле получаем 6 функций foo
Код: plaintext
1.
2.
3.
foo(int x, float y, char z)
foo(float y, int x, char z)
...

с одним(одинаковым) телом.
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36796907
Фотография k0rvin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k0rvin
надобно одним шаблоном создавать несколько функцию у которой порядок передачи аргументов не важен, т.е. каждый аргумент определяется только своим типом, т.е., объявляя функцию так:
...
s/несколько //
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36797006
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
k0rvinSiemarglНикак не пойму, чего надобно

надобно одним шаблоном создавать несколько функцию у которой порядок передачи аргументов не важен, т.е. каждый аргумент определяется только своим типом, т.е., объявляя функцию так:
Код: plaintext
1.
int foo (int x, float y, char z)

на самом деле получаем 6 функций foo
Код: plaintext
1.
2.
3.
foo(int x, float y, char z)
foo(float y, int x, char z)
...

с одним(одинаковым) телом.
Тогда пример за вчера 18:30 верный.

Anatoly MoskovskyСправдливости ради, с оглядкой на тему, надо отметить что в C++0x все эти фичи есть безо всяких бустов :)
Есть в стандарте, но пока не в реализациях (хотя может уже в передовых компиляторах типа Metrowerks или Comeau). Ждемс
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36797118
алчность
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemarglk0rvinSiemarglНикак не пойму, чего надобно

надобно одним шаблоном создавать несколько функцию у которой порядок передачи аргументов не важен, т.е. каждый аргумент определяется только своим типом, т.е., объявляя функцию так:
Код: plaintext
1.
int foo (int x, float y, char z)

на самом деле получаем 6 функций foo
Код: plaintext
1.
2.
3.
foo(int x, float y, char z)
foo(float y, int x, char z)
...

с одним(одинаковым) телом.
Тогда пример за вчера 18:30 верный.

верный, но обеспечение обратного порядка заняло более чем в 10 раз больше кода, чем на с++
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36797137
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
алчность,

Ну не на с++, а на чистом с =)

Проверки на этапе компиляции часто стоят того. Например, мой пример с (bool, double) точно не скомпилится, а вот с макросом - может )

ЗЫ. Переводил вчера шаблонные тесты Степанова (там врапперы и итераторы) с шаблонов С++ на D. Оказалось не очень тривиально и результат по скорости хуже =(
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36797951
алчность
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Siemargl
Ну не на с++, а на чистом с =)

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

Siemargl
Проверки на этапе компиляции часто стоят того...

но только не для расмматриваемого примера

Siemargl
ЗЫ. Переводил вчера шаблонные тесты Степанова (там врапперы и итераторы) с шаблонов С++ на D. Оказалось не очень тривиально и результат по скорости хуже =(

feedback нужно посылать авторам:
может это вы что-то не так делаете, а может это у них идеалогия сырая
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36809153
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нашел такой простенький визуальный дизайнер под DWT (порт SWT) и DFL (D Forms Library).

Возможностей минимум, зато простой читаемый код библиотеки DFL под Win32.

Результирующая программа заняла 1Мб на диске (статическая линковка) и 2! Мегабайта в памяти. Чего я давно не видел для программ с GUI.

Сделать что ли клона Дельфи )))

ЗЫ. Очень порадовало, потому что в обед собрал unittest для dlib (ищу замену бусту). Так вот - получилось .exe 10 Мб, не считая g++*.dll (после стрипа, MinGW 4.5)
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36818951
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Обратный ход маятника"

Я уже тут делал оговорку про проблемы развития. Немного позанимавшись, теперь могу подробнее осветить "обратную сторону луны", т.е. недостатки и неудобства.

1. Поскольку язык - не Си, есть проблема импорта системных хидеров ОС. Она не такая страшная, как в Pascal и VB, т.к. есть прямые аналоги типов, но все же ручная работа требуется.
Например, в версии 1.0 нет поставляемой библиотеки импорта Win32 API, и потому сообщество создало много своих версий - я встретил 4 разных реализации, и все неполные.
/2Off полные реализации Win32 API есть и не во всех C++ компиляторах. Например, нужные мне CreateFileTransacted есть только в MSVC и WatcomC, а в MinGW, DMC - нет.

2. Переход на UTF-8 в строках и исходниках. char[] str = "русский текст" - это не 14 байт, а больше. И хотя способ посимвольно итерироваться встроен (итератор UTF-32), но печать в консоли - автоматически не декодируется (и chcp 65001 не спасает). А требуемая ф-ция Win32 CharToOEM не включена как оказалось, в стандартную либу 2.0. "Простой вопрос, а ставит Вас в тупик" (с)

-Компилятор не понимает исходники в 1251, только любой Юникод.


3. Неразвита инфраструктура и вторичные неудобства.
-Местами компилятор дает невнятную диагностику ошибок - ссылаясь не на первопричину ошибки, а на место возникновения, и наоборот.

- Поскольку компилятор однопроходный, пока часть критичных ошибок не устранишь (импорт модулей, описание и инстанциация шаблонов) - все ошибки не покажет. Зато быстрый.

/2off В C++ такое веселье в основном только в шаблонах, и то всем силами с ним борются.
-Нет полноценного отладчика и профайлера скорости выполнения.

-Нет фреймворков - GUI, Database, GameDev, см.также ниже. Особенно касается версии 2.0

4. Полным ходом неразбериха "оперсорсного типа". Что где валяется и когда это все кончится! (с)

-в разных библиотеках применены разные утилиты сборки. Я насчитал make (Borland-style), make (GNU-style), bud/build, dsss, rake, bob

- библиотеки написаны в основном под D1+Tango и нихрена не идут без большого! напильника под D2+Phobos stdlib и даже хуже. Пример:
Плановая стандартная GUI = порт GUI Java SWT 3.4 +JavaFX называется DWT. 16,5 Mb исходников. Написана под dmd1.33+tango0.99.7.
При этом наотрез отказывается собираться и если взять DMD1.63 (текущая) и если взять Tango 0.99.9 в любой их комбинации. Теоретически, есть версия DWT под текущую версию D1+Tango, но ее надо качать из девелоперской ветки (это еще проверю). Под D2.0 - есть только совсем сырая - еще даже не альфа DWT2.

5. Документация. Для компилятора, стандартных тулзов и phobos - хорошая. Другие либы относительно опенсорса - неплохой уровень, но не более.

Короче, нужно быть достаточно упертым или быть корпорацией, чтобы подготовить под себя полный тулсет. В текущем состоянии он далеко отстает от C++/Java/C# и местами от Delphi.
...
Рейтинг: 0 / 0
Язык D как альтернатива C++0x
    #36819925
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SiemarglТеоретически, есть версия DWT под текущую версию D1+Tango, но ее надо качать из девелоперской ветки (это еще проверю).Работает на текущих D1.063+Tango0.99.9
...
Рейтинг: 0 / 0
25 сообщений из 166, страница 3 из 7
Форумы / C++ [игнор отключен] [закрыт для гостей] / Язык D как альтернатива C++0x
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]