По оси X на указанном Вами графике — среднее число циклов в секунду.
>> After the run, I take the average cycle time, and turn that into the followin graph showing cycles per second.
Другими словами, Tango примерно в 78 раз быстрее Java6 DOM.
>> Вы можете мне объяснить, почему Tango D так зверски работает с XML'ем?
Может быть Вы подумали, что по оси X — время?
Хорошо, а что Вы будете делать, когда потребуется реализовать алгоритм, отсутствующий в стандартной библиотеке, но требующий произвольного доступа к элементам массива?
Например, при реализации:
1) алгоритма сортировки слиянием (допустим, потому что этот тип сортировки устойчивый, а реализация быстрой сортировки в C# — неустойчивая)
2) алгоритма поразрядной сортировки (потому что в ряде случаев она работает быстрее быстрой сортировки)
3) алгоритма внешней сортировки, например по алгоритму четно-нечетной сортировки слиянием Бэтчера (потому что все данные просто не помещаются в оперативную память)
4) алгоритма вычисления произведения матриц
5) алгоритма расчета обратной матрицы
и т.д.
Ваши действия?
Из аналогов QtD (в смысле, порт библиотеки Qt на D) ничего нет.
Вот здесь можете посмотреть, какие части Qt уже портированы, какие — еще нет. На данный момент не портированны QtSql, QtScript, QtTest и QtUiTools. Хочу заметить, что в целом поддержка библиотеки улучшается — раньше было больше не портированных компонентов (в частности, не было поддержки QtWebKit).
Возможно, текущей функциональности Вам будет достаточно, или нужные Вам классы появятся в ближайшем будущем.
Есть так же порты других GUI библиотек, в том числе:
GtkD — порт GTK+
DWT — порт SWT
wxD — порт wxWidgets
Возможно, Вам подойдёт что-то из этих библиотек.
Знаете, видел этот значок в документации к Microsoft Visual Studio 2005 (не Express версия, а обычная). Пользовался именно встроенной в среду справкой, а не ее онлайн версией, для .NET 2.0.
Мне кажется, что в то время онлайн версии документации вообще не было, но за последнее утверждение не ручаюсь. Собственно, именно в MS VS 2005 я этот значок и видел. Встречался он почти в каждом классе, примерно у одной-двух функций. Выглядел примерно как оранжевая иконка .NET, всплывающая подсказка гласила примерно следующее: «This method provided by .NET» (за точность фразы ручаться не могу, пишу по памяти), что наводило на простую мысль — остальные методы предоставляются кем-то еще. В литературе встречались утверждения, что .NET почти полностью реализован на основе WinAPI, поэтому в отношении «не помеченных» функций сделал соответствующий вывод.
Дальнейшая судьба значка мне неизвестна, возможно, Microsoft отказалась от распространения подобной информации.
Да, Вы правы. Спасибо за пример кода. Можете еще книгу Джеффа Элджера полистать, думаю, Вам может быть интересно. Там вообще очень много написано про умные указатели (их там добрый десяток) и сборку мусора в C++.
Вы знаете, как правило в библиотеке D для всех ленивых функций реализован их обычный вариант. Так что Вы сами выбираете, что именно Вам нужно — получить результат сейчас, или отложить вычисления «до востребования».
Что касается преимуществ ленивых вычислений, то, если навскидку, возможность оперировать с бесконечно длинными последовательностями.
По поводу многопоточных вычислений — Вы неправы (по крайней мере в отношении D). В языке память по умолчанию локальна для потока, чтобы передать данные в другой поток переменную нужно явно объявить разделяемой, что позволяет компилятору проводить ряд проверок.
По поводу «константности и неизменяемости переменных» — речь шла о такой возможности (которая, к слову, облегчает написание многопоточных программ). Будете Вы ее применять или нет — зависит от Вас.
>> Скорее уж выживет CLR, которую просто портируют на новую Doors.
Вы знаете, .NET почти полностью написана с использованием WinAPI. Просто в документации все методы, реализованные именно с помощью .NET, отмечены специальным значком, и таких методов сравнительно мало. Так что фактически придется переписывать большую часть кода платформы .NET, чтобы ее портировать под другую ОС.
>> Как же это то что .NET завязан на windows, позвольте спросить, означает что он не имеет никаких преимуществ перед php?
Я имел ввиду, что на Unix-платформах нельзя использовать ASP.NET, а раз его нельзя использовать, то он не даёт никаких преимуществ. Если сравнивать именно языки, то я с Вашей позицией согласен — платформа ASP.NET действительно лучше PHP. Извините, что не выразил свою мысль достаточно внятно.
>> Первая ссылка из гугла показывает что Windows Web Server 2008 стоит 10 765 рублей.
Собственно, я и имел в виду, что при использовании ASP.NET скорее всего придется покупать лицензионную Windows. А нужно ли это делать — каждый решает для себя сам. У разных ОС свои плюсы и свои минусы, с вашего разрешения, давайте отложим эту дискуссию на другой раз — всё же это не является непосредственной темой статьи.
Согласен, между методом Dispose и деструктором C++ можно провести параллель. Тем не менее, согласитесь, в C# нужно или явно вызывать метод Dispose, или явно использовать конструкцию using, а C++ вызывает деструкторы автоматически.
Хотя я не спорю — при вызове метода Dispose в нужных местах проблем с освобождением ресурсов не будет.
Да, Вы правы, нет.
Всю информацию компилятор получает сам из исходного кода. Если необходимо выпустить библиотеку без исходных кодов, то компилятор сам может создать D Interface Files, которые фактически будут играть роль .h файлов.
В C# можно делать вставки unsafe кода, для которых проверки выхода за границы массива будут отключены. Впрочем, это одновременно отключает практически все другие проверки компилятора, сборку мусора, и т.п., так что код становится похожим на C++. Собственно, поэтому небезопасный код писать на C# не рекомендовано, и подобная информация не вошла в статью.
>> After the run, I take the average cycle time, and turn that into the followin graph showing cycles per second.
Другими словами, Tango примерно в 78 раз быстрее Java6 DOM.
>> Вы можете мне объяснить, почему Tango D так зверски работает с XML'ем?
Может быть Вы подумали, что по оси X — время?
Например, при реализации:
1) алгоритма сортировки слиянием (допустим, потому что этот тип сортировки устойчивый, а реализация быстрой сортировки в C# — неустойчивая)
2) алгоритма поразрядной сортировки (потому что в ряде случаев она работает быстрее быстрой сортировки)
3) алгоритма внешней сортировки, например по алгоритму четно-нечетной сортировки слиянием Бэтчера (потому что все данные просто не помещаются в оперативную память)
4) алгоритма вычисления произведения матриц
5) алгоритма расчета обратной матрицы
и т.д.
Ваши действия?
Вот здесь можете посмотреть, какие части Qt уже портированы, какие — еще нет. На данный момент не портированны QtSql, QtScript, QtTest и QtUiTools. Хочу заметить, что в целом поддержка библиотеки улучшается — раньше было больше не портированных компонентов (в частности, не было поддержки QtWebKit).
Возможно, текущей функциональности Вам будет достаточно, или нужные Вам классы появятся в ближайшем будущем.
Есть так же порты других GUI библиотек, в том числе:
GtkD — порт GTK+
DWT — порт SWT
wxD — порт wxWidgets
Возможно, Вам подойдёт что-то из этих библиотек.
Однако хочу заметить, что Microsoft уже отказывалась от обратной совместимости, например:
Есть старое программное обеспечение, которое несовместимо с Windows Vista, а также драйверы и устройства.
Мне кажется, что в то время онлайн версии документации вообще не было, но за последнее утверждение не ручаюсь. Собственно, именно в MS VS 2005 я этот значок и видел. Встречался он почти в каждом классе, примерно у одной-двух функций. Выглядел примерно как оранжевая иконка .NET, всплывающая подсказка гласила примерно следующее: «This method provided by .NET» (за точность фразы ручаться не могу, пишу по памяти), что наводило на простую мысль — остальные методы предоставляются кем-то еще. В литературе встречались утверждения, что .NET почти полностью реализован на основе WinAPI, поэтому в отношении «не помеченных» функций сделал соответствующий вывод.
Дальнейшая судьба значка мне неизвестна, возможно, Microsoft отказалась от распространения подобной информации.
Что касается преимуществ ленивых вычислений, то, если навскидку, возможность оперировать с бесконечно длинными последовательностями.
По поводу многопоточных вычислений — Вы неправы (по крайней мере в отношении D). В языке память по умолчанию локальна для потока, чтобы передать данные в другой поток переменную нужно явно объявить разделяемой, что позволяет компилятору проводить ряд проверок.
По поводу «константности и неизменяемости переменных» — речь шла о такой возможности (которая, к слову, облегчает написание многопоточных программ). Будете Вы ее применять или нет — зависит от Вас.
Вы знаете, .NET почти полностью написана с использованием WinAPI. Просто в документации все методы, реализованные именно с помощью .NET, отмечены специальным значком, и таких методов сравнительно мало. Так что фактически придется переписывать большую часть кода платформы .NET, чтобы ее портировать под другую ОС.
>> Как же это то что .NET завязан на windows, позвольте спросить, означает что он не имеет никаких преимуществ перед php?
Я имел ввиду, что на Unix-платформах нельзя использовать ASP.NET, а раз его нельзя использовать, то он не даёт никаких преимуществ. Если сравнивать именно языки, то я с Вашей позицией согласен — платформа ASP.NET действительно лучше PHP. Извините, что не выразил свою мысль достаточно внятно.
>> Первая ссылка из гугла показывает что Windows Web Server 2008 стоит 10 765 рублей.
Собственно, я и имел в виду, что при использовании ASP.NET скорее всего придется покупать лицензионную Windows. А нужно ли это делать — каждый решает для себя сам. У разных ОС свои плюсы и свои минусы, с вашего разрешения, давайте отложим эту дискуссию на другой раз — всё же это не является непосредственной темой статьи.
Хотя я не спорю — при вызове метода Dispose в нужных местах проблем с освобождением ресурсов не будет.
Всю информацию компилятор получает сам из исходного кода. Если необходимо выпустить библиотеку без исходных кодов, то компилятор сам может создать D Interface Files, которые фактически будут играть роль .h файлов.