LINUX.ORG.RU

ЛОР, помоги выбрать ЯП для обучения

 , , , ,


1

3

Часто слышу просьбу научить программированию. Хотя пока я этим не занимаюсь, мне стало интересно, какой ЯП выбрать для введения в программирование.

Вот к каким мыслям я пришёл:

Язык должен наиболее чисто демонстрировать самые основы написания кода.

Не Си и не современные коммерческие языки (Java, C#, Go). Си, хотя примитивный в основе, усложнён из-за окружения, в котором используется. Современные коммерческие языки были созданы для решения проблем индустрии. Проблема общая: я хочу преподавать материал по мере нарастания сложности. Если в языке неизбежно приходится использовать классы или printf, то это затруднит объяснение (не хотелось бы слишком часто говорить «потом узнаешь для чего это нужно»), напугает студента (ему придётся писать код, используя возможности, которые он плохо понимает), создаст неправильное восприятие основ (как будто printf — это какая-то важная часть компьютера или ОС).

В целом, я хочу постепенно наращивать сложность и, если задачу можно решить более простым методом, то выбрать этот метод.

Языки, между которыми я выбираю: Pascal и Python.

Pascal устарел и денег не принесёт (обидно), но это и не является основной целью. Целью является программирование, а не современное окружение.

В частности, я не собираюсь задрачивать студента на Delphi или любой «продвинутый» диалект языка. Это противоречит цели. Я рассчитываю на то, что после должной тренировки “bare bones” нужно перейти на современный язык и это будет легко.

Важно упомянуть, что спека языка Oberon (Виртовский язык, тот же Паскаль, только упрощённый и доработанный) составляет 17 страниц.

Питон мне сложнее оценить, потому что я избегал работы с ним.

Если ограничиться императивным подмножеством, без ассоциативных массивов, классов и мета-классов, list comprehensions, HOF, исключений, то выглядит как альтернатива Паскалю. Хотя меня беспокоит динамическая типизация. Типы — очень важная вещь, хотелось бы чтобы язык помог это донести, а не быть типа «ну да, это важно, но ты забей».

Это все мои мысли.

Что касается практики, то я имел несчастье наблюдать как человек впервые знакомился с программированием, изучая Java на javarush. На это было больно смотреть.

Edit: дальнейшие пояснения по теме:

  • Подробнее про то, почему я считаю, что изучение основ и Паскаль хорошо сочетаются: 1
  • Почему не Си и не ассемблер: 1 2
  • Почему Паскаль: 1 2
  • Почему не Питон: 1
  • Целевая аудитория: 1
  • Почему такая размытая аудитория: 1 2
  • Про важность иерархии: 1


Последнее исправление: kaldeon (всего исправлений: 10)
Ответ на: комментарий от monk

Так во всех современных языках с динамической типизацией именно автоматический вывод типов, аналогичный шаблонам Си++. JIT без этого нормально не работает.

И ещё пример:

def func(classname):
    if classname in globals()['__builtins__']:
        return globals()['__builtins__'][classname]()
    elif classname in globals():
        return globals()[classname]()
    else:
        return None

print(func('int'))
print(func('float'))


class MyClass:

    def __init__(self):
        print('test')


func('MyClass')

Вот тут уже шаблонами не отделаешься. Variant тут заранее не заготовишь. Тут надо какое-то чудовищное метапрограммирование использовать. Только его не используют.

Kogrom
()
Ответ на: комментарий от Kogrom

Это сконструировать объект по имени класса?

Вот в статически типизированной Java:

public static Object func(String classname) {
    Class clazz = Class.forName(classname);
    return clazz.getConstructor().newInstance();
}
monk ★★★★★
()
Ответ на: комментарий от monk

Вот в статически типизированной Java

Только конкретная функция осуществляет динамическую типизацию, а не вывод типа. И возвращает она абстрактный Object, а не конкретный экземпляр класса. И я не уверен, но думаю, что, например, целочисленные типы в Java не являются наследниками Object.

Пример на C++ у меня не открывается. Но это и не важно.

Kogrom
()
Ответ на: комментарий от Kogrom

Только конкретная функция осуществляет динамическую типизацию, а не вывод типа.

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

monk ★★★★★
()
Ответ на: комментарий от Nervous

делать проверку, только не на тип, а на значение.

Проверка на значение - это корректная операция сравнения числа с числом - если не -1 то что-то делаем. А не теплое с мягким(строку с числом) сравнивать. Тем более тут говорят что проверка всё равно нужна так как с бухгалтерской точки зрения надо отличать нулевой НДС и отсутствие НДС.

А вообще вот такие казусы говорят о том,что в налоговой(и выше) сидят технически безграмотные люди и не могут придумать такой алгоритм расчета налогов который было бы удобно и просто реализовывать. Может они там конечно все как один гениальные финансисты,но с технической стороной вопроса всё плохо. Свои документы нередко по сей день в формате Ворда выкладывают,нарушая тем самым официальный российский гост,предписывающий использование открытых форматов. И всякий самописный софт для заполнения каких-то там форм отчетности у них win-only был,а может и есть - просто я давно не интересовался. Написание кроссплатформенного софта освоить не могли.

watchcat382
()
Ответ на: комментарий от watchcat382

говорят о том,что в налоговой(и выше) сидят технически безграмотные люди

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

mister_VA ★★
()
Ответ на: комментарий от No

забыли добавить проверку на специальные значения,

Не факт. Проверку на наличие строки вместо числа могли точно также забыть добавить и произошло бы некорректное сравнение строки с числом.

типы подобные «string | number» позволили бы выявить проблему во время компиляции

Если бы эти типы были так хороши - их бы уже использовали в проекте над которым работают много квалифицированных программистов. Но только «программисты 1С» считают нормальным и допустимым написать в коде сравнение строки с числом. Я еще мог бы понять если школьник-самоучка случайно обнаружил что используемый им язык пропускает такую запись и использовал ее в своем pet-проекте. Но как такое может написать программист с базовым институтским образованием, в коде вроде бы серьезного продукта - не знаю. Даже у не-программистов есть классическое выражение для таких случаев сравнения несравнимого - «как теплое с мягким». А потом «программисты 1С» удивляются что отношение к ним в сообществе скажем так весьма особое.

watchcat382
()
Ответ на: комментарий от watchcat382

Но только «программисты 1С» считают нормальным и допустимым написать в коде сравнение строки с числом

Ну почему же только они, про динамическую типизацию и правила приведения типов и их очередность вы не слышали?

Obezyan
()
Ответ на: комментарий от monk

Здесь мы сравниваем ставку НДС со ставкой НДС. Они могут быть равны или не равны.

Даже на этом уровне абстракции,если отвлечься от представления в языке программирования, где число и строка это несравнимые сущности, значение «БезНДС» это не ставка НДС,это отсутствие ставки НДС. Ставка НДС - это по определению некоторое число,даже если и ноль. Числа сравнивать можно. Число с отсутствием числа - сравнивать нельзя. Но «программисты 1С» этих базовых основ математики и логики не понимают(или намеренно игнорируют) судя по тому как они пишут код.

Union и variant record в Аде нельзя сравнивать?

В Аде это будут заранее объявленные сущности ОДНОГО ТИПА,пусть и довольно странного. А для одного типа можно и операцию сравнения определить.Даже если она тоже будет экзотической,она всё равно будет корректной именно потому что оба аргумента одного типа. Если же это будут РАЗНЫЕ типы,даже и содержащие одно и то же - Ада сравнивать не позволит.

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

В примере с 1С предлагалось сравнивать именно что РАЗНЫЕ типы. К этому я и прицепился. Корректно было бы написать сначала явное приведение к одному типу,потом сравнивать.

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

watchcat382
()
Ответ на: комментарий от monk

если забудешь проверить на БезНДС перед вычислением НДС, получишь не ошибку умножения суммы на строку, а отрицательный НДС безо всякой ошибки.

Вот для этого и существует в Аде типы для которых можно задать диапазон значений,который не пропустит отрицательный НДС. То есть проверка встроенная автоматическая. Там где такой проверки нет - придется не забывать проверять самому. Что на «БезНДС»,что на его неотрицательность. Что так проверять что эдак.

ошибку умножения суммы на строку

Странная логика создателей «языка 1С» - операция умножения работает правильно,ругается на аргументы разных типов,а операция сравнения почему-то аргументы разных типов пропускает.

watchcat382
()
Ответ на: комментарий от monk

отдают пользователям без тестирования.

Это что,теперь считается нормальным и правильным? (Независимо от того,на каком языке писать.)

1С гарантирует отсутствие неопределённого поведения

Вот уже первый пример неопределенного поведения - операция сравнения допускает аргументы разных типов. А если сравнение землекопов с лопатами не приводит к сообщению об ошибке - то рано или поздно кто-нибудь такое напишет.

Ведь даже если у пользователя произойдёт ошибка, его данные не испортятся.

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

watchcat382
()
Ответ на: комментарий от monk

Компилятор Си/Си++ сейчас наиболее вылизан из всех.

А я бы поспорил. GNAT вылизан пожалуй что получше. Он сочетает сишную скорость на простых случаях с адской надежностью на сложных.

watchcat382
()
Ответ на: комментарий от jpegqs

любители плюсов так обмазываются абстракциями в несколько слоёв, что теряют всякую связь с реальностью.

Это пример неэффективности любителей плюсов,а не самих плюсов. Если программист напишет код не эффективно то компилятор ему особо не поможет.Во всяком случае пока в компиляторы не внедрили ИИ.

watchcat382
()

Языки, между которыми я выбираю: Pascal и Python.

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

Wapieth
()
Ответ на: комментарий от Obezyan

Ну почему же только они

Потому что остальные этим не злоупотребляют. Всяких школьников и студентов с pet-проектами не считаем.

watchcat382
()
Ответ на: комментарий от watchcat382

Потому что остальные этим не злоупотребляют.

А PHP? А JS?

Obezyan
()
Ответ на: комментарий от watchcat382

есть такой сюриал про «согбан?» шесть летающих дра

оцень хорошо намекающий от чего техническая грамотность недостаточное но не обходимое

зы - письменности сколько годиков?

qulinxao3 ★★
()
Ответ на: комментарий от watchcat382

значение «БезНДС» это не ставка НДС,это отсутствие ставки НДС

Это ставка НДС. В том смысле, что это значение должно быть в счёт-фактуре в колонке Ставка НДС и в книге покупок и в книге продаж.

Ставка НДС - это по определению некоторое число,даже если и ноль.

Числом она является только при вычислении суммы НДС. Во всех остальных операциях она не обязательно число. Также, как значение «Год смерти» не обязательно число: для ещё живого никакой год смерти не внести.

В Аде это будут заранее объявленные сущности ОДНОГО ТИПА,пусть и довольно странного.

Так значения ставки НДС и есть значения одного типа. В который входят значения, представляемые неотрицательными числами и одно значение, представляемое строкой. А Аде для хранения этих значений была бы вариантная запись.

Корректно было бы написать сначала явное приведение к одному типу,потом сравнивать.

К какому приводить, если «БезНДС» должен быть равен «БезНДС», 0 должен быть равен 0, но «БезНДС» не равен 0?

А то получится как в Си,где явное приведение типа позволяет получать неочевидные,да еще и зависимые от реализации (например разрядности) результаты.

Отсутствие возможности расширить числовой тип несколькими нечисловыми константами приводит к тому, что в стандартной библиотеке в функция mbrtoc32 возвращает количество преобразованных байтов, но если в процесс была ошибка, то вернёт 18446744073709551615 или 18446744073709551614 или 18446744073709551613 или 2147483647 или 2147483646 или 2147483645… может и другие на машинах с другой разрядностью.

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от watchcat382

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

Потому что для строки результата умножения нет. А операция сравнения объектов для разных типов имеет смысл и может вернуть ложь.

monk ★★★★★
()
Ответ на: комментарий от watchcat382

операция умножения работает правильно,ругается на аргументы разных типов

Не разных типов, а типов, для которых она не имеет смысла.

5 * 5.0 ругаться не будет и вернёт 25.0.

monk ★★★★★
()
Ответ на: комментарий от watchcat382

А если сравнение землекопов с лопатами не приводит к сообщению об ошибке

И что в этом плохого? Если в одном чулане землекопы, в другом лопаты, содержимое чуланов можно сравнить и убедиться, что они разные. Вот если бы при каких то условиях программа писала, что землекоп равен лопате или пять землекопов равны пяти лопатам, это было бы очень плохо.

monk ★★★★★
()
Ответ на: комментарий от watchcat382

Он сочетает сишную скорость на простых случаях с адской надежностью на сложных.

https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/regexredux-gcc-5.html - 0,81 секунда на Си

https://benchmarksgame-team.pages.debian.net/benchmarksgame/program/regexredux-gnat-5.html – 5,86 секунд на GNAT.

monk ★★★★★
()
Ответ на: комментарий от watchcat382

Если бы эти типы были так хороши - их бы уже использовали в проекте над которым работают много квалифицированных программистов.

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

monk ★★★★★
()
Ответ на: комментарий от watchcat382

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

Оно определённое. Для аргументов разных типов всегда возвращает ложь и меняет никакие другие данных.

monk ★★★★★
()
Ответ на: комментарий от watchcat382

Это что,теперь считается нормальным и правильным? (Независимо от того,на каком языке писать.)

Зависит от пожеланий заказчика. В случае 1С можно заплатить программисту за 4 часа разработки и проверить самому, а можно заплатить за 12 часов разработки и тестирования. Почти все выбирают первый вариант, а потом это становится локальной нормой.

На Си++ первый вариант невозможен, так как из Segmentation fault при нажатии на кнопку совсем не следует, что ошибка в обработчике этой кнопки. Вполне может быть в кнопке, которую ты нажал полминуты назад, а она испортила указатель, который использует эта кнопка.

monk ★★★★★
()
Ответ на: комментарий от watchcat382

вы «путаете» древнюю реализацию вариантных полей в записях без сохранения в самой записи тега указывающего какое ща поле(типа) - чем грешил Паскаль в частности

и с Variant (как в старом офисе ms) - где любой тип и как то передаётя тип текущего значения поля ()(обычно через значение vtable али какой аналог отличающий обьекты одного класса от других классов обьекты)

в юнион типах значение может быть только типа из юниона.

то что часто в реализациях не все ветви(даже не эйджкейсы) реализуют - ну так «рыночек порешал»

qulinxao3 ★★
()
Ответ на: комментарий от watchcat382

отношение к «1С-программистам» не столько из за говнокода(у кого его нет) сколько иной пропорции «не обманешь не продашь» в их взаимодействии с клиентами(клиенты не святые )

qulinxao3 ★★
()

Тему не читал, но посоветую Pascal.

vbr ★★★★
()
Ответ на: комментарий от qulinxao3

сколько иной пропорции «не обманешь не продашь» в их взаимодействии с клиентами

За заказную разработку на Java и SAP просят на порядок больше.

А отношение именно из-за массовости говнокода. Если писать так, как на 1С, почти на любом другом языке, программа работать не будет (для неё невозможно написать модульные тесты, описания API нет, обработка ошибок ввода отсутствует). А на 1С прокатывает. Потому что язык достаточно безопасный. Как формулы в MS Excel. Никто же не делает для них модульные и регрессивные тесты. Отдали заказчику, тот проверил. Но формулы не бывают на полторы тысячи строк, а функции в 1С бывают.

monk ★★★★★
()

Лично я считаю что Джава - всё таки лучший вариант для новичков. С него легко будет пересесть на всё что угодно.

Я сам не сторонник ООП, но чтобы понять что не так с ООП надо в него окунуться. По-другому очень трудно будет объяснить на пальцах. Как-то так…

Сам я в начале 90-х начинал с Бейсика. Ничего плохого в этом не вижу, ведь это как покупка первого компьютера: сперва ты не знаешь что тебе нужно. Только попользовавшись начинаешь понимать что не хватает ОЗУ, либо процессор слабоват и т.д…

Есть ещё Котлин, но я о нём мало знаю.

svyatozar ★★
()
Последнее исправление: svyatozar (всего исправлений: 2)
Ответ на: комментарий от monk

А операция сравнения объектов для разных типов имеет смысл

Вот в этом и есть основное разногласие. В классических книгах по программирования сравнение разных типов считается некорректной операцией. В 1С-программировании - допускается.

watchcat382
()
Ответ на: комментарий от monk

2 абзац всё так + «кое что за даром»

по 1 абзацу

те транзакции не так «очевидны»

qulinxao3 ★★
()
Ответ на: комментарий от monk

Так значения ставки НДС и есть значения одного типа. В который входят значения, представляемые неотрицательными числами и одно значение, представляемое строкой. А Аде для хранения этих значений была бы вариантная запись.

Да, согласен. Если такой странный тип объявлен то для него может быть определена и операция сравнения(и другие). Именно сущностей ОДНОГО ТИПА,вот этого.

Насколько реализация алгоритма вычисления НДС с использованием вариантной записи соответствует «хорошим практикам» программирования - вопрос спорный,но она хотябы корректна потому что для нее объявлен специальный тип и для этого типа определены операции с ним.

В целях объективности тут следовало бы произвести тестирование скорости исполнения разных реализаций алгоритма НДС - как с вариантной записьмю так и с использованием числового типа и значения -1 в качестве аналога «БезНДС». Насколько я вижу, чаще используются именно числовые значение вне диапазона - минус единица,иногда другие. Например системные вызовы так сделаны. Вызов read() возвращает число прочитанных байтов,ноль если конец файла и -1 при ошибке. Это вполне классическая традиционная практика,которая встречается настолько часто что ее можно считать общепринятой.

А вот в процитированном примере 1С - я вижу сравнение типа «Ставка НДС» с типом «строка». Что и выглядит некорректно,потому что определения типа «Ставка НДС» небыло.

К какому приводить

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

функция mbrtoc32

Посмотрел тут: https://en.cppreference.com/w/cpp/string/multibyte/mbrtoc32 Написано что она возвращает при ошибках отрицательные значения. Но вы таки правы - объявлена она как возвращающая значение типа size_t,а это беззнаковый тип. И я бы это назвал плохой реализацией,в отличие от того же read() который возвращает ssize_t, знаковый тип,и там отрицательные значения,используемые для кодов ошибок,будут именно отрицательными.

Интересно - почему mbrtoc32 объявили как возвращающую беззнаковый тип? А если уж так объявили то не надо было использовать отрицательные значения в качестве кодов ошибок.

Благодарю за пример интересного казуса.

watchcat382
()
Последнее исправление: watchcat382 (всего исправлений: 1)
Ответ на: комментарий от monk

5 * 5.0 ругаться не будет и вернёт 25.0.

В Аде для этого сначала надо будет явно определить такую функцию умножения для аргументов разных типов:

function "*"(left:integer;right:float) return float is
begin
return (float(left)*right);
end "*";

Потом можно будет пользоваться «звездочкой» для умножения не заморачиваясь:)

