juan_gandhi: (Default)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2011-10-30 09:21 am
Entry tags:

о языцех - Бейсик

Я его, конечно, никогда не уважал. Но когда Андрей Петрович (тм) попросил посмотреть на его программу, которая типа вычисляет предел в категории, я, конечно, завёлся, и мы месяц, наверное, протрахались с этим делом, дойдя до интерактивного построения категории и до расчёта топологий Гротендика; с топологиями Гротендика мы обломились на категории Δ3, где, по моим прикидкам, расчёт займёт три недели на бейсике. Пришлось перекатать на фортран, а операции над множествами - на ассемблер; 4 часа - и топологии расклассифицированы.

В следующий раз это был вижуал бейсик, Берлин, 95. Netz&So ввёз меня в качестве гастарбайтера; заплатили, по немецкому обычаю, половину (а я варежку разинул); но я насладился Западным Берлином, вообще атмосферной немецкой конторы.

Что я делал - локализационное решение для вижуал бейсика. Выдёргивал ресурсы из кода, строил файлы с переводами, и в рантайме считывал это дело, подставляя ресурсы. Конкатенация строк на Бейсике ещё хуже, чем на Фортране; я развлекался написанием смесил сишного и Бейсиковского кода, лишь бы работало. Работало, но я как-то не насладился. Напрягал повсеместный дебилизм в решениях и невозможность сделать элементарные вещи не через жопу.

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

[identity profile] raydac.livejournal.com 2011-10-30 04:32 pm (UTC)(link)
а что за немецкий обычай - "платить половину"?

[identity profile] ivan-gandhi.livejournal.com 2011-10-30 04:36 pm (UTC)(link)
Экономия. Если можно наебать исполнителя, то наябывают. Это мой опыт такой.

Крик души

[identity profile] polenova.livejournal.com 2011-10-30 04:49 pm (UTC)(link)
Боже, как я ненавижу Вижуал Бэйсик!!!!! А спрос на него какой на рынке - наваяли миллионы строк кода, который теперь надо поддерживать, кряхтят и поддерживают из-зо всех сил. А куда деваться?

Re: Крик души

[identity profile] udpn.livejournal.com 2011-10-30 07:36 pm (UTC)(link)
Так не поддерживайте, отдайте мне.
Как-то 7 лет на нём отпахал, и ничего такого через силу плохого в нём не увидел.
VB это язык быстрого прототипирования, что означает, что за наименьший возможный срок можно написать и отладить практически что угодно. Отсутствие классов и указателей, наличие хорошей стандартной библиотеки и проверок времени исполнения этому всячески способствуют.

Re: Крик души

[identity profile] polenova.livejournal.com 2011-10-30 08:16 pm (UTC)(link)
"Отдайте мне" - да берите, я на этот кусок не претендую. Классы там, кстати есть, даже интерфейсы есть.
Написать легко, особенно прототип, отладить элементарно, а вот поддерживать это счастье - кошмар. Но если вам нравиться, интернет ломится от предложений и платят неплохо.

Re: Крик души

[identity profile] udpn.livejournal.com 2011-10-30 09:42 pm (UTC)(link)
Там есть модули классов, это не совсем классы. Они имманентно завязаны на COM и подсчёт ссылок.

Где, где он ломится? VB будто бы вообще никому не нужен.

Re: Крик души

[identity profile] polenova.livejournal.com 2011-10-30 10:03 pm (UTC)(link)
COM, конечно. Все время ищут на Classic ASP + VB + COM. Нового девелопмента там нет, сплошной саппорт, а код написан именно так, чтобы побыстрее наляпать, на скорую руку отладить и в продакшн. И кода этого миллионы строк. Переписать не успевают, переписывают кусками. Лучше от вкраплений .NET в неожиданных местах он не становится.

[identity profile] fatoff.livejournal.com 2011-10-30 05:20 pm (UTC)(link)
Единственный язык, в оценке которого 100% тебя поддерживаю. Гуано, ядовитое для мозга. :-p

[identity profile] udpn.livejournal.com 2011-10-30 07:38 pm (UTC)(link)
Интересно, у вас будет какая-нибудь аргументация в пользу этого утверждения, кроме Всеобщего Мнения?

