Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
Так, например, поступила Microsoft при разработке платформы ASP.NET – скрипты для браузера могут быть написаны на любом языке платформы .NET (например, на C#) и затем автоматически преобразованы в соответствующий код на JavaScript.
Можно ли убить дракона? Можно, но не убить и не дракона
C# за счет лучшего контроля ресурсов позволяет заметно усложнить проведение DoS-атаки, но делает службу более уязвимой к DDoS-атаке из-за более низкой скорости работы.
Основная проблема, которая для меня крайне важна, это компиляция в промежуточный язык Common Intermediate Language (CIL), что делает декомпиляцию тривиальной задачей. Больше того, для этого существуют специальные инструменты.
Не много подумав, можно прийти к выводу, что использование платформы .NET так же опасно, как и C#. Поэтому лично моё мнение – не стоит писать на языках, ориентированных в первую очередь на эту платформу.
Теперь представьте, что где-то в вашей программе появляется примерно такая строчка:
Number* c = a + b;
где a и b – указатели на Number, т.е. фактический тип переменных не известен.
class Number;
class Integer : public Number;
class BigInt : public Number;
...
class AnyNumber
{
public:
...
private:
Number* value;
...
};
AnyNumber operator+ (const AnyNumber& a, const AnyNumber& b);var sum = 0;
for (var i=0; i<arr.Length; i++)
{
sum += arr[i];
}в нём есть встроенная поддержка проверки границ массивов для отладочной версии программы, которая отключается при компилировании оптимизированной версии
он полностью совместим с кодом C/C++ на уровне объектных файлов, что позволяет получить прямой доступ к функциям и классам, написанным на C/C++ и наоборот
Строгая функциональность — отрада для математика и бессмысленное ограничение для программиста.
Особенно для С/С++ программиста.
никак неявных преобразований целых чисел
В D2 тоже по типу функции можно определить некоторые аспекты, такие как pure, nothrow или safe. Обошлись как-то без ограничений.
foo :: MVar Int -> MVar Int -> IO (MVar Int)void hof( int function() nothrow pure f ) { }Этот вопрос не понял, мне незнаком термин «плоское написание асинхронного кода».
x <- download "foo";
lift $ print "foo is downloading"
y <- download "bar";
lift $ print "bar is downloading"
x' <- await x
y' <- await y
return (x' + y')
Я это к тому, что цель языка программирования — быть удобным и практичным, а не предоставить строгую красивую модель.
Как насчёт вставки в ваш мутабельный пример inline assembler'a?
Вы исходите из предпосылки, что императивный код «грязнее» и хуже только потому, что он императивный.
import std.stdio;
import std.file;
import std.parallelism;
// Синтаксический сахар, которого не нашёл в стандартной либе.
// Возможно стоить сделать pull request для phobos :)
auto launch(T)( T new_task )
{
struct Launched
{
private:
T task;
public:
this(T new_task)
{
task = new_task;
task.executeInNewThread();
}
auto result()
{
return task.yieldForce();
}
}
return Launched(new_task);
}
void main()
{
auto task1 = launch( task!readText("test1.txt") );
auto task2 = launch( task!readText("test2.txt") );
write( task1.result ~ task2.result );
}
task!readText?do
send int 1
x <- receive int
send string ("hello" ++ show x)
y <- receive string
return (show x ++ y)do line <- lines contentOfFile word <- words line ch <- word if ch == 'x' return True else return False
foreach (line in lines(contentOfFile))
foreach (word in words(line))
foreach (ch in word)
if (ch == 'x') { yield return true; } else { yield return false; }Контракт может быть полезным, может не быть.
map :: (a -> b) -> [a] -> [b]
mapM :: Monad m => (a -> m b) -> [a] -> m [b]
map :: (Arrow a, ArrowChoice a) => a b c -> a [b] [c]
\f x -> f x + 2 * f x может иметь сразу обобщённый тип. Но в Haskell этого нет, и пока вроде нигде.Так, например, поступила Microsoft при разработке платформы ASP.NET – скрипты для браузера могут быть написаны на любом языке платформы .NET (например, на C#) и затем автоматически преобразованы в соответствующий код на JavaScript
Первое, о чем следует помнить – разработчики Mono будут всегда на шаг позади Microsoft, так как они начинают реализовывать уже выпущенные библиотеки и стандарты.
В настоящее время все патенты на C#/CLI принадлежат Microsoft..
Основная проблема, которая для меня крайне важна, это компиляция в промежуточный язык Common Intermediate Language (CIL), что делает декомпиляцию тривиальной задачей.
если я захочу сделать программу свободной, я опубликую её исходные коды, в противном случае у меня есть основания оставить программу закрытой.
Из существенных недостатков обфускаторов можно отметить: генерацию более медленного кода, чем исходный, потенциальную возможность внесения ошибки в программу и возможность взлома самого обфускатора (после чего вся его защита становится никому не нужной). Задумайтесь на мгновение: люди годами улучшали компиляторы, пытаясь создать все более качественные и оптимизирующие средства разработки, а тут происходит прямо какая-то регрессия.
Не знаю, прав ли автор, но из C# очень легко вызвать функции WinAPI, объекты COM и другие компоненты, которые сделают программу непереносимой.
Да, конечно же, Mono – это широко известный продукт, но при его использовании проблемы всё же могут появиться. Первое, о чем следует помнить – разработчики Mono будут всегда на шаг позади Microsoft, так как они начинают реализовывать уже выпущенные библиотеки и стандарты. Второе: а им случайно не надоест? Да, я прекрасно понимаю, что это – проект со свободной лицензией, который развивает сообщество, но риск прекращения поддержки все равно существует.
следует вспомнить – отсутствие стандартов на компоненты WinForms, ADO.NET и ASP.NET со стороны Microsoft. Их использование может повлечь за собой юридические претензии со стороны Microsoft, поэтому не рекомендуется использовать их совместно с Mono."
а будет ли Microsoft дальше развивать этот язык? В настоящее время все патенты на C#/CLI принадлежат Microsoft, и отказ от поддержки с её стороны будет означать смерть этому языку. Лично я считаю, что C# будет продолжать развиваться – Microsoft слишком много вложила в этот язык. Но гарантий никто дать не может
В результате это привело к трагедии для тысяч программистов, работающих на Basic’ке.
создав новую ОС для планшетов, смартфонов, компьютеров, консолей, телевизоров и других устройств, а, значит, языки для разработки под эту ОС тоже могут кануть в небытие.
Лично для меня этих доводов достаточно, чтобы отказаться от использования C#
Почему я выбираю D