А сделано это например потому что если вместо 5.0 будет «бесконечная» дробь типа 5.33333… то в результате ее умножения на целое число случится еще и неявное округление,которое на разном железе может быть разным. И если нужен хорошо переносимый код то вышеприведенная функция умножения будет посложнее.

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

watchcat382
()
Ответ на: комментарий от monk

Вот если бы при каких то условиях программа писала, что землекоп равен лопате или пять землекопов равны пяти лопатам, это было бы очень плохо.

При вольном обращении с типами рано или поздно именно это и случится. Ибо сказано: Anything that can go wrong will go wrong. Создатели стандарта Ады это понимали,поэтому «закрутили гайки» по максимуму. А создатели Mars Climate Orbiter подтвердили вышепроцитированное правило натурным экспериментом. У них именно что землекопы с лопатами перепутались(ньютоны с фунтами).

watchcat382
()
Ответ на: комментарий от monk

5,86 секунд на GNAT.

Там даже отсюда видно почему так - использован пакет Ada.Strings.Unbounded. Это давняя,чуть ли не первая, публично доступная реализация строк «произвольной длины», она сделана максимально переносимо но из-за этого медленно. Тормоза от того что всё время занимается ре-аллокацией памяти и копированием при каждом изменении длины. Так что это у них получился тест скорости не собственно языка,а библиотечных функций.

