воскресенье, августа 27, 2006

Продолжая тему языков ;)

Изучаю внутренности такого замечательного языка, как Mondrian.

Краткая характерстика:

- "чистый" (без побочных эффектов) функциональный язык;

- по синтаксису - смесь урезанного Haskell'а с Java;

- как и Хаскелл, реализует очень своеобразный ООП;

- компилится под .NET 1.1 (под 2.0, ес-сно, тоже);

- предполагаемая ниша - ASP.NET-программирование;



Также в пакет входит и компилятор для Haskell под .NET (для работы требуется наличие компилятора GHC, точнее, видимо, его либ), правда, скорее препроцессор Haskell->Mondrian.

Впрочем, сам компилятор Mondrian порождает код на C#, так что компиляция с Haskell представляет собой компиляцию Haskell->Mondrian->C#->.NET. Что само по себе забавно :)



Впрочем, это еще детский сад.

Дело в том, что, насколько мой рассудок смог определить, программа на Mondrian выполняется в собственной виртуальной машине(!), реализованной в .NET(!!!).

По кр.м. программка HelloWorld трансформировалась в 50 шарповых строк, программка с двумя версиями вычисления факториала (рекурсивной и оконечно-рекурсивной) - в 300 с лишним (что утешает, т.к. заметно, что объем генерируемого кода растет нелинейно ;)).

Самый шок наступил, когда я заглянул в их ран-тайм библиотечку (исходники качать было в лом, посему заюзал мегаинструмент Reflector, декомпилирующий .NET-код в CIL, C#, VB, Delphi, MC++ и Chrome).

Так вот, эти извращенцы мало того, что наваяли свою ВМ, так они еще и написали, скажем, своb класс ы Vector, Stack и т.п. (что назыается, для внутреннего пользования), причем всякие разные перечисления элементов они смело реализовали сами, отлично от подхода, реализуемого в .NET, так как видимо, решили, что при переборе содержимого коллекции гораздо лучше написать

while (enumerator.hasMoreElements())

{

doStuffOn(enumerator.nextElement());

}

нежели

foreach(object in collection)

{

doStuffOn(object);

}

притом, что при нормальной реализации доступны будут оба варианта.

Ну и по мелочам: разницы между Int32 и Int64 компилятор видит с трудом (если видит), большое количество ошибок оставляет на откуп компилятору Шарпа.



Но есть и плюсы:

1) компилятор шустр (шустрее, чем, скажем, Nemerle; впрочем, учитывая интеллектуальность последнего, сравнивать некорректно)

2) синтаксис в чем-то привычнее, чем у Haskell'а;

и 3) проект закрыт!!!!!! Вот это не может не радовать!

на этой оптимистической ноте автор откланивается, предчувствуя, каким невыспанным он будет с утра.

Adieu!

 

четверг, августа 17, 2006

А я молодец!..

Наваял-таки мегакласс, который отбирает из компонентов лежащих на форме только имеющие нужный тип и позволяет выбрать из них нужный для установки property в другом компоненте/контроле.



Причем, после написания проверил, нет ли чего-то такого уже готового ;) во фреймворке. Как ни странно, нет! Даже велосипеда не получилось :)



Теперь устанавливать связи между компонентами можно в режиме визуальной разработки. Приятно!

Причем для подключения мегадевайсины надо всего лишь установить атрибут. Правда, достаточно корявый, так что тут есть над чем работать.