Ремесло программиста

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Ремесло программиста » AL-IV (Алфор) » Язык программирования АЛФОР


Язык программирования АЛФОР

Сообщений 31 страница 60 из 61

31

Заявлены SQL-операторы, т.е. проверка корректности запросов при компиляции. Добавлен справочник по классам.

32

Заявлена поддержка сообщений компилятора на русском языке.

33

8 часов назад выложена новая версия по адресу
https://sourceforge.net/projects/al-iv/
лицензия MIT
https://sourceforge.net/projects/al-iv/files/AL-IV-2017-10-10(v0.79).zip
https://sourceforge.net/projects/al-iv/ … V-doks.zip
https://sourceforge.net/projects/al-iv/files/readme.txt

mailto: Vladimir Kladov <v1kladov@mail.ru>
Read also a documentation and other materials on site:
http://kolmck.000webhostapp.com/AL4/index.html
Есть русская документация:
http://kolmck.000webhostapp.com/AL4/ind … art_RU.htm

Глянул внутрь исходников - можно в принципе попробовать собрать под linux, но сил пока не хватает.

Интереса не хватает потому что все примеры на английском. Недостаточно просто заявить, что можно использовать русские ключевики, нужно ещё показать.

И если автор нами брезгует (не участвует в форуме), то в соответствии с принципом уважения культурных традиций у меня мотивация тоже не появляется.

Отредактировано ВежливыйЛис (2017-10-11 01:28:14)

34

ВежливыйЛис написал(а):

Мотивации не хватает потому что все примеры на английском. Недостаточно просто заявить, что можно использовать русские ключевики, нужно ещё показать.

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

Поскольку в AL-IV строгие правила в виде указания сокращений вроде "вещ|ественное" и разделителя слов "_" то видится возможность выделить из исходников все английские слова и словосочетания для удобного, быстрого и целостного перевода.  Для наилучшего соответствия, полагаю, надо делать это с возможностью просмотра всех текущих использований и, очевидно, выбора, т.к. между словами, за исключением ключевых, скорее всего нельзя будет поставить соответствие 1 в 1: в исходных языках наборы значений расходятся, а исходников довольно много.

Также предполагаю сглаживание при чтении сокращенных наименований вроде самоподстановки мозгом нужных падежей и возможности подсказки в среде.
В таком случае технически он может стать самым русскоязычным среди текущих.

ВежливыйЛис написал(а):

И если автор нами брезгует (не участвует в форуме)

1. Почему-то полагаю, что приглашение было весьма не вежливым, учитывая, кто его делал :rolleyes:
2. Проделывается огромный объем полезной работы, человек явно знает что делать.
3. Явно было указано, что локализация преждевременна.
4. Здесь не тот уровень квалификации, что смогут дать ему эти 3,5 человека? Я выше написал (абзац 1) - до очевидных для меня улучшений он сам догадался, а для не очевидных просто невероятно, что кто-нибудь здесь будет сразу изучать AL-IV настолько глубоко. Я просто не вижу никакого смысла его отвлекать. Обсуждаемый здесь уровень поддержки русского языка им давно рассмотрен - см. предысторию в #1.
5. См. абзац (не пункт) 2 - технически он и сам, наверное, сможет справится с переводом довольно легко, если судить о качестве русского языка по документации.

Отредактировано MihalNik (2017-10-11 02:30:05)

35

MihalNik написал(а):

Здесь не тот уровень квалификации

Да Вы уху ели! У Буддена, например, чудовищная квалификация. Павиа 2000 лет и он знает всё! А у меня просто зверская.

MihalNik написал(а):

он и сам, наверное, сможет справится

когда справится, тогда и рассмотрим

Отредактировано ВежливыйЛис (2017-10-11 02:51:50)

36

ВежливыйЛис написал(а):

чудовищная квалификация.<...>просто зверская

Да-да) Вот и я сужу по себе.

ВежливыйЛис написал(а):

тогда и рассмотрим

У меня описан вариант в пред. посте. Просто думаю, что он сделает это раньше меня, но не в ближ. время :rolleyes:
А ещё я хочу удобную и простую среду для наглядной сборки с генерацией кода вроде Delphi/NetBeans.
Особенно тяжело без этого, зная что он умеет подобное делать и что это явно тоже не задача №1.

37

MihalNik написал(а):

Да-да) Вот и

Никаких няш-мяш. За то высказывание Вам однозначно нужно дать леща.

38

ВежливыйЛис написал(а):

однозначно нужно дать леща.

Ну что Вы опять несёте?) Даёшь леща!
http://s6.uploads.ru/t/p4j56.jpg

39