Есть другие строковые пакеты для Ады,разной степени переносимости и скорости. Когда в начале 90х у меня еще небыло интернета - я даже свою реализацию писал чтобы быстро работала на 80286.

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

watchcat382
()
Ответ на: комментарий от watchcat382

Вот вы правильно вспомнили ньютонов с фунтами. То, оп чём вы говорите, это не типы данных (компуктеры), это размерность единиц измерения (физика).

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

Так что вы говорите о встроенной в Аду возможности проверять правильность РАЗМЕРНОСТИ правой и левой части формулы. И именно так и следует мыслить при программировании, не «совпадают ли типы», а «совпадают ли размерности» и проверять (сравнивать на тождественность) размерность.

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

mister_VA ★★
()
Ответ на: комментарий от watchcat382

В классических книгах по программирования сравнение разных типов считается некорректной операцией.

Например?

И даже в Ада можно сравнить

package Pak is
    subtype T1 is Integer range 1 .. 10;
    subtype T2 is Integer range 5 .. 50;
    function Test(x1 : T1; x2 : T2) return Boolean;
end Pak;

package body Pak is
function Test(x1 : T1; x2 : T2) return Boolean is
begin
    return x1 = x2;
end Test;

T1 и T2 разные типы, но значения сравниваются.

monk ★★★★★
()
Ответ на: комментарий от mister_VA

