Вы когда-нибудь были разочарованы тем, что Visual Studio не переоценивал некоторые выражения часов при пошаговом выполнении кода с помощью отладчика?
У меня есть, а кого-нибудь здесь интересуют чистые методы? Методы без побочных эффектов? В C # есть так много замечательных вещей, которые я люблю, но я не могу писать чистые функции, то есть статические методы без побочных эффектов.
Что, если бы вы собрали свой собственный компилятор C #, где вы могли бы написать что-то вроде этого.
function int func(readonly SomeRefType a, int x, int y) { return /*...*/; }
Выше не только бесплатная функция, увы, я не называю это методом, она гарантированно не имеет побочных эффектов. Здесь можно использовать ключевое слово C # readonly
, чтобы указать именно это и предоставить контракт для чистых функций. Такого рода функции всегда можно изменить, не вызывая побочных эффектов. Это позволяет Visual Studio всегда оценивать мои функции в часах, несмотря на ошибочное предположение, что все вызовы методов и пользовательские операторы имеют побочные эффекты. Метод, в котором все параметры копируются по значению, никогда не может иметь побочных эффектов, однако Visual Studio не может распознать это.
Мне нравится C ++ за то, что вы можете делать во время компиляции, и я скучаю по этим вещам в C #, я думаю, что C # немного обескураживает пользователя и в основном не допускает определенной выразительности, причиняя вред программистам. Во многих вещах, которые на самом деле связаны с тем, что вы можете делать во время компиляции, я бы хотел увидеть больше метапрограмм, которые являются программами, выполняемыми компилятором для компиляции вашей исходной программы.
например. Хотя C # имеет логические значения и не допускает такие вещи, как if (var a = obj as MyRefType)
, он не генерирует код оценки. Я немного покопался и заметил, что C # не может генерировать адекватный IL для условных выражений без ветвей, например x > y ? 1 : 0
, есть инструкция IL только для того, что компилятор C # не использует.
Хотели бы вы, или были бы заинтересованы в компиляторе .NET с открытым исходным кодом? Что похоже на C #, но является чем-то совершенно другим, более выразительным, более гибким и совершенно ненормальным с точки зрения того, что вы можете с ним сделать?