[identity profile] fatoff.livejournal.com 2011-10-30 08:04 pm (UTC)(link)
Опыт примерно 2000-го года. Долго, очень, вникал в несусветно закрученный goto-стиль кода, делающий простые вещи. Не спорю, пиши мои предшественники в том коде более паскалевски, оно приятнее было бы, но то были ещё цветочки. А вот бесконечные вылеты из программы невесть по какой причине были ягодками. Слаботипизированный язык оставляет простор для такого поведения. Но это ещё были сладкие ягодки. Слегка недерминистское поведение, фиг знает от каких факоторов зависящее, приложение работало с локальной БД, лазило в Интернет на сервер. Нигде не было ни чётких интерфейсов, обозначающих функциональность модуля ничего.

Если сравнивать с современным VB.Net - там оно конечно, всё по другому. Это по возможностям и компонентости, как в C#, но ддя тех, кому нравится напоминающая ВэБэ запись кода.

Впрочем, я уже давно это руками не трогаю. Брезгую. Уж если заставят прикладухой заниматься, так есть достойная того занятия Java.

[identity profile] udpn.livejournal.com 2011-10-30 09:44 pm (UTC)(link)
Хм. Ну если уж VB слабо типизирован, то дальше можно и не продолжать.

[identity profile] fatoff.livejournal.com 2011-10-31 01:43 am (UTC)(link)
http://en.wikipedia.org/wiki/Type_system

Weak typing means that a language implicitly converts (or casts) types when used. Consider the following example:
var x := 5; // (1) (x is an integer)
var y := "37"; // (2) (y is a string)
x + y; // (3) (?)
In a weakly typed language, the result of this operation is unclear. Some languages, such as Visual Basic, would produce runnable code producing the result 42: the system would convert the string "37" into the number 37 to forcibly make sense of the operation.

[identity profile] udpn.livejournal.com 2011-10-31 08:42 am (UTC)(link)
Бред. Наличие коэрций не делает язык слабо типизированным. Haskell тоже имеет коэрции, но почему-то никто не заикается о том, что система типов в нём слабая.
Не знаю, откуда этот бред появился в головах людей и википедии. Слабая система типов это (def.) система типов, нарушающая инварианты, которые она должна поддерживать. Например, в С++ можно считать область памяти, где лежит int, как string. Получается, что типы в нём фактически не играют никакой роли, потому что проверка типов такие случаи не отлавливает. В коэрции же ничего плохого нет.

[identity profile] fatoff.livejournal.com 2011-10-31 02:38 pm (UTC)(link)
Только не ясно, почему ваша оценка computer science (работа о типизации очень известная и была опубликована достаточно давно) как "бред" должна перевешивать.

[identity profile] udpn.livejournal.com 2011-10-31 06:36 pm (UTC)(link)
Цитирую определение от авторов этого термина вообще.

In 1974 Jones and Liskov describe strong-typed language is one in which “each type defines a set of primitive operations that are the only direct means for manipulating objects of that type.”

Расскажите, каким именно образом вы применяете это определение к VB.

[identity profile] fatoff.livejournal.com 2011-10-31 07:04 pm (UTC)(link)
Я собственно сильно раньше Википедии был наслышан про сильно и слабо-типизированные языки. К первым скорее отностятся те, которые не могут обходиться без определения типа для переменной, и чётко определяют операции для типов, определённых для языка. Любая конверсия типа задаётся явно. Ко вторым скорее относятся те, которые могут обходиться без определения типа для переменной, операции над типами могут определяться в контексте их использования, зависеть от содержания переменной, что и приведено в том примере. И программисты, которые настоящие хард-кор бэйсиковеды, вовсю пользуются слабой типизацией.

[identity profile] udpn.livejournal.com 2011-10-31 09:08 pm (UTC)(link)
Понятие сильной и слабой типизации было введено упомянутыми выше соавторами. Вынужден повторить просьбу: укажите, чем VB не подходит под вышеупомянутое определение сильно типизированного языка.

>> Ко вторым скорее относятся те, которые могут обходиться без определения типа для переменной
VB каждой переменной назначает тип. В случае, если не используется Option Explicit, необъявленной переменной назначается тип Variant, который является обычным вариантным типом, ничуть не хуже такового в каком-нибудь "сильно типизированном" O'Caml.

>> операции над типами могут определяться в контексте их использования
Классы типов "сильно типизированного" Haskell позволяют определять операцию по контексту использования.