в приведенном вами примере складывают не лопаты с землекопами, а вес лопат с весом землекопов. и все получается правильной размерности и с типами все отлично. тип тут - Вес

alysnix ★★★
()
Ответ на: комментарий от monk

В случае 1С можно заплатить программисту за 4 часа разработки и проверить самому, а можно заплатить за 12 часов разработки и тестирования. Почти все выбирают первый вариант

А потом жалуются что «весь софт кривой,тормозной,глючный». За что заплатили - то и получили. Как и везде.

На Си++ первый вариант невозможен

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

И еще мне никогда не была понятна мотивация разработчиков 1С изобретать и реализовывать собственный язык. Есть же готовые языки,имеющие приспособления для встраивания в свои проекты. Lua например. Да и тот же Питон можно. Написать к готовому языку своих предметно-ориентированных модулей и пользоваться.

watchcat382
()
Ответ на: комментарий от watchcat382

Не была понятна мотивация разработчиков 1С изобретать и реализовывать собственный язык. Есть же готовые языки,имеющие приспособления для встраивания в свои проекты. Lua например.

1C развивается с 1991 года, а Lua, например, с 1993. Зачем было изобретать Lua, например, когда уже есть 1C?

vM ★★
()
Ответ на: комментарий от alysnix

складывают не лопаты с землекопами

