Dynamic Alternatives
P.O. Box 59237
Norwalk, CA 90652
562 802 1639
dynalt@dynalt.com
S U M M A R Y
DIARY: June 13, 2007 03:13 PM Wednesday;
Garold L. Johnson
TFS - Development Languages Evaluation
1...Summary/Objective
2...Desktop Applications
....C./ C++
....Eiffel
....Java Language
....Smalltalk
....Lisp Language
....D.Language
....Delphi
....C# and .NET
....Visual Basic
....Visual Basic for Applications
3...Personal and Open Source Tools
4...Web Applications
....Perl
....PHP
....Ruby
....Python
....JavaScript
....Java Server Pages
....Active Server Pages
5...Miscellaneous Languages
....Rebol
....Lua
....CMAC for MultiEdit
....4NT Batch Language
6...Markup Languages
....(X).HTML
....Cascading Style Sheets (CSS)
....XML
....Yet Another Markup Language (YAML)
..............
Click here to comment!
CONTACTS
SUBJECTS
Development Languages
CSS Cascading Style Sheets
YAML Yet Another Markup Language
0605 -
0605 - ..
0606 - Summary/Objective
0607 -
060701 - Follow up ref SDS 4 0000. ref SDS 3 0000.
060702 -
060703 - TFS Project Master Record 060708, ref SDS 1 0001
060705 - ..
060706 - All development will be done on Windows. Web apps will be deployed on
060707 - Linux.
060709 - ..
060710 - Use Delphi for desktop applications planned for sale. Script it with
060711 - one of the Pascal variants unless we can find a better approach.
060713 - ..
060714 - 070614 Review of Rubygems convinced me that using Ruby for personal
060715 - tools and Ruby on Rails for the web platform makes good sense. Ruby
060716 - provides an easy introduction to OO. I can teach Ruby while learning
060717 - PHP, which I can then teach.
060719 - ..
060720 - Use Ruby for small personal tools when appropriate.
060722 - ..
060723 - On the web, use PHP with Symfony, Perl with Catalyst, and Ruby with
060724 - Ruby On Rails as primary languages. Use Javascript in web pages and
060725 - with Ajax.
060727 - ..
060728 - Use Javascript for Firefox and Thunderbird extensions. Use Dscript
060729 - implementation to use Javascript on the desktop.
060731 - ..
060732 - While not precisely languages, (X)HTML and CSS are esential. XML may
060733 - be needed, but XML is a huge area and the tools are all over the map.
060735 - ..
060736 - Prefer XHTML to HTML.
060738 - ..
060739 - Prefer YAML to XML where YAML is reasonable, generally when intended
060740 - for human consumption.
060741 -
060742 - See Markup Languages, ref SDS 0 MJ7L
060744 - ..
060745 - Use 4NT and learn at least some of the nicer parts of its batch
060746 - language.
060748 - ..
060749 - The CMAC macro language used in MultiEdit may be used to provide
060750 - enchancements.
060751 -
060753 - ..
0608 -
0609 -
0610 - Discussion
0611 -
061102 - ..
061103 - Language selection depends on many factors:
061104 -
061105 - 1. Problem area
061106 -
061107 - Desktop apps need compiled languages for speed and security.
061108 -
061109 - Web apps can use scripting languages.
061111 - ..
061112 - 2. Available languages and implementations
061113 -
061114 - The language has to be available for the target environment.
061116 - ..
061117 - Vendor supprt has to be trustworthy or there need to be
061118 - multiple vendors to provide long-term availability
061120 - ..
061121 - 3. User community
061122 -
061123 - The larger the community, the more likely that there is code
061124 - and assistance available. Questions get answered more readily
061125 - in a larger, friendly community.
061127 - ..
061128 - 4. Object Oriented - OO is to powerful to do without unless there
061129 - is no other option.
061131 - ..
061132 - 5. Fun - Or at least not drudgery. We want to enjoy the journey.
061134 - ..
061135 - 6. IDEs - An IDE is more than an editor, and a good one can
061136 - improve productivity substantially.
061138 - ..
061139 - 7. Moderate Learning Curve - We will need several languages, so
061140 - we can't spend a lot of time learning any on language.
061142 - ..
061143 - 8. Manageable Libraries -- When the libraries get too large the
061144 - learning curve becomes too long.
061146 - ..
061147 - 9. Licensing - We don't want to pay for runtime licenses. Any
061148 - runtime needs to be free.
061149 -
061150 -
061152 - ..
061153 - Desktop Applications
061154 -
061155 -
061156 - 1. Compiled - Compilation tends to protect the source code.
061157 -
061158 - Note: Compiling to bytecode often lends itself to disassembly
061159 - without some precautions such as obfuscation or encryption.
061161 - ..
061162 - 2. Fast - Users expect quick response from desktop applications
061163 - more so than web apps.
061164 -
061165 -
061167 - ..
061168 - C / C++
061169 -
061170 - C isn't OO.
061172 - ..
061173 - C++ is too arcane and complex, and its libraries can be huge. The
061174 - learning curve is too long and too steep. It just isn't fun.
061176 - ..
061177 - There are free environments, but few really good IDEs that aren't
061178 - commercial and expensive.
061180 - ..
061181 - If we need to do some C / C++ work, we can use gcc or Turbo C++.
061182 - Both are free.
061183 -
061184 -
061186 - ..
061187 - Eiffel
061188 -
061189 - Effel is a nice language, and it always starts out on the list.
061190 -
061191 - Of the major implementations,
061192 -
061193 - 1. ISE Eiffel costs $5000 and is the defacto standard in the
061194 - industry. It implements the latest version of the standard.
061196 - ..
061197 - 2. Smart Eiffel (GNU Eiffel) is open source and looks really
061198 - good, except that they are not going to implement the latest
061199 - standard, thus fragmenting the language.
061201 - ..
061202 - It generates C or Java bytecode. The C backend requires a
061203 - C/C++ compiler. The Java backend should allow applications
061204 - to run everywhere.
061206 - ..
061207 - 3. Gobo Eiffel is open source and is following the new standard
061208 - but is incomplete.
061210 - ..
061211 - In short, there isn't a reliable, supported, inexpensive, standard
061212 - Eiffel implementation, so that pretty much rules it out.
061213 -
061214 -
061216 - ..
061217 - Java Language
061218 -
061219 - The Java language is relative small, but the libraries are
061220 - massive. The total learning curve is substantial.
061222 - ..
061223 - It compiles to bytecode leaving it slower than compiled code in
061224 - most cases, and vulnerable to decompiling.
061226 - ..
061227 - Rejected.
061228 -
061229 -
061231 - ..
061232 - Smalltalk
061233 -
061234 - While Smalltalk can't be considered to be fringe, and there are
061235 - good environments available, I think it is too different to be
061236 - able to learn easily. This needs to be reconsidered at a later
061237 - time.
061239 - ..
061240 - Rejected with reservations.
061241 -
061242 -
061244 - ..
061245 - Lisp Language
061246 -
061247 - Lisp suffers from most of the same problems as Smalltalk. The
061248 - learning curve is steep as it involves learning the functional
061249 - language model.
061250 -
061251 - Rejected.
061252 -
061253 -
061255 - ..
061256 - D Language
061257 -
061258 - The D language from Digital Mars has proprietary elements, a
061259 - single developer, and a small, relatively inactive community. It
061260 - is better than C++ as was intended, but there is no real support.
061261 -
061262 - Rejected.
061263 -
061264 -
061266 - ..
061267 - Delphi
061268 -
061269 - Commercial version costs $900, which is high, but it has a great
061270 - IDE, extensive libraries and is OO. I have the latest version.
061271 - Turbo Delphi has free and inexpensive versions that are less
061272 - capable that the top versions, but would be adequate for a start.
061274 - ..
061275 - There are Pascal-like scripting languages. Ruby can be used for
061276 - scripting, but reports from a Small Eiffel developer indcate that
061277 - Ruby doesn't fare well in a threaded environment such as any
061278 - desktop application has to be.
061280 - ..
061281 - Accepted.
061282 -
061283 -
061285 - ..
061286 - C# and .NET
061287 -
061288 - The .NET environment is bytecoded, and the libraries are huge. The
061289 - development environments are primarily Microsoft and Borland and
061290 - are expensive.
061291 -
061292 - Rejected.
061293 -
061294 -
061296 - ..
061297 - Visual Basic
061298 -
061299 - There is OO support, but the language is ugly. It is Microsoft
061300 - only. It uses a runtime, and apps can be slow.
061301 -
061302 - Rejected.
061303 -
061304 -
061306 - ..
061307 - Visual Basic for Applications
061308 -
061309 - This is the scripting language for Microsoft Office products, and
061310 - is therefore useful to know. VBA can do some things that don't
061311 - appear to be possible with external languages and OLE.
061312 -
061313 - Accepted for Gary, rejected for the team.
061314 -
061315 -
061317 - ..
061318 - Personal and Open Source Tools
061319 -
061320 - Personal or open source tools can be built using scripting languages
061321 - since we aren't trying to keep others from reading
061322 - the source code.
061323 -
061324 - Ruby is still the langage of choice for most of these tools.
061326 - ..
061327 - This adds most of the tools considered for web aplications. By using
061328 - a small server on the desktop, web applications can be made to
061329 - function on the desktop (see Webrick and PHPDock).
061331 - ..
061332 - Scripting and macros in various tools will use the appropriate
061333 - languages.
061334 -
061335 - 1. VBA for Microsoft Office products
061336 -
061337 - 2. CMAC for MultiEdit
061338 -
061339 -
061341 - ..
061342 - Web Applications
061343 -
061344 - Desirable characteristics include:
061345 -
061346 - 1. Hosting available - the language needs to be available on the
061347 - target web host(s).
061349 - ..
061350 - 2. Frameworks - Having web frameworks reduces development time
061351 - while adding (hopefully few) constraints.
061352 -
061353 -
061355 - ..
061356 - Perl
061357 - ----
061358 - Perl has been the predominate language on the web for decades, amd
061359 - we will need to be conversant with it since it is so heavily used.
061360 - PHP is beginning to supplant it, but the numbers aren't readily
061361 - available.
061363 - ..
061364 - While there are some IDEs there don't appear to be any outstanding
061365 - ones. The Catalyst framework is similar to Ruby On Rails.
061367 - ..
061368 - Accepted.
061369 -
061370 -
061372 - ..
061373 - PHP
061374 - ---
061375 - PHP is probably the most common language for web applications. It
061376 - has some warts, but PHP5 is OO, and there are IDEs and frameworks
061377 - for it. The Symfony framework is similar to Ruby On Rails.
061379 - ..
061380 - CodeGear offers Delphi for PHP, which should make application
061381 - development far simpler.
061383 - ..
061384 - Accepted.
061385 -
061386 -
061388 - ..
061389 - Ruby
061390 - ----
061391 - Ruby is a very nice langage, and Ruby On Rails put it on the map
061392 - in a big way. Hosting and community support are both a bit weak
061393 - compared to Perl and PHP.
061395 - ..
061396 - It is so attractive that I am not willing to give it up totally,
061397 - so our web host(s) will support it.
061399 - ..
061400 - Accepted.
061401 -
061402 -
061404 - ..
061405 - Python
061406 -
061407 - Python has good OO. My major complaint is the indentation is part
061408 - of the language syntax, and that is too weird to suit me. There
061409 - have been major applications written in it. Hosting is
061410 - problematic.
061412 - ..
061413 - Rejected (unless we find a killer app).
061414 -
061415 -
061417 - ..
061418 - JavaScript
061419 -
061420 - Primarily used embedded in browsers, but it is commonly used as
061421 - and extension language (Thunderbird and Firefox). It is necessary
061422 - in the places it is used.
061423 -
061424 - Microsoft's variant is JScript and that is rejected.
061426 - ..
061427 - Digital Mars' DScript is a standards compliant Javascript (ECMA
061428 - Script) that runs on the desktop, making Javascript useful for
061429 - desktop tools.
061431 - ..
061432 - Accepted.
061433 -
061434 -
061436 - ..
061437 - Java Server Pages
061438 - Active Server Pages
061439 -
061440 - These are for server side scripting of web pages. Perl, Ruby,
061441 - Javascript, and several languages can be used the same way.
061442 -
061443 - Rejected.
061444 -
061445 -
061447 - ..
061448 - Miscellaneous Languages
061449 -
061450 -
061451 -
061452 - Rebol
061453 -
061454 - Rebol is proprietary. The core is free, the enterprise versions
061455 - cost. It is the product of a small team, has a rather small
061456 - community, and its programming model has learning problems similar
061457 - to Smalltalk or Lisp. It is intriguing, but not applicable.
061459 - ..
061460 - Rejected.
061461 -
061462 -
061464 - ..
061465 - Lua
061466 - ---
061467 - Lua is a C-like embeddable scripting language. Arachnophobia is
061468 - planning to use it in the Smart Eiffel environment.
061469 -
061470 - Possible, but only in specialised circumstances.
061471 -
061472 -
061474 - ..
061475 - CMAC for MultiEdit
061476 -
061477 - CMAC is the macro language for MultiEdit. There have been several
061478 - things I want to do in MultiEdit and there will be more.
061479 -
061480 - Personal for Gary, reject for the team.
061481 -
061482 -
061484 - ..
061485 - 4NT Batch Language
061486 -
061487 - While much of the language is just BATCH language, there are
061488 - *lots* of extensions that make it extremely powerful. We need to
061489 - make use of some of that capability.
061490 -
061491 - Accepted.
061492 -
061493 -
061495 - ..
061496 - Markup Languages
061497 -
061498 -
061499 -
061501 - ..
061502 - (X)HTML
061503 - -------
061504 - HTML is universal on the web. HTML 4.0 is the latest and cleanest
061505 - version of the standard. It corresponds closely with XHTML. We
061506 - need to use HTML, but should work toward XHTML wherever possible.
061507 -
061508 -
061510 - ..
061511 - Cascading Style Sheets (CSS)
061512 -
061513 - CSS is used to provide format and presentation information for
061514 - HTML, which is intended to represent only content. The cleanest
061515 - websites use XHTML and CSS together to provide good separation of
061516 - content and presentation.
061517 -
061518 -
061520 - ..
061521 - XML
061522 - ---
061523 - XML is becoming pervasive as a data representation format. There
061524 - are XML parsers for all the languages. It is simpler than the SGML
061525 - from which it derives, but has essentially all the flexibility
061526 - that one could imagine needed.
061528 - ..
061529 - A Document Type Definition (DTD) specifies the grammar for a
061530 - dialect of XML, and a validating parser can insure that a
061531 - documents adheres to the grammar.
061533 - ..
061534 - There are many tools for dealing with XML, including XSLT, which
061535 - can be used to develop all manner of transformations of XML
061536 - documents.
061537 -
061538 -
061540 - ..
061541 - Yet Another Markup Language (YAML)
061542 -
061543 - YAML (rhymes with "camel") is a human-friendly, cross language,
061544 - Unicode based data serialization language designed around the
061545 - common native data structures of agile programming languages. It
061546 - is broadly useful for programming needs ranging from configuration
061547 - files to Internet messaging to object persistence to data
061548 - auditing.
061549 -
061550 - http://yaml.org/spec/
061552 - ..
061553 - Version 1.1 of the spec is in draft, but many are coding to it.
061555 - ..
061556 - We will likely standardize on it for such things as configuration
061557 - files, since humans can read and write it, and YAML parsers can
061558 - reconstruct objects from YAML files.
061559 -
061560 -
061561 -
0616 -