>> И программисты, которые настоящие хард-кор бэйсиковеды, вовсю пользуются слабой типизацией.
Вы всё ещё считаете, что он слабо типизирован? Оспорьте утверждения выше или причислите O'Caml и/или Haskell к слабо типизированным.

[identity profile] kashnikov.livejournal.com 2011-10-31 08:42 pm (UTC)(link)
Вы бы не могли уточнить о какой очень известной опубликованной работе идёт речь?

Если я правильно понимаю, то пример из википедии демонстрирует Variants[1]. Строго говоря, принято говорить о том что variants, проделывают дыры (loopholes) в системах типов, или же говорят, что они привносят слабую типизацию [2, 3].

В Pascal есть Variant Records. Однако так уж условлено, что его не относят к языкам со слабой типизацией.Тоже самое с Ada.

Конечно, я могу здесь сильно ошибаться и вовсе не обязательно, что так как я написал и есть. Интересная беседа вот и решил высказать просто мнение. ;-)

______________________________
[1] The Ultimate Data Type (http://www.ecs.syr.edu/faculty/fawcett/handouts/cse775/presentations/BruceMcKinneyPapers/variants.htm)
[2] Benedict R. Gaster and Mark P. Jones, A Polymorphic Type System for Extensible Records and Variants
[3] Luca Cardelli, Peter Wegner. On Understanding Types, Data Abstraction, and Polymorphism (http://lucacardelli.name/Papers/OnUnderstanding.A4.pdf)
[4] Jacques Garrigue, Programming with Polymorphic Variants

[identity profile] kashnikov.livejournal.com 2011-10-30 05:31 pm (UTC)(link)
Я знаю Андрея Петровича Ершова. Других пожалуй не знаю.
Кто же у Вас эта интересная личность? :)
brmail: (Default)

[personal profile] brmail 2011-10-30 05:47 pm (UTC)(link)
Меня всегда смешат упоминания VB в контексте "Плохой язык, пытался на нем простенький драйвер написать- не вышло, как ни извращался" , "неудачная поделка, пробовал на нем решать системы дифуров - не катит, очень медленно работает"
По аналогии можно сказать что молоток - совершенно неудачный инструмент, например часы им чинить невозможно просто. А гвозди часовой отверткой забивать неудобно.
Vb был создан не для рассчета топологий. Vb создан и отлично применим для создания бизнес-приложений, морд к базам, бугалтерских и складских программ. И там у него по скорости создания и простоте небыло конкурентов.

[identity profile] sorhed.livejournal.com 2011-10-30 06:22 pm (UTC)(link)
Согласен. Правда, всё-таки не до такой степени нужно было давать волю программистам. On Error Resume Next до сих пор, поди, кому-то снится в кошмарах. :)

Кстати, нормальной среды разработки «формочек для баз данных» а-ля Дельфи и VB теперь нет вообще. Дельфи тихо помер, а VB сейчас дотнетный и уже совершенно не тот (не то чтобы в этом было что-то плохое, но сложность выросла очень сильно).