Таки что такое размерность «землекоп» и размерность «лопата»? Это ведь не единицы измерения, это реальные вещи, так что и яблоки с яблоками складывать получится только в мешок, но не в компуктере.

mister_VA ★★
()
Ответ на: комментарий от watchcat382

И еще мне никогда не была понятна мотивация разработчиков 1С изобретать и реализовывать собственный язык.

  1. Простота и интеграция с БД, печатными формами и графическим интерфейсом. 1С 7.7 был эдаким Visual Basic’ом с ОРМ и встроенным Excel’ом. Альтернатив тогда вообще не было.

  2. Русскоязычность. Переводить на английский и обратно оборотно-сальдовые ведомости, статьи ДДС и прочие внеоборотные активы никому не улыбалось.

Да и сейчас ни в одном языке нет аналога Системы Компоновки Данных (когда по произвольным пользовательским отборам и группировкам модифицируем запросы к БД) или аналога &НаСервере и &НаКлиенте, когда на одном языке можно писать как бэкенд, так и фронтенд и вызов бэкенда ничем не отличается от вызова обычной функции.

monk ★★★★★
()
Ответ на: комментарий от watchcat382

И еще мне никогда не была понятна мотивация разработчиков 1С изобретать и реализовывать собственный язык.

Ну, затем, что внутренний язык 1С предназначен для конфигурирования и управления конкретно СУБД 1С с привязкой к российскому законодательству и русскому языку. И российскому бизнесу.

