Hacker Newsnew | past | comments | ask | show | jobs | submitlogin
Wapp – A Web-Application Framework for Tcl (tcl.tk)
89 points by Tomte on June 11, 2021 | hide | past | favorite | 52 comments


I've heavily used TCL twice in my career, and while I find it an interesting experiment in a language, and actually enjoy a lot of it, I would never recommend it to anyone, nor would I ever pick it for a project. The core idea of "everything is a string" just has a lot of failure modes, and you find yourself making common errors even after years of developing with it.

But it's a really neat exploration of a "what if" in programming languages.


I haven't used Tcl for anything in ages, but I have a book on it that I thumb through sometimes because it's so bizarre and fun to read about.

For example, you can delete or rename procedures on the fly, including built-in procedures. So you can rename a built-in like puts to something else, create your own puts procedure, and then call the old one (under its new name) in your new procedure (in case you wanted to override it to do some pre- or post-processing each time). You can even redefine procedures within themselves.

You can use variables in variable names (PHP does this as well).

The comment character # is a valid name for a variable or a procedure.

"Everything is a string" extends to even lists and code blocks.

Even though we've moved away from the hyperflexibility of languages like Tcl and Perl, they certainly served their purpose, and a lot of their better ideas were refined in their more orderly successors.


>$your_entire_comment

upvar

Expect & children (& see Don Libes book)

>a lot of their better ideas were refined in their more orderly successors.

Predecessors:

- ???

- Smalltalk

- Forth

- Lisp

#Not a language lawyer, just love proglangs


In the 1990s, when Tcl was taking off, there was really nothing else that made it as convenient to glue together different C libraries and slap a (Tk-based) GUI on it. It was a welcome revelation, compared to XWindows programming.

In the 1990s.


Yeah, my first encounters was the early 90s, where I wrote a gene sequencing support system with TCL/TK - it was pretty fun and worked pretty well, but there wasn't a lot available in the space. Python was still being dreamed up, bash wasn't up for it, and otherwise you had Fortran/C/C++/Pascal/Lisp.

Fast forward 20 years and I found myself using it again, but it felt silly compared to the now-mature Python, Lua, PHP, and Ruby.


To me, it seems fine in the space of an embedded scripting language where you let end users script within your otherwise "not tcl" application.

These days, maybe lua is a better choice, but I can see lua being more intimidating for smart, but less software-experienced people. "Everything is a string" might be more intuitive for them.