[identity profile] gabaidulin.livejournal.com 2011-10-30 06:36 pm (UTC)(link)
Есть вроде какая-то похожая штука у Oracle(http://en.wikipedia.org/wiki/Oracle_ADF). Впрочем,я никогда сие в живую не видел.

Ну и RAD-приложения во многом перекочевали в web. А там-то стопицот CMS разнообразных существует, которые фактически заменили desktop apps в данной нише.

[identity profile] sorhed.livejournal.com 2011-10-30 11:32 pm (UTC)(link)
Перекочевали, но не RAD это. RAD это когда полтора программиста решают задачу вчера.

ADF — это очередная попытка сделать RAD на джаве. Не могу сказать, что это прямо вот получилось (оракл же), но пользуется сейчас некоторой популярностью в энтерпрайзи-среде.

[identity profile] sabotagecat.livejournal.com 2011-10-30 07:00 pm (UTC)(link)
Делфи щас усиленно гальванизируют. Уникод сделали в VCL(гхы), 64 битный компилер вот надысь прикрутили и снова лезут в кроссплатформу. Посмотрим, может старушка еще не совсем сдохла.

[identity profile] udpn.livejournal.com 2011-10-30 07:40 pm (UTC)(link)
Ну я видел, как австралийские дюжие ребята подсовывали VB дополнительный этап компиляции, который позволял использовать в коде try/catch. (Вообще, мне кажется, у них там какая-то секта, потому что австралийские же ребята сделали плагин для компиляции native dll на vb).
brmail: (Default)

[personal profile] brmail 2011-10-30 09:59 pm (UTC)(link)
да, .NET причесали, усложнили и сделали похожей на джаву. Но вариантов остатся с vb фактически и нету. Контролы не юникодные, новые библиотеки под него уже не выпускают - язык свое отработал. Опять же все сейчас уже живет в вебе, а там нету места беймсику.

[identity profile] sorhed.livejournal.com 2011-10-30 11:29 pm (UTC)(link)
Да хоть в вебе, хоть в шмебе. Допустим, есть какая-то неотложная бизнес-задача, связанная с перекладыванием данных из формочки в базу данных и обратно. Её нужно реализовать вчера силами полутора программистов, которые, скажем так, не вполне соответствуют уровню собравшейся здесь аудитории. Каким инструментом это можно сделать сейчас?

А раньше можно было.

[identity profile] redplait.blogspot.com (from livejournal.com) 2011-10-31 08:38 am (UTC)(link)
> Каким инструментом это можно сделать сейчас?
python
perl + DBI
если морда нужна - pyqt или wxperl
даже наверно кросс-платформенно сразу получится

[identity profile] udpn.livejournal.com 2011-10-31 08:44 am (UTC)(link)
Вы что-то глупость какую-то сказали. Разницу между Qt и редактором форм не видите, не? QtCreator даже близко не имеет возможностей нормального редактора форм. Там даже массив элементов управления создать нельзя.

[identity profile] sorhed.livejournal.com 2011-10-31 08:48 am (UTC)(link)
Ага. В активе нужно: знание перла — раз (желательно такое, чтобы на выходе не получалась каша), знание SQL — два, знание особенностей веба (HTTP, HTML) — три. Если нужно, чтобы работало хорошо, нужен ещё AJAX и Javascript/jQuery. Всё это слишком низкоуровнево (и занимает в пять раз больше времени). Чтобы всё это изучить, нужно затратить два года. Совершенно не RAD.

Да, в перле есть нежно любимый мной Mojolicious, но и он не абстрагирует формы как views. Нужно вручную вытащить данные из БД, засунуть их в форму (через темплейт), вывести, потом собрать данные, провалидировать, запихать в POST и передать обработчику, которым их опять скомпоновать в запрос (SQL или ORM), и запихнуть в базу. Ещё для этого нужно уметь какие-никакие транзакции.

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

[identity profile] cema.livejournal.com 2011-10-31 06:39 am (UTC)(link)
Когда мне (иногда) надо было поддерживать старый basic несколько лет назад, я брал его emacs'ом. Но, конечно, та ещё среда.

[identity profile] sassa-nf.livejournal.com 2011-10-31 09:33 am (UTC)(link)
наоборот, On Error нужно было толково расширить, и был бы вам event driven programming. я серьезно. эту фичу осознал после ассемблера и системы сигналов в posix.

[identity profile] agathpher.livejournal.com 2011-10-30 05:48 pm (UTC)(link)
А когда до перла с питоном дойдем?! :)

[identity profile] ivan-gandhi.livejournal.com 2011-10-30 06:30 pm (UTC)(link)
Хм, действительно, Перл с Питоном...

[identity profile] ircicq.livejournal.com 2011-10-30 06:04 pm (UTC)(link)
У VB один плюс - послужил почвой для Delphi GUI. Все эти формочки, Control Toolbars в VB зародились.

[identity profile] dkfl.livejournal.com 2011-10-30 07:01 pm (UTC)(link)
нормальный язык для отрисовки формочек. не для топологий :)
ждем отчета по перлу и руби.

[identity profile] mikkim08.livejournal.com 2011-10-30 07:33 pm (UTC)(link)
А что там с Берлином ? Какие были впечатления ?

[identity profile] ivan-gandhi.livejournal.com 2011-10-30 08:19 pm (UTC)(link)
Хорошие впечатления. Полюбил я Западный Берлин. Люди хорошие, понимающие.

[identity profile] cema.livejournal.com 2011-10-31 06:42 am (UTC)(link)
Странно выходит: на улице понимающие, а на работе...

