Краем уха слышал, что Microsoft сейчас активно пишет новый компилятор C#. Одно из главных отличий — теперь он будет написан на C# (я так понимаю, старый был сделан на C++). Может, кто-то в курсе, как именно происходит этот процесс:
хитрый рефакторинг старого компилятора;
новый проект, но при написании "подглядывают" в старый компилятор;
целиком новый проект.
Вопрос не праздный — есть желание перетащить небольшую (5 тыс. строк вместе с комментариями) библиотечку с C (без плюсов) на C#. Ситуация несколько осложняется тем, что на данный момент исходная библиотека компилируется только под UNIX, но это, в принципе, решаемо. И вот сижу чещу репу, как это можно сделать, а главное — стоит ли.
P.S. В экспериментальном порядке пробовал перейти с C на C++. Такое преобразование делается путем достаточно нехитрого рефакторинга благодаря тому, что исходная библиотека с минимальными правками собирается с помощью компилятора C++, а дальше уже дело техники. Но хотелось бы иметь более высокий уровень абстракции.
P.P.S. Библиотека предназначена для анализа растровых изображений, т.е. в принципе, достаточно ресурсоемкая в плане памяти и CPU. Поэтому аргументы в пользу C++ тоже принимаются.
P.P.S. Проект делается в свободное от основной работы и семьи время, поэтому ресурсы очень даже не бесконечны...
Здравствуйте, syomin, Вы писали:
S>Вопрос не праздный — есть желание перетащить небольшую (5 тыс. строк вместе с комментариями) библиотечку с C (без плюсов) на C#. Ситуация несколько осложняется тем, что на данный момент исходная библиотека компилируется только под UNIX, но это, в принципе, решаемо. И вот сижу чещу репу, как это можно сделать, а главное — стоит ли.
Главное отличие C от C# — это то, что в C ООП отсутсвует напрочь, а C# полностью ориентирован на него. Поэтому при переходе потребуется полная переделка кода. Правда, можно использовать статические члены, но это криво.
Здравствуйте, Socrat, Вы писали:
S>Главное отличие C от C# — это то, что в C ООП отсутсвует напрочь, а C# полностью ориентирован на него.
Чего-чего? А всякие COM, GObject и прочие самоделки мне, значит, почудились?
S>Поэтому при переходе потребуется полная переделка кода.
Почему?
S>Правда, можно использовать статические члены, но это криво.
Чем?
S>Главное отличие C от C# — это то, что в C ООП отсутсвует напрочь, а C# полностью ориентирован на него. Поэтому при переходе потребуется полная переделка кода. Правда, можно использовать статические члены, но это криво.
Добрый день!
Забыл сказать, что библиотека написана в "объектном" стиле. Приблизительно так:
Здравствуйте, syomin, Вы писали:
S>Краем уха слышал, что Microsoft сейчас активно пишет новый компилятор C#. Одно из главных отличий — теперь он будет написан на C# (я так понимаю, старый был сделан на C++). Может, кто-то в курсе, как именно происходит этот процесс:
Я перенёс пару проектов с С на Java. Обычно начинал с того, что тупо переносил код с С в Java, делая очевидные преобразования стиля. Сразу же можно заменять мелочи типа системы конфигурации, парсеров XML и т.п.
S>P.P.S. Библиотека предназначена для анализа растровых изображений, т.е. в принципе, достаточно ресурсоемкая в плане памяти и CPU. Поэтому аргументы в пользу C++ тоже принимаются.
Ну так пусть остаётся в виде С++ — просто перенеси её в C++/CLI, скорее всего, хватит простой перекомпиляции.
Cyberax пишет:
> S>Главное отличие C от C# — это то, что в C ООП отсутсвует напрочь, а C# > полностью ориентирован на него. > Чего-чего? А всякие COM, GObject и прочие самоделки мне, значит, почудились?
Не обращай внимания. Он пошутил ...
Здравствуйте, syomin, Вы писали:
S>>Главное отличие C от C# — это то, что в C ООП отсутсвует напрочь, а C# полностью ориентирован на него. Поэтому при переходе потребуется полная переделка кода. Правда, можно использовать статические члены, но это криво.
S>Добрый день! S>Забыл сказать, что библиотека написана в "объектном" стиле. Приблизительно так: S>
S>>Краем уха слышал, что Microsoft сейчас активно пишет новый компилятор C#. Одно из главных отличий — теперь он будет написан на C# (я так понимаю, старый был сделан на C++). Может, кто-то в курсе, как именно происходит этот процесс: C>Я перенёс пару проектов с С на Java. Обычно начинал с того, что тупо переносил код с С в Java, делая очевидные преобразования стиля. Сразу же можно заменять мелочи типа системы конфигурации, парсеров XML и т.п.
Т.е. вы просто писали новый проект, по ходу дела подглядывая в старый?
C>Ну так пусть остаётся в виде С++ — просто перенеси её в C++/CLI, скорее всего, хватит простой перекомпиляции.
Это решение мне не подходит. Во-первых, версии на C++ нет — сделано только процентов 50 работы. Во-вторых, C++/CLI нет под Mono, а от UNIX'а отказываться не хотелось бы. В-третьих (оно же главное), мне не нужен .Net ради .Net'а. Сейчас я оказался в такой ситуации, когда очевидно, что для проекта были выбраны слишком низкоуровневые средства и развивать проект дальше — крайне тяжело. Нужно куда-то мигрировать. Первый вариант — переходить на C++. Работы по миграции были начаты и жизнь действительно стала лучше, но в случае C# она стала бы ещё лучше, т.к. некоторых возможностей C# мне не хватает (например, сериализации и индексаторов с несколькими аргументами). Да, я знаю как это сделать на C++, но на C# это ЗНАЧИТЕЛЬНО проще. Вот и чешу репу...
Здравствуйте, Cyberax, Вы писали:
C>Здравствуйте, Socrat, Вы писали:
S>>Главное отличие C от C# — это то, что в C ООП отсутсвует напрочь, а C# полностью ориентирован на него. C>Чего-чего? А всякие COM, GObject и прочие самоделки мне, значит, почудились?
:offtopic:
Я всегда считал, что стандартный C (не Objective C) не умеет ООП штатно. Насколько я понял, это заблуждение, так?
S>Ну, в таком случае преобразование хотя бы в C++ само напрашивается... Можно даже частями.
Ага. Это была моя первая идея, когда стало очевидно, что нужно что-то менять. Даже процентов 50 работы сделал. Но хотелось бы еще более высокий уровень абстракции, чем может предложить C++. Только я никак не могу придумать, как в случае с C# организовать процесс миграции.
Здравствуйте, syomin, Вы писали:
C>>Я перенёс пару проектов с С на Java. Обычно начинал с того, что тупо переносил код с С в Java, делая очевидные преобразования стиля. Сразу же можно заменять мелочи типа системы конфигурации, парсеров XML и т.п. S>Т.е. вы просто писали новый проект, по ходу дела подглядывая в старый?
Просто открывал на одном мониторе Java IDE, на другом мониторе текстовый редактор — и делал cut&paste кусков кода.
S>Да, я знаю как это сделать на C++, но на C# это ЗНАЧИТЕЛЬНО проще. Вот и чешу репу...
Ну значит и переводи на С#.
AS>Я всегда считал, что стандартный C (не Objective C) не умеет ООП штатно. Насколько я понял, это заблуждение, так?
Языковой поддержки ООП в C нет, но изобразить что-то похожее никто не мешает. В общем, главный плюс такого велосипеда — его легко использовать из разных языков программирования. Минусы — сложность разработки и сопровождения.
Здравствуйте, Aen Sidhe, Вы писали:
C>>Чего-чего? А всякие COM, GObject и прочие самоделки мне, значит, почудились? AS>:offtopic: AS>Я всегда считал, что стандартный C (не Objective C) не умеет ООП штатно. Насколько я понял, это заблуждение, так?
Да.
С прекрасно поддерживает ООП, просто в нём нет встроенных примитивов для ООП. К примеру, "полиморфный класс" — это встроеное в язык средство в C#/Java, а в С — это просто будет паттерном, который может быть реализован рядом способов.
Здравствуйте, syomin, Вы писали:
AS>>Я всегда считал, что стандартный C (не Objective C) не умеет ООП штатно. Насколько я понял, это заблуждение, так? S>Языковой поддержки ООП в C нет, но изобразить что-то похожее никто не мешает. В общем, главный плюс такого велосипеда — его легко использовать из разных языков программирования. Минусы — сложность разработки и сопровождения.
Здравствуйте, syomin, Вы писали:
S>>Ну, в таком случае преобразование хотя бы в C++ само напрашивается... Можно даже частями. S>Ага. Это была моя первая идея, когда стало очевидно, что нужно что-то менять. Даже процентов 50 работы сделал. Но хотелось бы еще более высокий уровень абстракции, чем может предложить C++. Только я никак не могу придумать, как в случае с C# организовать процесс миграции.
Я бы сначала закончил переход на C++, а потом в C#. Это, конечно, если у тебя нет возможности заморозить проект...
S>Я бы сначала закончил переход на C++, а потом в C#. Это, конечно, если у тебя нет возможности заморозить проект...
Проект не развивается сейчас, так что особого смысла переходить сначала на C++ а потом на C# — нет.
Здравствуйте, syomin, Вы писали:
S>Краем уха слышал, что Microsoft сейчас активно пишет новый компилятор C#. Одно из главных отличий — теперь он будет написан на C# (я так понимаю, старый был сделан на C++). Может, кто-то в курсе, как именно происходит этот процесс: S>
S> хитрый рефакторинг старого компилятора; S> новый проект, но при написании "подглядывают" в старый компилятор; S> целиком новый проект. S>
Посмотри еще на технологию Bootstrapping'а.
S>Вопрос не праздный — есть желание перетащить небольшую (5 тыс. строк вместе с комментариями) библиотечку с C (без плюсов) на C#. Ситуация несколько осложняется тем, что на данный момент исходная библиотека компилируется только под UNIX, но это, в принципе, решаемо. И вот сижу чещу репу, как это можно сделать, а главное — стоит ли.
5 тыс. строк можно запросто полностью переписать за день или два. Только вот, зачем?
Lisp is not dead. It’s just the URL that has changed: http://clojure.org
Здравствуйте, Aen Sidhe, Вы писали:
AS>Я всегда считал, что стандартный C (не Objective C) не умеет ООП штатно. Насколько я понял, это заблуждение, так?
Нет, не заблуждение. Просто всякие там COMы — платформенные прибабахи, которые разработаны для обмена между процессами, к языку не имеют никакого отношения. А концепции ООП вполне можно придерживаться и на C.
Здравствуйте, syomin, Вы писали:
S>>Я бы сначала закончил переход на C++, а потом в C#. Это, конечно, если у тебя нет возможности заморозить проект... S>Проект не развивается сейчас, так что особого смысла переходить сначала на C++ а потом на C# — нет.
Тогда в чем вопрос? Переходи сразу туда, куда хочется.
Y>5 тыс. строк можно запросто полностью переписать за день или два. Только вот, зачем?
Если вы действительно так можете, то снимаю перед вами шляпу. А цель проста — упростить себе жизнь.