Беглый осмотр говорит, что код не релизный - полно assert'ов и закомментированного кода.
Работа выполнена классически, там же C#, он легко читается  :crazyfun: Например, вызов функций осуществляется через создание списка (это поверхностно, не углубляясь в священные тексты), там краткие комментарии есть, форматирование кода (я тоже люблю код друг от друга визуально отделять  :cool: ) общее представление о работе получить можно. В целом выглядит красиво.

40

MihalNik написал(а):

У меня описан вариант в пред. посте. Просто думаю, что он сделает это раньше меня, но не в ближ. время А ещё я хочу удобную и простую среду для наглядной сборки с генерацией кода вроде Delphi/NetBeans.Особенно тяжело без этого, зная что он умеет подобное делать и что это явно тоже не задача №1.

Наглядность сборки это как? И причем тут Delphi?
Я так понимаю нужен редактор/среда как у arduino?

41

Павиа написал(а):

Наглядность сборки это как?

Наглядность сборки - в несколько щелчков пальцами создать приложение из коробки, раскидать визуальные компоненты, не подгоняя пропорции и координаты руками в тексте.

utkin написал(а):

полно assert'ов

Так и должно быть, когда кол-во кода приличное, иначе поправки будет очень сложно отлаживать, тем более при общественном доступе.

utkin написал(а):

и закомментированного кода.

Не уверен, но там ещё м.б. какая-то хитрость с подстановкой закомменченного кода для целевых сред.

42

MihalNik
Вот вечно у вас так: соединяете слова из разных областей. - а потом ваши читатели гадают, что же вы имели в виду.
Нагляюность сборки это make файлы или  qt-шные файлы проекта.  В delphi этого попросту нету. До 2010 года так свой препроцессор вставить было невозможно. 

Что касается запуска из среды это нетрудно. Вот с отладкой придётя повозиться. По сути это выгрузка семантического дерева в стандартом формате dwarf или llvm. Но тут как вы заметели у автора синтаксис менялся.

Что касается формошлёпства. Или как эмбаркодци пишут быстрое протепирование(rad)
То тут дело только за готоввми компорентами. Их нужно от паруы десятков. Но чем больше тем лучше. Что отнимает уйму времени. Даже в  qt такое толком не сделали.  - правда их там в тексте проще расставлять.

Arduino в этом плане проще. Сдедали они 100 примеров, на все случае жизни. Так там даже писать ничего нп нужно , специфика данной области. Но чего тут говорить hivision за 10 лет несумели родить аналог.

А всё вместе это называется юзаблите или эргономика.  Идти на встречу пользлваьпдю. Или дружност к пользователю.  Предрасположенность к   использованию звучит лучше.

43

Павиа написал(а):

MihalNik
Вот вечно у вас так: соединяете слова из разных областей. - а потом ваши читатели гадают, что же вы имели в виду.
Нагляюность сборки это make файлы или  qt-шные файлы проекта.  В delphi этого попросту нету.<...>
Что касается формошлёпства. Или как эмбаркодци пишут быстрое протепирование(rad)

Не приписывайте словам общего назначения узкие смыслы. Сборка приложения также как сборка автомобиля - подразумевает соединение каких-то частей и только.
Наглядность подразумевает, что всевозможные соединяемые детали полностью видны в ходе этой самой "сборки".
Если вы прописываете загрузку картинки из файла - это не может быть наглядным по определению - в коде видна команда и название файла, а не сама картинка.
Если она не задана жёстко - это уже абстрактный параметр, но он всё ещё может быть показан как картинка, более наглядно соответствующая понятию "картинка", чем набор букв.
Любое соединение граф. частей, прописанное текстом, имеет плохую наглядность.
В Делфи же граф. форма собирается и выглядит достаточно наглядно, но запись её сборки в .dfm сопоставимой наглядностью не обладает, так же как ею не обладают html+css, но для них есть соответствующие средства.
Текстовая программа даёт наглядность, пока не выходит за рамки текстового режима и то желательно разнообразное форматирование, чтобы наглядно представить хотя бы ч/б консольное приложение. Среды разработки уже как правило дают хоть сколько-нибудь наглядный выбор из списков возможностей.

Ну и для примера можно посмотреть HiAsm. Делфи очень поверхностный инструмент, хотя и такой уровень уже очень хорошо.

44

Так и должно быть, когда кол-во кода приличное, иначе поправки будет очень сложно отлаживать, тем более при общественном доступе.

Я не против, лишь бы работало.

Не уверен, но там ещё м.б. какая-то хитрость с подстановкой закомменченного кода для целевых сред.