I was just thinking about this today. I am currently forcing myself to work on TCL for a small project (I've only used it casually before). Coming from lisp I can appreciate some aspects of it, but it can be frustrating at times.


TCL is one of the few languages allowing you to dabble in to and one of the few that caught hook with me. It's friendliness then leads you down a path of voodoo and creativity.

  proc displayHackerNews {} {
  set hn "Hacker News" ;#Fill the variable (hn) with the string "Hacker News"
  puts $hn ;#output the variable ($hn) to terminal
  } ;#end procedure

  displayHackerNews ;#execute the procedure
   displays: Hacker News
If statements are easy

  set hn ""
  if { $hn eq "Hacker News" } { puts $hn } else { 
     set hn "Not Hacker News" 
     puts $hn 
  } ;#end if
Infinite Loops are fun

  set hn "Hacker News" ;#Set a variable
  while { $hn eq "Hacker News" } {
    puts "$hn" ;# print "Hacker News" to terminal in an infinite loop
  } ;#end loop
Multi-threading is a breeze.

  package require Thread
  set MyThreadID [thread::create { 
  puts "Hello from my new thread"
   thread::wait
  } ;#end code-to-run
   ] ;#end thread
And finally, a if-switch-threaded-loop

  set hn "Hacker News"
  if { $hn eq "Hacker News" } {set switch "hn" } else { set switch "" }

  switch $switch {
  hn { 
  set MyThreadID [thread::create { 
  proc displayHackerNews {} {set hn "Hacker News" ; puts $hn} ;#end procedure

  #set aCounter to zero, if aCounter is < 7 execute displayHackerNews procedure
  for {set aCounter 0} {$aCounter < 7} {incr aCounter} { displayHackerNews } 
   thread::wait
  } ;#end threaded-code
  ] ;#end thread
  } ;#end switch-case

  default {puts "It's still not hacker news"}
  } ;#end switch
The simplicity of the language plus it's power enhances it further then python could ever reach. It also powers the Mar's Rover a long with 99% of all industrial technology. I wouldn't be too surprised to find the nuclear launch button is coded in TCL. (that part might not all be true) but

It's a nice language but to diss it that much, don't. It's a fun language to use and creates modern enhancements. I would HIGHLY recommend it to anyone who's confused about programming. Running remotely hosted X applications via novnc natively on most OS is tasty.

If one language that should be dropped is GOlang. Rust wins. It came from Google. Seriously, github links in source? Yes, looks smart and modern but is incredibly stupid. NO programming language should ever pull URL links for dependence. You wouldn't execute a random bash file on the internet to install a script would you? It's no difference.

I create a repo, heres link to repo, people install repo. I maliciously change the code to backdoor your box, you don't notice. Well done, You've compiled remote backdoor new version, none the wiser.

Who really reads the dependency code that that person has wrote?

My home page completely coded in PureTCL. No Databases, No JavaScript, no SSL and no bitching. http://fantasy.tf/


i feel like a good business idea would be showing new product names / logos to a group of 50 people from various demographics and ages to see if the name clashes with something else.

bc this one quite quite funny


This project predates the song i assume you're referring to by 2 or 3 years


It made me think of the old wireless application protocol stuff - WAP. I did create a site in WML around 2002 but all i remember is a <card> structure.


I worked with some guys who released one of the first mobile online games over WAP (it was a spin on wumpus hunt)


There's some... apps on this server


certified geek seven days a week


In all seriousness, I don't think there is much overlap in people who know about Wapp and those who know about WAP.


I don't think it would be hard to imagine people would be aware of an VERY RECENT INCREDIBLY POPULAR song.

Just because you like web shit doesn't mean you are completely disconnected from the greater culture.


I am the developer of Wapp. I gather (from other comments) that the name "Wapp" collides with a recent pop song by someone named "Cardi B" - please correct me if I have misunderstood. For the record:

  *  I do not follow or participate in pop culture.
  *  I do not listen to pop music, ever.
  *  I do not know who Cardi B is.
Any similarity in the name of the Wapp software framework and music by the individual or group known as "Cardi B" is purely coincidental.


Yes, Cardi B is a female singer who is popular these days (as in, she's on the radio). WAP the song name is an abbreviation that refers to female genitalia.

That people associate "Wapp" with a sexually suggestive pop song name instead of "app" or "web app" might say more about them than anything inherent from the project name...


Well, all these people commenting know both. I have a feeling a majority of people who know about Wapp know WAP, just because of the latter’s overall popularity.


I suspect you're wrong. :-)


I don't cook, I don't clean

but let me tell you how I got this app running


Tcl on the web; That's a Wapp


Yeah, imagine the name of your product sounding like the Western Australia Party!


I'm sure pretty much every word clashes with something and is "quite funny" at some point in time, and that's not even considering other idioms.

Better just call it whatever you find OK at the time ( minus the legal stuff ).

Btw, having a framework called Wet Ass PussPuss -> (,)++ for short it's pretty cool.


I went to a PTA meeting once and they were playing "OPP" while everyone's kindergarten age children danced to it. My wife and I were pretty sure we were the only ones that knew the lyrics.


And of course anytime anyone mentions TCL and the web, we must take a moment to remember AOLserver:

http://aolserver.github.io/

Maybe a slightly better link... https://en.wikipedia.org/wiki/AOLserver


Cardi B's favorite framework


You mean her song about wireless access points?

https://www.youtube.com/watch?v=-PlLRUoSukk


mixed feelings about this not being the top comment


TCL was the first programming language I learned because it was used to write scripts for IRC bots. Funny times :)


It seems like many of these commands should be methods on an OO object or at least subcommands of "wapp".


What could be the benefit of dragging OO into this?


It would be more Tclish, more similar what other Tcl packages (third-party and core ones) do.


For TCL? But why?


Why not?

Also, sometimes it seems “hacker” in Hacker News has been lost and replaced with corporate group think consensus, here.


"Growth Hacker News"


It's thankfully moved on from those days, but for a while it was "San Francisco and some tech News"


It was written by the author of SQLite, which is basically a Tcl extension that escaped into the wild.

There's a talk by DRH at the Tcl 2019 Conference regarding Wapp [0].

[0] https://youtu.be/Aq4NI5NTUpU time code 1:49:34


Yes, why on earth would someone use a tool designed to work directly with text to manage a text-based document definition protocol, when so many more complicated options are available?


Tcl had a very short time in the fickle web dev spotlight, mostly due to Aolserver and Philip Greenspun. Something between CGI with Perl and whatever Java had to offer in the deep end of the 90s.

At that time, a few lucky folks made way too much money using weird languages for the fledgling commercial internet.

http://aolserver.github.io

https://philip.greenspun.com/tcl/


Just throwing this out there, NaviServer is the replacement to aolserver. It's in active development and pretty awesome to what it can do. OpenACS is a prime example

https://openacs.org

https://wiki.tcl-lang.org/page/NaviServer


Because it's a likeable language. It has a small, neat syntax, equally clever semantics, so people do stuff in tcl for fun.


I used to fix some bugs in Tcl/Tk program a long time ago and it was the opposite of "fun".

But frankly it was about 10 years ago (and the program in question was ancient even back then) and I don't really remember much, and if it was a fault of Tcl, Tk, or the actual program.


Tcl has this interesting property. It's closer to Lisp in spirit and shell in syntax, but it also looks superficially like C, being actually nothing like it. People who try to program in it as if it were C usually fail and start hating it, whereas people who understand its essence start liking it.

Unfortunately, people often encounter Tcl in situations where there's nobody to explain it to them, so they learn it the wrong way.


To paraphrase the moderator of comp.compilers from many years ago, everything is easier if you always keep in mind that TCL is a string substitution language.


IIRC, the author of SQLite uses TCL.


He used to be a member of the core TCL development team.


It has one of the only truly cross platform UI toolkits.


ok but like....thats for desktop application development...

...this is the web, a completely different and totally unrelated beast.


I did write a Tcl web system back in the 2000's that was close to the Tk programming model, although not quite a one-to-one. Here is an example of side by side programs for Tk and Aejaks: https://wiki.tcl-lang.org/page/%C3%86jaks+compares+to+Tcl%2F...

Some other screen shots: http://aejaks.sourceforge.net/Screen_Shots/index.html

This was made with the Java based Echo toolkit, and the Jtcl interpreter (Tcl implemented in Java.)


tk works on mobile as well.


mobile is much more akin to desktop development because the API's/etc are specific to each device type (android/iphone).

The web is a different beast from that too.




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: