FreeBasic в образовании

Автор: tux, ссылка по теме. Если вы автор статьи, а так же против ее размещения на этом сайте, вы можете написать об этом в ПС на форуме

Есть куча мнений, на каком языке надо обучать программированию, на каком компиляторе. Некоторые утверждают, то необходимо сразу на профессиональных языках программирования, иначе в дальнейшем будет сложно перейти на него, но при этом сложно объяснить даже базовые принципы программирования. Но кто бы о чем не думал, многие, непонятно почему, продолжают обучать еще на 16-ти разрядных версиях Паскаля да Си. К сожалению, наработки написанные на них невозможно в дальнейшем использовать в современных языках, и поэтому приходится либо переписывать немалую часть кода. Я не буду доказывать, что FreeBASIC идеально подходит для этой задачи, но продемонстрирую его преимущество в этом вопросе.
Трудно спорить с тем, что сейчас стандартом системных языков программирования является Си, и от этого никуда не деться. Если выходит какая либо новая библиотека, то 100% у нее будет Си совместимый интерфейс. FreeBASIC является полностью Си совместимым языком, это означает, что все, что можно использовать в Си, можно использовать и в FreeBASIC-е. Это также означает, что куски кода написанные на Си и на FreeBASIC-е можно без особых проблем использовать в одном проекте. Так как формат бинарных файлов FreeBASIC-а является ELF — который является стандартным для *NIX систем, то помимо использования библиотек, можно использовать линковку чистых объектных файлов. Продемонстрирую это на примере.

Напишем функцию на FreeBASIC-е

Declare Function fAdd Alias "fAdd"_
( _
Byval A As Integer,_
Byval B As Integer _
) As Integer
Function fAdd _
    ( _
    Byval A As Integer,_
    Byval B As Integer _
    ) As Integer
    Function=A+B
End Function

Сохраним ее в файле func.bas и скомпилируем

fbc -c func.bas

Получим в итоге файл func.o . Теперь напишем код основной программы с вызовом этой функции на Си и сохраним в файле main.c

#include <stdio.h>

int fAdd(int A, int B);

int main(){
printf("%d\n", fAdd(4, 5));
return 0;
}

Скомпилируем:

gcc -c main.c -o main.o

Получим файл main.o с точкой входа в нашу программу, ну а теперь слинкуем это в один готовый исполняемый файл

gcc main.o func.o -o proga

в результате получаем готовую программу.

Однако тут следовало бы сказать об одной важной вещи. FreeBASIC изначально был ориентирован на полную независимость от сторонних динамических библиотек, и поэтому использует при линковки свои собственные библиотеки, в которых и реализованы все сложные конструкции, которые было бы накладно генерировать при каждой компиляции программы. Язык Си же является основным языком многих операционных систем, и поэтому можно практически с полной уверенностью утверждать, что все Си-шные библиотеки будут в системе. Поэтому в Си используются динамические библиотеки, и следовательно меньше проблем при линковки. В нашем примере на FreeBASIC не было использовано никаких специфичных конструкций, поэтому нам ничего для компиляции больше не понадобилось. В принципе использование дополнительных библиотек не накладывает никаких ограничений и никак не повлияет на производительность, единственное итоговый файл получится на несколько килобайт больше, чем подобный на Си, но с учетом характеристик современной техники это можно не принимать во внимание.