Я так сильно не копал :).
При наличии времени можно было бы попробовать найти места, где указан синтаксис и сделав отдельный форк, сделать синтаксис таким каким хочется. Но тогда встанет вопрос с обновлением версий системы.

45

utkin написал(а):

места, где указан синтаксис и сделав отдельный форк, сделать синтаксис таким каким хочется.

Что это даст? Ну в смысле замена знаков, с переводом слов понятно.

46

Что это даст? Ну в смысле замена знаков, с переводом слов понятно.

Ну как бы не очень много. Раз там автоматное построение, то не думаю, что там есть большая гибкость в синтаксисе. Тут лучше консультироваться напрямую с автором. Тогда можно внедрить сменяемый синтаксис (как в Валентине - хранить синтаксис в отдельном файле).

47

Если ссылки не работают, см. тек. раб. ссылку в #1
Поддержка перевода ключевых слов имеется

VI. Дополнительно

VI. 1. Локализация строковых ресурсов

AL-IV поддерживает механизм локализации строк с помощью псевдо-функций вида _идентификатор. Для строки это выглядит как вызов функции, например,
"Red square"._Rsq или _Rsq("Red square")

Но вызовом функции данная конструкция не является. Она лишь сообщает компилятору о том, что строку "Red square" следует поместить в массив локализуемых строк, индекс строки в этом массиве запомнить и использовать для извлечения строки из этого массива. Фактически, при этом может быть извлечена другая строка, записанная в этот массив вместо исходной строки "Red square" в результате работы функций локализации. Например, это может быть строка "Красный квадрат".

Все имена таких строковых ресурсов должны быть уникальными в пределах класса.

В качестве стандартного API для управления локализацией предлагается класс {Localize_str} (хотя это не обязательно, и всегда может быть изготовлен другой класс, работающий по другим алгоритмам).

При использовании класса {Localize_str} следует как минимум один раз (при инициализации программы) вызвать его статическую функцию Localize, указав краткое имя языка локализации. Предполагается, что имя языка приложение сохраняет само, в доступном ему месте. Для упрощения настройки приложения в плане выбора одного из доступных для локализации языков, имеется метод List_languages, возвращающий список полных и кратких имён языков, извлечённых их названий языковых файлов (предполагая, что они именуются в едином стиле English_EN.lng).

Метод Localize имеет дополнительный строковый параметр Prefix, который позволяет переводить в программе только языковые ресурсы с именами, начинающимися с этого префикса (префикс задаётся без лидирующего подчёркивания). Пустая строка в качестве префикса означает трансляцию всех строк, независимо от имён ресурсов.

При обращении к методу Localize первым делом вызывается метод Save_untranslated, если до этого он не вызывался из программы. Пользователь-переводчик всегда может обнаружить первичный языковый файл, сохранённый этим методом, сделать из него копию, поименовав её в форме Имя-языка_ИЯ.lng и отредактировав в текстовом редакторе. Строки, подлежащие переводу, имеют форму NAME=Value. Заменять следует только значения Value, не трогая имя и знак равенства. В строке могут быть и другие знаки '=', они могут изменяться в соответствии с требованиями языка. Отредактированная версия языкового файла должна быть сохранена в формате UTF-8.

Местом хранения языковых файлов по умолчанию являются либо директория, в которой запускается приложение, либо (если запись туда невозможна) - специальная директория для данных приложения. Либо, имеется возможность явно указать такую директорию (метод Set_directory_lang).

Важно, что если в процессе разработки были добавлены новые транслируемые строки, то они распространяются не только на исходный файл, сохраняемый из приложения при вызове Save_untranslated, но и на все уже переведённые языковые файлы. После чего достаточно отредактировать их, переводя только новые строки.

VI. 2. Локализация ключевых слов языка

AL-IV поддерживает возможность трансляции ключевых слов самого языка с использованием любого другого письменного языка. При этом частично используется техника локализации строк (см. выше).

Все ключевые слова канонической (английской) версии языка размещаются в текстовом файле Default_.lng в директории с исходными текстами компилятора. Достаточно скопировать этот файл и переименовать, например, в Klingon_KL.lng, после чего заменить строки на свои, и становится возможно использовать ключевые слова на соответствующем языке. Ключевые слова в языковом файле имеют имена, начинающиеся буквой K, и в основном сосредоточены в секции [{Translation_to_canonical_keyword}].

Для использования в классе национальных ключевых слов, класс должен начинаться со спецификации языка вида ['KL'] или [Language='KL'], после которой первое же ключевое слово должно быть записано уже на указанном языке. Например:

['RU'] КЛАСС {Привет_мир}, НЕТЕСТИРОВАН :

