История изменений
Исправление segfault, (текущая версия) :
Строго говоря, нет. Или объясни мне, чем на раст легче портировать с паскаля, чем с си. Ты же ведь помнишь, с чего спор начинался?
Паскалевские базовые непримитивные типы, такие как строки и массивы отлично ложатся в rust-овые. Вплоть до автоматической трансляции кода. Работы с указателями в проектах на паскале практически не встретишь (все же, язык высокого уровня), а где попадется - пихаем в unsafe.
В С же, строки обычно представлены указателями на ноль-терминированную строку. И указывают они не обязательно в начало буфера со строкой. Арифметика указателей часто имеет место. Сконвертить это в str или String без вмешательства человека и глубокого понимания происходящего невозможно. С массивами те же проблемы + длина, обычно прилепленная отдельной переменной. Ищем и интегрируем ее опять вручную. Массивы предопределенной длины - отдельные заморочки с прибиванием длины к типу и sizeof. Ну и на последок самое вкусное: повсеместные алокации памяти разными способами. Суем в контейнеры? А область видимости?
Можно, конечно, тупо все протранслировать в работу с указателями, но тогда это будет один большой unsafe{...}, и для интеграции с нормальным кодом на rust понадобятся прослойки, конвертирующие форматы.
Исходная версия segfault, :
Строго говоря, нет. Или объясни мне, чем на раст легче портировать с паскаля, чем с си. Ты же ведь помнишь, с чего спор начинался?
Паскалевские базовые непримитивные типы, такие как строки и массивы отлично ложатся в rust-овые. Вплоть до автоматической трансляции кода. Работы с указателями в проектах на паскале практически не встретишь (все же, язык высокого уровня), а где попадется - пихаем в unsafe.
В С же, строки обычно представлены указателями на ноль-терминированную строку. И указывают они не обязательно в начало буфера со строкой. Арифметика указателей часто имеет место. Сконвертить это в str или String без вмешательства человека и глубокого понимания происходящего невозможно. С массивами те же проблемы + длина, обычно прилепленная отдельной переменной. Ищем и интегрируем ее опять вручную.
Можно, конечно, все протранслировать втупую, но тогда это будет один большой unsafe{...}, и для интеграции с нормальным кодом на rust понадобятся прослойки, конвертирующие форматы.