Внутренний язык 1С не для написания программ, а для создания очень конкретных кофигураций под запросы конкретных торговых точек/рабочих мест/бухгалтерий/фирм из готовых продуктов. Движок один, но БД и список запросов к БД «одной кнопкой» сильно разнятся.

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

Для более 10 компов уже надо ставить 1С поверх полноценного sql-сервера или мириться с тормозами. Но вариант под Винду раньше мог лишь с MS SQLServer (от 50 тыс руб, сейчас вообще невозможно). Линуксовая версия была сразу на MySQL, но без клиента, а через браузер. Как сейчас не в курсе, с линуксовой дел никогда не имел и вообще лень смотреть, но вроде и виндовую теперь можно ставить поверх MySQL.

Зато могу свидетельствовать, что не настроенная конкретно под нужды пользователя 1С тот ещё невнятный кошмар и костыльные методы работы оператора.

mister_VA ★★
()
Ответ на: комментарий от mister_VA

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

Это было очень давно. До 2003 года. Нынче там везде нормальный MS SQL (на оффтопике) или PostgreSQL (на линуксе). И полнотекстовый поиск.

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

Не MySQL, а PostgreSQL. И уже полностью 1С портировали (импортозамещение ведь).

Зато могу свидетельствовать, что не настроенная конкретно под нужды пользователя 1С тот ещё невнятный кошмар и костыльные методы работы оператора.