ФУНКЦИЯ Main|_главная : << "Привет, мир!" >> .

КОНЕЦ

В связи  с тем, что язык перевода может содержать ряд морфологических особенностей (падежи, спряжения, связки, предлоги и т.д.), специально для перевода ключевых слов разработаны правила, позволяющие более гибко сопоставлять более одного национального варианта для каждого ключевого слова, и даже использовать два отделенных пробелами идентификатора вместо одного ключевого слова.

Для этого в качестве перевода может использоваться более одного словосочетания, при этом словосочетания разделяются запятыми. Внутри словосочетания (которое может быть одним словом) вертикальный разделитель разделяет несколько возможных окончаний, которые могут продолжить основной корень. Например,
Kthis=ЭТОТ| ОБЪЕКТ,ЭТОМУ|_ОБЪЕКТУ| ОБЪЕКТУ,ЭТОГО_ОБ|ЪЕКТА,ЭТОГО ОБЪЕКТА

- позволяет использовать вместо THIS слова и словосочетания:

ЭТОТ
ЭТОТ ОБЪЕКТ
ЭТОМУ
ЭТОМУ_ОБЪЕКТУ
ЭТОМУ ОБЪЕКТУ
ЭТОГО_ОБ
ЭТОГО_ОБЪЕКТА
ЭТОГО ОБЪЕКТА
Примечание: в языке AL-IV ключевое слово THIS бывает необходимо в основном в двух случаях:

когда сам объект должен быть передан в качестве параметра,
или когда создаётся новый объект, и объект THIS указывается в качестве его владельца:
x = {Тип}( ... ), ПРИНАДЛЕЖАЩИЙ ЭТОМУ ОБЪЕКТУ - прямой перевод
x = {Type}( ... ), OWNED BY THIS

