Здравствуйте, VladD2, Вы писали:
VD>Наткнулся тут на F# 3.0 Sample Pack. Идея мне понравилась.
VD>Может кто-то займется клонированием этого набора примеров на немерде. Думаю это будет очень полезно.
VD>Оформить это дело можно прямо в вики на гитхабе. А код хранить в сниппетах.
Все ли оттуда нужно : office interop, azure, link, parallel computation?
В немерле появились TypeProvider'ы?
Здравствуйте, Denom, Вы писали:
VD>>Оформить это дело можно прямо в вики на гитхабе. А код хранить в сниппетах. D>Все ли оттуда нужно : office interop, azure, link, parallel computation?
Конечно не все. Там есть примеры которые не имеют смысл или не реализуемы без написания кучи макросов (например, единицы изменения). Но из перечисленного только azure, пожалуй не имеет смысла реализовывать.
D>В немерле появились TypeProvider'ы?
Оно и немерле не нужны. TypeProvider — это костыль встроенный в F# который позволяет произвести хоть какую-то генерацию кода во время компиляции. В Nemele поддерживается полноценная манипуляция типами. Так что для примеров TypeProvider-ов можно сделать очень красивые аналоги на макросах. А некоторые уже имеются. Так вместо TypeProvider-а для регулярных выражений можно использовать макрос regex match, который, на мой взгляд, намного удобнее.
Примеры алогичные TypeProvider-ам отлично продемонстрируют тот факт, что в Nemerle значительно более удобный и высокоуровневый API для работы с типами.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Denom, Вы писали:
VD>>>Оформить это дело можно прямо в вики на гитхабе. А код хранить в сниппетах. D>>Все ли оттуда нужно : office interop, azure, link, parallel computation?
VD>Конечно не все. Там есть примеры которые не имеют смысл или не реализуемы без написания кучи макросов (например, единицы изменения). Но из перечисленного только azure, пожалуй не имеет смысла реализовывать.
D>>В немерле появились TypeProvider'ы?
VD>Оно и немерле не нужны. TypeProvider — это костыль встроенный в F# который позволяет произвести хоть какую-то генерацию кода во время компиляции. В Nemele поддерживается полноценная манипуляция типами. Так что для примеров TypeProvider-ов можно сделать очень красивые аналоги на макросах. А некоторые уже имеются. Так вместо TypeProvider-а для регулярных выражений можно использовать макрос regex match, который, на мой взгляд, намного удобнее.
VD>Примеры алогичные TypeProvider-ам отлично продемонстрируют тот факт, что в Nemerle значительно более удобный и высокоуровневый API для работы с типами.
Примеры для линк-а наверное уже тоже есть. Мне помнится кто-то писал сниппет баузер... Интересно в каком он состоянии?
Здравствуйте, hardcase, Вы писали:
H>Макрос уровня сборки, создающий типы на основе некоторых входных данных: метаданные БД, XML файл и т.п. по сути и будет являться TypeProvider-ом.
Ну, да только синтаксис чуть дргой. Хотя, если делать нечего, то и синтаксис можно повторить.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
D>>Мне помнится кто-то писал сниппет баузер... Интересно в каком он состоянии?
VD>На начальном. Он попробовал и бросил.
Да ладно. Просто ты захотел, чтобы я превратил его в IDE и добавил поддержку проектов с автокомплитом. Я не вижу в этом ни грамма смысла.
Здравствуйте, Ziaw, Вы писали:
Z>Да ладно. Просто ты захотел, чтобы я превратил его в IDE и добавил поддержку проектов с автокомплитом. Я не вижу в этом ни грамма смысла.
Тебе навязать чужую волю невозможно. Я высказал свои пожелания не более того. В любом случае по факту проект заглох не родившись. Ты бы его выложил хоть куда-то. Или в сниппеты, или создал бы отдельный проект.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
К сожалению не могу найти исходный код этого провайдера. Тогда можно было бы сравнить объем кода обоих реализаций.
Кстати, наша реализация автоматически обновляется при изменении .resx-файла в проекте (во время работы IDE). Так что можно спокойно пользоваться редактором ресурсов или ручным редактированием .resx-файла и сразу же получать обновление типа. Что-то мне подсказывает, что для F# это будет не так (если, они, конечно не перепарсивают весь проект при любом изменении проекта).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Тебе навязать чужую волю невозможно. Я высказал свои пожелания не более того. В любом случае по факту проект заглох не родившись. Ты бы его выложил хоть куда-то. Или в сниппеты, или создал бы отдельный проект.
Здравствуйте, Ziaw, Вы писали:
VD>>Тебе навязать чужую волю невозможно. Я высказал свои пожелания не более того. В любом случае по факту проект заглох не родившись. Ты бы его выложил хоть куда-то. Или в сниппеты, или создал бы отдельный проект.
Z>http://code.google.com/p/npad/
Логично было бы перенести на гитхаб. А то никто и никогда его не найдет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
// Manipulating double-precision (64-bit) floating point numbersdef pi1 : float = 3f + 0.1415f; // 'float' is an overloaded conversion operatordef pi2 = 3 + 0.1415; // identical - 'double' is a synonym for 'float'
WriteLine($"pi1 = $pi1, pi2 = $pi2");
я не очень понимаю каким образом первая строка отображает операции с double-precision (64-bit) floating point numbers
а во второй строке как single-precision float может быть identical 'double'у?
«История жизни – это, по существу, развитие сознания, которое завуалировано морфологией.» Пьер Тейяр де Шарден
Здравствуйте, Rival, Вы писали:
R>Нет ли здесь ошибки? R>
R>// Manipulating double-precision (64-bit) floating point numbers
R> def pi1 : float = 3f + 0.1415f; // 'float' is an overloaded conversion operator
R> def pi2 = 3 + 0.1415; // identical - 'double' is a synonym for 'float'
R> WriteLine($"pi1 = $pi1, pi2 = $pi2");
R>
R>я не очень понимаю каким образом первая строка отображает операции с double-precision (64-bit) floating point numbers R>а во второй строке как single-precision float может быть identical 'double'у?
Да возможно, оригинальный пример выглядел так:
let pi1 = float 3 + 0.1415 // 'float' is an overloaded conversion operator
let pi2 = double 3 + 0.1415 // identical — 'double' is a synonym for 'float'