[identity profile] ivan-gandhi.livejournal.com 2011-11-01 03:59 am (UTC)(link)
На работе тоже понимающие. Но что они сделают, если хозяин жмот.

[identity profile] mikkim08.livejournal.com 2011-10-31 07:47 am (UTC)(link)
Да, хороший город. Мне тоже нравится. Только Берлин уже давно единый. так что "Западный Берлин" это анахронизм.

[identity profile] udpn.livejournal.com 2011-10-30 07:42 pm (UTC)(link)
>> вычисляет предел в категории, я, конечно, завёлся, и мы месяц, наверное, протрахались с этим делом, дойдя до интерактивного построения категории и до расчёта топологий Гротендика

Ухты, интересно. Расскажите, пожалуйста, зачем это нужно, и что именно требуется для того, чтобы что-то такое написать. Этот предел имеет отношение к обычному пределу (для какой-нибудь конкретной категории функций или чего там)?

[identity profile] ivan-gandhi.livejournal.com 2011-10-30 08:18 pm (UTC)(link)
Да у меня в "категориях для джава-программистов" (http://patryshev.com/cat/doc/EasyCategoriesForProgrammers.pdf) всё это расписано.

Зачем нужны пределы? Ну как, select a.*,b.* from a,b where a.userid = b.userid; - это частный случай предела (pullback).

Зачем нужно узнать, какие бывают топологии Гротендика над такой-то категорией? Это ключ к логике категории. А так - ничего не требуется, знание определений.

[identity profile] udpn.livejournal.com 2011-10-30 09:39 pm (UTC)(link)
>> Да у меня в "категориях для джава-программистов" всё это расписано.
Почему эта ссылка не написана красным по белому где-нибудь в заголовке вашего блога? :)
>> select a.*,b.* from a,b where a.userid = b.userid; - это частный случай предела (pullback).
Я думал, что это отфильтрованное декартово произведение. Интуиция не сработала, увы. К обычному пределу функции он отношения всё-таки не имеет?
>> Это ключ к логике категории.
Это, наверное, результат общения с теорией категорий: очень общие ответы :) Какой-нибудь пример или класс задач, решаемых с их помощью, бы.

[identity profile] sorhed.livejournal.com 2011-10-30 11:30 pm (UTC)(link)
> Почему эта ссылка не написана красным по белому где-нибудь в заголовке вашего блога? :)

Мне казалось, она легендарна и не требует лишней рекламы. :)

[identity profile] ivan-gandhi.livejournal.com 2011-10-30 11:56 pm (UTC)(link)
И Декартово произведение предел, и отфильтрованное - предел.

Я ничего общего с классами задач не имею... но пример вот я уже привёл же.

[identity profile] nivanych.livejournal.com 2011-10-31 04:55 am (UTC)(link)
> Я думал, что это отфильтрованное декартово произведение
pullback выражается через эквалайзер от произведения. Так что, почти правда.
А все конечные пределы выражаются либо через эквалайзер с произведениями, либо pullback с терминальным объектом.

[identity profile] udpn.livejournal.com 2011-10-31 08:27 am (UTC)(link)
Ололо, я теперь даже понял это.

[identity profile] nivanych.livejournal.com 2011-10-31 08:52 am (UTC)(link)
Гм. К чему относилось "ололо"?

[identity profile] udpn.livejournal.com 2011-10-31 09:20 am (UTC)(link)
Ну типа радостное улюлюкание. Прочёл статью по ссылке выше и знаю не только что такое эквалайзер, но даже что такое КОэквалайзер. Правда, пока так и не понял, зачем там теоркат, и что это вообще даёт. Так что нужно перечитать.

Вот после "bananas, lenses etc" сразу понятно: это нужно для алгебраического мышления о программах. Типа таким образом классифицируется вся рекурсия.

[identity profile] nivanych.livejournal.com 2011-10-31 09:39 am (UTC)(link)
И корекурсия! ;-)
Ну, не вся. Но довольно много.

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

[identity profile] sassa-nf.livejournal.com 2011-10-31 10:09 am (UTC)(link)
а здесь специальные очепятки, или стрелки так пишут "0.2: 2->0"?

[identity profile] ivan-gandhi.livejournal.com 2011-11-01 03:59 am (UTC)(link)
Ой. Спасибо.