Вместе с ключевыми словами локализуются кодированные символы (#NL, #TAB и т.п.), а так же встроенные псевдо-функции (.Len, .Str, .Index и др.) Но в языке имеется так же возможность упростить перевод любых ранее изготовленных классов на национальные языки. Для этого для транслируемого класса создаётся класс-зеркало на соответствующем языке, с единственным модификатором в заголовке TRANSLATION OF {Class_name}. Он должен содержать только переводы наименований для полей, функций (и их параметров), перечислений, записей, констант. Переименования помещаются в соответствующие секции. Например:

['RU']
КЛАСС {Текст_файл}, ПЕРЕВОД {Text_file} :

ПОЛЯ:
   Path = Путь|_к_текстовому_файлу
   Encoding = Кодировка
.

МЕТОДЫ:
   Load = Загруз|ить(Строки|_массив[])
   Save = Сохран|ить(Строки|_массив[])
.

ФУНКЦИИ:
   Text_load = Текст_загруз|ить(
      Путь|_к_текстовому_файлу, Строки|_массив[] )
   Text_save = Текст_сохран|ить(
      Путь|_к_текстовому_файлу, Строки|_массив[] )
.

КОНЕЦ

Теперь достаточно включить такой класс в список импорта, и использовать переведённые наименования его функций, методов, полей и т.д. - с использованием национальных букв / иероглифов / рун / литер / клиньев / каракулей / узелков и т.п.

Примечание для русскоязычных читателей. Возможность по русификации (или точнее, произвольной локализации) предоставляется как механизм, позволяющий развивать навыки программирования в любом возрасте, без необходимости начинать с изучения английского языка. Несмотря на довольно большой список слов в словаре, основа языка АЛФОР требует значительно меньше важных ключевых слов для того, чтобы можно было начать писать свой код или понимать уже написанный. Например, класс для вычисления вещественных корней квадратного уравнения:

['RU'] КЛАСС {Квадратное_уравнение}, НЕТЕСТИРОВАН:
ИМПОРТ: {Математика} .
ВЕЩЕСТВЕННОЕ A|_коэффициент_не_должен_быть_0
ВЕЩЕСТВЕННОЕ B|_коэффициент
ВЕЩЕСТВЕННОЕ C|_коэффициент

МЕТОД Решение\_квадратного_уравнения( Ответ\ы_в_массиве[] )
      :
      Ответ[].Стереть
      --------- 'A == 0 - неверное условие'
      ЕСЛИ Абсолютное_значение(A) < 0.000_000_001 ? ==> ;
      ВЕЩЕСТВЕННЫЙ д\искриминант = B * B - 4 * A * C
      ЕСЛИ ?
      [д == 0] ? Ответ[] << -B / (2 * A)
      [д > 0 ] ? ВЕЩЕСТВЕННЫЙ к\орень_из_д = д.Корень
                 Ответ[] << (-B - к) / (2 * A)
                 Ответ[] << (-B + к) / (2 * A) ; .

КОНЕЦ

48

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

Итак, словарь есть, только у автора более тысячи строк перевода, вкл. сообщения компилятора.
Заметен непереведённый префикс "Main" - по-русски, если дословно, то  "Глав", "Главная", хотя едва ли название изначально удачное, м.б., логичнее "Пуск".

Наверное, прежде чем переводить классы, лучше вначале определиться с переводом ключевых слов. Словарь нужно вычитать, возможно, где-то дополнить/исправить.
После этого можно переводить классы, затем думать о сборке документации с переводом.

49

Доступна среда разработки.

50

MihalNik написал(а):

Доступна среда разработки.

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

51

А если нет - не добавлять? :rofl:

52

Заявлена её локализация.

53

0.9:

Возможность компиляции в Python-программу. Пока реализовано создание только консольных приложений

54

Что значит компиляция в Питон? Это как? Питон вроде как интерпретатор. Транспиляция наверно?

55

utkin написал(а):

Что значит компиляция в Питон? Это как? Питон вроде как интерпретатор. Транспиляция наверно?

Значит, проблема с восприятием латыни.

56

Интересно, если перевод для ключевых слов и сообщений компилятора там имеется, а не выдаёт ли последний транслит?

57

0.92.7:

IDE AL4: Добавлен дизайнер формы (BETA)

58

инкрементальная компиляция:

с динамической загрузкой перекомпилировавнных классов без перезапуска приложения. Что намного лучше, чем пошаговая отладка.

Остался только один недостаток: пока что техника инкрементальной компиляции в DLL с дозагрузкой поддерживается только для Delphi/VCL. Ничто не мешает отлаживать/разрабатывать код в таком варианте, а затем собирать приложение, уже отлаженное, под нужную целевую платформу.

Ближайшие заявленные планы - печатная отчетность.

59

Заявлены печатная отчетность, RTTI и многопоточность.

60

пару тройку показательных примеров.

:

/*
['RU']

КЛАСС {Программа_на_русском|_языке}, НЕТЕСТИРОВАН:

ИМПОРТ: {Текст_файл}, {Файловые_функции}, {Системные_функции},
        {Строковые_функции} .

ФУНКЦИЯ Main|_главная_функция :
    << "Привет, мир!" >>
    СТРОКА привет|_строка = "Привет, мир!"
    << "Длина строки [" привет "] = " привет.Длина.Строка >>
   
    ----------------------------- 'посчитаем буквы'
    СТРОКА разные_б|уквы = ""
    ДЛЯ а1 ИЗ [0 --> привет.Длина-1] :
   
        ЕСЛИ привет[а1].Верхний_регистр != привет[а1].Нижний ?
       
             ЕСЛИ привет[а1] !ИЗ разные_б ? разные_б << привет[а1] ;
             ЦЕЛЫЙ сч|етчик_букв = сч + 1
             
        ИНАЧЕ << привет[а1].Верхний "==" привет[а1].Нижний #КЦ
        ;
       
    ;
    << "Строка [" привет "] содержит " сч.Строка " букв, из них разных: "
       "" разные_б.Длина.Строка >>
       
    ------------------------------ 'загрузим каталог'
    СТРОКА путь\_к_родительской_директории
           = Стартовая_директория.Удалить_заверш(
             "\").Извлечь_путь.Удалить_заверш("\")
    СТРОКА файлы\_в_директории[]
    Каталог(путь, файлы[])
    ДЛЯ ф ИЗ файлы[] :
        ЕСЛИ ф.Сменить_расширение(".txt") == ф ?
             ------------------------------------ 'загрузим текстовой файл'
             СТРОКА текст\_из_файла[]
             Текст_загрузить(путь.Завершающий_слэш ф, текст[])
             ------------------------------------ 'выведем его в консоль'
             << "[[[[[[[[[[[[[[ файл: " ф "]]]]]]]]]]]]]]]]]" #КЦ
             ДЛЯ с ИЗ текст[] :
                 << с #КЦ ;
        ;
    ;   
    >>
    .
   
НАДО СДЕЛАТЬ: "это проверка перевода TODO" .

   
ТЕСТ of_to_string :
    ДОЛЖНО (5).Str == "5", "5.Str == " (5).Str
    ДОЛЖНО (5.0).Str ИЗ ["5", "5.0"], "5.0.Str == " (5.0).Str
    .
   
КОНЕЦ
*/

еще в конце #47.


Вы здесь » Ремесло программиста » AL-IV (Алфор) » Язык программирования АЛФОР