??? Чуть ли не половина продаж 1С идёт в виде базовой 1С или в облаке (1С-фреш называется), где никаких доработок не предусмотрено. Пользователи, однако, выбирают её.

monk ★★★★★
()
Ответ на: комментарий от mister_VA

вещественное двойной точности для них всё одно, всё едино, что гравитационная постоянная, что число Авогадро.

Отчасти согласен с вашим комментарием,но вот в этом моменте уточню,что Ада как раз позволяет не пихать всё подряд в «вещественное двойной точности»,а сделать отдельные типы(производные от него) для «высоты в метрах» и «высоты в футах». И вот тогда хрен получится эти две высоты перепутать. Не даст сам компилятор сложить метры с футами. Хотя внутри и то и другое будет «вещественным двойной точности».

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

watchcat382
()
Последнее исправление: watchcat382 (всего исправлений: 1)
Ответ на: комментарий от watchcat382

что Ада как раз позволяет не пихать всё подряд в «вещественное двойной точности»

Позволяет и Си: struct meters { double value; }.

А не заставляет и Ада: https://github.com/AnthonyLeonardoGracio/crazyflie-firmware/blob/810d9b1811bbdc6485a9f4f3e2b797741da10f4b/drivers/lps25h.ads

Угадаете, метры там или футы?

monk ★★★★★
()
Ответ на: комментарий от monk

T1 и T2 разные типы, но значения сравниваются.

В Аде это не разные типы,а подтипы одного типа integer с разным диапазоном. Потому и ключевые слова разные type и subtype У type тоже может быть range. Ну и чтобы документацию не пересказывать - хорошее сравнение системы типов Ады,плюсов и джавы: https://learn.adacore.com/courses/Ada_For_The_CPP_Java_Developer/chapters/05_Type_System.html

watchcat382
()
Ограничение на отправку комментариев: